Files
punktfunk/crates/libvpl-sys/vendor/libvpl/libvpl/CMakeLists.txt
T
enricobuehler 55e7f3fca9 feat(encode): native QSV backend — libvpl-sys + qsv.rs (Phases 0-3 of design/native-qsv-encoder.md)
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>
2026-07-17 19:34:18 +02:00

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()