2023-08-04 01:23:07 +02:00
|
|
|
cmake_minimum_required(VERSION 3.22...3.25)
|
2023-03-26 03:55:25 +02:00
|
|
|
|
|
|
|
legacy_check()
|
2014-01-20 16:58:58 +01:00
|
|
|
|
2019-07-09 17:44:04 +02:00
|
|
|
option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF)
|
2022-03-13 11:06:11 +01:00
|
|
|
option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON)
|
2019-07-09 17:44:04 +02:00
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
find_package(
|
|
|
|
FFmpeg REQUIRED
|
|
|
|
COMPONENTS avcodec
|
|
|
|
avfilter
|
|
|
|
avdevice
|
|
|
|
avutil
|
|
|
|
swscale
|
|
|
|
avformat
|
|
|
|
swresample)
|
2021-09-27 20:37:52 +02:00
|
|
|
|
2023-03-26 03:55:25 +02:00
|
|
|
if(NOT TARGET OBS::media-playback)
|
|
|
|
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/media-playback" "${CMAKE_BINARY_DIR}/deps/media-playback")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT TARGET OBS::opts-parser)
|
|
|
|
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/opts-parser" "${CMAKE_BINARY_DIR}/deps/opts-parser")
|
|
|
|
endif()
|
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
add_library(obs-ffmpeg MODULE)
|
|
|
|
add_library(OBS::ffmpeg ALIAS obs-ffmpeg)
|
2022-02-27 15:30:40 +01:00
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
add_subdirectory(ffmpeg-mux)
|
2019-07-09 17:44:04 +02:00
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
target_sources(
|
|
|
|
obs-ffmpeg
|
2023-03-28 19:50:59 +02:00
|
|
|
PRIVATE # cmake-format: sortable
|
|
|
|
$<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:obs-ffmpeg-logging.c>
|
2022-03-16 23:10:42 +01:00
|
|
|
obs-ffmpeg-audio-encoders.c
|
|
|
|
obs-ffmpeg-av1.c
|
2023-03-28 19:50:59 +02:00
|
|
|
obs-ffmpeg-compat.h
|
|
|
|
obs-ffmpeg-formats.h
|
|
|
|
obs-ffmpeg-hls-mux.c
|
2022-03-16 23:10:42 +01:00
|
|
|
obs-ffmpeg-mux.c
|
|
|
|
obs-ffmpeg-mux.h
|
2023-03-28 19:50:59 +02:00
|
|
|
obs-ffmpeg-nvenc.c
|
|
|
|
obs-ffmpeg-output.c
|
2022-03-16 23:10:42 +01:00
|
|
|
obs-ffmpeg-source.c
|
2023-03-28 19:50:59 +02:00
|
|
|
obs-ffmpeg-video-encoders.c
|
|
|
|
obs-ffmpeg.c)
|
|
|
|
|
2023-08-28 15:00:32 +02:00
|
|
|
target_compile_options(obs-ffmpeg PRIVATE $<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang>:-Wno-shorten-64-to-32>)
|
2023-03-26 03:55:25 +02:00
|
|
|
target_compile_definitions(obs-ffmpeg PRIVATE $<$<BOOL:${ENABLE_FFMPEG_LOGGING}>:ENABLE_FFMPEG_LOGGING>)
|
2015-03-04 19:45:50 +01:00
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
target_link_libraries(
|
|
|
|
obs-ffmpeg
|
|
|
|
PRIVATE OBS::libobs
|
|
|
|
OBS::media-playback
|
|
|
|
OBS::opts-parser
|
|
|
|
FFmpeg::avcodec
|
|
|
|
FFmpeg::avfilter
|
|
|
|
FFmpeg::avformat
|
|
|
|
FFmpeg::avdevice
|
|
|
|
FFmpeg::avutil
|
|
|
|
FFmpeg::swscale
|
2022-03-13 11:06:11 +01:00
|
|
|
FFmpeg::swresample)
|
|
|
|
|
|
|
|
if(ENABLE_NEW_MPEGTS_OUTPUT)
|
2023-03-26 03:55:25 +02:00
|
|
|
find_package(Librist QUIET)
|
|
|
|
find_package(Libsrt QUIET)
|
2022-03-13 11:06:11 +01:00
|
|
|
|
2023-03-26 03:55:25 +02:00
|
|
|
foreach(_output_lib IN ITEMS Librist Libsrt)
|
|
|
|
if(NOT TARGET ${_output_lib}::${_output_lib})
|
|
|
|
list(APPEND _error_messages "MPEGTS output library ${_output_lib} not found.")
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if(_error_messages)
|
|
|
|
list(JOIN "\n" _error_string _error_string)
|
|
|
|
message(
|
|
|
|
FATAL_ERROR
|
|
|
|
"${_error_string}\n Disable this error by setting ENABLE_NEW_MPEGTS_OUTPUT to OFF or providing the build system with required SRT and Rist libraries."
|
|
|
|
)
|
2022-03-13 11:06:11 +01:00
|
|
|
endif()
|
2018-04-08 21:05:22 +02:00
|
|
|
|
2023-03-26 03:55:25 +02:00
|
|
|
target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-mpegts.c obs-ffmpeg-srt.h obs-ffmpeg-rist.h obs-ffmpeg-url.h)
|
|
|
|
target_link_libraries(obs-ffmpeg PRIVATE Librist::Librist Libsrt::Libsrt)
|
|
|
|
target_compile_definitions(obs-ffmpeg PRIVATE NEW_MPEGTS_OUTPUT)
|
2019-07-09 17:44:04 +02:00
|
|
|
endif()
|
|
|
|
|
2022-03-16 23:10:42 +01:00
|
|
|
if(OS_WINDOWS)
|
2023-01-17 15:08:45 +01:00
|
|
|
find_package(AMF 1.4.29 REQUIRED)
|
2023-03-30 18:44:31 +02:00
|
|
|
find_package(FFnvcodec 12 REQUIRED)
|
2023-03-26 03:55:25 +02:00
|
|
|
|
2023-03-28 19:50:59 +02:00
|
|
|
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}")
|
|
|
|
|
2022-04-23 02:39:59 +02:00
|
|
|
add_subdirectory(obs-amf-test)
|
2022-09-17 08:49:58 +02:00
|
|
|
add_subdirectory(obs-nvenc-test)
|
2022-04-23 02:39:59 +02:00
|
|
|
|
2023-03-28 19:50:59 +02:00
|
|
|
target_link_libraries(obs-ffmpeg PRIVATE OBS::obs-nvenc-version OBS::w32-pthreads AMF::AMF FFnvcodec::FFnvcodec
|
|
|
|
ws2_32)
|
2015-05-29 08:10:45 +02:00
|
|
|
|
2023-03-26 03:55:25 +02:00
|
|
|
configure_file(cmake/windows/obs-module.rc.in obs-ffmpeg.rc)
|
2023-03-28 19:50:59 +02:00
|
|
|
target_sources(obs-ffmpeg PRIVATE obs-nvenc-helpers.c obs-nvenc.c obs-nvenc.h obs-ffmpeg.rc texture-amf-opts.hpp
|
|
|
|
texture-amf.cpp)
|
2023-03-26 03:55:25 +02:00
|
|
|
elseif(OS_LINUX OR OS_FREEBSD)
|
2022-08-30 10:44:52 +02:00
|
|
|
find_package(Libva REQUIRED)
|
2022-03-16 23:10:42 +01:00
|
|
|
find_package(Libpci REQUIRED)
|
2023-03-26 03:55:25 +02:00
|
|
|
|
|
|
|
target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c vaapi-utils.c vaapi-utils.h)
|
|
|
|
target_link_libraries(obs-ffmpeg PRIVATE Libva::va Libva::drm Libpci::pci)
|
2022-03-16 23:10:42 +01:00
|
|
|
endif()
|
|
|
|
|
2023-03-28 19:50:59 +02:00
|
|
|
# cmake-format: off
|
2023-03-26 03:55:25 +02:00
|
|
|
set_target_properties_obs(obs-ffmpeg PROPERTIES FOLDER plugins/obs-ffmpeg PREFIX "")
|
2023-03-28 19:50:59 +02:00
|
|
|
# cmake-format: on
|