diff --git a/plugins/aja/CMakeLists.txt b/plugins/aja/CMakeLists.txt index 1f427030c..ffdfdf8e0 100644 --- a/plugins/aja/CMakeLists.txt +++ b/plugins/aja/CMakeLists.txt @@ -54,7 +54,9 @@ target_sources( audio-repack.hpp main.cpp) -target_compile_options(aja-support PUBLIC $<$:-Wno-deprecated-declarations>) +target_compile_options( + aja-support PUBLIC $<$:-Wno-deprecated-declarations> + $<$:-Wno-unused-variable>) target_link_libraries( aja diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index 77c5ad8e4..0fa71e586 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -5,6 +5,10 @@ legacy_check() option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF) option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON) +if(OS_LINUX) + option(ENABLE_NATIVE_NVENC "Use native NVENC implementation" ON) +endif() + include(cmake/dependencies.cmake) add_library(obs-ffmpeg MODULE) @@ -23,9 +27,6 @@ target_sources( $<$:obs-ffmpeg-vaapi.c> $<$:vaapi-utils.c> $<$:vaapi-utils.h> - $<$:obs-nvenc-helpers.c> - $<$:obs-nvenc.c> - $<$:obs-nvenc.h> $<$:texture-amf-opts.hpp> $<$:texture-amf.cpp> obs-ffmpeg-audio-encoders.c @@ -58,10 +59,9 @@ target_link_libraries( FFmpeg::avutil FFmpeg::swscale FFmpeg::swresample - $<$:OBS::obs-nvenc-version> + $ $<$:OBS::w32-pthreads> $<$:AMF::AMF> - $<$:FFnvcodec::FFnvcodec> $<$:ws2_32> $<$:Libva::va> $<$:Libva::drm> diff --git a/plugins/obs-ffmpeg/cmake/dependencies.cmake b/plugins/obs-ffmpeg/cmake/dependencies.cmake index e2ff651ad..442c8ea18 100644 --- a/plugins/obs-ffmpeg/cmake/dependencies.cmake +++ b/plugins/obs-ffmpeg/cmake/dependencies.cmake @@ -26,15 +26,7 @@ endif() if(OS_WINDOWS) find_package(AMF 1.4.29 REQUIRED) - find_package(FFnvcodec 12.0.0.0...<12.2.0.0 REQUIRED) - - add_library(obs-nvenc-version INTERFACE) - add_library(OBS::obs-nvenc-version ALIAS obs-nvenc-version) - target_sources(obs-nvenc-version INTERFACE obs-nvenc-ver.h) - target_include_directories(obs-nvenc-version INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") - add_subdirectory(obs-amf-test) - add_subdirectory(obs-nvenc-test) elseif( OS_LINUX OR OS_FREEBSD @@ -43,6 +35,32 @@ elseif( find_package(Libpci REQUIRED) endif() +if(OS_WINDOWS OR (OS_LINUX AND ENABLE_NATIVE_NVENC)) + add_library(obs-nvenc-version INTERFACE) + add_library(OBS::obs-nvenc-version ALIAS obs-nvenc-version) + target_sources(obs-nvenc-version INTERFACE obs-nvenc-ver.h) + target_include_directories(obs-nvenc-version INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") + + find_package(FFnvcodec 12.0.0.0...<12.2.0.0 REQUIRED) + + if(OS_LINUX AND NOT TARGET OBS::glad) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/glad" "${CMAKE_BINARY_DIR}/deps/glad") + endif() + + add_library(obs-nvenc-native INTERFACE) + add_library(OBS::obs-nvenc-native ALIAS obs-nvenc-native) + target_sources(obs-nvenc-native INTERFACE obs-nvenc-helpers.c obs-nvenc.c obs-nvenc.h) + target_compile_definitions(obs-nvenc-native INTERFACE $<$:NVCODEC_AVAILABLE>) + target_include_directories(obs-nvenc-native INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}") + + target_link_libraries(obs-nvenc-native INTERFACE FFnvcodec::FFnvcodec OBS::obs-nvenc-version + $<$:OBS::glad>) + + if(OS_WINDOWS) + add_subdirectory(obs-nvenc-test) + endif() +endif() + if(ENABLE_NEW_MPEGTS_OUTPUT) find_package(Librist QUIET) find_package(Libsrt QUIET) diff --git a/plugins/obs-filters/CMakeLists.txt b/plugins/obs-filters/CMakeLists.txt index 4dd653ae3..697b4985a 100644 --- a/plugins/obs-filters/CMakeLists.txt +++ b/plugins/obs-filters/CMakeLists.txt @@ -34,9 +34,10 @@ target_link_libraries(obs-filters PRIVATE OBS::libobs $<$:O include(cmake/speexdsp.cmake) include(cmake/rnnoise.cmake) -include(cmake/nvidia.cmake) if(OS_WINDOWS) + include(cmake/nvidia.cmake) + configure_file(cmake/windows/obs-module.rc.in obs-filters.rc) target_sources(obs-filters PRIVATE obs-filters.rc) endif() diff --git a/plugins/obs-filters/cmake/nvidia.cmake b/plugins/obs-filters/cmake/nvidia.cmake index 63b36f8f7..22d1a003b 100644 --- a/plugins/obs-filters/cmake/nvidia.cmake +++ b/plugins/obs-filters/cmake/nvidia.cmake @@ -1,7 +1,5 @@ -if(OS_WINDOWS) - option(ENABLE_NVAFX "Enable building with NVIDIA Audio Effects SDK (requires redistributable to be installed)" ON) - option(ENABLE_NVVFX "Enable building with NVIDIA Video Effects SDK (requires redistributable to be installed)" ON) -endif() +option(ENABLE_NVAFX "Enable building with NVIDIA Audio Effects SDK (requires redistributable to be installed)" ON) +option(ENABLE_NVVFX "Enable building with NVIDIA Video Effects SDK (requires redistributable to be installed)" ON) if(ENABLE_NVAFX) target_enable_feature(obs-filters "NVIDIA Audio FX support" LIBNVAFX_ENABLED HAS_NOISEREDUCTION) diff --git a/plugins/obs-filters/cmake/rnnoise.cmake b/plugins/obs-filters/cmake/rnnoise.cmake index 3f7293798..a7ff86e47 100644 --- a/plugins/obs-filters/cmake/rnnoise.cmake +++ b/plugins/obs-filters/cmake/rnnoise.cmake @@ -1,47 +1,53 @@ option(ENABLE_RNNOISE "Enable building with RNNoise noise supression filter" ON) if(ENABLE_RNNOISE) - if(NOT OS_WINDOWS AND NOT OS_MACOS) - add_library(obs-rnnoise OBJECT) - - target_sources( - obs-rnnoise - PRIVATE # cmake-format: sortable - rnnoise/src/_kiss_fft_guts.h - rnnoise/src/arch.h - rnnoise/src/celt_lpc.c - rnnoise/src/celt_lpc.h - rnnoise/src/common.h - rnnoise/src/denoise.c - rnnoise/src/kiss_fft.c - rnnoise/src/kiss_fft.h - rnnoise/src/opus_types.h - rnnoise/src/pitch.c - rnnoise/src/pitch.h - rnnoise/src/rnn.c - rnnoise/src/rnn.h - rnnoise/src/rnn_data.c - rnnoise/src/rnn_data.h - rnnoise/src/rnn_reader.c - rnnoise/src/tansig_table.h - PUBLIC rnnoise/include/rnnoise.h) - - add_library(Librnnoise::Librnnoise ALIAS obs-rnnoise) - - target_include_directories(obs-rnnoise PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include") - - target_compile_definitions(obs-rnnoise PUBLIC COMPILE_OPUS) - - target_compile_options(obs-rnnoise PRIVATE -Wno-newline-eof -Wno-error=null-dereference) - - set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise POSITION_INDEPENDENT_CODE TRUE) - else() + if(OS_WINDOWS OR OS_MACOS) find_package(Librnnoise REQUIRED) + else() + find_package(Librnnoise) - target_sources(obs-filters PRIVATE noise-suppress-filter.c) + if(NOT TARGET Librnnoise::Librnnoise) + message(WARNING "No RNNoise library found. Using internal RNNoise version instead.") + add_library(obs-rnnoise OBJECT) + + target_sources( + obs-rnnoise + PRIVATE # cmake-format: sortable + rnnoise/src/_kiss_fft_guts.h + rnnoise/src/arch.h + rnnoise/src/celt_lpc.c + rnnoise/src/celt_lpc.h + rnnoise/src/common.h + rnnoise/src/denoise.c + rnnoise/src/kiss_fft.c + rnnoise/src/kiss_fft.h + rnnoise/src/opus_types.h + rnnoise/src/pitch.c + rnnoise/src/pitch.h + rnnoise/src/rnn.c + rnnoise/src/rnn.h + rnnoise/src/rnn_data.c + rnnoise/src/rnn_data.h + rnnoise/src/rnn_reader.c + rnnoise/src/tansig_table.h + PUBLIC rnnoise/include/rnnoise.h) + + add_library(Librnnoise::Librnnoise ALIAS obs-rnnoise) + + target_include_directories(obs-rnnoise PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include") + + target_compile_definitions(obs-rnnoise PUBLIC COMPILE_OPUS) + + target_compile_options(obs-rnnoise PRIVATE -Wno-newline-eof -Wno-error=null-dereference) + + set_target_properties(obs-rnnoise PROPERTIES FOLDER plugins/obs-filters/rnnoise POSITION_INDEPENDENT_CODE TRUE) + endif() endif() + target_sources(obs-filters PRIVATE noise-suppress-filter.c) + target_link_libraries(obs-filters PRIVATE Librnnoise::Librnnoise) + target_enable_feature(obs-filters "RNNoise noise suppression" LIBRNNOISE_ENABLED HAS_NOISEREDUCTION) else() target_disable_feature(obs-filters "RNNoise noise suppression") diff --git a/plugins/obs-outputs/cmake/ftl.cmake b/plugins/obs-outputs/cmake/ftl.cmake index deb945853..cdbeb948b 100644 --- a/plugins/obs-outputs/cmake/ftl.cmake +++ b/plugins/obs-outputs/cmake/ftl.cmake @@ -55,11 +55,11 @@ target_include_directories( "$<$>:${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix>") if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10) - target_compile_options(ftl-sdk PRIVATE -Wno-error=enum-conversion) + target_compile_options(ftl-sdk PRIVATE -Wno-error=enum-conversion -Wno-error=maybe-uninitialized) endif() target_sources(obs-outputs PRIVATE ftl-stream.c) target_link_libraries(obs-outputs PRIVATE ftl-sdk) target_enable_feature(obs-outputs "FTL protocol support") -set_target_properties(ftl-sdk PROPERTIES FOLDER plugins/obs-outputs) +set_target_properties(ftl-sdk PROPERTIES FOLDER plugins/obs-outputs POSITION_INDEPENDENT_CODE TRUE) diff --git a/plugins/vlc-video/CMakeLists.txt b/plugins/vlc-video/CMakeLists.txt index 072e0bfd3..b9ee1a564 100644 --- a/plugins/vlc-video/CMakeLists.txt +++ b/plugins/vlc-video/CMakeLists.txt @@ -3,24 +3,22 @@ cmake_minimum_required(VERSION 3.22...3.25) legacy_check() macro(check_vlc_path) - if(OS_WINDOWS OR OS_MACOS) - if(NOT EXISTS "${VLC_PATH}/include/vlc/libvlc.h") - message(FATAL_ERROR "Unable to find libvlc.h. Check if VLC_PATH set correctly.") - endif() + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_Libvlc QUIET libvlc) + endif() - target_include_directories(vlc-video PRIVATE "${VLC_PATH}/include/vlc") - elseif( - OS_LINUX - OR OS_FREEBSD - OR OS_OPENBSD) - find_package(PkgConfig QUIET) - if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_Libvlc QUIET libvlc) - endif() + find_path( + LibVLC_INCLUDE_DIR + NAMES vlc/libvlc.h + HINTS ${PC_Libvlc_INCLUDEDIR} ${VLC_PATH}/include + PATHS /usr/include /usr/local/include + DOC "LibVLC include directory") - if(PC_Libvlc_INCLUDEDIR) - target_include_directories(vlc-video PRIVATE "${PC_Libvlc_INCLUDEDIR}/vlc") - endif() + if(LibVLC_INCLUDE_DIR) + target_include_directories(vlc-video PRIVATE "${LibVLC_INCLUDE_DIR}") + else() + message(FATAL_ERROR "Required system header not found.") endif() endmacro() diff --git a/plugins/vlc-video/vlc-video-plugin.h b/plugins/vlc-video/vlc-video-plugin.h index 79d875e6b..b3ecce54f 100644 --- a/plugins/vlc-video/vlc-video-plugin.h +++ b/plugins/vlc-video/vlc-video-plugin.h @@ -1,16 +1,16 @@ #include -#include +#include #ifdef _MSC_VER #include typedef SSIZE_T ssize_t; #endif -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include extern libvlc_instance_t *libvlc; extern uint64_t time_start;