From 4d7ca3e4f38abdae82b41c0f55837f30da45bde7 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Sat, 16 Nov 2024 16:33:21 +0300 Subject: [PATCH] - properly handle the badly decoded audio (which can happen due to payload type <-> codec inconsistency) --- src/engine/media/MT_AudioCodec.cpp | 2 ++ src/engine/media/MT_AudioReceiver.cpp | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/engine/media/MT_AudioCodec.cpp b/src/engine/media/MT_AudioCodec.cpp index a491dfcf..564bcca5 100644 --- a/src/engine/media/MT_AudioCodec.cpp +++ b/src/engine/media/MT_AudioCodec.cpp @@ -519,6 +519,8 @@ int OpusCodec::decode(const void* input, int inputBytes, void* output, int outpu int nr_of_frames = opus_decoder_get_nb_samples(mDecoderCtx, (const unsigned char *) input, inputBytes); + if (nr_of_frames <= 0) + return 0; // We support stereo and mono here. int buffer_capacity = nr_of_frames * sizeof(opus_int16) * nr_of_channels; diff --git a/src/engine/media/MT_AudioReceiver.cpp b/src/engine/media/MT_AudioReceiver.cpp index ab937faa..b6bf4609 100644 --- a/src/engine/media/MT_AudioReceiver.cpp +++ b/src/engine/media/MT_AudioReceiver.cpp @@ -638,8 +638,7 @@ AudioReceiver::DecodeResult AudioReceiver::getAudio(Audio::DataWindow& output, i // Decode frame by frame mDecodedLength = mCodec->decode(p->rtp()->GetPayloadData() + i * mCodec->rtpLength(), frameLength, mDecodedFrame, sizeof mDecodedFrame); - // mDecodedLength = 3840; // Opus 20 ms stereo - if (mDecodedLength) + if (mDecodedLength > 0) processDecoded(output, options); } }