From dd18e038e2fa327ba602bdb98eaf49abf5b6ae6c Mon Sep 17 00:00:00 2001 From: Randell Jesup Date: Thu, 17 Apr 2014 17:45:25 -0400 Subject: [PATCH] Bug 996853: handle AUDIO_FORMAT_SILENCE in MediaPipeline and AudioSegment::WriteTo r=roc --- content/media/AudioSegment.cpp | 2 +- media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/content/media/AudioSegment.cpp b/content/media/AudioSegment.cpp index 41c7c96e5538..e6bb7922a69e 100644 --- a/content/media/AudioSegment.cpp +++ b/content/media/AudioSegment.cpp @@ -175,7 +175,7 @@ AudioSegment::WriteTo(uint64_t aID, AudioStream* aOutput, AudioMixer* aMixer) // To avoid overbuffering in the AudioStream, we simply drop the silence, // here. The stream will underrun and output silence anyways. if (c.mBuffer || aOutput->GetWritten()) { - if (c.mBuffer) { + if (c.mBuffer && c.mBufferFormat != AUDIO_FORMAT_SILENCE) { channelData.SetLength(c.mChannelData.Length()); for (uint32_t i = 0; i < channelData.Length(); ++i) { channelData[i] = c.mChannelData[i]; diff --git a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp index f751133b74ed..e21eb7066b1f 100644 --- a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp +++ b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp @@ -1010,6 +1010,9 @@ void MediaPipelineTransmit::PipelineListener::ProcessAudioChunk( ConvertAudioSamplesWithScale(buf, samples, chunk.mDuration, chunk.mVolume); } break; + case AUDIO_FORMAT_SILENCE: + memset(samples, 0, chunk.mDuration * sizeof(samples[0])); + break; default: MOZ_ASSERT(PR_FALSE); return; @@ -1017,9 +1020,7 @@ void MediaPipelineTransmit::PipelineListener::ProcessAudioChunk( } } else { // This means silence. - for (uint32_t i = 0; i < chunk.mDuration; ++i) { - samples[i] = 0; - } + memset(samples, 0, chunk.mDuration * sizeof(samples[0])); } MOZ_ASSERT(!(rate%100)); // rate should be a multiple of 100