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

Commit eae3ad05 authored by Venkatarama Avadhani's avatar Venkatarama Avadhani Committed by Marco Nelissen
Browse files

Notify Errors Appropriately from SoftMPEG2

This is to ensure that the framework realises that an error has
occured and does not call onQueueFilled if the error is fatal.

Bug: 36715268

Change-Id: If02499d306aa9b6df64a7f25d43d1bdf318a10cd
parent 92f7d06b
Loading
Loading
Loading
Loading
+36 −6
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ SoftMPEG2::SoftMPEG2(
            kProfileLevels, ARRAY_SIZE(kProfileLevels),
            320 /* width */, 240 /* height */, callbacks,
            appData, component),
      mCodecCtx(NULL),
      mMemRecords(NULL),
      mFlushOutBuffer(NULL),
      mOmxColorFormat(OMX_COLOR_FormatYUV420Planar),
@@ -75,6 +76,7 @@ SoftMPEG2::SoftMPEG2(
      mNewWidth(mWidth),
      mNewHeight(mHeight),
      mChangingResolution(false),
      mSignalledError(false),
      mStride(mWidth) {
    initPorts(kNumBuffers, INPUT_BUF_SIZE, kNumBuffers, CODEC_MIME_TYPE);

@@ -82,11 +84,21 @@ SoftMPEG2::SoftMPEG2(
    GENERATE_FILE_NAMES();
    CREATE_DUMP_FILE(mInFile);

    CHECK_EQ(initDecoder(), (status_t)OK);
    if (OK != initDecoder()) {
        ALOGE("Failed to initialize decoder");
        notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
        mSignalledError = true;
        return;
    }
}

SoftMPEG2::~SoftMPEG2() {
    CHECK_EQ(deInitDecoder(), (status_t)OK);
    if (OK != deInitDecoder()) {
        ALOGE("Failed to deinit decoder");
        notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
        mSignalledError = true;
        return;
    }
}


@@ -204,6 +216,7 @@ status_t SoftMPEG2::resetDecoder() {
    setNumCores();

    mStride = 0;
    mSignalledError = false;

    return OK;
}
@@ -433,6 +446,7 @@ status_t SoftMPEG2::deInitDecoder() {

    mInitNeeded = true;
    mChangingResolution = false;
    mCodecCtx = NULL;

    return OK;
}
@@ -444,10 +458,13 @@ status_t SoftMPEG2::reInitDecoder() {

    ret = initDecoder();
    if (OK != ret) {
        ALOGE("Create failure");
        ALOGE("Failed to initialize decoder");
        deInitDecoder();
        return NO_MEMORY;
        notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
        mSignalledError = true;
        return ret;
    }
    mSignalledError = false;
    return OK;
}

@@ -545,6 +562,9 @@ void SoftMPEG2::onPortFlushCompleted(OMX_U32 portIndex) {
void SoftMPEG2::onQueueFilled(OMX_U32 portIndex) {
    UNUSED(portIndex);

    if (mSignalledError) {
        return;
    }
    if (mOutputPortSettingsChange != NONE) {
        return;
    }
@@ -601,7 +621,12 @@ void SoftMPEG2::onQueueFilled(OMX_U32 portIndex) {
            bool portWillReset = false;
            handlePortSettingsChange(&portWillReset, mNewWidth, mNewHeight);

            CHECK_EQ(reInitDecoder(), (status_t)OK);
            if (OK != reInitDecoder()) {
                ALOGE("Failed to reinitialize decoder");
                notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
                mSignalledError = true;
                return;
            }
            return;
        }

@@ -672,7 +697,12 @@ void SoftMPEG2::onQueueFilled(OMX_U32 portIndex) {
                bool portWillReset = false;
                handlePortSettingsChange(&portWillReset, s_dec_op.u4_pic_wd, s_dec_op.u4_pic_ht);

                CHECK_EQ(reInitDecoder(), (status_t)OK);
                if (OK != reInitDecoder()) {
                    ALOGE("Failed to reinitialize decoder");
                    notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
                    mSignalledError = true;
                    return;
                }

                if (setDecodeArgs(&s_dec_ip, &s_dec_op, inHeader, outHeader, timeStampIx)) {
                    ivdec_api_function(mCodecCtx, (void *)&s_dec_ip, (void *)&s_dec_op);
+1 −0
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ private:
    // codec. So the codec is switching to decode the new resolution.
    bool mChangingResolution;
    bool mFlushNeeded;
    bool mSignalledError;
    bool mWaitForI;
    size_t mStride;