CMakeLists.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. project(obs-ffmpeg)
  2. option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF)
  3. option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON)
  4. find_package(
  5. FFmpeg REQUIRED
  6. COMPONENTS avcodec
  7. avfilter
  8. avdevice
  9. avutil
  10. swscale
  11. avformat
  12. swresample)
  13. add_library(obs-ffmpeg MODULE)
  14. add_library(OBS::ffmpeg ALIAS obs-ffmpeg)
  15. add_subdirectory(ffmpeg-mux)
  16. if(ENABLE_NEW_MPEGTS_OUTPUT)
  17. find_package(Librist QUIET)
  18. find_package(Libsrt QUIET)
  19. if(NOT TARGET Librist::Librist AND NOT TARGET Libsrt::Libsrt)
  20. obs_status(
  21. FATAL_ERROR
  22. "SRT and RIST libraries not found! Please install SRT and RIST libraries or set ENABLE_NEW_MPEGTS_OUTPUT=OFF."
  23. )
  24. elseif(NOT TARGET Libsrt::Libsrt)
  25. obs_status(
  26. FATAL_ERROR
  27. "SRT library not found! Please install SRT library or set ENABLE_NEW_MPEGTS_OUTPUT=OFF."
  28. )
  29. elseif(NOT TARGET Librist::Librist)
  30. obs_status(
  31. FATAL_ERROR
  32. "RIST library not found! Please install RIST library or set ENABLE_NEW_MPEGTS_OUTPUT=OFF."
  33. )
  34. endif()
  35. endif()
  36. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/obs-ffmpeg-config.h.in
  37. ${CMAKE_BINARY_DIR}/config/obs-ffmpeg-config.h)
  38. target_sources(
  39. obs-ffmpeg
  40. PRIVATE obs-ffmpeg.c
  41. obs-ffmpeg-video-encoders.c
  42. obs-ffmpeg-audio-encoders.c
  43. obs-ffmpeg-av1.c
  44. obs-ffmpeg-nvenc.c
  45. obs-ffmpeg-output.c
  46. obs-ffmpeg-mux.c
  47. obs-ffmpeg-mux.h
  48. obs-ffmpeg-hls-mux.c
  49. obs-ffmpeg-source.c
  50. obs-ffmpeg-compat.h
  51. obs-ffmpeg-formats.h
  52. ${CMAKE_BINARY_DIR}/config/obs-ffmpeg-config.h)
  53. target_include_directories(obs-ffmpeg PRIVATE ${CMAKE_BINARY_DIR}/config)
  54. target_link_libraries(
  55. obs-ffmpeg
  56. PRIVATE OBS::libobs
  57. OBS::media-playback
  58. OBS::opts-parser
  59. FFmpeg::avcodec
  60. FFmpeg::avfilter
  61. FFmpeg::avformat
  62. FFmpeg::avdevice
  63. FFmpeg::avutil
  64. FFmpeg::swscale
  65. FFmpeg::swresample)
  66. if(ENABLE_NEW_MPEGTS_OUTPUT)
  67. target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-mpegts.c obs-ffmpeg-srt.h
  68. obs-ffmpeg-rist.h obs-ffmpeg-url.h)
  69. target_link_libraries(obs-ffmpeg PRIVATE Librist::Librist Libsrt::Libsrt)
  70. if(OS_WINDOWS)
  71. target_link_libraries(obs-ffmpeg PRIVATE ws2_32.lib)
  72. endif()
  73. target_compile_definitions(obs-ffmpeg PRIVATE NEW_MPEGTS_OUTPUT)
  74. endif()
  75. if(ENABLE_FFMPEG_LOGGING)
  76. target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-logging.c)
  77. endif()
  78. set_target_properties(obs-ffmpeg PROPERTIES FOLDER "plugins/obs-ffmpeg" PREFIX
  79. "")
  80. target_compile_options(
  81. obs-ffmpeg
  82. PRIVATE
  83. $<$<OR:$<C_COMPILER_ID:Clang>,$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:GNU>>:-Wno-switch>
  84. )
  85. if(OS_WINDOWS)
  86. add_subdirectory(obs-amf-test)
  87. add_subdirectory(obs-nvenc-test)
  88. if(MSVC)
  89. target_link_libraries(obs-ffmpeg PRIVATE OBS::w32-pthreads)
  90. endif()
  91. set(MODULE_DESCRIPTION "OBS FFmpeg module")
  92. configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
  93. obs-ffmpeg.rc)
  94. target_sources(
  95. obs-ffmpeg
  96. PRIVATE texture-amf.cpp
  97. texture-amf-opts.hpp
  98. jim-nvenc.c
  99. jim-nvenc.h
  100. jim-nvenc-helpers.c
  101. jim-nvenc-ver.h
  102. obs-ffmpeg.rc)
  103. elseif(OS_POSIX AND NOT OS_MACOS)
  104. find_package(Libpci REQUIRED)
  105. target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c)
  106. target_link_libraries(obs-ffmpeg PRIVATE LIBPCI::LIBPCI)
  107. endif()
  108. setup_plugin_target(obs-ffmpeg)