diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-08-30 11:53:30 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-31 13:11:32 +0000 |
commit | 14bb004faea06aa53dd4d592b75c0d2426e39565 (patch) | |
tree | d631d5cc8a100fa08070bee1109037c9f20247f1 /src/plugins/multimedia/ffmpeg/CMakeLists.txt | |
parent | d87adb9bfcac68465c87ab829a0572934c3084c8 (diff) |
Implement dynamic resolve vaapi symbols
Let's get rid of the linking vaapi dependency, load and resolve
in runtime instead.
Change-Id: Icbc72470c935c1ae711c5457c8e85e4f96977a3b
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit ff2a0decb571e78d463d581eac5ab5d6f69ef381)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/CMakeLists.txt')
-rw-r--r-- | src/plugins/multimedia/ffmpeg/CMakeLists.txt | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/src/plugins/multimedia/ffmpeg/CMakeLists.txt b/src/plugins/multimedia/ffmpeg/CMakeLists.txt index 892361029..9a2cf8914 100644 --- a/src/plugins/multimedia/ffmpeg/CMakeLists.txt +++ b/src/plugins/multimedia/ffmpeg/CMakeLists.txt @@ -70,18 +70,58 @@ qt_internal_extend_target(QFFmpegMediaPlugin CONDITION DYNAMIC_RESOLVE_OPENSSL_S ${OPENSSL_INCLUDE_DIR} ) -if (DYNAMIC_RESOLVE_OPENSSL_SYMBOLS) - target_compile_definitions(QFFmpegMediaPlugin PRIVATE DYNAMIC_RESOLVE_OPENSSL_SYMBOLS) +if (ENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS) + if (QT_FEATURE_vaapi AND NOT DYNAMIC_RESOLVE_VAAPI_SYMBOLS) + message(WARNING + "QT_FEATURE_vaapi is found but ffmpeg doesn't include vaapi," + "however dynamic symbols resolve is possible.") + + set(DYNAMIC_RESOLVE_OPENSSL_SYMBOLS TRUE CACHE INTERNAL "") + elseif (NOT QT_FEATURE_vaapi AND DYNAMIC_RESOLVE_VAAPI_SYMBOLS) + + message(FATAL_ERROR + "QT_FEATURE_vaapi is not found " + "but ffmpeg includes VAAPI and dynamic symbols resolve is enabled.") + endif() endif() -qt_internal_extend_target(QFFmpegMediaPlugin CONDITION QT_FEATURE_ffmpeg AND QT_FEATURE_vaapi +qt_internal_extend_target(QFFmpegMediaPlugin + CONDITION + DYNAMIC_RESOLVE_OPENSSL_SYMBOLS OR DYNAMIC_RESOLVE_VAAPI_SYMBOLS + SOURCES + qffmpegsymbolsresolveutils.cpp qffmpegsymbolsresolveutils_p.h +) + +function (__propagate_to_compile_definitions VAR) + if (${VAR}) + target_compile_definitions(QFFmpegMediaPlugin PRIVATE ${VAR}) + endif() +endfunction() + +__propagate_to_compile_definitions(DYNAMIC_RESOLVE_OPENSSL_SYMBOLS) +__propagate_to_compile_definitions(DYNAMIC_RESOLVE_VAAPI_SYMBOLS) +__propagate_to_compile_definitions(DYNAMIC_RESOLVE_VA_DRM_SYMBOLS) +__propagate_to_compile_definitions(DYNAMIC_RESOLVE_VA_X11_SYMBOLS) + +qt_internal_extend_target(QFFmpegMediaPlugin CONDITION DYNAMIC_RESOLVE_VAAPI_SYMBOLS + SOURCES + qffmpegvaapisymbols.cpp + INCLUDE_DIRECTORIES + "$<TARGET_PROPERTY:VAAPI::VAAPI,INTERFACE_INCLUDE_DIRECTORIES>" +) + +qt_internal_extend_target(QFFmpegMediaPlugin + CONDITION NOT DYNAMIC_RESOLVE_VAAPI_SYMBOLS AND QT_FEATURE_vaapi + LIBRARIES VAAPI::VAAPI +) + +qt_internal_extend_target(QFFmpegMediaPlugin CONDITION QT_FEATURE_vaapi SOURCES qffmpeghwaccel_vaapi.cpp qffmpeghwaccel_vaapi_p.h NO_UNITY_BUILD_SOURCES # Conflicts with macros defined in X11.h, and Xlib.h qffmpeghwaccel_vaapi.cpp LIBRARIES - VAAPI::VAAPI EGL::EGL ) |