OMX_ERRORTYPE SEC_OMX_BaseComponent_Constructor( OMX_IN OMX_HANDLETYPE hComponent) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; FunctionIn(); if (hComponent == NULL) { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; pSECComponent = SEC_OSAL_Malloc(sizeof(SEC_OMX_BASECOMPONENT)); if (pSECComponent == NULL) { ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pSECComponent, 0, sizeof(SEC_OMX_BASECOMPONENT)); pOMXComponent->pComponentPrivate = (OMX_PTR)pSECComponent; ret = SEC_OSAL_SemaphoreCreate(&pSECComponent->msgSemaphoreHandle); if (ret != OMX_ErrorNone) { ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } ret = SEC_OSAL_MutexCreate(&pSECComponent->compMutex); if (ret != OMX_ErrorNone) { ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } pSECComponent->bExitMessageHandlerThread = OMX_FALSE; SEC_OSAL_QueueCreate(&pSECComponent->messageQ); ret = SEC_OSAL_ThreadCreate(&pSECComponent->hMessageHandler, SEC_OMX_MessageHandlerThread, pOMXComponent); if (ret != OMX_ErrorNone) { ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } pOMXComponent->GetComponentVersion = &SEC_OMX_GetComponentVersion; pOMXComponent->SendCommand = &SEC_OMX_SendCommand; pOMXComponent->GetConfig = &SEC_OMX_GetConfig; pOMXComponent->GetExtensionIndex = &SEC_OMX_GetExtensionIndex; pOMXComponent->GetState = &SEC_OMX_GetState; pOMXComponent->SetCallbacks = &SEC_OMX_SetCallbacks; pOMXComponent->UseEGLImage = &SEC_OMX_UseEGLImage; EXIT: FunctionOut(); return ret; }
OMX_ERRORTYPE SEC_OMX_Port_Constructor(OMX_HANDLETYPE hComponent) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; SEC_OMX_BASEPORT *pSECPort = NULL; SEC_OMX_BASEPORT *pSECInputPort = NULL; SEC_OMX_BASEPORT *pSECOutputPort = NULL; int i = 0; FunctionIn(); if (hComponent == NULL) { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); 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; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); goto EXIT; } pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; INIT_SET_SIZE_VERSION(&pSECComponent->portParam, OMX_PORT_PARAM_TYPE); pSECComponent->portParam.nPorts = ALL_PORT_NUM; pSECComponent->portParam.nStartPortNumber = INPUT_PORT_INDEX; pSECPort = SEC_OSAL_Malloc(sizeof(SEC_OMX_BASEPORT) * ALL_PORT_NUM); if (pSECPort == NULL) { ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pSECPort, 0, sizeof(SEC_OMX_BASEPORT) * ALL_PORT_NUM); pSECComponent->pSECPort = pSECPort; /* Input Port */ pSECInputPort = &pSECPort[INPUT_PORT_INDEX]; SEC_OSAL_QueueCreate(&pSECInputPort->bufferQ); pSECInputPort->bufferHeader = SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); if (pSECInputPort->bufferHeader == NULL) { SEC_OSAL_Free(pSECPort); pSECPort = NULL; ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pSECInputPort->bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); pSECInputPort->bufferStateAllocate = SEC_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); if (pSECInputPort->bufferStateAllocate == NULL) { SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pSECInputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); pSECInputPort->bufferSemID = NULL; pSECInputPort->assignedBufferNum = 0; pSECInputPort->portState = OMX_StateMax; pSECInputPort->bIsPortFlushed = OMX_FALSE; pSECInputPort->bIsPortDisabled = OMX_FALSE; pSECInputPort->tunneledComponent = NULL; pSECInputPort->tunneledPort = 0; pSECInputPort->tunnelBufferNum = 0; pSECInputPort->bufferSupplier = OMX_BufferSupplyUnspecified; pSECInputPort->tunnelFlags = 0; pSECInputPort->eControlRate = OMX_Video_ControlRateDisable; ret = SEC_OSAL_SemaphoreCreate(&pSECInputPort->loadedResource); if (ret != OMX_ErrorNone) { SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; goto EXIT; } ret = SEC_OSAL_SemaphoreCreate(&pSECInputPort->unloadedResource); if (ret != OMX_ErrorNone) { SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); pSECInputPort->loadedResource = NULL; SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; goto EXIT; } INIT_SET_SIZE_VERSION(&pSECInputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); pSECInputPort->portDefinition.nPortIndex = INPUT_PORT_INDEX; pSECInputPort->portDefinition.eDir = OMX_DirInput; pSECInputPort->portDefinition.nBufferCountActual = 0; pSECInputPort->portDefinition.nBufferCountMin = 0; pSECInputPort->portDefinition.nBufferSize = 0; pSECInputPort->portDefinition.bEnabled = OMX_FALSE; pSECInputPort->portDefinition.bPopulated = OMX_FALSE; pSECInputPort->portDefinition.eDomain = OMX_PortDomainMax; pSECInputPort->portDefinition.bBuffersContiguous = OMX_FALSE; pSECInputPort->portDefinition.nBufferAlignment = 0; pSECInputPort->markType.hMarkTargetComponent = NULL; pSECInputPort->markType.pMarkData = NULL; /* Output Port */ pSECOutputPort = &pSECPort[OUTPUT_PORT_INDEX]; SEC_OSAL_QueueCreate(&pSECOutputPort->bufferQ); pSECOutputPort->bufferHeader = SEC_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); if (pSECOutputPort->bufferHeader == NULL) { SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); pSECInputPort->unloadedResource = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); pSECInputPort->loadedResource = NULL; SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; ret = OMX_ErrorInsufficientResources; goto EXIT; } SEC_OSAL_Memset(pSECOutputPort->bufferHeader, 0, sizeof(OMX_BUFFERHEADERTYPE*) * MAX_BUFFER_NUM); pSECOutputPort->bufferStateAllocate = SEC_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); if (pSECOutputPort->bufferStateAllocate == NULL) { SEC_OSAL_Free(pSECOutputPort->bufferHeader); pSECOutputPort->bufferHeader = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); pSECInputPort->unloadedResource = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); pSECInputPort->loadedResource = NULL; SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; ret = OMX_ErrorInsufficientResources; goto EXIT; } SEC_OSAL_Memset(pSECOutputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); pSECOutputPort->bufferSemID = NULL; pSECOutputPort->assignedBufferNum = 0; pSECOutputPort->portState = OMX_StateMax; pSECOutputPort->bIsPortFlushed = OMX_FALSE; pSECOutputPort->bIsPortDisabled = OMX_FALSE; pSECOutputPort->tunneledComponent = NULL; pSECOutputPort->tunneledPort = 0; pSECOutputPort->tunnelBufferNum = 0; pSECOutputPort->bufferSupplier = OMX_BufferSupplyUnspecified; pSECOutputPort->tunnelFlags = 0; pSECOutputPort->eControlRate = OMX_Video_ControlRateDisable; ret = SEC_OSAL_SemaphoreCreate(&pSECOutputPort->loadedResource); if (ret != OMX_ErrorNone) { SEC_OSAL_Free(pSECOutputPort->bufferStateAllocate); pSECOutputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECOutputPort->bufferHeader); pSECOutputPort->bufferHeader = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); pSECInputPort->unloadedResource = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); pSECInputPort->loadedResource = NULL; SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; goto EXIT; } ret = SEC_OSAL_SemaphoreCreate(&pSECOutputPort->unloadedResource); if (ret != OMX_ErrorNone) { SEC_OSAL_SemaphoreTerminate(pSECOutputPort->loadedResource); pSECOutputPort->loadedResource = NULL; SEC_OSAL_Free(pSECOutputPort->bufferStateAllocate); pSECOutputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECOutputPort->bufferHeader); pSECOutputPort->bufferHeader = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->unloadedResource); pSECInputPort->unloadedResource = NULL; SEC_OSAL_SemaphoreTerminate(pSECInputPort->loadedResource); pSECInputPort->loadedResource = NULL; SEC_OSAL_Free(pSECInputPort->bufferStateAllocate); pSECInputPort->bufferStateAllocate = NULL; SEC_OSAL_Free(pSECInputPort->bufferHeader); pSECInputPort->bufferHeader = NULL; SEC_OSAL_Free(pSECPort); pSECPort = NULL; goto EXIT; } INIT_SET_SIZE_VERSION(&pSECOutputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); pSECOutputPort->portDefinition.nPortIndex = OUTPUT_PORT_INDEX; pSECOutputPort->portDefinition.eDir = OMX_DirOutput; pSECOutputPort->portDefinition.nBufferCountActual = 0; pSECOutputPort->portDefinition.nBufferCountMin = 0; pSECOutputPort->portDefinition.nBufferSize = 0; pSECOutputPort->portDefinition.bEnabled = OMX_FALSE; pSECOutputPort->portDefinition.bPopulated = OMX_FALSE; pSECOutputPort->portDefinition.eDomain = OMX_PortDomainMax; pSECOutputPort->portDefinition.bBuffersContiguous = OMX_FALSE; pSECOutputPort->portDefinition.nBufferAlignment = 0; pSECOutputPort->markType.hMarkTargetComponent = NULL; pSECOutputPort->markType.pMarkData = NULL; pSECComponent->checkTimeStamp.needSetStartTimeStamp = OMX_TRUE; pSECComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; pSECComponent->checkTimeStamp.startTimeStamp = 0; pSECComponent->checkTimeStamp.nStartFlags = 0x0; pOMXComponent->EmptyThisBuffer = &SEC_OMX_EmptyThisBuffer; pOMXComponent->FillThisBuffer = &SEC_OMX_FillThisBuffer; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }