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

Commit 45922df0 authored by Andreas Huber's avatar Andreas Huber
Browse files

Sometimes the avc software decoder will signal that a frame is ready but then...

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
parent 8946ab26
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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;
            }