summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2019-04-12 15:13:26 -0700
committerRay Essick <essick@google.com>2019-04-30 15:49:55 -0700
commit7d1d572c683d2d74af9bbe217e2093d4303ae7bc (patch)
tree166b130b60815e80f00d1c0ea17da5d5027dedaf
parent983e8ca3a2f12de9b272743efb836148db77f7e2 (diff)
downloadframeworks_av-7d1d572c683d2d74af9bbe217e2093d4303ae7bc.tar.gz
frameworks_av-7d1d572c683d2d74af9bbe217e2093d4303ae7bc.tar.bz2
frameworks_av-7d1d572c683d2d74af9bbe217e2093d4303ae7bc.zip
C2SoftHevcDec: return error for fatal errors in decoder
Bug: 130578045 Test: adb shell stagefright -s -S /sdcard/crowd422_hevc.mp4 Test: Ensure decoder doesn't attemp decoding all frames Test: atest android.media.cts.DecoderTest Test: android.media.cts.AdaptivePlaybackTest Change-Id: I801ad18ef5ea29d1f5dc4721ff154111023bcb68
-rw-r--r--media/codec2/components/hevc/C2SoftHevcDec.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/media/codec2/components/hevc/C2SoftHevcDec.cpp b/media/codec2/components/hevc/C2SoftHevcDec.cpp
index bb8dda03ed..5da59bdafc 100644
--- a/media/codec2/components/hevc/C2SoftHevcDec.cpp
+++ b/media/codec2/components/hevc/C2SoftHevcDec.cpp
@@ -806,19 +806,20 @@ void C2SoftHevcDec::process(
TIME_DIFF(mTimeStart, mTimeEnd, decodeTime);
ALOGV("decodeTime=%6d delay=%6d numBytes=%6d", decodeTime, delay,
s_decode_op.u4_num_bytes_consumed);
- if (IVD_MEM_ALLOC_FAILED == (s_decode_op.u4_error_code & 0xFF)) {
+ if (IVD_MEM_ALLOC_FAILED == (s_decode_op.u4_error_code & IVD_ERROR_MASK)) {
ALOGE("allocation failure in decoder");
mSignalledError = true;
work->workletsProcessed = 1u;
work->result = C2_CORRUPTED;
return;
- } else if (IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED == (s_decode_op.u4_error_code & 0xFF)) {
+ } else if (IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED ==
+ (s_decode_op.u4_error_code & IVD_ERROR_MASK)) {
ALOGE("unsupported resolution : %dx%d", mWidth, mHeight);
mSignalledError = true;
work->workletsProcessed = 1u;
work->result = C2_CORRUPTED;
return;
- } else if (IVD_RES_CHANGED == (s_decode_op.u4_error_code & 0xFF)) {
+ } else if (IVD_RES_CHANGED == (s_decode_op.u4_error_code & IVD_ERROR_MASK)) {
ALOGV("resolution changed");
drainInternal(DRAIN_COMPONENT_NO_EOS, pool, work);
resetDecoder();
@@ -828,6 +829,12 @@ void C2SoftHevcDec::process(
/* Decode header and get new dimensions */
setParams(mStride, IVD_DECODE_HEADER);
(void) ivdec_api_function(mDecHandle, &s_decode_ip, &s_decode_op);
+ } else if (IS_IVD_FATAL_ERROR(s_decode_op.u4_error_code)) {
+ ALOGE("Fatal error in decoder 0x%x", s_decode_op.u4_error_code);
+ mSignalledError = true;
+ work->workletsProcessed = 1u;
+ work->result = C2_CORRUPTED;
+ return;
}
if (0 < s_decode_op.u4_pic_wd && 0 < s_decode_op.u4_pic_ht) {
if (mHeaderDecoded == false) {