Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f4f646d authored by Wonsik Kim's avatar Wonsik Kim Committed by Automerger Merge Worker
Browse files

Merge "C2SoftAvcDec: Fix interlaced input handling" into rvc-dev am:...

Merge "C2SoftAvcDec: Fix interlaced input handling" into rvc-dev am: ac156ba5 am: 69446be7 am: 5d09e378

Change-Id: I0b9015f31245a4436866594e02fb8f76ca5edb67
parents ea099ba0 5d09e378
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -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<void>::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);