diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b0183a5e..6aed8ed32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -736,6 +736,10 @@ find_feature(Pulse ${PULSE_FEATURE_TYPE} ${PULSE_FEATURE_PURPOSE} ${PULSE_FEATUR find_feature(Cups ${CUPS_FEATURE_TYPE} ${CUPS_FEATURE_PURPOSE} ${CUPS_FEATURE_DESCRIPTION}) find_feature(PCSC ${PCSC_FEATURE_TYPE} ${PCSC_FEATURE_PURPOSE} ${PCSC_FEATURE_DESCRIPTION}) +if (WITH_DSP_FFMPEG OR WITH_VIDEO_FFMPEG OR WITH_FFMPEG) + set(FFMPEG_FEATURE_TYPE "REQUIRED" ) +endif() + find_feature(FFmpeg ${FFMPEG_FEATURE_TYPE} ${FFMPEG_FEATURE_PURPOSE} ${FFMPEG_FEATURE_DESCRIPTION}) find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DESCRIPTION}) @@ -752,11 +756,6 @@ if (WITH_OPENH264 AND NOT WITH_OPENH264_LOADING) option(WITH_OPENH264_LOADING "Use LoadLibrary to load openh264 at runtime" OFF) endif (WITH_OPENH264 AND NOT WITH_OPENH264_LOADING) -if ((WITH_FFMPEG OR WITH_DSP_FFMPEG) AND NOT FFMPEG_FOUND) - message(FATAL_ERROR "FFMPEG support requested but not detected") -endif() -set(WITH_FFMPEG ${FFMPEG_FOUND}) - # Version check, if we have detected FFMPEG but the version is too old # deactivate it as sound backend. if (WITH_DSP_FFMPEG) @@ -806,7 +805,7 @@ if(MBEDTLS_FOUND) add_definitions("-DWITH_MBEDTLS") endif() -if (WITH_OPENH264 OR WITH_MEDIA_FOUNDATION OR WITH_FFMPEG OR WITH_MEDIACODEC) +if (WITH_OPENH264 OR WITH_MEDIA_FOUNDATION OR WITH_VIDEO_FFMPEG OR WITH_MEDIACODEC) set(WITH_GFX_H264 ON) else() set(WITH_GFX_H264 OFF) diff --git a/channels/tsmf/client/CMakeLists.txt b/channels/tsmf/client/CMakeLists.txt index 29a803050..ba9a6deb2 100644 --- a/channels/tsmf/client/CMakeLists.txt +++ b/channels/tsmf/client/CMakeLists.txt @@ -81,7 +81,7 @@ target_link_libraries(${MODULE_NAME} freerdp winpr) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${CHANNEL_NAME}/Client") -if(WITH_FFMPEG) +if(WITH_VIDEO_FFMPEG) add_channel_client_subsystem(${MODULE_PREFIX} ${CHANNEL_NAME} "ffmpeg" "decoder") endif() diff --git a/channels/tsmf/client/tsmf_decoder.c b/channels/tsmf/client/tsmf_decoder.c index aba1fa431..b85359e43 100644 --- a/channels/tsmf/client/tsmf_decoder.c +++ b/channels/tsmf/client/tsmf_decoder.c @@ -73,7 +73,7 @@ ITSMFDecoder* tsmf_load_decoder(const char* name, TS_AM_MEDIA_TYPE* media_type) decoder = tsmf_load_decoder_by_name("gstreamer"); #endif -#if defined(WITH_FFMPEG) +#if defined(WITH_VIDEO_FFMPEG) if (!decoder) decoder = tsmf_load_decoder_by_name("ffmpeg"); #endif @@ -104,7 +104,7 @@ BOOL tsmf_check_decoder_available(const char* name) decoder = tsmf_load_decoder_by_name("gstreamer"); #endif -#if defined(WITH_FFMPEG) +#if defined(WITH_VIDEO_FFMPEG) if (!decoder) decoder = tsmf_load_decoder_by_name("ffmpeg"); #endif diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index df119b261..21f2a47d7 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -149,10 +149,14 @@ option(WITH_CCACHE "Use ccache support if available" ON) option(WITH_CLANG_FORMAT "Detect clang-format. run 'cmake --build . --target clangformat' to format." ON) option(WITH_DSP_EXPERIMENTAL "Enable experimental sound encoder/decoder formats" OFF) -if (WITH_FFMPEG) - option(WITH_DSP_FFMPEG "Use FFMPEG for audio encoding/decoding" OFF) - option(WITH_VAAPI "Use FFMPEG VAAPI" OFF) -endif(WITH_FFMPEG) + +option(WITH_FFMPEG "Enable FFMPEG for audio/video encoding/decoding" OFF) +CMAKE_DEPENDENT_OPTION(WITH_DSP_FFMPEG "Use FFMPEG for audio encoding/decoding" OFF + "WITH_FFMPEG" OFF) +CMAKE_DEPENDENT_OPTION(WITH_VIDEO_FFMPEG "Use FFMPEG for video encoding/decoding" ON + "WITH_FFMPEG" OFF) +CMAKE_DEPENDENT_OPTION(WITH_VAAPI "Use FFMPEG VAAPI" OFF + "WITH_VIDEO_FFMPEG" OFF) option(USE_VERSION_FROM_GIT_TAG "Extract FreeRDP version from git tag." ON) diff --git a/include/config/config.h.in b/include/config/config.h.in index ca61b599e..d8fcc3e3a 100644 --- a/include/config/config.h.in +++ b/include/config/config.h.in @@ -40,7 +40,7 @@ #cmakedefine WITH_GFX_H264 #cmakedefine WITH_OPENH264 #cmakedefine WITH_OPENH264_LOADING -#cmakedefine WITH_FFMPEG +#cmakedefine WITH_VIDEO_FFMPEG #cmakedefine WITH_DSP_EXPERIMENTAL #cmakedefine WITH_DSP_FFMPEG #cmakedefine WITH_OPENCL diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index fa7971f07..36c64f061 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -241,7 +241,7 @@ if(WITH_OPENH264) endif (NOT WITH_OPENH264_LOADING) endif() -if(WITH_FFMPEG) +if(WITH_VIDEO_FFMPEG) set(CODEC_SRCS ${CODEC_SRCS} codec/h264_ffmpeg.c) freerdp_include_directory_add(${FFMPEG_INCLUDE_DIRS}) freerdp_library_add(${FFMPEG_LIBRARIES}) diff --git a/libfreerdp/codec/h264.c b/libfreerdp/codec/h264.c index e1dfaf40c..7b2421a51 100644 --- a/libfreerdp/codec/h264.c +++ b/libfreerdp/codec/h264.c @@ -605,7 +605,7 @@ static BOOL CALLBACK h264_register_subsystems(PINIT_ONCE once, PVOID param, PVOI i++; } #endif -#ifdef WITH_FFMPEG +#ifdef WITH_VIDEO_FFMPEG { subSystems[i] = &g_Subsystem_libavcodec; i++; diff --git a/libfreerdp/codec/h264.h b/libfreerdp/codec/h264.h index 8fa403a1a..46176e9f6 100644 --- a/libfreerdp/codec/h264.h +++ b/libfreerdp/codec/h264.h @@ -60,7 +60,7 @@ extern "C" #ifdef WITH_OPENH264 extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_OpenH264; #endif -#ifdef WITH_FFMPEG +#ifdef WITH_VIDEO_FFMPEG extern const H264_CONTEXT_SUBSYSTEM g_Subsystem_libavcodec; #endif