diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index 303427e68..de49b5dee 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -216,9 +216,21 @@ if(LAME_FOUND) include_directories(${LAME_INCLUDE_DIRS}) endif() -if(OPUS_FOUND) - freerdp_library_add(${OPUS_LIBRARIES}) - include_directories(${OPUS_INCLUDE_DIRS}) +set(OPUS_DEFAULT OFF) +if (NOT WITH_DSP_FFMPEG) + find_package(PkgConfig REQUIRED) + pkg_check_modules(OPUS REQUIRED opus) + set(OPUS_DEFAULT ${OPUS_FOUND}) +endif() + +option(WITH_OPUS "compile with opus codec support" ${OPUS_DEFAULT}) +if (WITH_OPUS) + find_package(PkgConfig REQUIRED) + pkg_check_modules(OPUS REQUIRED opus) + if(OPUS_FOUND) + freerdp_library_add(${OPUS_LIBRARIES}) + include_directories(${OPUS_INCLUDE_DIRS}) + endif() endif() if(FAAD2_FOUND) diff --git a/libfreerdp/codec/dsp.c b/libfreerdp/codec/dsp.c index c91b89ff1..cc6d2b5cf 100644 --- a/libfreerdp/codec/dsp.c +++ b/libfreerdp/codec/dsp.c @@ -1247,11 +1247,6 @@ BOOL freerdp_dsp_encode(FREERDP_DSP_CONTEXT* context, const AUDIO_FORMAT* srcFor BOOL freerdp_dsp_decode(FREERDP_DSP_CONTEXT* context, const AUDIO_FORMAT* srcFormat, const BYTE* data, size_t length, wStream* out) { -#if defined(WITH_OPUS) - if (context->format.wFormatTag == WAVE_FORMAT_OPUS) - return freerdp_dsp_decode_opus(context, data, length, out); -#endif - #if defined(WITH_DSP_FFMPEG) return freerdp_dsp_ffmpeg_decode(context, srcFormat, data, length, out); #else @@ -1289,6 +1284,10 @@ BOOL freerdp_dsp_decode(FREERDP_DSP_CONTEXT* context, const AUDIO_FORMAT* srcFor return freerdp_dsp_decode_faad(context, data, length, out); #endif +#if defined(WITH_OPUS) + case WAVE_FORMAT_OPUS: + return freerdp_dsp_decode_opus(context, data, length, out); +#endif default: return FALSE; } @@ -1299,14 +1298,6 @@ BOOL freerdp_dsp_decode(FREERDP_DSP_CONTEXT* context, const AUDIO_FORMAT* srcFor BOOL freerdp_dsp_supports_format(const AUDIO_FORMAT* format, BOOL encode) { -#if defined(WITH_OPUS) - if (format->wFormatTag == WAVE_FORMAT_OPUS && !encode && - (format->nSamplesPerSec == 8000 || format->nSamplesPerSec == 12000 || - format->nSamplesPerSec == 16000 || format->nSamplesPerSec == 24000 || - format->nSamplesPerSec == 48000)) - return TRUE; -#endif - #if defined(WITH_DSP_FFMPEG) return freerdp_dsp_ffmpeg_supports_format(format, encode); #else @@ -1355,6 +1346,16 @@ BOOL freerdp_dsp_supports_format(const AUDIO_FORMAT* format, BOOL encode) if (encode) return TRUE; +#endif +#if defined(WITH_OPUS) + case WAVE_FORMAT_OPUS: + if (encode) + return FALSE; + if ((format->nSamplesPerSec == 8000 || format->nSamplesPerSec == 12000 || + format->nSamplesPerSec == 16000 || format->nSamplesPerSec == 24000 || + format->nSamplesPerSec == 48000)) + return TRUE; + return FALSE; #endif default: