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__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mDrained = false;
|
||||||
mLastStreamOffset = aSample->mOffset;
|
mLastStreamOffset = aSample->mOffset;
|
||||||
|
|
||||||
RefPtr<DecodePromise> p = mDecodePromise.Ensure(__func__);
|
RefPtr<DecodePromise> p = mDecodePromise.Ensure(__func__);
|
||||||
@ -193,7 +194,7 @@ WMFMediaDataDecoder::Flush()
|
|||||||
RefPtr<MediaDataDecoder::DecodePromise>
|
RefPtr<MediaDataDecoder::DecodePromise>
|
||||||
WMFMediaDataDecoder::ProcessDrain()
|
WMFMediaDataDecoder::ProcessDrain()
|
||||||
{
|
{
|
||||||
if (!mMFTManager) {
|
if (!mMFTManager || mDrained) {
|
||||||
return DecodePromise::CreateAndResolve(DecodedData(), __func__);
|
return DecodePromise::CreateAndResolve(DecodedData(), __func__);
|
||||||
}
|
}
|
||||||
// Order the decoder to drain...
|
// Order the decoder to drain...
|
||||||
@ -201,6 +202,7 @@ WMFMediaDataDecoder::ProcessDrain()
|
|||||||
// Then extract all available output.
|
// Then extract all available output.
|
||||||
RefPtr<DecodePromise> p = mDrainPromise.Ensure(__func__);
|
RefPtr<DecodePromise> p = mDrainPromise.Ensure(__func__);
|
||||||
ProcessOutput();
|
ProcessOutput();
|
||||||
|
mDrained = true;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,6 +135,9 @@ private:
|
|||||||
|
|
||||||
MozPromiseHolder<DecodePromise> mDecodePromise;
|
MozPromiseHolder<DecodePromise> mDecodePromise;
|
||||||
MozPromiseHolder<DecodePromise> mDrainPromise;
|
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
|
// For telemetry
|
||||||
bool mHasSuccessfulOutput = false;
|
bool mHasSuccessfulOutput = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user