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

Commit 7392f40d authored by Venkatarama Avadhani's avatar Venkatarama Avadhani Committed by android-build-merger
Browse files

Notify Errors Appropriately from SoftMPEG2

am: eae3ad05

Change-Id: Ic3f7d31db3feca479bb5aa8e6d2ce1686ec1361f
parents f7f4d438 eae3ad05
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;
}

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

    if (mSignalledError) {
        return;
    }
    if (mOutputPortSettingsChange != NONE) {
        return;
    }
@@ -642,7 +662,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;
        }

@@ -715,7 +740,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
@@ -106,6 +106,7 @@ private:
    // codec. So the codec is switching to decode the new resolution.
    bool mChangingResolution;
    bool mFlushNeeded;
    bool mSignalledError;
    bool mWaitForI;
    size_t mStride;