From: SeungBeom Kim <sbcrux.kim@samsung.com> Date: Wed, 4 Jul 2012 00:33:20 +0000 (+0900) Subject: exynos_omx: multi_thread: Add error handling. X-Git-Tag: cm-10.1-M1~305 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=440252358aa79ef5e411b8f57c3359376e650e51;p=GitHub%2FLineageOS%2Fandroid_hardware_samsung_slsi_exynos5.git exynos_omx: multi_thread: Add error handling. Change-Id: I279d1e893589179a573224c383d414fbb165fc40 Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com> --- diff --git a/exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_VdecControl.c b/exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_VdecControl.c index c95f2a4..2570d77 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_VdecControl.c +++ b/exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_VdecControl.c @@ -686,7 +686,7 @@ EXIT: OMX_ERRORTYPE Exynos_InputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosComponent) { - OMX_ERRORTYPE ret = OMX_ErrorNone; + OMX_ERRORTYPE ret = OMX_ErrorUndefined; EXYNOS_OMX_BASEPORT *pExynosPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX]; EXYNOS_OMX_MESSAGE *message = NULL; EXYNOS_OMX_DATABUFFER *inputUseBuffer = NULL; @@ -708,6 +708,7 @@ OMX_ERRORTYPE Exynos_InputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosCompon goto EXIT; } if (message->messageType == EXYNOS_OMX_CommandFakeBuffer) { + Exynos_OSAL_Free(message); ret = OMX_ErrorCodecFlush; goto EXIT; } @@ -829,7 +830,7 @@ EXIT: OMX_ERRORTYPE Exynos_OutputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosComponent) { - OMX_ERRORTYPE ret = OMX_ErrorNone; + OMX_ERRORTYPE ret = OMX_ErrorUndefined; EXYNOS_OMX_BASEPORT *pExynosPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX]; EXYNOS_OMX_MESSAGE *message = NULL; EXYNOS_OMX_DATABUFFER *outputUseBuffer = NULL; @@ -855,6 +856,7 @@ OMX_ERRORTYPE Exynos_OutputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosCompo goto EXIT; } if (message->messageType == EXYNOS_OMX_CommandFakeBuffer) { + Exynos_OSAL_Free(message); ret = OMX_ErrorCodecFlush; goto EXIT; } diff --git a/exynos_omx/openmax/exynos_omx/component/video/dec/h264/Exynos_OMX_H264dec.c b/exynos_omx/openmax/exynos_omx/component/video/dec/h264/Exynos_OMX_H264dec.c index b5b9358..dcc8cc9 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/dec/h264/Exynos_OMX_H264dec.c +++ b/exynos_omx/openmax/exynos_omx/component/video/dec/h264/Exynos_OMX_H264dec.c @@ -316,6 +316,21 @@ OMX_ERRORTYPE H264CodecOpen(EXYNOS_H264DEC_HANDLE *pH264Dec) ret = OMX_ErrorNone; EXIT: + if (ret != OMX_ErrorNone) { + if (pDecOps != NULL) { + Exynos_OSAL_Free(pDecOps); + pH264Dec->hMFCH264Handle.pDecOps = NULL; + } + if (pInbufOps != NULL) { + Exynos_OSAL_Free(pInbufOps); + pH264Dec->hMFCH264Handle.pInbufOps = NULL; + } + if (pOutbufOps != NULL) { + Exynos_OSAL_Free(pOutbufOps); + pH264Dec->hMFCH264Handle.pOutbufOps = NULL; + } + } + FunctionOut(); return ret; diff --git a/exynos_omx/openmax/exynos_omx/component/video/dec/mpeg4/Exynos_OMX_Mpeg4dec.c b/exynos_omx/openmax/exynos_omx/component/video/dec/mpeg4/Exynos_OMX_Mpeg4dec.c index 47b0a2e..648c554 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/dec/mpeg4/Exynos_OMX_Mpeg4dec.c +++ b/exynos_omx/openmax/exynos_omx/component/video/dec/mpeg4/Exynos_OMX_Mpeg4dec.c @@ -420,6 +420,21 @@ OMX_ERRORTYPE Mpeg4CodecOpen(EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec) ret = OMX_ErrorNone; EXIT: + if (ret != OMX_ErrorNone) { + if (pDecOps != NULL) { + Exynos_OSAL_Free(pDecOps); + pMpeg4Dec->hMFCMpeg4Handle.pDecOps = NULL; + } + if (pInbufOps != NULL) { + Exynos_OSAL_Free(pInbufOps); + pMpeg4Dec->hMFCMpeg4Handle.pInbufOps = NULL; + } + if (pOutbufOps != NULL) { + Exynos_OSAL_Free(pOutbufOps); + pMpeg4Dec->hMFCMpeg4Handle.pOutbufOps = NULL; + } + } + FunctionOut(); return ret; @@ -550,9 +565,9 @@ OMX_ERRORTYPE Mpeg4CodecStop(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortInde pInbufOps = pMpeg4Dec->hMFCMpeg4Handle.pInbufOps; pOutbufOps = pMpeg4Dec->hMFCMpeg4Handle.pOutbufOps; - if (nPortIndex == INPUT_PORT_INDEX) + if ((nPortIndex == INPUT_PORT_INDEX) && (pInbufOps != NULL)) pInbufOps->Stop(hMFCHandle); - else if (nPortIndex == OUTPUT_PORT_INDEX) + else if ((nPortIndex == OUTPUT_PORT_INDEX) && (pOutbufOps != NULL)) pOutbufOps->Stop(hMFCHandle); ret = OMX_ErrorNone; diff --git a/exynos_omx/openmax/exynos_omx/component/video/dec/vp8/Exynos_OMX_Vp8dec.c b/exynos_omx/openmax/exynos_omx/component/video/dec/vp8/Exynos_OMX_Vp8dec.c index fae31db..922c26f 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/dec/vp8/Exynos_OMX_Vp8dec.c +++ b/exynos_omx/openmax/exynos_omx/component/video/dec/vp8/Exynos_OMX_Vp8dec.c @@ -235,6 +235,21 @@ OMX_ERRORTYPE VP8CodecOpen(EXYNOS_VP8DEC_HANDLE *pVp8Dec) ret = OMX_ErrorNone; EXIT: + if (ret != OMX_ErrorNone) { + if (pDecOps != NULL) { + Exynos_OSAL_Free(pDecOps); + pVp8Dec->hMFCVp8Handle.pDecOps = NULL; + } + if (pInbufOps != NULL) { + Exynos_OSAL_Free(pInbufOps); + pVp8Dec->hMFCVp8Handle.pInbufOps = NULL; + } + if (pOutbufOps != NULL) { + Exynos_OSAL_Free(pOutbufOps); + pVp8Dec->hMFCVp8Handle.pOutbufOps = NULL; + } + } + FunctionOut(); return ret; @@ -365,9 +380,9 @@ OMX_ERRORTYPE VP8CodecStop(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex) pInbufOps = pVp8Dec->hMFCVp8Handle.pInbufOps; pOutbufOps = pVp8Dec->hMFCVp8Handle.pOutbufOps; - if (nPortIndex == INPUT_PORT_INDEX) + if ((nPortIndex == INPUT_PORT_INDEX) && (pInbufOps != NULL)) pInbufOps->Stop(hMFCHandle); - else if (nPortIndex == OUTPUT_PORT_INDEX) + else if ((nPortIndex == OUTPUT_PORT_INDEX) && (pOutbufOps != NULL)) pOutbufOps->Stop(hMFCHandle); ret = OMX_ErrorNone; @@ -1010,7 +1025,7 @@ OMX_ERRORTYPE Exynos_VP8Dec_GetConfig( FunctionIn(); - if (hComponent == NULL) { + if (hComponent == NULL || pComponentConfigStructure == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } @@ -1024,11 +1039,6 @@ OMX_ERRORTYPE Exynos_VP8Dec_GetConfig( goto EXIT; } pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } if (pExynosComponent->currentState == OMX_StateInvalid) { ret = OMX_ErrorInvalidState; goto EXIT; @@ -1057,7 +1067,7 @@ OMX_ERRORTYPE Exynos_VP8Dec_SetConfig( FunctionIn(); - if (hComponent == NULL) { + if (hComponent == NULL || pComponentConfigStructure == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } @@ -1071,11 +1081,6 @@ OMX_ERRORTYPE Exynos_VP8Dec_SetConfig( goto EXIT; } pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; - - if (pComponentConfigStructure == NULL) { - ret = OMX_ErrorBadParameter; - goto EXIT; - } if (pExynosComponent->currentState == OMX_StateInvalid) { ret = OMX_ErrorInvalidState; goto EXIT; diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c index fea08f1..ecfb788 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c +++ b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c @@ -204,7 +204,6 @@ OMX_BOOL Exynos_Preprocessor_InputData(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d YAddr: 0x%x CbCrAddr: 0x%x", __FUNCTION__, __LINE__, (unsigned int)ppBuf[0], (unsigned int)ppBuf[0]); } #endif - /* reset dataBuffer */ Exynos_ResetDataBuffer(inputUseBuffer); flagEOF = OMX_TRUE; @@ -486,7 +485,7 @@ OMX_BOOL Exynos_Postprocess_OutputData(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_ } } else if (exynosOutputPort->bufferProcessType == BUFFER_SHARE) { if ((outputUseBuffer->remainDataLen > 0) || - (outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) || + ((outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) || (CHECK_PORT_BEING_FLUSHED(exynosOutputPort))) Exynos_OutputBufferReturn(pOMXComponent); } diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_VencControl.c b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_VencControl.c index ad2bfc3..33fadb8 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_VencControl.c +++ b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_VencControl.c @@ -688,7 +688,7 @@ EXIT: OMX_ERRORTYPE Exynos_InputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosComponent) { - OMX_ERRORTYPE ret = OMX_ErrorNone; + OMX_ERRORTYPE ret = OMX_ErrorUndefined; EXYNOS_OMX_BASEPORT *pExynosPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX]; EXYNOS_OMX_MESSAGE *message = NULL; EXYNOS_OMX_DATABUFFER *inputUseBuffer = NULL; @@ -710,6 +710,7 @@ OMX_ERRORTYPE Exynos_InputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosCompon goto EXIT; } if (message->messageType == EXYNOS_OMX_CommandFakeBuffer) { + Exynos_OSAL_Free(message); ret = OMX_ErrorCodecFlush; goto EXIT; } @@ -831,7 +832,7 @@ EXIT: OMX_ERRORTYPE Exynos_OutputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosComponent) { - OMX_ERRORTYPE ret = OMX_ErrorNone; + OMX_ERRORTYPE ret = OMX_ErrorUndefined; EXYNOS_OMX_BASEPORT *pExynosPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX]; EXYNOS_OMX_MESSAGE *message = NULL; EXYNOS_OMX_DATABUFFER *outputUseBuffer = NULL; @@ -857,6 +858,7 @@ OMX_ERRORTYPE Exynos_OutputBufferGetQueue(EXYNOS_OMX_BASECOMPONENT *pExynosCompo goto EXIT; } if (message->messageType == EXYNOS_OMX_CommandFakeBuffer) { + Exynos_OSAL_Free(message); ret = OMX_ErrorCodecFlush; goto EXIT; } diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c index beae30d..d07a9ef 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c +++ b/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c @@ -465,6 +465,21 @@ OMX_ERRORTYPE H264CodecOpen(EXYNOS_H264ENC_HANDLE *pH264Enc) ret = OMX_ErrorNone; EXIT: + if (ret != OMX_ErrorNone) { + if (pEncOps != NULL) { + Exynos_OSAL_Free(pEncOps); + pH264Enc->hMFCH264Handle.pEncOps = NULL; + } + if (pInbufOps != NULL) { + Exynos_OSAL_Free(pInbufOps); + pH264Enc->hMFCH264Handle.pInbufOps = NULL; + } + if (pOutbufOps != NULL) { + Exynos_OSAL_Free(pOutbufOps); + pH264Enc->hMFCH264Handle.pOutbufOps = NULL; + } + } + FunctionOut(); return ret; diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c index e77335e..1404f27 100644 --- a/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c +++ b/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c @@ -582,6 +582,21 @@ OMX_ERRORTYPE Mpeg4CodecOpen(EXYNOS_MPEG4ENC_HANDLE *pMpeg4Enc) ret = OMX_ErrorNone; EXIT: + if (ret != OMX_ErrorNone) { + if (pEncOps != NULL) { + Exynos_OSAL_Free(pEncOps); + pMpeg4Enc->hMFCMpeg4Handle.pEncOps = NULL; + } + if (pInbufOps != NULL) { + Exynos_OSAL_Free(pInbufOps); + pMpeg4Enc->hMFCMpeg4Handle.pInbufOps = NULL; + } + if (pOutbufOps != NULL) { + Exynos_OSAL_Free(pOutbufOps); + pMpeg4Enc->hMFCMpeg4Handle.pOutbufOps = NULL; + } + } + FunctionOut(); return ret; @@ -1889,7 +1904,6 @@ OMX_ERRORTYPE Exynos_Mpeg4Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent) Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ); Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID); } else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) { - /*************/ /* TBD */ /*************/ @@ -1909,7 +1923,6 @@ OMX_ERRORTYPE Exynos_Mpeg4Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent) Exynos_OSAL_QueueTerminate(&pExynosOutputPort->codecBufferQ); Exynos_OSAL_SemaphoreTerminate(pExynosOutputPort->codecSemID); } else if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) { - /*************/ /* TBD */ /*************/