Bug 1349883 - Let RemoteDataDecoder::Decode() resolve promise with exising decoded data. r?jya
MozReview-Commit-ID: AAdtKz9PgnP
--- a/dom/media/platforms/android/RemoteDataDecoder.cpp
+++ b/dom/media/platforms/android/RemoteDataDecoder.cpp
@@ -591,21 +591,26 @@ RemoteDataDecoder::Decode(MediaRawData*
nsresult rv = BufferInfo::New(&bufferInfo);
if (NS_FAILED(rv)) {
return DecodePromise::CreateAndReject(
MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__), __func__);
}
bufferInfo->Set(0, sample->Size(), sample->mTime, 0);
mDrainStatus = DrainStatus::DRAINABLE;
- return mJavaDecoder->Input(bytes, bufferInfo, GetCryptoInfoFromSample(sample))
- ? mDecodePromise.Ensure(__func__)
- : DecodePromise::CreateAndReject(
+ if (!mJavaDecoder->Input(bytes, bufferInfo, GetCryptoInfoFromSample(sample))) {
+ return DecodePromise::CreateAndReject(
MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__), __func__);
+ }
+ RefPtr<DecodePromise> p = mDecodePromise.Ensure(__func__);
+ if (!mDecodedData.IsEmpty()) {
+ ReturnDecodedData();
+ }
+ return p;
});
}
void
RemoteDataDecoder::Output(MediaData* aSample)
{
if (!mTaskQueue->IsCurrentThreadIn()) {
mTaskQueue->Dispatch(