summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-09-16 10:25:34 -0700
committerAndreas Huber <andih@google.com>2010-09-16 10:25:34 -0700
commit72b2749aafff4643bd91b845c621fb7211b96208 (patch)
tree716ef356301106b47ac27df5e6c2baf5ce3a8b41 /media
parentaae3516293e58c0b015d4109bde58c11d503433c (diff)
downloadframeworks_av-72b2749aafff4643bd91b845c621fb7211b96208.zip
frameworks_av-72b2749aafff4643bd91b845c621fb7211b96208.tar.gz
frameworks_av-72b2749aafff4643bd91b845c621fb7211b96208.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
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/codecs/avc/dec/AVCDecoder.cpp15
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;
}