From 5bbdec84523810cb12c63595eae1ec57aa7c8124 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Thu, 3 Nov 2022 17:32:44 +0300 Subject: [PATCH] - better information about decoding results --- src/engine/media/MT_AudioReceiver.cpp | 35 ++++++++++++----------- src/engine/media/MT_AudioReceiver.h | 9 +++++- src/engine/media/MT_SingleAudioStream.cpp | 4 ++- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/engine/media/MT_AudioReceiver.cpp b/src/engine/media/MT_AudioReceiver.cpp index e262774f..f443b986 100644 --- a/src/engine/media/MT_AudioReceiver.cpp +++ b/src/engine/media/MT_AudioReceiver.cpp @@ -484,9 +484,10 @@ void AudioReceiver::processDecoded(Audio::DataWindow& output, int options) output.add(mResampledFrame, mResampledLength); } -bool AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) +AudioReceiver::DecodeResult AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) { - bool result = false, /*had_cng = false, */had_decode = false; + DecodeResult result = DecodeResult_Skip; + bool had_decode = false; // Get next packet from buffer RtpBuffer::ResultList rl; @@ -505,19 +506,19 @@ bool AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) reinterpret_cast(mDecodedFrame), false); } else - if (mCodec && mFrameCount && !mCodecSettings.mSkipDecode) - { - // Do PLC to mDecodedFrame/mDecodedLength - if (options & DecodeOptions_SkipDecode) - mDecodedLength = 0; - else - mDecodedLength = mCodec->plc(mFrameCount, mDecodedFrame, sizeof mDecodedFrame); - } + if (mCodec && mFrameCount && !mCodecSettings.mSkipDecode) + { + // Do PLC to mDecodedFrame/mDecodedLength + if (options & DecodeOptions_SkipDecode) + mDecodedLength = 0; + else + mDecodedLength = mCodec->plc(mFrameCount, mDecodedFrame, sizeof mDecodedFrame); + } if (mDecodedLength) { processDecoded(output, options); - result = true; + result = DecodeResult_Ok; } break; @@ -569,7 +570,7 @@ bool AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) if (mDecodedLength) processDecoded(output, options); } - result = true; + result = DecodeResult_Ok; } } @@ -603,7 +604,7 @@ bool AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) if (mDecodedLength) processDecoded(output, options); } - result = true; + result = DecodeResult_Ok; } else { @@ -644,14 +645,16 @@ bool AudioReceiver::getAudio(Audio::DataWindow& output, int options, int* rate) processDecoded(output, options); } } - result = mFrameCount > 0; + result = mFrameCount > 0 ? DecodeResult_Ok : DecodeResult_Skip; // Check for bitrate counter processStatisticsWithAmrCodec(mCodec.get()); } else - ICELogMedia(<< "RTP packet with tail."); - + { + result = DecodeResult_BadPacket; + // ICELogMedia(<< "RTP packet with tail."); + } } } } diff --git a/src/engine/media/MT_AudioReceiver.h b/src/engine/media/MT_AudioReceiver.h index 16007ee0..a9f14277 100644 --- a/src/engine/media/MT_AudioReceiver.h +++ b/src/engine/media/MT_AudioReceiver.h @@ -138,7 +138,14 @@ namespace MT DecodeOptions_SkipDecode = 4 }; - bool getAudio(Audio::DataWindow& output, int options = DecodeOptions_ResampleToMainRate, int* rate = nullptr); + enum DecodeResult + { + DecodeResult_Ok, + DecodeResult_Skip, + DecodeResult_BadPacket + }; + + DecodeResult getAudio(Audio::DataWindow& output, int options = DecodeOptions_ResampleToMainRate, int* rate = nullptr); // Looks for codec by payload type Codec* findCodec(int payloadType); diff --git a/src/engine/media/MT_SingleAudioStream.cpp b/src/engine/media/MT_SingleAudioStream.cpp index 6754b8cf..f755fb86 100644 --- a/src/engine/media/MT_SingleAudioStream.cpp +++ b/src/engine/media/MT_SingleAudioStream.cpp @@ -34,8 +34,10 @@ void SingleAudioStream::process(const std::shared_ptr& packe void SingleAudioStream::copyPcmTo(Audio::DataWindow& output, int needed) { while (output.filled() < needed) - if (!mReceiver.getAudio(output)) + { + if (mReceiver.getAudio(output) != AudioReceiver::DecodeResult_Ok) break; + } if (output.filled() < needed) ICELogError(<< "Not enough data for speaker's mixer");