mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-28 04:35:33 +00:00
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:
parent
f532ae395e
commit
10f0dbc34f
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user