Bug 1349883 - Let RemoteDataDecoder::Decode() resolve promise with exising decoded data. r?jya draft
authorJohn Lin <jolin@mozilla.com>
Thu, 23 Mar 2017 17:47:51 +0800
changeset 503559 8d176c8c659c5ea0f9c10b61d6ca43ce88db2348
parent 503558 482869312cdf8d2c011c45639ecbb305915ae73a
child 550470 9fde2665f1fc69f355e5dec1d7bc9bdef4370bb7
push id50621
push userbmo:jolin@mozilla.com
push dateThu, 23 Mar 2017 09:51:24 +0000
reviewersjya
bugs1349883
milestone55.0a1
Bug 1349883 - Let RemoteDataDecoder::Decode() resolve promise with exising decoded data. r?jya MozReview-Commit-ID: AAdtKz9PgnP
dom/media/platforms/android/RemoteDataDecoder.cpp
--- 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(