207 lines
5.7 KiB
CMake
207 lines
5.7 KiB
CMake
project(obs-filters)
|
|
|
|
option(ENABLE_SPEEXDSP
|
|
"Enable building with SpeexDSP-based noise suppression filter" ON)
|
|
option(ENABLE_RNNOISE "Enable building with RNNoise noise supression filter" ON)
|
|
|
|
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()
|
|
|
|
add_library(obs-filters MODULE)
|
|
add_library(OBS::filters ALIAS obs-filters)
|
|
|
|
set(HAS_NOISEREDUCTION OFF)
|
|
|
|
if(NOT ENABLE_SPEEXDSP)
|
|
obs_status(DISABLED "SpeexDSP")
|
|
else()
|
|
find_package(Libspeexdsp REQUIRED)
|
|
|
|
target_sources(obs-filters PRIVATE noise-suppress-filter.c)
|
|
|
|
target_link_libraries(obs-filters PRIVATE LibspeexDSP::LibspeexDSP)
|
|
|
|
target_compile_definitions(obs-filters PRIVATE LIBSPEEXDSP_ENABLED)
|
|
|
|
if(OS_WINDOWS)
|
|
target_link_options(obs-filters PRIVATE "LINKER:/LTCG"
|
|
"LINKER:/IGNORE:4098" "LINKER:/IGNORE:4099")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT ENABLE_RNNOISE)
|
|
obs_status(DISABLED "SpeexDSP")
|
|
else()
|
|
find_package(Librnnoise QUIET)
|
|
|
|
if(NOT TARGET Librnnoise::Librnnoise)
|
|
obs_status(STATUS "obs-filters -> using bundled RNNoise library")
|
|
add_library(obs-rnnoise INTERFACE)
|
|
add_library(Librnnoise::Librnnoise ALIAS obs-rnnoise)
|
|
|
|
set(_RNNOISE_SOURCES
|
|
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_data.c
|
|
rnnoise/src/rnn_data.h
|
|
rnnoise/src/rnn_reader.c
|
|
rnnoise/src/rnn.c
|
|
rnnoise/src/rnn.h
|
|
rnnoise/src/tansig_table.h
|
|
rnnoise/src/_kiss_fft_guts.h
|
|
rnnoise/include/rnnoise.h)
|
|
|
|
target_sources(obs-rnnoise INTERFACE ${_RNNOISE_SOURCES})
|
|
|
|
target_include_directories(
|
|
obs-rnnoise INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/rnnoise/include")
|
|
|
|
target_compile_definitions(obs-rnnoise INTERFACE COMPILE_OPUS)
|
|
|
|
if(OS_LINUX)
|
|
set_property(SOURCE ${_RNNOISE_SOURCES} PROPERTY COMPILE_FLAGS
|
|
-fvisibility=hidden)
|
|
endif()
|
|
|
|
source_group("rnnoise" FILES ${_RNNOISE_SOURCES})
|
|
endif()
|
|
|
|
target_sources(obs-filters PRIVATE noise-suppress-filter.c)
|
|
|
|
target_link_libraries(obs-filters PRIVATE Librnnoise::Librnnoise)
|
|
|
|
target_compile_definitions(obs-filters PRIVATE LIBRNNOISE_ENABLED)
|
|
endif()
|
|
|
|
if(NOT ENABLE_NVAFX)
|
|
obs_status(DISABLED "NVIDIA Audio FX support")
|
|
set(LIBNVAFX_FOUND OFF)
|
|
else()
|
|
obs_status(ENABLED "NVIDIA Audio FX support")
|
|
|
|
target_compile_definitions(obs-filters PRIVATE LIBNVAFX_ENABLED)
|
|
|
|
set(LIBNVAFX_FOUND ON)
|
|
endif()
|
|
|
|
if(NOT ENABLE_NVVFX)
|
|
obs_status(DISABLED "NVIDIA Video FX support")
|
|
set(LIBNVVFX_FOUND OFF)
|
|
else()
|
|
obs_status(ENABLED "NVIDIA Video FX support")
|
|
set(LIBNVVFX_FOUND ON)
|
|
target_compile_definitions(obs-filters PRIVATE LIBNVVFX_ENABLED)
|
|
endif()
|
|
|
|
if(TARGET Librnnoise::Librnnoise
|
|
OR TARGET LibspeexDSP::LibspeexDSP
|
|
OR LIBNVAFX_FOUND)
|
|
target_compile_definitions(obs-filters PRIVATE HAS_NOISEREDUCTION)
|
|
endif()
|
|
|
|
target_sources(
|
|
obs-filters
|
|
PRIVATE obs-filters.c
|
|
color-correction-filter.c
|
|
async-delay-filter.c
|
|
gpu-delay.c
|
|
hdr-tonemap-filter.c
|
|
crop-filter.c
|
|
scale-filter.c
|
|
scroll-filter.c
|
|
chroma-key-filter.c
|
|
color-key-filter.c
|
|
color-grade-filter.c
|
|
sharpness-filter.c
|
|
gain-filter.c
|
|
noise-gate-filter.c
|
|
mask-filter.c
|
|
invert-audio-polarity.c
|
|
compressor-filter.c
|
|
limiter-filter.c
|
|
expander-filter.c
|
|
luma-key-filter.c)
|
|
|
|
if(NOT OS_MACOS)
|
|
target_sources(
|
|
obs-filters
|
|
PRIVATE data/blend_add_filter.effect
|
|
data/blend_mul_filter.effect
|
|
data/blend_sub_filter.effect
|
|
data/chroma_key_filter.effect
|
|
data/chroma_key_filter_v2.effect
|
|
data/color.effect
|
|
data/color_correction_filter.effect
|
|
data/color_grade_filter.effect
|
|
data/color_key_filter.effect
|
|
data/color_key_filter_v2.effect
|
|
data/crop_filter.effect
|
|
data/hdr_tonemap_filter.effect
|
|
data/luma_key_filter.effect
|
|
data/luma_key_filter_v2.effect
|
|
data/mask_alpha_filter.effect
|
|
data/mask_color_filter.effect
|
|
data/sharpness.effect
|
|
data/rtx_greenscreen.effect)
|
|
|
|
get_target_property(_SOURCES obs-filters SOURCES)
|
|
set(_FILTERS ${_SOURCES})
|
|
list(FILTER _FILTERS INCLUDE REGEX ".*\\.effect")
|
|
|
|
source_group(
|
|
TREE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
PREFIX "Effect Files"
|
|
FILES ${_FILTERS})
|
|
endif()
|
|
|
|
if(LIBNVVFX_FOUND)
|
|
target_sources(obs-filters PRIVATE nvidia-greenscreen-filter.c)
|
|
obs_status(
|
|
STATUS
|
|
"NVIDIA Video FX support enabled; requires redist to be installed by end-user"
|
|
)
|
|
endif()
|
|
|
|
target_include_directories(
|
|
obs-filters PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/config>)
|
|
|
|
target_link_libraries(obs-filters PRIVATE OBS::libobs)
|
|
|
|
target_compile_options(
|
|
obs-filters
|
|
PRIVATE
|
|
$<$<OR:$<C_COMPILER_ID:Clang>,$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:GNU>>:-Wno-switch>
|
|
)
|
|
|
|
set_target_properties(obs-filters PROPERTIES FOLDER "plugins" PREFIX "")
|
|
|
|
if(OS_WINDOWS)
|
|
if(MSVC)
|
|
target_link_libraries(obs-filters PRIVATE OBS::w32-pthreads)
|
|
endif()
|
|
|
|
set(MODULE_DESCRIPTION "OBS A/V Filters")
|
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
|
|
obs-filters.rc)
|
|
|
|
target_sources(obs-filters PRIVATE obs-filters.rc)
|
|
endif()
|
|
|
|
setup_plugin_target(obs-filters)
|