55e7f3fca9
Vendored MIT VPL dispatcher (static, trimmed tree, pin 674d015b/v2.17.0) built via cmake+bindgen behind new feature 'qsv' (pf-encode + punktfunk-host forward). qsv.rs: dispatcher session on the capture adapter (LUID-matched), SetHandle D3D11, AsyncDepth=1/GopRefDist=1/VDEnc/CBR + HRD-off low-latency config, GetSurfaceForEncode + GPU CopySubresourceRegion input (zero-copy, no readback path), bounded sync-point poll, in-place reset with teardown escalation, no-IDR bitrate retarget (Reset + StartNewSequence=OFF), 10-bit P010 HEVC-Main10/AV1, HDR mastering/CLL SEI-OBU at IDR + BT.2020/PQ VSI, LTR-RFI via mfxExtRefListCtrl (AMF slot policy port, Query-gated per codec, wire-index FrameOrder pinning). Dispatch: native-first with ffmpeg fallback + PUNKTFUNK_QSV_FFMPEG hatch; probes (can_encode_10bit / windows_codec_support / windows_backend_is_probed) now answer natively for QSV. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
205 lines
6.8 KiB
CMake
205 lines
6.8 KiB
CMake
# ##############################################################################
|
|
# Copyright (C) Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
# ##############################################################################
|
|
cmake_minimum_required(VERSION 3.13.0)
|
|
set(TARGET VPL)
|
|
set(OUTPUT_NAME "vpl")
|
|
set(DLL_PREFIX "lib")
|
|
|
|
if(WIN32)
|
|
set(SOURCES
|
|
src/windows/main.cpp
|
|
src/windows/mfx_critical_section.cpp
|
|
src/windows/mfx_dispatcher.cpp
|
|
src/windows/mfx_dispatcher_log.cpp
|
|
src/windows/mfx_driver_store_loader.cpp
|
|
src/windows/mfx_dxva2_device.cpp
|
|
src/windows/mfx_function_table.cpp
|
|
src/windows/mfx_library_iterator.cpp
|
|
src/windows/mfx_load_dll.cpp
|
|
src/windows/mfx_win_reg_key.cpp
|
|
src/windows/libmfx.def)
|
|
if(BUILD_SHARED_LIBS)
|
|
configure_file(src/windows/version.rc.in src/windows/version.rc @ONLY)
|
|
list(APPEND SOURCES ${CMAKE_CURRENT_BINARY_DIR}/src/windows/version.rc)
|
|
endif()
|
|
endif()
|
|
if(UNIX)
|
|
set(SOURCES src/linux/mfxloader.cpp)
|
|
|
|
if(NOT DEFINED MFX_MODULES_DIR)
|
|
set(MFX_MODULES_DIR ${CMAKE_INSTALL_FULL_LIBDIR})
|
|
endif()
|
|
add_definitions(-DMFX_MODULES_DIR="${MFX_MODULES_DIR}")
|
|
message(STATUS "MFX_MODULES_DIR=${MFX_MODULES_DIR}")
|
|
endif()
|
|
|
|
if(BUILD_EXPERIMENTAL)
|
|
add_definitions(-DONEVPL_EXPERIMENTAL)
|
|
endif()
|
|
|
|
list(
|
|
APPEND
|
|
SOURCES
|
|
src/mfx_dispatcher_vpl.cpp
|
|
src/mfx_dispatcher_vpl_loader.cpp
|
|
src/mfx_dispatcher_vpl_config.cpp
|
|
src/mfx_dispatcher_vpl_lowlatency.cpp
|
|
src/mfx_dispatcher_vpl_log.cpp
|
|
src/mfx_dispatcher_vpl_msdk.cpp
|
|
src/mfx_config_interface/mfx_config_interface.cpp
|
|
src/mfx_config_interface/mfx_config_interface_string_api.cpp)
|
|
|
|
add_library(${TARGET} "")
|
|
|
|
# disable warnings for dispatcher library itself but not subprojects (unit
|
|
# tests)
|
|
set_target_properties(${TARGET} PROPERTIES COMPILE_DEFINITIONS
|
|
"MFX_DEPRECATED_OFF")
|
|
|
|
# optionally include the install location of dispatcher dll in the runtime
|
|
# search process
|
|
if(UNIX)
|
|
if(ENABLE_LIBDIR_IN_RUNTIME_SEARCH)
|
|
file(TO_CMAKE_PATH "${CMAKE_INSTALL_FULL_LIBDIR}" _install_libdir_search)
|
|
target_compile_definitions(
|
|
${TARGET} PRIVATE INSTALL_LIBDIR_SEARCH=\"${_install_libdir_search}\")
|
|
message(STATUS "Enabled install libdir search: ${_install_libdir_search}")
|
|
endif()
|
|
endif()
|
|
|
|
if(WIN32)
|
|
# force libxxx style sharedlib name on Windows
|
|
if(BUILD_SHARED_LIBS)
|
|
set_target_properties(${TARGET} PROPERTIES PREFIX ${DLL_PREFIX})
|
|
endif()
|
|
set(SHLIB_FILE_NAME ${DLL_PREFIX}${OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
set(SHLIB_FILE_NAME_DEBUG
|
|
${DLL_PREFIX}${OUTPUT_NAME}${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
|
)
|
|
|
|
else()
|
|
# use version script on Linux
|
|
set_target_properties(
|
|
${TARGET}
|
|
PROPERTIES
|
|
LINK_FLAGS
|
|
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/linux/libvpl.map")
|
|
set(SHLIB_FILE_NAME
|
|
${CMAKE_SHARED_LIBRARY_PREFIX}${OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${API_VERSION_MAJOR}
|
|
)
|
|
set(SHLIB_FILE_NAME_DEBUG ${SHLIB_FILE_NAME})
|
|
endif()
|
|
|
|
set(LIB_FILE_NAME
|
|
${CMAKE_STATIC_LIBRARY_PREFIX}${OUTPUT_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
set(IMPLIB_FILE_NAME
|
|
${CMAKE_IMPORT_LIBRARY_PREFIX}${OUTPUT_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX})
|
|
set(LIB_FILE_NAME_DEBUG
|
|
${CMAKE_STATIC_LIBRARY_PREFIX}${OUTPUT_NAME}${CMAKE_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
|
|
)
|
|
set(IMPLIB_FILE_NAME_DEBUG
|
|
${CMAKE_IMPORT_LIBRARY_PREFIX}${OUTPUT_NAME}${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
|
)
|
|
|
|
set_target_properties(
|
|
${TARGET}
|
|
PROPERTIES OUTPUT_NAME ${OUTPUT_NAME} SOVERSION ${API_VERSION_MAJOR}
|
|
VERSION ${API_VERSION_MAJOR}.${API_VERSION_MINOR})
|
|
|
|
target_sources(${TARGET} PRIVATE ${SOURCES})
|
|
|
|
if(UNIX)
|
|
# require pthreads for loading legacy MSDK runtimes
|
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
|
find_package(Threads REQUIRED)
|
|
if(BUILD_SHARED_LIBS)
|
|
target_link_libraries(${TARGET} PRIVATE Threads::Threads)
|
|
else()
|
|
target_link_libraries(${TARGET} PUBLIC Threads::Threads)
|
|
endif()
|
|
endif()
|
|
|
|
target_link_libraries(${TARGET} PUBLIC vpl-api)
|
|
if(BUILD_SHARED_LIBS)
|
|
target_link_libraries(${TARGET} PRIVATE ${CMAKE_DL_LIBS})
|
|
else()
|
|
target_link_libraries(${TARGET} PUBLIC ${CMAKE_DL_LIBS})
|
|
endif()
|
|
|
|
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
if(INSTALL_LIB)
|
|
install(
|
|
TARGETS ${TARGET}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
COMPONENT ${VPL_COMPONENT_LIB}
|
|
NAMELINK_SKIP
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${VPL_COMPONENT_LIB})
|
|
endif()
|
|
|
|
if(INSTALL_DEV)
|
|
install(
|
|
TARGETS ${TARGET}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
COMPONENT ${VPL_COMPONENT_DEV}
|
|
NAMELINK_ONLY)
|
|
if(WIN32)
|
|
install(TARGETS ${TARGET} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
COMPONENT ${VPL_COMPONENT_DEV})
|
|
endif()
|
|
|
|
file(RELATIVE_PATH cmake_rel_prefix ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/vpl
|
|
${CMAKE_INSTALL_PREFIX})
|
|
file(RELATIVE_PATH cmake_rel_libdir ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/vpl
|
|
${CMAKE_INSTALL_FULL_LIBDIR})
|
|
file(RELATIVE_PATH cmake_rel_incdir ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/vpl
|
|
${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
|
file(RELATIVE_PATH cmake_rel_bindir ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/vpl
|
|
${CMAKE_INSTALL_FULL_BINDIR})
|
|
|
|
configure_file(cmake/VPLConfig.cmake.in cmake/VPLConfig.cmake @ONLY)
|
|
configure_file(cmake/VPLConfigVersion.cmake.in cmake/VPLConfigVersion.cmake
|
|
@ONLY)
|
|
|
|
install(
|
|
FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/VPLConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake/VPLConfigVersion.cmake"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/vpl"
|
|
COMPONENT ${VPL_COMPONENT_DEV})
|
|
|
|
file(RELATIVE_PATH pc_rel_prefix ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig
|
|
${CMAKE_INSTALL_PREFIX})
|
|
file(RELATIVE_PATH pc_rel_libdir ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig
|
|
${CMAKE_INSTALL_FULL_LIBDIR})
|
|
file(RELATIVE_PATH pc_rel_incdir ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig
|
|
${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
|
set(pc_rel_prefix "$\{pcfiledir}/${pc_rel_prefix}")
|
|
set(pc_rel_libdir "$\{pcfiledir}/${pc_rel_libdir}")
|
|
set(pc_rel_incdir "$\{pcfiledir}/${pc_rel_incdir}")
|
|
|
|
if(CMAKE_DL_LIBS)
|
|
set(DL_LIBS "-l${CMAKE_DL_LIBS}")
|
|
endif()
|
|
if(MINGW)
|
|
# being conservative by restricting to MinGW, these are probably ok for
|
|
# WIN32 in general
|
|
set(MINGW_LIBS "-lole32 -lgdi32 -luuid")
|
|
endif()
|
|
set(VPL_PKGCONFIG_DEPENDENT_LIBS
|
|
"${DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${MINGW_LIBS} ${CXX_LIB}")
|
|
configure_file("pkgconfig/vpl.pc.in" "pkgconfig/vpl.pc" @ONLY)
|
|
install(
|
|
FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/vpl.pc"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
|
|
COMPONENT ${VPL_COMPONENT_DEV})
|
|
endif()
|
|
|
|
if(BUILD_TESTS)
|
|
add_subdirectory(test)
|
|
endif()
|