Backed out 1 changesets (bug 1207915) for windows m3 test failures

Backed out changeset 84fd96dc7ddc (bug 1207915)
This commit is contained in:
Carsten "Tomcat" Book 2015-09-24 11:44:25 +02:00
parent 4890f364b1
commit 478b2883ea

View File

@ -605,9 +605,6 @@ SendStreamAudio(DecodedStreamData* aStream, int64_t aStartTime,
MediaData* aData, AudioSegment* aOutput, MediaData* aData, AudioSegment* aOutput,
uint32_t aRate, double aVolume) uint32_t aRate, double aVolume)
{ {
// The amount of audio frames that is used to fuzz rounding errors.
static const int64_t AUDIO_FUZZ_FRAMES = 1;
MOZ_ASSERT(aData); MOZ_ASSERT(aData);
AudioData* audio = aData->As<AudioData>(); AudioData* audio = aData->As<AudioData>();
// This logic has to mimic AudioSink closely to make sure we write // This logic has to mimic AudioSink closely to make sure we write
@ -619,11 +616,11 @@ SendStreamAudio(DecodedStreamData* aStream, int64_t aStartTime,
if (!audioWrittenOffset.isValid() || if (!audioWrittenOffset.isValid() ||
!frameOffset.isValid() || !frameOffset.isValid() ||
// ignore packet that we've already processed // ignore packet that we've already processed
frameOffset.value() < audioWrittenOffset.value()) { frameOffset.value() + audio->mFrames <= audioWrittenOffset.value()) {
return; return;
} }
if (audioWrittenOffset.value() + AUDIO_FUZZ_FRAMES < frameOffset.value()) { if (audioWrittenOffset.value() < frameOffset.value()) {
int64_t silentFrames = frameOffset.value() - audioWrittenOffset.value(); int64_t silentFrames = frameOffset.value() - audioWrittenOffset.value();
// Write silence to catch up // Write silence to catch up
AudioSegment silence; AudioSegment silence;
@ -633,17 +630,20 @@ SendStreamAudio(DecodedStreamData* aStream, int64_t aStartTime,
aOutput->AppendFrom(&silence); aOutput->AppendFrom(&silence);
} }
// Always write the whole sample without truncation to be consistent with MOZ_ASSERT(audioWrittenOffset.value() >= frameOffset.value());
// DecodedAudioDataSink::PlayFromAudioQueue()
int64_t offset = audioWrittenOffset.value() - frameOffset.value();
size_t framesToWrite = audio->mFrames - offset;
audio->EnsureAudioBuffer(); audio->EnsureAudioBuffer();
nsRefPtr<SharedBuffer> buffer = audio->mAudioBuffer; nsRefPtr<SharedBuffer> buffer = audio->mAudioBuffer;
AudioDataValue* bufferData = static_cast<AudioDataValue*>(buffer->Data()); AudioDataValue* bufferData = static_cast<AudioDataValue*>(buffer->Data());
nsAutoTArray<const AudioDataValue*, 2> channels; nsAutoTArray<const AudioDataValue*, 2> channels;
for (uint32_t i = 0; i < audio->mChannels; ++i) { for (uint32_t i = 0; i < audio->mChannels; ++i) {
channels.AppendElement(bufferData + i * audio->mFrames); channels.AppendElement(bufferData + i * audio->mFrames + offset);
} }
aOutput->AppendFrames(buffer.forget(), channels, audio->mFrames); aOutput->AppendFrames(buffer.forget(), channels, framesToWrite);
aStream->mAudioFramesWritten += audio->mFrames; aStream->mAudioFramesWritten += framesToWrite;
aOutput->ApplyVolume(aVolume); aOutput->ApplyVolume(aVolume);
aStream->mNextAudioTime = audio->GetEndTime(); aStream->mNextAudioTime = audio->GetEndTime();