瀏覽代碼

plugins: Update Linux slice of cross-platform plugins for CMake 3.0

Also silences acknowledged compile warnings introduced by the updated
compiler settings in the CMake update.
PatTheMav 1 年之前
父節點
當前提交
34f8abae1f

+ 3 - 1
plugins/aja/CMakeLists.txt

@@ -54,7 +54,9 @@ target_sources(
           audio-repack.hpp
           main.cpp)
 
-target_compile_options(aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-deprecated-declarations>)
+target_compile_options(
+  aja-support PUBLIC $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-Wno-deprecated-declarations>
+                     $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:-Wno-unused-variable>)
 
 target_link_libraries(
   aja

+ 5 - 5
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(
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:obs-ffmpeg-vaapi.c>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.c>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.h>
-          $<$<PLATFORM_ID:Windows>:obs-nvenc-helpers.c>
-          $<$<PLATFORM_ID:Windows>:obs-nvenc.c>
-          $<$<PLATFORM_ID:Windows>:obs-nvenc.h>
           $<$<PLATFORM_ID:Windows>:texture-amf-opts.hpp>
           $<$<PLATFORM_ID:Windows>:texture-amf.cpp>
           obs-ffmpeg-audio-encoders.c
@@ -58,10 +59,9 @@ target_link_libraries(
           FFmpeg::avutil
           FFmpeg::swscale
           FFmpeg::swresample
-          $<$<PLATFORM_ID:Windows>:OBS::obs-nvenc-version>
+          $<TARGET_NAME_IF_EXISTS:OBS::obs-nvenc-native>
           $<$<PLATFORM_ID:Windows>:OBS::w32-pthreads>
           $<$<PLATFORM_ID:Windows>:AMF::AMF>
-          $<$<PLATFORM_ID:Windows>:FFnvcodec::FFnvcodec>
           $<$<PLATFORM_ID:Windows>:ws2_32>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::va>
           $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::drm>

+ 26 - 8
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 $<$<PLATFORM_ID:Linux>: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
+                                                   $<$<PLATFORM_ID:Linux>: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)

+ 2 - 1
plugins/obs-filters/CMakeLists.txt

@@ -34,9 +34,10 @@ target_link_libraries(obs-filters PRIVATE OBS::libobs $<$<PLATFORM_ID:Windows>: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()

+ 2 - 4
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)

+ 43 - 37
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)
-
-    target_sources(obs-filters PRIVATE noise-suppress-filter.c)
+  else()
+    find_package(Librnnoise)
+
+    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")

+ 2 - 2
plugins/obs-outputs/cmake/ftl.cmake

@@ -55,11 +55,11 @@ target_include_directories(
          "$<$<NOT:$<PLATFORM_ID:Windows>>:${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)

+ 16 - 18
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()
-
-    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()
-
-    if(PC_Libvlc_INCLUDEDIR)
-      target_include_directories(vlc-video PRIVATE "${PC_Libvlc_INCLUDEDIR}/vlc")
-    endif()
+  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(LibVLC_INCLUDE_DIR)
+    target_include_directories(vlc-video PRIVATE "${LibVLC_INCLUDE_DIR}")
+  else()
+    message(FATAL_ERROR "Required system header <vlc/libvlc.h> not found.")
   endif()
 endmacro()
 

+ 6 - 6
plugins/vlc-video/vlc-video-plugin.h

@@ -1,16 +1,16 @@
 #include <obs-module.h>
-#include <libvlc.h>
+#include <vlc/libvlc.h>
 
 #ifdef _MSC_VER
 #include <basetsd.h>
 typedef SSIZE_T ssize_t;
 #endif
 
-#include <libvlc_media.h>
-#include <libvlc_events.h>
-#include <libvlc_media_list.h>
-#include <libvlc_media_player.h>
-#include <libvlc_media_list_player.h>
+#include <vlc/libvlc_media.h>
+#include <vlc/libvlc_events.h>
+#include <vlc/libvlc_media_list.h>
+#include <vlc/libvlc_media_player.h>
+#include <vlc/libvlc_media_list_player.h>
 
 extern libvlc_instance_t *libvlc;
 extern uint64_t time_start;