cmake_minimum_required(VERSION 3.28...3.30) option(ENABLE_FFMPEG_LOGGING "Enables obs-ffmpeg logging" OFF) option(ENABLE_NEW_MPEGTS_OUTPUT "Use native SRT/RIST mpegts output" ON) if(OS_LINUX OR OS_WINDOWS) option(ENABLE_FFMPEG_NVENC "Enable legacy FFmpeg NVENC encoder" OFF) endif() include(cmake/dependencies.cmake) add_library(obs-ffmpeg MODULE) add_library(OBS::ffmpeg ALIAS obs-ffmpeg) add_subdirectory(ffmpeg-mux) target_sources( obs-ffmpeg PRIVATE $<$:obs-ffmpeg-logging.c> $<$:obs-ffmpeg-nvenc.c> $<$:obs-ffmpeg-mpegts.c> $<$:obs-ffmpeg-rist.h> $<$:obs-ffmpeg-srt.h> $<$:obs-ffmpeg-url.h> $<$:obs-ffmpeg-vaapi.c> $<$:vaapi-utils.c> $<$:vaapi-utils.h> obs-ffmpeg-audio-encoders.c obs-ffmpeg-av1.c obs-ffmpeg-compat.h obs-ffmpeg-formats.h obs-ffmpeg-openh264.c obs-ffmpeg-hls-mux.c obs-ffmpeg-mux.c obs-ffmpeg-mux.h obs-ffmpeg-output.c obs-ffmpeg-output.h obs-ffmpeg-source.c obs-ffmpeg-video-encoders.c obs-ffmpeg.c ) target_compile_options(obs-ffmpeg PRIVATE $<$:-Wno-shorten-64-to-32>) target_compile_definitions( obs-ffmpeg PRIVATE $<$:ENABLE_FFMPEG_LOGGING> $<$:ENABLE_FFMPEG_NVENC> $<$:NEW_MPEGTS_OUTPUT> ) 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 FFmpeg::swresample $<$:OBS::w32-pthreads> $<$:ws2_32> $<$:Libva::va> $<$:Libva::drm> $<$:Libpci::pci> $<$:Libdrm::Libdrm> $<$:Librist::Librist> $<$:Libsrt::Libsrt> ) if(OS_WINDOWS) if(CMAKE_VS_PLATFORM_NAME STREQUAL x64) target_sources(obs-ffmpeg PRIVATE texture-amf-opts.hpp texture-amf.cpp) target_link_libraries(obs-ffmpeg PRIVATE AMF::AMF) endif() configure_file(cmake/windows/obs-module.rc.in obs-ffmpeg.rc) target_sources(obs-ffmpeg PRIVATE obs-ffmpeg.rc) endif() set_target_properties_obs(obs-ffmpeg PROPERTIES FOLDER plugins/obs-ffmpeg PREFIX "")