diff --git a/media/codec2/components/avc/C2SoftAvcDec.cpp b/media/codec2/components/avc/C2SoftAvcDec.cpp index 56813c48eb..d686eb1a0b 100644 --- a/media/codec2/components/avc/C2SoftAvcDec.cpp +++ b/media/codec2/components/avc/C2SoftAvcDec.cpp @@ -35,6 +35,7 @@ constexpr size_t kMinInputBufferSize = 2 * 1024 * 1024; constexpr char COMPONENT_NAME[] = "c2.android.avc.decoder"; constexpr uint32_t kDefaultOutputDelay = 8; constexpr uint32_t kMaxOutputDelay = 16; +constexpr uint32_t kMinInputBytes = 4; } // namespace class C2SoftAvcDec::IntfImpl : public SimpleInterface::BaseParams { @@ -817,7 +818,7 @@ void C2SoftAvcDec::process( inSize, (int)work->input.ordinal.timestamp.peeku(), (int)work->input.ordinal.frameIndex.peeku(), work->input.flags); size_t inPos = 0; - while (inPos < inSize) { + while (inPos < inSize && inSize - inPos >= kMinInputBytes) { if (C2_OK != ensureDecoderState(pool)) { mSignalledError = true; work->workletsProcessed = 1u; @@ -904,7 +905,6 @@ void C2SoftAvcDec::process( work->result = C2_CORRUPTED; return; } - continue; } if (0 < s_decode_op.u4_pic_wd && 0 < s_decode_op.u4_pic_ht) { if (mHeaderDecoded == false) { @@ -937,16 +937,7 @@ void C2SoftAvcDec::process( if (s_decode_op.u4_output_present) { finishWork(s_decode_op.u4_ts, work); } - if (0 == s_decode_op.u4_num_bytes_consumed) { - ALOGD("Bytes consumed is zero. Ignoring remaining bytes"); - break; - } inPos += s_decode_op.u4_num_bytes_consumed; - if (hasPicture && (inSize - inPos)) { - ALOGD("decoded frame in current access nal, ignoring further trailing bytes %d", - (int)inSize - (int)inPos); - break; - } } if (eos) { drainInternal(DRAIN_COMPONENT_WITH_EOS, pool, work);