diff options
author | Andreas Huber <andih@google.com> | 2010-09-16 10:25:34 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-09-16 10:25:34 -0700 |
commit | 45922df0f2948c457da988748dc884c9bc4fe8e3 (patch) | |
tree | 56ce3b0558d22de14d2f441b33716eb10ad94b97 | |
parent | 8946ab2618a4eebfdf7b00c6b68e6a5d8432cafa (diff) | |
download | frameworks_base-45922df0f2948c457da988748dc884c9bc4fe8e3.zip frameworks_base-45922df0f2948c457da988748dc884c9bc4fe8e3.tar.gz frameworks_base-45922df0f2948c457da988748dc884c9bc4fe8e3.tar.bz2 |
Sometimes the avc software decoder will signal that a frame is ready but then unexpectedly fail to return the frame... stop asserting on that and return an error instead.
Change-Id: I6c0782b51b57e9be0fd410bd34078dc3c2b088d6
related-to-bug: 3005156
-rw-r--r-- | media/libstagefright/codecs/avc/dec/AVCDecoder.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp index 7154ba5..7483d60 100644 --- a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp +++ b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp @@ -317,7 +317,7 @@ status_t AVCDecoder::read( &nalType, &nalRefIdc); if (res != AVCDEC_SUCCESS) { - LOGE("cannot determine nal type"); + LOGV("cannot determine nal type"); } else if (nalType == AVC_NALTYPE_SPS || nalType == AVC_NALTYPE_PPS || (mSPSSeen && mPPSSeen)) { switch (nalType) { @@ -330,6 +330,7 @@ status_t AVCDecoder::read( fragSize); if (res != AVCDEC_SUCCESS) { + LOGV("PVAVCDecSeqParamSet returned error %d", res); break; } @@ -396,6 +397,7 @@ status_t AVCDecoder::read( fragSize); if (res != AVCDEC_SUCCESS) { + LOGV("PVAVCDecPicParamSet returned error %d", res); break; } @@ -418,8 +420,13 @@ status_t AVCDecoder::read( AVCFrameIO Output; Output.YCbCr[0] = Output.YCbCr[1] = Output.YCbCr[2] = NULL; - CHECK_EQ(PVAVCDecGetOutput(mHandle, &index, &Release, &Output), - AVCDEC_SUCCESS); + AVCDec_Status status = + PVAVCDecGetOutput(mHandle, &index, &Release, &Output); + + if (status != AVCDEC_SUCCESS) { + LOGV("PVAVCDecGetOutput returned error %d", status); + break; + } CHECK(index >= 0); CHECK(index < (int32_t)mFrames.size()); @@ -466,7 +473,7 @@ status_t AVCDecoder::read( err = OK; } else { - LOGV("failed to decode frame (res = %d)", res); + LOGV("PVAVCDecodeSlice returned error %d", res); } break; } |