From 3e87b9e7ec929b7511636ced5451cb7831684ac2 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Thu, 20 Nov 2025 08:51:58 +0300 Subject: [PATCH] - fix various build problems --- src/CMakeLists.txt | 5 ++++- src/engine/helper/HL_Rtp.cpp | 2 +- src/engine/media/MT_AudioCodec.cpp | 28 +++++++++++++++------------- src/engine/media/MT_CodecList.cpp | 17 ++++++++--------- src/engine/media/MT_CodecList.h | 17 +++++++++-------- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0fd395c9..cc4aae9b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,6 +26,8 @@ set (OPENSSL_INCLUDE ${LIB_PLATFORM}/openssl/1.1/include) message ("Using OpenSSL include files from ${OPENSSL_INCLUDE}") message ("Using OpenSSL libs: ${OPENSSL_SSL} and ${OPENSSL_CRYPTO}") include_directories(${OPENSSL_INCLUDE}) +message ("Using Opus include files: ${OPUS_INCLUDE}") +message ("Using Opus lib: ${OPUS_LIB}") # Used defines for our project set (DEFINES -DUSE_OPENSSL) @@ -309,7 +311,7 @@ set (RTPHONE_SOURCES ) if (USE_OPUS_CODEC) -set (DEFINES ${DEFINES} -DUSE_OPUS_CODEC) + set (DEFINES ${DEFINES} -DUSE_OPUS_CODEC) endif() add_library (rtphone STATIC ${RTPHONE_SOURCES}) @@ -363,6 +365,7 @@ target_include_directories(rtphone ${CMAKE_CURRENT_SOURCE_DIR}/libs ${LIB_PLATFORM}/opus/include ${E}/helper + ${E}/audio ${E}/media ${L} ${L}/ice diff --git a/src/engine/helper/HL_Rtp.cpp b/src/engine/helper/HL_Rtp.cpp index 8242a830..728d1ae0 100644 --- a/src/engine/helper/HL_Rtp.cpp +++ b/src/engine/helper/HL_Rtp.cpp @@ -8,7 +8,7 @@ # include #endif -#if defined(TARGET_LINUX) +#if defined(TARGET_LINUX) || defined(TARGET_ANDROID) # include #endif diff --git a/src/engine/media/MT_AudioCodec.cpp b/src/engine/media/MT_AudioCodec.cpp index 19737e5f..27f5603f 100644 --- a/src/engine/media/MT_AudioCodec.cpp +++ b/src/engine/media/MT_AudioCodec.cpp @@ -309,14 +309,14 @@ void OpusCodec::Params::parse(const resip::Data ¶ms) if (paramIter->mName == "usedtx") mUseDtx = paramIter->mValue == "1"; else - if (paramIter->mName == "useinbandfec") - mUseInbandFec = paramIter->mValue == "1"; - else - if (paramIter->mName == "stereo") - mStereo = paramIter->mValue == "1"; - else - if (paramIter->mName == "ptime") - mPtime = strx::toInt(paramIter->mValue.c_str(), 20); + if (paramIter->mName == "useinbandfec") + mUseInbandFec = paramIter->mValue == "1"; + else + if (paramIter->mName == "stereo") + mStereo = paramIter->mValue == "1"; + else + if (paramIter->mName == "ptime") + mPtime = strx::toInt(paramIter->mValue.c_str(), 20); } } @@ -406,8 +406,6 @@ OpusCodec::OpusCodec(int samplerate, int channels, int ptime) mEncoderCtx = opus_encoder_create(mSamplerate, mChannels, OPUS_APPLICATION_VOIP, &status); if (OPUS_OK != opus_encoder_ctl(mEncoderCtx, OPUS_SET_COMPLEXITY(OPUS_CODEC_COMPLEXITY))) ICELogError(<< "Failed to set Opus encoder complexity"); - //if (OPUS_OK != opus_encoder_ctl(mEncoderCtx, OPUS_SET_FORCE_CHANNELS(AUDIO_CHANNELS))) - // ICELogCritical(<<"Failed to set channel number in Opus encoder"); // Decoder creation is postponed until first packet arriving (because it may use different channel number } @@ -521,8 +519,12 @@ int OpusCodec::decode(const void* input, int inputBytes, void* output, int outpu int decoded = opus_decode(mDecoderCtx, reinterpret_cast(input), inputBytes, buffer_decode, nr_of_frames, 0); + if (decoded < 0) + { + ICELogCritical(<< "opus_decode() returned " << decoded); + return 0; + } - size_t resampler_processed = 0; opus_int16 *buffer_stereo = nullptr; int buffer_stereo_capacity = buffer_capacity * 2; @@ -1150,8 +1152,8 @@ int GsmCodec::plc(int lostFrames, void* output, int outputCapacity) G722Codec::G722Codec() { - mEncoder = g722_encode_init(NULL, 64000, 0); - mDecoder = g722_decode_init(NULL, 64000, 0); + mEncoder = g722_encode_init(nullptr, 64000, 0); + mDecoder = g722_decode_init(nullptr, 64000, 0); } diff --git a/src/engine/media/MT_CodecList.cpp b/src/engine/media/MT_CodecList.cpp index 5776fece..dae68f03 100644 --- a/src/engine/media/MT_CodecList.cpp +++ b/src/engine/media/MT_CodecList.cpp @@ -151,7 +151,7 @@ CodecList::Settings::EvsSpec CodecList::Settings::EvsSpec::parse(const std::stri { EvsSpec result; - auto parts = strx::split(spec, "-/"); + auto parts = strx::split(spec, "-/ ,:"); if (parts.size() == 3) { // Payload type number @@ -162,10 +162,10 @@ CodecList::Settings::EvsSpec CodecList::Settings::EvsSpec::parse(const std::stri if (encoding_type == "mime") result.mEncodingType = Encoding_MIME; else - if (encoding_type == "g192") - result.mEncodingType = Encoding_G192; - else - throw std::logic_error("Bad EVS codec encoding type"); + if (encoding_type == "g192") + result.mEncodingType = Encoding_G192; + else + throw std::logic_error("Bad EVS codec encoding type"); // Bandwidth std::string& bandwidth = parts.back(); @@ -196,7 +196,7 @@ CodecList::Settings::OpusSpec CodecList::Settings::OpusSpec::parse(const std::st { OpusSpec result; - auto parts = strx::split(spec, "-/"); + auto parts = strx::split(spec, "-/ ,:"); if (parts.size() == 3) { result.mPayloadType = strx::toInt(strx::trim(parts.front()).c_str(), -1); @@ -215,7 +215,7 @@ static int findOctetMode(const char* line) p += strlen(param_name); char int_buf[8] = {0}; - int int_buf_offset = 0; + size_t int_buf_offset = 0; while (*p && isdigit(*p) && int_buf_offset < sizeof(int_buf)) int_buf[int_buf_offset++] = *p++; return atoi(int_buf); @@ -337,8 +337,7 @@ void CodecList::init(const Settings& settings) #if !defined(TARGET_ANDROID) && !defined(TARGET_OPENWRT) && !defined(TARGET_RPI) #if defined(USE_AMR_CODEC) for (int pt: mSettings.mAmrWbPayloadType) - mFactoryList.push_back(std::make_shared( - AmrCodecConfig{mSettings.mWrapIuUP, false, pt})); + mFactoryList.push_back(std::make_shared(AmrCodecConfig{mSettings.mWrapIuUP, false, pt})); for (int pt: mSettings.mAmrWbOctetPayloadType) mFactoryList.push_back(std::make_shared(AmrCodecConfig{mSettings.mWrapIuUP, true, pt})); diff --git a/src/engine/media/MT_CodecList.h b/src/engine/media/MT_CodecList.h index 87855c0b..6f084e87 100644 --- a/src/engine/media/MT_CodecList.h +++ b/src/engine/media/MT_CodecList.h @@ -95,11 +95,11 @@ public: std::vector mOpusSpec; // Payload type - bool contains(int ptype) const; + bool contains(int ptype) const; // Textual representation - used in logging std::string toString() const; - void clear(); + void clear(); static Settings DefaultSettings; @@ -110,16 +110,17 @@ public: CodecList(const Settings& settings); ~CodecList(); - void setSettings(const Settings& settings) { + void setSettings(const Settings& settings) + { init(settings); } - int count() const; + int count() const; Codec::Factory& codecAt(int index) const; - int findCodec(const std::string& name) const; - void fillCodecMap(CodecMap& cm); - PCodec createCodecByPayloadType(int payloadType); - void clear(); + int findCodec(const std::string& name) const; + void fillCodecMap(CodecMap& cm); + PCodec createCodecByPayloadType(int payloadType); + void clear(); protected: typedef std::vector> FactoryList;