OMX_ERRORTYPE Exynos_OMX_ResourceManager_Deinit() { OMX_ERRORTYPE ret = OMX_ErrorNone; EXYNOS_OMX_RM_COMPONENT_LIST *pCurrComponent; EXYNOS_OMX_RM_COMPONENT_LIST *pNextComponent; FunctionIn(); Exynos_OSAL_MutexLock(ghVideoRMComponentListMutex); if (gpVideoDecRMComponentList) { pCurrComponent = gpVideoDecRMComponentList; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpVideoDecRMComponentList = NULL; } if (gpVideoDecRMWaitingList) { pCurrComponent = gpVideoDecRMWaitingList; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpVideoDecRMWaitingList = NULL; } if (gpVideoEncRMComponentList) { pCurrComponent = gpVideoEncRMComponentList; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpVideoEncRMComponentList = NULL; } if (gpVideoEncRMWaitingList) { pCurrComponent = gpVideoEncRMWaitingList; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpVideoEncRMWaitingList = NULL; } Exynos_OSAL_MutexUnlock(ghVideoRMComponentListMutex); Exynos_OSAL_MutexTerminate(ghVideoRMComponentListMutex); ghVideoRMComponentListMutex = NULL; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }
OMX_ERRORTYPE Exynos_OMX_ResourceManager_Deinit() { OMX_ERRORTYPE ret = OMX_ErrorNone; EXYNOS_OMX_RM_COMPONENT_LIST *pCurrComponent = NULL; EXYNOS_OMX_RM_COMPONENT_LIST *pNextComponent = NULL; int i = 0; FunctionIn(); Exynos_OSAL_MutexLock(ghVideoRMComponentListMutex); for (i = 0; i < RESOURCE_MAX; i++) { if (gpRMList[i]) { pCurrComponent = gpRMList[i]; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpRMList[i] = NULL; } if (gpRMWaitList[i]) { pCurrComponent = gpRMWaitList[i]; while (pCurrComponent != NULL) { pNextComponent = pCurrComponent->pNext; Exynos_OSAL_Free(pCurrComponent); pCurrComponent = pNextComponent; } gpRMWaitList[i] = NULL; } } Exynos_OSAL_MutexUnlock(ghVideoRMComponentListMutex); Exynos_OSAL_MutexTerminate(ghVideoRMComponentListMutex); ghVideoRMComponentListMutex = NULL; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }
OMX_API OMX_ERRORTYPE OMX_APIENTRY Exynos_OMX_Deinit(void) { OMX_ERRORTYPE ret = OMX_ErrorNone; FunctionIn(); Exynos_OSAL_MutexTerminate(ghLoadComponentListMutex); ghLoadComponentListMutex = NULL; Exynos_OMX_ResourceManager_Deinit(); if (OMX_ErrorNone != Exynos_OMX_Component_Unregister(gComponentList)) { ret = OMX_ErrorUndefined; goto EXIT; } gComponentList = NULL; gComponentNum = 0; gInitialized = 0; EXIT: FunctionOut(); return ret; }