Bug 824230 - Handle UNKNOWN_ERROR in OmxDecoder. r=doublec, a=blocking-basecamp
authorChris Jones <jones.chris.g@gmail.com>
Mon, 24 Dec 2012 15:43:10 -0800 (2012-12-24)
changeset 117855 c30b2a994cb686ae6a95b5459e2feff2272a3c65
parent 117854 a698f13091ae8b3485a455146f4de64730dd8625
child 117856 b357c8c759047413c17ca9d4acb16cb6f60dbdee
push id88
push userryanvm@gmail.com
push dateWed, 26 Dec 2012 13:32:27 +0000 (2012-12-26)
reviewersdoublec, blocking-basecamp
bugs824230
milestone18.0
Bug 824230 - Handle UNKNOWN_ERROR in OmxDecoder. r=doublec, a=blocking-basecamp
content/media/omx/OmxDecoder.cpp
--- a/content/media/omx/OmxDecoder.cpp
+++ b/content/media/omx/OmxDecoder.cpp
@@ -554,24 +554,33 @@ bool OmxDecoder::ReadVideo(VideoFrame *a
       return false;
     } else {
       return ReadVideo(aFrame, aTimeUs, aKeyframeSkip, aDoSeek);
     }
   }
   else if (err == ERROR_END_OF_STREAM) {
     return false;
   }
+  else if (err == UNKNOWN_ERROR) {
+    // This sometimes is used to mean "out of memory", but regardless,
+    // don't keep trying to decode if the decoder doesn't want to.
+    return false;
+  }
 
   return true;
 }
 
 bool OmxDecoder::ReadAudio(AudioFrame *aFrame, int64_t aSeekTimeUs)
 {
   status_t err;
 
+  if (!mAudioBuffer) {
+    return false;
+  }
+
   if (mAudioMetadataRead && aSeekTimeUs == -1) {
     // Use the data read into the buffer during metadata time
     err = OK;
   }
   else {
     ReleaseAudioBuffer();
     if (aSeekTimeUs != -1) {
       MediaSource::ReadOptions options;
@@ -604,11 +613,14 @@ bool OmxDecoder::ReadAudio(AudioFrame *a
       return ReadAudio(aFrame, aSeekTimeUs);
     }
   }
   else if (err == ERROR_END_OF_STREAM) {
     if (aFrame->mSize == 0) {
       return false;
     }
   }
+  else if (err == UNKNOWN_ERROR) {
+    return false;
+  }
 
   return true;
 }