From ceffa219b3bec454f175eed596aef5b897b5ada6 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 11 Jul 2016 15:18:02 -0700 Subject: [PATCH] support for lost packets --- libraries/audio/src/InboundAudioStream.cpp | 6 +++++- plugins/hifiCodec/src/HiFiCodec.cpp | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/audio/src/InboundAudioStream.cpp b/libraries/audio/src/InboundAudioStream.cpp index 144005bc11..c9b9363b1b 100644 --- a/libraries/audio/src/InboundAudioStream.cpp +++ b/libraries/audio/src/InboundAudioStream.cpp @@ -172,7 +172,7 @@ int InboundAudioStream::parseStreamProperties(PacketType type, const QByteArray& return sizeof(quint16); } else { // mixed audio packets do not have any info between the seq num and the audio data. - numAudioSamples = packetAfterSeqNum.size() / sizeof(int16_t); + numAudioSamples = AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL; return 0; } } @@ -189,6 +189,10 @@ int InboundAudioStream::parseAudioData(PacketType type, const QByteArray& packet } int InboundAudioStream::writeDroppableSilentSamples(int silentSamples) { + if (_decoder) { + _decoder->trackLostFrames(silentSamples); + } + // calculate how many silent frames we should drop. int samplesPerFrame = _ringBuffer.getNumFrameSamples(); int desiredJitterBufferFramesPlusPadding = _desiredJitterBufferFrames + DESIRED_JITTER_BUFFER_FRAMES_PADDING; diff --git a/plugins/hifiCodec/src/HiFiCodec.cpp b/plugins/hifiCodec/src/HiFiCodec.cpp index 3bb17a0275..4e9336ff90 100644 --- a/plugins/hifiCodec/src/HiFiCodec.cpp +++ b/plugins/hifiCodec/src/HiFiCodec.cpp @@ -43,7 +43,6 @@ bool HiFiCodec::isSupported() const { class HiFiEncoder : public Encoder, public AudioEncoder { public: HiFiEncoder(int sampleRate, int numChannels) : AudioEncoder(sampleRate, numChannels) { - qDebug() << __FUNCTION__ << "sampleRate:" << sampleRate << "numChannels:" << numChannels; _encodedSize = (AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * sizeof(int16_t) * numChannels) / 4; // codec reduces by 1/4th } @@ -58,7 +57,6 @@ private: class HiFiDecoder : public Decoder, public AudioDecoder { public: HiFiDecoder(int sampleRate, int numChannels) : AudioDecoder(sampleRate, numChannels) { - qDebug() << __FUNCTION__ << "sampleRate:" << sampleRate << "numChannels:" << numChannels; _decodedSize = AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * sizeof(int16_t) * numChannels; } @@ -71,6 +69,7 @@ public: QByteArray encodedBuffer; QByteArray decodedBuffer; decodedBuffer.resize(_decodedSize); + // NOTE: we don't actually use the results of this decode, we just do it to keep the state of the codec clean AudioDecoder::process((const int16_t*)encodedBuffer.constData(), (int16_t*)decodedBuffer.data(), AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL, false); } private: