Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qffmpegsymbols-va.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:critical reason:execute-external-code
4
5#include <QtMultimedia/private/qsymbolsresolveutils_p.h>
6
7#include <va/va.h>
8#include <va/va_str.h>
9
10// VAAPI generated the actual *.so name due to the rule:
11// https://github.com/intel/libva/blob/master/configure.ac
12//
13// The library name is generated libva.<x>.<y>.0 where
14// <x> = VA-API major version + 1
15// <y> = 100 * VA-API minor version + VA-API micro version
16CHECK_VERSIONS("va", VA_NEEDED_SOVERSION, VA_MAJOR_VERSION + 1);
17
18#ifdef Q_FFMPEG_PLUGIN_STUBS_ONLY
19constexpr const char *loggingName = "va(in plugin)";
20#else
21constexpr const char *loggingName = nullptr;
22#endif
23
24BEGIN_INIT_FUNCS("va", VA_NEEDED_SOVERSION, loggingName)
25
26
27INIT_FUNC(vaExportSurfaceHandle);
30
31#ifndef Q_FFMPEG_PLUGIN_STUBS_ONLY
32
38
45
49
54#if VA_CHECK_VERSION(1, 9, 0)
55INIT_FUNC(vaSyncBuffer);
56#endif
58
61
71
74
77
79
81
84
85#endif
86
87END_INIT_FUNCS()
88
89constexpr auto emptyString = "";
90
91DEFINE_FUNC(vaExportSurfaceHandle, 5, VA_STATUS_ERROR_OPERATION_FAILED);
92DEFINE_FUNC(vaSyncSurface, 2, VA_STATUS_ERROR_OPERATION_FAILED);
93DEFINE_FUNC(vaQueryVendorString, 1, emptyString);
94
95#ifndef Q_FFMPEG_PLUGIN_STUBS_ONLY
96
97DEFINE_FUNC(vaInitialize, 3, VA_STATUS_ERROR_OPERATION_FAILED);
98DEFINE_FUNC(vaTerminate, 1, VA_STATUS_ERROR_OPERATION_FAILED);
99
100constexpr auto errorStr = "VAAPI is not available";
101DEFINE_FUNC(vaErrorStr, 1, errorStr);
102DEFINE_FUNC(vaSetErrorCallback, 3);
103DEFINE_FUNC(vaSetInfoCallback, 3);
104
105DEFINE_FUNC(vaCreateImage, 5, VA_STATUS_ERROR_OPERATION_FAILED);
106DEFINE_FUNC(vaGetImage, 7, VA_STATUS_ERROR_OPERATION_FAILED);
107DEFINE_FUNC(vaPutImage, 11, VA_STATUS_ERROR_OPERATION_FAILED);
108DEFINE_FUNC(vaDeriveImage, 3, VA_STATUS_ERROR_OPERATION_FAILED);
109DEFINE_FUNC(vaDestroyImage, 2, VA_STATUS_ERROR_OPERATION_FAILED);
110DEFINE_FUNC(vaQueryImageFormats, 3, VA_STATUS_ERROR_OPERATION_FAILED);
111
112DEFINE_FUNC(vaBeginPicture, 3, VA_STATUS_ERROR_OPERATION_FAILED);
113DEFINE_FUNC(vaRenderPicture, 4, VA_STATUS_ERROR_OPERATION_FAILED);
114DEFINE_FUNC(vaEndPicture, 2, VA_STATUS_ERROR_OPERATION_FAILED);
115
116DEFINE_FUNC(vaCreateBuffer, 7, VA_STATUS_ERROR_OPERATION_FAILED);
117DEFINE_FUNC(vaMapBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
118DEFINE_FUNC(vaUnmapBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
119#if VA_CHECK_VERSION(1, 9, 0)
120DEFINE_FUNC(vaSyncBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
121#endif
122DEFINE_FUNC(vaDestroyBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
123
124DEFINE_FUNC(vaCreateSurfaces, 8, VA_STATUS_ERROR_OPERATION_FAILED);
125DEFINE_FUNC(vaDestroySurfaces, 3, VA_STATUS_ERROR_OPERATION_FAILED);
126
127DEFINE_FUNC(vaCreateConfig, 6, VA_STATUS_ERROR_OPERATION_FAILED);
128DEFINE_FUNC(vaGetConfigAttributes, 5, VA_STATUS_ERROR_OPERATION_FAILED);
129DEFINE_FUNC(vaMaxNumProfiles, 1);
130DEFINE_FUNC(vaMaxNumImageFormats, 1);
131DEFINE_FUNC(vaMaxNumEntrypoints, 1);
132DEFINE_FUNC(vaQueryConfigProfiles, 3, VA_STATUS_ERROR_OPERATION_FAILED);
133DEFINE_FUNC(vaQueryConfigEntrypoints, 4, VA_STATUS_ERROR_OPERATION_FAILED);
134DEFINE_FUNC(vaQuerySurfaceAttributes, 4, VA_STATUS_ERROR_OPERATION_FAILED);
135DEFINE_FUNC(vaDestroyConfig, 2, VA_STATUS_ERROR_OPERATION_FAILED);
136
137DEFINE_FUNC(vaCreateContext, 8);
138DEFINE_FUNC(vaDestroyContext, 2);
139
140
141DEFINE_FUNC(vaProfileStr, 1, emptyString);
142DEFINE_FUNC(vaEntrypointStr, 1, emptyString);
143
144DEFINE_FUNC(vaGetDisplayAttributes, 3, VA_STATUS_ERROR_OPERATION_FAILED);
145
146DEFINE_FUNC(vaSetDriverName, 2, VA_STATUS_ERROR_OPERATION_FAILED);
147
148DEFINE_FUNC(vaAcquireBufferHandle, 3, VA_STATUS_ERROR_OPERATION_FAILED);
149DEFINE_FUNC(vaReleaseBufferHandle, 2, VA_STATUS_ERROR_OPERATION_FAILED);
150
151// HACK: vaMapBuffer2 is a new function added in libva 2.21.0 and FFmpeg will
152// use it when compiled against headers that declare it.
153// However we expect our binaries to run on older libva versions as well.
154extern "C" EXPORT_FUNC VAStatus vaMapBuffer2(VADisplay dpy, VABufferID buf_id,
155 void **pbuf, uint32_t flags)
156{
157 const auto f = reinterpret_cast<decltype(::vaMapBuffer2)*>(
158 SymbolsResolverImpl::instance().vaMapBuffer2);
159 if (f)
160 return f(dpy, buf_id, pbuf, flags);
161 else
162 return vaMapBuffer(dpy, buf_id, pbuf);
163}
164
165#endif
CHECK_VERSIONS("va-drm", VA_DRM_NEEDED_SOVERSION, VA_MAJOR_VERSION+1)
INIT_FUNC(vaSyncSurface)
INIT_FUNC(vaAcquireBufferHandle)
INIT_FUNC(vaGetConfigAttributes)
INIT_FUNC(vaQueryConfigProfiles)
INIT_FUNC(vaPutImage)
constexpr auto errorStr
INIT_FUNC(vaSetErrorCallback)
INIT_FUNC(vaDestroyBuffer)
constexpr const char * loggingName
INIT_OPT_FUNC(vaMapBuffer2)
INIT_FUNC(vaDeriveImage)
INIT_FUNC(vaDestroyImage)
INIT_FUNC(vaGetImage)
constexpr auto emptyString
INIT_FUNC(vaDestroySurfaces)
INIT_FUNC(vaMaxNumProfiles)
INIT_FUNC(vaDestroyConfig)
INIT_FUNC(vaEndPicture)
INIT_FUNC(vaMaxNumEntrypoints)
INIT_FUNC(vaErrorStr)
INIT_FUNC(vaMaxNumImageFormats)
INIT_FUNC(vaQueryConfigEntrypoints)
INIT_FUNC(vaGetDisplayAttributes)
INIT_FUNC(vaQueryVendorString)
INIT_FUNC(vaMapBuffer)
INIT_FUNC(vaQuerySurfaceAttributes)
INIT_FUNC(vaEntrypointStr)
INIT_FUNC(vaTerminate)
INIT_FUNC(vaInitialize)
INIT_FUNC(vaUnmapBuffer)
INIT_FUNC(vaRenderPicture)
INIT_FUNC(vaQueryImageFormats)
INIT_FUNC(vaCreateContext)
INIT_FUNC(vaSetInfoCallback)
INIT_FUNC(vaBeginPicture)
INIT_FUNC(vaCreateBuffer)
INIT_FUNC(vaCreateConfig)
INIT_FUNC(vaCreateSurfaces)
INIT_FUNC(vaReleaseBufferHandle)
INIT_FUNC(vaProfileStr)
INIT_FUNC(vaSetDriverName)
INIT_FUNC(vaDestroyContext)
INIT_FUNC(vaCreateImage)
DEFINE_FUNC(pw_deinit, 0)