Bug 1337559: [WMF] P1. Avoid draining the audio decoder twice in a row. r=gerald

The WMF audio decoder outputs a single audio frame after each drain, regardless of having been provided a frame to decode.
So we must ensure we only ever drain it, if inputs were provided.

MozReview-Commit-ID: 6owe49NjbBv

--HG--
extra : rebase_source : 61fefecf2e350f471ee0c00fce211c858b259508
This commit is contained in:
Jean-Yves Avenard 2017-02-10 23:15:27 +11:00
parent f532ae395e
commit 10f0dbc34f
2 changed files with 6 additions and 1 deletions

View File

@ -128,6 +128,7 @@ WMFMediaDataDecoder::ProcessDecode(MediaRawData* aSample)
__func__);
}
mDrained = false;
mLastStreamOffset = aSample->mOffset;
RefPtr<DecodePromise> p = mDecodePromise.Ensure(__func__);
@ -193,7 +194,7 @@ WMFMediaDataDecoder::Flush()
RefPtr<MediaDataDecoder::DecodePromise>
WMFMediaDataDecoder::ProcessDrain()
{
if (!mMFTManager) {
if (!mMFTManager || mDrained) {
return DecodePromise::CreateAndResolve(DecodedData(), __func__);
}
// Order the decoder to drain...
@ -201,6 +202,7 @@ WMFMediaDataDecoder::ProcessDrain()
// Then extract all available output.
RefPtr<DecodePromise> p = mDrainPromise.Ensure(__func__);
ProcessOutput();
mDrained = true;
return p;
}

View File

@ -135,6 +135,9 @@ private:
MozPromiseHolder<DecodePromise> mDecodePromise;
MozPromiseHolder<DecodePromise> mDrainPromise;
// Set to true if the MFT doesn't require draining. That is no data was input
// since creation or the last drain.
bool mDrained = true;
// For telemetry
bool mHasSuccessfulOutput = false;