CMakeLists.txt 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. cmake_minimum_required(VERSION 3.28...3.30)
  2. option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF)
  3. option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON)
  4. if(OS_LINUX OR OS_WINDOWS)
  5. option(ENABLE_FFMPEG_NVENC "Enable legacy FFmpeg NVENC encoder" OFF)
  6. endif()
  7. include(cmake/dependencies.cmake)
  8. add_library(obs-ffmpeg MODULE)
  9. add_library(OBS::ffmpeg ALIAS obs-ffmpeg)
  10. add_subdirectory(ffmpeg-mux)
  11. target_sources(
  12. obs-ffmpeg
  13. PRIVATE
  14. $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:obs-ffmpeg-logging.c>
  15. $<$<BOOL:${ENABLE_FFMPEG_NVENC}>:obs-ffmpeg-nvenc.c>
  16. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-mpegts.c>
  17. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-rist.h>
  18. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-srt.h>
  19. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:obs-ffmpeg-url.h>
  20. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:obs-ffmpeg-vaapi.c>
  21. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.c>
  22. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:vaapi-utils.h>
  23. obs-ffmpeg-audio-encoders.c
  24. obs-ffmpeg-av1.c
  25. obs-ffmpeg-compat.h
  26. obs-ffmpeg-formats.h
  27. obs-ffmpeg-openh264.c
  28. obs-ffmpeg-hls-mux.c
  29. obs-ffmpeg-mux.c
  30. obs-ffmpeg-mux.h
  31. obs-ffmpeg-output.c
  32. obs-ffmpeg-output.h
  33. obs-ffmpeg-source.c
  34. obs-ffmpeg-video-encoders.c
  35. obs-ffmpeg.c
  36. )
  37. target_compile_options(obs-ffmpeg PRIVATE $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-shorten-64-to-32>)
  38. target_compile_definitions(
  39. obs-ffmpeg
  40. PRIVATE
  41. $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:ENABLE_FFMPEG_LOGGING>
  42. $<$<BOOL:${ENABLE_FFMPEG_NVENC}>:ENABLE_FFMPEG_NVENC>
  43. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:NEW_MPEGTS_OUTPUT>
  44. )
  45. target_link_libraries(
  46. obs-ffmpeg
  47. PRIVATE
  48. OBS::libobs
  49. OBS::media-playback
  50. OBS::opts-parser
  51. FFmpeg::avcodec
  52. FFmpeg::avfilter
  53. FFmpeg::avformat
  54. FFmpeg::avdevice
  55. FFmpeg::avutil
  56. FFmpeg::swscale
  57. FFmpeg::swresample
  58. $<$<PLATFORM_ID:Windows>:OBS::w32-pthreads>
  59. $<$<PLATFORM_ID:Windows>:ws2_32>
  60. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::va>
  61. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libva::drm>
  62. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libpci::pci>
  63. $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Libdrm::Libdrm>
  64. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:Librist::Librist>
  65. $<$<BOOL:${ENABLE_NEW_MPEGTS_OUTPUT}>:Libsrt::Libsrt>
  66. )
  67. if(OS_WINDOWS)
  68. if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
  69. target_sources(obs-ffmpeg PRIVATE texture-amf-opts.hpp texture-amf.cpp)
  70. target_link_libraries(obs-ffmpeg PRIVATE AMF::AMF)
  71. endif()
  72. configure_file(cmake/windows/obs-module.rc.in obs-ffmpeg.rc)
  73. target_sources(obs-ffmpeg PRIVATE obs-ffmpeg.rc)
  74. endif()
  75. set_target_properties_obs(obs-ffmpeg PROPERTIES FOLDER plugins/obs-ffmpeg PREFIX "")