OMX_ERRORTYPE SEC_OMX_BaseComponent_Destructor( OMX_IN OMX_HANDLETYPE hComponent) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; OMX_U32 semaValue = 0; FunctionIn(); if (hComponent == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); if (ret != OMX_ErrorNone) { goto EXIT; } if (pOMXComponent->pComponentPrivate == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; SEC_OMX_CommandQueue(pSECComponent, SEC_OMX_CommandComponentDeInit, 0, NULL); SEC_OSAL_SleepMillisec(0); SEC_OSAL_Get_SemaphoreCount(pSECComponent->msgSemaphoreHandle, &semaValue); if (semaValue == 0) SEC_OSAL_SemaphorePost(pSECComponent->msgSemaphoreHandle); SEC_OSAL_SemaphorePost(pSECComponent->msgSemaphoreHandle); SEC_OSAL_ThreadTerminate(pSECComponent->hMessageHandler); pSECComponent->hMessageHandler = NULL; SEC_OSAL_MutexTerminate(pSECComponent->compMutex); pSECComponent->compMutex = NULL; SEC_OSAL_SemaphoreTerminate(pSECComponent->msgSemaphoreHandle); pSECComponent->msgSemaphoreHandle = NULL; SEC_OSAL_QueueTerminate(&pSECComponent->messageQ); SEC_OSAL_Free(pSECComponent); pSECComponent = NULL; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }
OMX_ERRORTYPE SEC_OMX_Port_Destructor(OMX_HANDLETYPE hComponent) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; SEC_OMX_BASEPORT *pSECPort = NULL; FunctionIn(); int i = 0; if (hComponent == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; ret = SEC_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); if (ret != OMX_ErrorNone) { goto EXIT; } if (pOMXComponent->pComponentPrivate == NULL) { ret = OMX_ErrorBadParameter; goto EXIT; } pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; for (i = 0; i < ALL_PORT_NUM; i++) { pSECPort = &pSECComponent->pSECPort[i]; SEC_OSAL_SemaphoreTerminate(pSECPort->loadedResource); pSECPort->loadedResource = NULL; SEC_OSAL_SemaphoreTerminate(pSECPort->unloadedResource); pSECPort->unloadedResource = NULL; SEC_OSAL_Free(pSECPort->bufferStateAllocate); pSECPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECPort->bufferHeader); pSECPort->bufferHeader = NULL; SEC_OSAL_QueueTerminate(&pSECPort->bufferQ); } SEC_OSAL_Free(pSECComponent->pSECPort); pSECComponent->pSECPort = NULL; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }