OMX_ERRORTYPE SEC_OMX_ComponentLoad(SEC_OMX_COMPONENT *sec_component) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_HANDLETYPE libHandle; OMX_COMPONENTTYPE *pOMXComponent; FunctionIn(); OMX_ERRORTYPE (*SEC_OMX_ComponentInit)(OMX_HANDLETYPE hComponent, OMX_STRING componentName); libHandle = SEC_OSAL_dlopen((OMX_STRING)sec_component->libName, RTLD_NOW); if (!libHandle) { ret = OMX_ErrorInvalidComponentName; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponentName, Line:%d", __LINE__); goto EXIT; } SEC_OMX_ComponentInit = SEC_OSAL_dlsym(libHandle, "SEC_OMX_ComponentInit"); if (!SEC_OMX_ComponentInit) { SEC_OSAL_dlclose(libHandle); ret = OMX_ErrorInvalidComponent; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)SEC_OSAL_Malloc(sizeof(OMX_COMPONENTTYPE)); INIT_SET_SIZE_VERSION(pOMXComponent, OMX_COMPONENTTYPE); ret = (*SEC_OMX_ComponentInit)((OMX_HANDLETYPE)pOMXComponent, (OMX_STRING)sec_component->componentName); if (ret != OMX_ErrorNone) { SEC_OSAL_Free(pOMXComponent); SEC_OSAL_dlclose(libHandle); ret = OMX_ErrorInvalidComponent; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); goto EXIT; } else { if (SEC_OMX_ComponentAPICheck(pOMXComponent) != OMX_ErrorNone) { if (NULL != pOMXComponent->ComponentDeInit) pOMXComponent->ComponentDeInit(pOMXComponent); SEC_OSAL_Free(pOMXComponent); SEC_OSAL_dlclose(libHandle); ret = OMX_ErrorInvalidComponent; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInvalidComponent, Line:%d", __LINE__); goto EXIT; } sec_component->libHandle = libHandle; sec_component->pOMXComponent = pOMXComponent; ret = OMX_ErrorNone; } EXIT: FunctionOut(); return ret; }
OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; SEC_OMX_BASEPORT *pSECPort = NULL; SEC_MPEG4ENC_HANDLE *pMpeg4Enc = NULL; OMX_S32 codecType = -1; int i = 0; FunctionIn(); if ((hComponent == NULL) || (componentName == NULL)) { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "%s: parameters are null, ret: %X", __FUNCTION__, ret); goto EXIT; } if (SEC_OSAL_Strcmp(SEC_OMX_COMPOMENT_MPEG4_ENC, componentName) == 0) { codecType = CODEC_TYPE_MPEG4; } else if (SEC_OSAL_Strcmp(SEC_OMX_COMPOMENT_H263_ENC, componentName) == 0) { codecType = CODEC_TYPE_H263; } else { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName(%s) error, ret: %X", __FUNCTION__, componentName, ret); goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; ret = SEC_OMX_VideoEncodeComponentInit(pOMXComponent); if (ret != OMX_ErrorNone) { SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_OMX_VideoDecodeComponentInit error, ret: %X", __FUNCTION__, ret); goto EXIT; } pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; pSECComponent->codecType = HW_VIDEO_CODEC; pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); if (pSECComponent->componentName == NULL) { SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "%s: componentName alloc error, ret: %X", __FUNCTION__, ret); goto EXIT; } SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); pMpeg4Enc = SEC_OSAL_Malloc(sizeof(SEC_MPEG4ENC_HANDLE)); if (pMpeg4Enc == NULL) { SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "%s: SEC_MPEG4ENC_HANDLE alloc error, ret: %X", __FUNCTION__, ret); goto EXIT; } SEC_OSAL_Memset(pMpeg4Enc, 0, sizeof(SEC_MPEG4ENC_HANDLE)); pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pMpeg4Enc; pMpeg4Enc->hMFCMpeg4Handle.codecType = codecType; if (codecType == CODEC_TYPE_MPEG4) SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPOMENT_MPEG4_ENC); else SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPOMENT_H263_ENC); /* Set componentVersion */ pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; pSECComponent->componentVersion.s.nStep = STEP_NUMBER; /* Set specVersion */ pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; pSECComponent->specVersion.s.nStep = STEP_NUMBER; /* Android CapabilityFlags */ pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; /* Input port */ pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; pSECPort->portDefinition.format.video.nBitrate = 64000; pSECPort->portDefinition.format.video.xFramerate= (15 << 16); pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; pSECPort->portDefinition.format.video.pNativeRender = 0; pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); pSECPort->portDefinition.format.video.eColorFormat = SEC_OMX_COLOR_FormatNV12PhysicalAddress;//OMX_COLOR_FormatYUV420SemiPlanar; pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; pSECPort->portDefinition.bEnabled = OMX_TRUE; /* Output port */ pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; pSECPort->portDefinition.format.video.nBitrate = 64000; pSECPort->portDefinition.format.video.xFramerate= (15 << 16); if (codecType == CODEC_TYPE_MPEG4) { pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/mpeg4"); } else { pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/h263"); } pSECPort->portDefinition.format.video.pNativeRender = 0; pSECPort->portDefinition.format.video.bFlagErrorConcealment = OMX_FALSE; pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; pSECPort->portDefinition.bEnabled = OMX_TRUE; if (codecType == CODEC_TYPE_MPEG4) { for(i = 0; i < ALL_PORT_NUM; i++) { INIT_SET_SIZE_VERSION(&pMpeg4Enc->mpeg4Component[i], OMX_VIDEO_PARAM_MPEG4TYPE); pMpeg4Enc->mpeg4Component[i].nPortIndex = i; pMpeg4Enc->mpeg4Component[i].eProfile = OMX_VIDEO_MPEG4ProfileSimple; pMpeg4Enc->mpeg4Component[i].eLevel = OMX_VIDEO_MPEG4Level4; pMpeg4Enc->mpeg4Component[i].nPFrames = 10; pMpeg4Enc->mpeg4Component[i].nBFrames = 0; /* No support for B frames */ pMpeg4Enc->mpeg4Component[i].nMaxPacketSize = 256; /* Default value */ pMpeg4Enc->mpeg4Component[i].nAllowedPictureTypes = OMX_VIDEO_PictureTypeI | OMX_VIDEO_PictureTypeP; pMpeg4Enc->mpeg4Component[i].bGov = OMX_FALSE; } } else { for(i = 0; i < ALL_PORT_NUM; i++) { INIT_SET_SIZE_VERSION(&pMpeg4Enc->h263Component[i], OMX_VIDEO_PARAM_H263TYPE); pMpeg4Enc->h263Component[i].nPortIndex = i; pMpeg4Enc->h263Component[i].eProfile = OMX_VIDEO_H263ProfileBaseline; pMpeg4Enc->h263Component[i].eLevel = OMX_VIDEO_H263Level45; pMpeg4Enc->h263Component[i].nPFrames = 20; pMpeg4Enc->h263Component[i].nBFrames = 0; /* No support for B frames */ pMpeg4Enc->h263Component[i].bPLUSPTYPEAllowed = OMX_FALSE; pMpeg4Enc->h263Component[i].nAllowedPictureTypes = OMX_VIDEO_PictureTypeI | OMX_VIDEO_PictureTypeP; pMpeg4Enc->h263Component[i].bForceRoundingTypeToZero = OMX_TRUE; pMpeg4Enc->h263Component[i].nPictureHeaderRepetition = 0; pMpeg4Enc->h263Component[i].nGOBHeaderInterval = 0; } } pOMXComponent->GetParameter = &SEC_MFC_Mpeg4Enc_GetParameter; pOMXComponent->SetParameter = &SEC_MFC_Mpeg4Enc_SetParameter; pOMXComponent->SetConfig = &SEC_MFC_Mpeg4Enc_SetConfig; pOMXComponent->ComponentRoleEnum = &SEC_MFC_Mpeg4Enc_ComponentRoleEnum; pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; pSECComponent->sec_mfc_componentInit = &SEC_MFC_Mpeg4Enc_Init; pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_Mpeg4Enc_Terminate; pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_Mpeg4Enc_bufferProcess; pSECComponent->sec_checkInputFrame = NULL; pSECComponent->currentState = OMX_StateLoaded; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }
OSCL_EXPORT_REF OMX_ERRORTYPE SEC_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; SEC_OMX_BASECOMPONENT *pSECComponent = NULL; SEC_OMX_BASEPORT *pSECPort = NULL; SEC_H264ENC_HANDLE *pH264Enc = NULL; int i = 0; FunctionIn(); if ((hComponent == NULL) || (componentName == NULL)) { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); goto EXIT; } if (SEC_OSAL_Strcmp(SEC_OMX_COMPOMENT_H264_ENC, componentName) != 0) { ret = OMX_ErrorBadParameter; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorBadParameter, componentName:%s, Line:%d", componentName, __LINE__); goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; ret = SEC_OMX_VideoEncodeComponentInit(pOMXComponent); if (ret != OMX_ErrorNone) { SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_Error, Line:%d", __LINE__); goto EXIT; } pSECComponent = (SEC_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; pSECComponent->codecType = HW_VIDEO_CODEC; pSECComponent->componentName = (OMX_STRING)SEC_OSAL_Malloc(MAX_OMX_COMPONENT_NAME_SIZE); if (pSECComponent->componentName == NULL) { SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pSECComponent->componentName, 0, MAX_OMX_COMPONENT_NAME_SIZE); pH264Enc = SEC_OSAL_Malloc(sizeof(SEC_H264ENC_HANDLE)); if (pH264Enc == NULL) { SEC_OMX_VideoEncodeComponentDeinit(pOMXComponent); ret = OMX_ErrorInsufficientResources; SEC_OSAL_Log(SEC_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } SEC_OSAL_Memset(pH264Enc, 0, sizeof(SEC_H264ENC_HANDLE)); pSECComponent->hCodecHandle = (OMX_HANDLETYPE)pH264Enc; SEC_OSAL_Strcpy(pSECComponent->componentName, SEC_OMX_COMPOMENT_H264_ENC); /* Set componentVersion */ pSECComponent->componentVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; pSECComponent->componentVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; pSECComponent->componentVersion.s.nRevision = REVISION_NUMBER; pSECComponent->componentVersion.s.nStep = STEP_NUMBER; /* Set specVersion */ pSECComponent->specVersion.s.nVersionMajor = VERSIONMAJOR_NUMBER; pSECComponent->specVersion.s.nVersionMinor = VERSIONMINOR_NUMBER; pSECComponent->specVersion.s.nRevision = REVISION_NUMBER; pSECComponent->specVersion.s.nStep = STEP_NUMBER; /* Android CapabilityFlags */ pSECComponent->capabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; pSECComponent->capabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; pSECComponent->capabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; pSECComponent->capabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE; /* Input port */ pSECPort = &pSECComponent->pSECPort[INPUT_PORT_INDEX]; pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE; pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "raw/video"); pSECPort->portDefinition.format.video.eColorFormat = SEC_OMX_COLOR_FormatNV12PhysicalAddress; pSECPort->portDefinition.bEnabled = OMX_TRUE; /* Output port */ pSECPort = &pSECComponent->pSECPort[OUTPUT_PORT_INDEX]; pSECPort->portDefinition.format.video.nFrameWidth = DEFAULT_FRAME_WIDTH; pSECPort->portDefinition.format.video.nFrameHeight= DEFAULT_FRAME_HEIGHT; pSECPort->portDefinition.format.video.nStride = 0; /*DEFAULT_FRAME_WIDTH;*/ pSECPort->portDefinition.nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE; pSECPort->portDefinition.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; SEC_OSAL_Memset(pSECPort->portDefinition.format.video.cMIMEType, 0, MAX_OMX_MIMETYPE_SIZE); SEC_OSAL_Strcpy(pSECPort->portDefinition.format.video.cMIMEType, "video/avc"); pSECPort->portDefinition.format.video.eColorFormat = OMX_COLOR_FormatUnused; pSECPort->portDefinition.bEnabled = OMX_TRUE; for(i = 0; i < ALL_PORT_NUM; i++) { INIT_SET_SIZE_VERSION(&pH264Enc->AVCComponent[i], OMX_VIDEO_PARAM_AVCTYPE); pH264Enc->AVCComponent[i].nPortIndex = i; pH264Enc->AVCComponent[i].eProfile = OMX_VIDEO_AVCProfileBaseline; pH264Enc->AVCComponent[i].eLevel = OMX_VIDEO_AVCLevel31; } pOMXComponent->GetParameter = &SEC_MFC_H264Enc_GetParameter; pOMXComponent->SetParameter = &SEC_MFC_H264Enc_SetParameter; pOMXComponent->SetConfig = &SEC_MFC_H264Enc_SetConfig; pOMXComponent->ComponentRoleEnum = &SEC_MFC_H264Enc_ComponentRoleEnum; pOMXComponent->ComponentDeInit = &SEC_OMX_ComponentDeinit; pSECComponent->sec_mfc_componentInit = &SEC_MFC_H264Enc_Init; pSECComponent->sec_mfc_componentTerminate = &SEC_MFC_H264Enc_Terminate; pSECComponent->sec_mfc_bufferProcess = &SEC_MFC_H264Enc_bufferProcess; pSECComponent->sec_checkInputFrame = NULL; pSECComponent->currentState = OMX_StateLoaded; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }
OMX_ERRORTYPE Exynos_OMX_Port_Constructor(OMX_HANDLETYPE hComponent) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *pOMXComponent = NULL; EXYNOS_OMX_BASECOMPONENT *pExynosComponent = NULL; EXYNOS_OMX_BASEPORT *pExynosPort = NULL; EXYNOS_OMX_BASEPORT *pExynosInputPort = NULL; EXYNOS_OMX_BASEPORT *pExynosOutputPort = NULL; int i = 0; FunctionIn(); if (hComponent == NULL) { ret = OMX_ErrorBadParameter; Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); goto EXIT; } pOMXComponent = (OMX_COMPONENTTYPE *)hComponent; ret = Exynos_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE)); if (ret != OMX_ErrorNone) { goto EXIT; } if (pOMXComponent->pComponentPrivate == NULL) { ret = OMX_ErrorBadParameter; Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorBadParameter, Line:%d", __LINE__); goto EXIT; } pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate; INIT_SET_SIZE_VERSION(&pExynosComponent->portParam, OMX_PORT_PARAM_TYPE); pExynosComponent->portParam.nPorts = ALL_PORT_NUM; pExynosComponent->portParam.nStartPortNumber = INPUT_PORT_INDEX; pExynosPort = Exynos_OSAL_Malloc(sizeof(EXYNOS_OMX_BASEPORT) * ALL_PORT_NUM); if (pExynosPort == NULL) { ret = OMX_ErrorInsufficientResources; Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } Exynos_OSAL_Memset(pExynosPort, 0, sizeof(EXYNOS_OMX_BASEPORT) * ALL_PORT_NUM); pExynosComponent->pExynosPort = pExynosPort; /* Input Port */ pExynosInputPort = &pExynosPort[INPUT_PORT_INDEX]; Exynos_OSAL_QueueCreate(&pExynosInputPort->bufferQ, MAX_QUEUE_ELEMENTS); pExynosInputPort->extendBufferHeader = Exynos_OSAL_Malloc(sizeof(EXYNOS_OMX_BUFFERHEADERTYPE) * MAX_BUFFER_NUM); if (pExynosInputPort->extendBufferHeader == NULL) { Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; ret = OMX_ErrorInsufficientResources; Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } Exynos_OSAL_Memset(pExynosInputPort->extendBufferHeader, 0, sizeof(EXYNOS_OMX_BUFFERHEADERTYPE) * MAX_BUFFER_NUM); pExynosInputPort->bufferStateAllocate = Exynos_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); if (pExynosInputPort->bufferStateAllocate == NULL) { Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; ret = OMX_ErrorInsufficientResources; Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__); goto EXIT; } Exynos_OSAL_Memset(pExynosInputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); pExynosInputPort->bufferSemID = NULL; pExynosInputPort->assignedBufferNum = 0; pExynosInputPort->portState = OMX_StateMax; pExynosInputPort->bIsPortFlushed = OMX_FALSE; pExynosInputPort->bIsPortDisabled = OMX_FALSE; pExynosInputPort->tunneledComponent = NULL; pExynosInputPort->tunneledPort = 0; pExynosInputPort->tunnelBufferNum = 0; pExynosInputPort->bufferSupplier = OMX_BufferSupplyUnspecified; pExynosInputPort->tunnelFlags = 0; ret = Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->loadedResource); if (ret != OMX_ErrorNone) { Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; goto EXIT; } ret = Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->unloadedResource); if (ret != OMX_ErrorNone) { Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->loadedResource); pExynosInputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; goto EXIT; } INIT_SET_SIZE_VERSION(&pExynosInputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); pExynosInputPort->portDefinition.nPortIndex = INPUT_PORT_INDEX; pExynosInputPort->portDefinition.eDir = OMX_DirInput; pExynosInputPort->portDefinition.nBufferCountActual = 0; pExynosInputPort->portDefinition.nBufferCountMin = 0; pExynosInputPort->portDefinition.nBufferSize = 0; pExynosInputPort->portDefinition.bEnabled = OMX_FALSE; pExynosInputPort->portDefinition.bPopulated = OMX_FALSE; pExynosInputPort->portDefinition.eDomain = OMX_PortDomainMax; pExynosInputPort->portDefinition.bBuffersContiguous = OMX_FALSE; pExynosInputPort->portDefinition.nBufferAlignment = 0; pExynosInputPort->markType.hMarkTargetComponent = NULL; pExynosInputPort->markType.pMarkData = NULL; pExynosInputPort->exceptionFlag = GENERAL_STATE; /* Output Port */ pExynosOutputPort = &pExynosPort[OUTPUT_PORT_INDEX]; Exynos_OSAL_QueueCreate(&pExynosOutputPort->bufferQ, MAX_QUEUE_ELEMENTS); /* For in case of "Output Buffer Share", MAX ELEMENTS(DPB + EDPB) */ pExynosOutputPort->extendBufferHeader = Exynos_OSAL_Malloc(sizeof(EXYNOS_OMX_BUFFERHEADERTYPE) * MAX_BUFFER_NUM); if (pExynosOutputPort->extendBufferHeader == NULL) { Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->unloadedResource); pExynosInputPort->unloadedResource = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->loadedResource); pExynosInputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; ret = OMX_ErrorInsufficientResources; goto EXIT; } Exynos_OSAL_Memset(pExynosOutputPort->extendBufferHeader, 0, sizeof(EXYNOS_OMX_BUFFERHEADERTYPE) * MAX_BUFFER_NUM); pExynosOutputPort->bufferStateAllocate = Exynos_OSAL_Malloc(sizeof(OMX_U32) * MAX_BUFFER_NUM); if (pExynosOutputPort->bufferStateAllocate == NULL) { Exynos_OSAL_Free(pExynosOutputPort->extendBufferHeader); pExynosOutputPort->extendBufferHeader = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->unloadedResource); pExynosInputPort->unloadedResource = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->loadedResource); pExynosInputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; ret = OMX_ErrorInsufficientResources; goto EXIT; } Exynos_OSAL_Memset(pExynosOutputPort->bufferStateAllocate, 0, sizeof(OMX_U32) * MAX_BUFFER_NUM); pExynosOutputPort->bufferSemID = NULL; pExynosOutputPort->assignedBufferNum = 0; pExynosOutputPort->portState = OMX_StateMax; pExynosOutputPort->bIsPortFlushed = OMX_FALSE; pExynosOutputPort->bIsPortDisabled = OMX_FALSE; pExynosOutputPort->tunneledComponent = NULL; pExynosOutputPort->tunneledPort = 0; pExynosOutputPort->tunnelBufferNum = 0; pExynosOutputPort->bufferSupplier = OMX_BufferSupplyUnspecified; pExynosOutputPort->tunnelFlags = 0; ret = Exynos_OSAL_SemaphoreCreate(&pExynosOutputPort->loadedResource); if (ret != OMX_ErrorNone) { Exynos_OSAL_Free(pExynosOutputPort->bufferStateAllocate); pExynosOutputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosOutputPort->extendBufferHeader); pExynosOutputPort->extendBufferHeader = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->unloadedResource); pExynosInputPort->unloadedResource = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->loadedResource); pExynosInputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; goto EXIT; } ret = Exynos_OSAL_SemaphoreCreate(&pExynosOutputPort->unloadedResource); if (ret != OMX_ErrorNone) { Exynos_OSAL_SemaphoreTerminate(pExynosOutputPort->loadedResource); pExynosOutputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosOutputPort->bufferStateAllocate); pExynosOutputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosOutputPort->extendBufferHeader); pExynosOutputPort->extendBufferHeader = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->unloadedResource); pExynosInputPort->unloadedResource = NULL; Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->loadedResource); pExynosInputPort->loadedResource = NULL; Exynos_OSAL_Free(pExynosInputPort->bufferStateAllocate); pExynosInputPort->bufferStateAllocate = NULL; Exynos_OSAL_Free(pExynosInputPort->extendBufferHeader); pExynosInputPort->extendBufferHeader = NULL; Exynos_OSAL_Free(pExynosPort); pExynosPort = NULL; goto EXIT; } INIT_SET_SIZE_VERSION(&pExynosOutputPort->portDefinition, OMX_PARAM_PORTDEFINITIONTYPE); pExynosOutputPort->portDefinition.nPortIndex = OUTPUT_PORT_INDEX; pExynosOutputPort->portDefinition.eDir = OMX_DirOutput; pExynosOutputPort->portDefinition.nBufferCountActual = 0; pExynosOutputPort->portDefinition.nBufferCountMin = 0; pExynosOutputPort->portDefinition.nBufferSize = 0; pExynosOutputPort->portDefinition.bEnabled = OMX_FALSE; pExynosOutputPort->portDefinition.bPopulated = OMX_FALSE; pExynosOutputPort->portDefinition.eDomain = OMX_PortDomainMax; pExynosOutputPort->portDefinition.bBuffersContiguous = OMX_FALSE; pExynosOutputPort->portDefinition.nBufferAlignment = 0; pExynosOutputPort->markType.hMarkTargetComponent = NULL; pExynosOutputPort->markType.pMarkData = NULL; pExynosOutputPort->exceptionFlag = GENERAL_STATE; pExynosComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE; pExynosComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE; pExynosComponent->checkTimeStamp.startTimeStamp = 0; pExynosComponent->checkTimeStamp.nStartFlags = 0x0; pOMXComponent->EmptyThisBuffer = &Exynos_OMX_EmptyThisBuffer; pOMXComponent->FillThisBuffer = &Exynos_OMX_FillThisBuffer; ret = OMX_ErrorNone; EXIT: FunctionOut(); return ret; }