Bug 1362969 - Flush MediaCodec only when necessary. r?esawin draft
authorJohn Lin <jolin@mozilla.com>
Tue, 09 May 2017 12:35:46 +0800
changeset 575164 2e6dff9389faed44e19f8cfbf604b4e9daa940f9
parent 575163 6e856584e00b093f1e712f3c764a0e628c66b63a
child 627842 5c4ed9cdff63f60c42255a328f9d931d57d66282
push id57977
push userbmo:jolin@mozilla.com
push dateWed, 10 May 2017 02:34:03 +0000
reviewersesawin
bugs1362969
milestone53.0.3
Bug 1362969 - Flush MediaCodec only when necessary. r?esawin MozReview-Commit-ID: FgfEnqwnZ58
dom/media/platforms/android/MediaCodecDataDecoder.cpp
--- a/dom/media/platforms/android/MediaCodecDataDecoder.cpp
+++ b/dom/media/platforms/android/MediaCodecDataDecoder.cpp
@@ -462,17 +462,21 @@ MediaCodecDataDecoder::WaitForInput()
 
 
 already_AddRefed<MediaRawData>
 MediaCodecDataDecoder::PeekNextSample()
 {
   MonitorAutoLock lock(mMonitor);
 
   if (mState == ModuleState::kFlushing) {
-    mDecoder->Flush();
+    // Flush MediaCodec only when there is input in progress to works around a bug
+    // in some Android 4.2.2 devices. See bug 1362969.
+    if (!mDurations.empty()) {
+      mDecoder->Flush();
+    }
     ClearQueue();
     SetState(ModuleState::kDecoding);
     lock.Notify();
     return nullptr;
   }
 
   if (mQueue.empty()) {
     if (mState == ModuleState::kDrainQueue) {