diff options
author | Lakshman Gowda <lakshman79@ti.com> | 2011-08-23 20:58:25 -0700 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2011-08-30 19:42:15 -0700 |
commit | 9e964f98a366c756b96a97809b31579fdcc43e97 (patch) | |
tree | d98e40b36a537dbf0609f20b8fc783193163451f /domx | |
parent | e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9 (diff) | |
download | hardware_ti_omap4xxx-9e964f98a366c756b96a97809b31579fdcc43e97.zip hardware_ti_omap4xxx-9e964f98a366c756b96a97809b31579fdcc43e97.tar.gz hardware_ti_omap4xxx-9e964f98a366c756b96a97809b31579fdcc43e97.tar.bz2 |
DOMX : provide extension index support for gralloc buffer usage flags query
The Stagefright queries DOMX in order to allocate buffers from gralloc with
correct usage flags.
Change-Id: I85dc7bd6bf6b3008a12470bb797df0cce8a370e0
Signed-off-by: Lakshman Gowda <lakshman79@ti.com>
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'domx')
-rwxr-xr-x | domx/domx/omx_proxy_common.h | 4 | ||||
-rw-r--r-- | domx/domx/omx_proxy_common/src/omx_proxy_common.c | 14 | ||||
-rwxr-xr-x | domx/omx_core/inc/OMX_TI_IVCommon.h | 15 | ||||
-rwxr-xr-x | domx/omx_core/inc/OMX_TI_Index.h | 3 | ||||
-rw-r--r-- | domx/omx_proxy_component/Android.mk | 2 | ||||
-rwxr-xr-x | domx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c | 79 |
6 files changed, 102 insertions, 15 deletions
diff --git a/domx/domx/omx_proxy_common.h b/domx/domx/omx_proxy_common.h index 84041c7..519ae23 100755 --- a/domx/domx/omx_proxy_common.h +++ b/domx/domx/omx_proxy_common.h @@ -103,8 +103,10 @@ extern "C" OMX_ErrorBadParameter, "Incorrect nSize"); \ PROXY_require(((((_sName_ *)_pStruct_)->nVersion.s.nVersionMajor == \ OMX_VER_MAJOR) && \ + ((((_sName_ *)_pStruct_)->nVersion.s.nVersionMinor == \ + OMX_VER_MINOR) || \ (((_sName_ *)_pStruct_)->nVersion.s.nVersionMinor == \ - OMX_VER_MINOR)), \ + 0))), \ OMX_ErrorVersionMismatch, NULL); \ } while(0) diff --git a/domx/domx/omx_proxy_common/src/omx_proxy_common.c b/domx/domx/omx_proxy_common/src/omx_proxy_common.c index 040e67e..28f92ff 100644 --- a/domx/domx/omx_proxy_common/src/omx_proxy_common.c +++ b/domx/domx/omx_proxy_common/src/omx_proxy_common.c @@ -1342,8 +1342,8 @@ OMX_ERRORTYPE PROXY_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, */ /* ===========================================================================*/ OMX_ERRORTYPE __PROXY_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct, - OMX_PTR pLocBufNeedMap) + OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct, + OMX_PTR pLocBufNeedMap) { OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone; RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; @@ -1352,21 +1352,21 @@ OMX_ERRORTYPE __PROXY_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); PROXY_assert((hComp->pComponentPrivate != NULL), - OMX_ErrorBadParameter, NULL); + OMX_ErrorBadParameter, NULL); pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; DOMX_ENTER - ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", - hComponent, pCompPrv, nParamIndex, pParamStruct); + ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", + hComponent, pCompPrv, nParamIndex, pParamStruct); eRPCError = RPC_GetParameter(pCompPrv->hRemoteComp, nParamIndex, pParamStruct, - pLocBufNeedMap, &eCompReturn); + pLocBufNeedMap, &eCompReturn); PROXY_checkRpcError(); - EXIT: +EXIT: DOMX_EXIT("eError: %d index: 0x%x", eError, nParamIndex); return eError; } diff --git a/domx/omx_core/inc/OMX_TI_IVCommon.h b/domx/omx_core/inc/OMX_TI_IVCommon.h index d16120e..ebd5b2f 100755 --- a/domx/omx_core/inc/OMX_TI_IVCommon.h +++ b/domx/omx_core/inc/OMX_TI_IVCommon.h @@ -2541,6 +2541,21 @@ typedef struct OMX_TI_PARAMUSENATIVEBUFFER { OMX_BOOL bEnable; } OMX_TI_PARAMUSENATIVEBUFFER; +/** +* A pointer to this struct is passed to OMX_GetParameter when the extension +* index for the 'OMX.google.android.index.getAndroidNativeBufferUsage' +* extension is given. +* The corresponding extension Index is OMX_TI_IndexAndroidNativeBufferUsage. +* The usage bits returned from this query will be used to allocate the Gralloc +* buffers that get passed to the useAndroidNativeBuffer command. +*/ +typedef struct OMX_TI_PARAMNATIVEBUFFERUSAGE { + OMX_U32 nSize; + OMX_VERSIONTYPE nVersion; + OMX_U32 nPortIndex; + OMX_U32 nUsage; +} OMX_TI_PARAMNATIVEBUFFERUSAGE; + /*==========================================================================*/ /*! @brief OMX_TI_PARAM_ENHANCEDPORTRECONFIG : Suport added to new port reconfig usage diff --git a/domx/omx_core/inc/OMX_TI_Index.h b/domx/omx_core/inc/OMX_TI_Index.h index 3cc5a92..5aec517 100755 --- a/domx/omx_core/inc/OMX_TI_Index.h +++ b/domx/omx_core/inc/OMX_TI_Index.h @@ -223,7 +223,8 @@ typedef enum OMX_TI_INDEXTYPE { OMX_TI_IndexParamZslHistoryLen, /**< reference: OMX_TI_PARAM_ZSLHISTORYLENTYPE */ OMX_TI_IndexConfigZslDelay, /**< reference: OMX_TI_CONFIG_ZSLDELAYTYPE */ OMX_TI_IndexParamMetaDataBufferInfo, /***< reference: OMX_TI_PARAM_METADATABUFFERINFO */ - OMX_TI_IndexConfigZslFrameSelectMethod /**< reference: OMX_TI_CONFIG_ZSLFRAMESELECTMETHODTYPE */ + OMX_TI_IndexConfigZslFrameSelectMethod, /**< reference: OMX_TI_CONFIG_ZSLFRAMESELECTMETHODTYPE */ + OMX_TI_IndexAndroidNativeBufferUsage /**< reference: OMX_TI_IndexAndroidNativeBufferUsage */ } OMX_TI_INDEXTYPE; diff --git a/domx/omx_proxy_component/Android.mk b/domx/omx_proxy_component/Android.mk index 18364c3..87ebe5f 100644 --- a/domx/omx_proxy_component/Android.mk +++ b/domx/omx_proxy_component/Android.mk @@ -24,7 +24,7 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_CFLAGS += -DLINUX -DTMS32060 -D_DB_TIOMAP -DSYSLINK_USE_SYSMGR -DSYSLINK_USE_LOADER LOCAL_CFLAGS += -D_Android -DSET_STRIDE_PADDING_FROM_PROXY -DANDROID_QUIRK_CHANGE_PORT_VALUES -DUSE_ENHANCED_PORTRECONFIG -LOCAL_CFLAGS += -DANDROID_QUIRK_LOCK_BUFFER -DUSE_ION +LOCAL_CFLAGS += -DANDROID_QUIRK_LOCK_BUFFER -DUSE_ION -DENABLE_GRALLOC_BUFFERS LOCAL_MODULE_TAGS:= optional LOCAL_SRC_FILES:= omx_video_dec/src/omx_proxy_videodec.c diff --git a/domx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c b/domx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c index 8e1fc16..618daac 100755 --- a/domx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c +++ b/domx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c @@ -91,6 +91,9 @@ OMX_ERRORTYPE PROXY_VIDDEC_EventHandler(OMX_HANDLETYPE hComponent, #endif //SET_STRIDE_PADDING_FROM_PROXY +OMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType); + #ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES OMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, @@ -185,6 +188,8 @@ OMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent) pHandle->SetParameter = PROXY_VIDDEC_SetParameter; pHandle->GetParameter = PROXY_VIDDEC_GetParameter; #endif + pHandle->GetExtensionIndex = PROXY_VIDDEC_GetExtensionIndex; + #ifdef SET_STRIDE_PADDING_FROM_PROXY pHandle->SendCommand = PROXY_VIDDEC_SendCommand; pComponentPrivate->proxyEventHandler = PROXY_VIDDEC_EventHandler; @@ -244,6 +249,53 @@ OMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent) return eError; } +/* ===========================================================================*/ +/** + * @name PROXY_VIDDEC_GetExtensionIndex() + * @brief + * @param void + * @return OMX_ErrorNone = Successful + * @sa TBD + * + */ +/* ===========================================================================*/ +OMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType) +{ + OMX_ERRORTYPE eError = OMX_ErrorNone; + PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; + OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; + + PROXY_require((hComp->pComponentPrivate != NULL), OMX_ErrorBadParameter, NULL); + PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL); + PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL); + + DOMX_ENTER("hComponent = %p, cParameterName = %p", hComponent, cParameterName); + +#ifdef ENABLE_GRALLOC_BUFFERS + // Ensure that String length is not greater than Max allowed length + PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL); + + if (strcmp(cParameterName, "OMX.google.android.index.getAndroidNativeBufferUsage") == 0) + { + *pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexAndroidNativeBufferUsage; + } + else + { + eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); + PROXY_assert(eError == OMX_ErrorNone, + eError," Error in PROXY_GetExtensionIndex"); + } +#else + eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); + PROXY_assert(eError == OMX_ErrorNone, + eError," Error in PROXY_GetExtensionIndex"); +#endif + EXIT: + DOMX_EXIT("eError: %d", eError); + return eError; +} + #ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES /* ===========================================================================*/ @@ -262,8 +314,9 @@ OMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, OMX_ERRORTYPE eError = OMX_ErrorNone; PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; - OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; - OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; + OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL; + OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = NULL; + OMX_TI_PARAMNATIVEBUFFERUSAGE *pUsage = NULL; PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); PROXY_assert((hComp->pComponentPrivate != NULL), @@ -275,12 +328,26 @@ OMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", hComponent, pCompPrv, nParamIndex, pParamStruct); +#ifdef ENABLE_GRALLOC_BUFFERS + if( nParamIndex == OMX_TI_IndexAndroidNativeBufferUsage) + { + pUsage = (OMX_TI_PARAMNATIVEBUFFERUSAGE*)pParamStruct; + if(pCompPrv->proxyPortBuffers[pUsage->nPortIndex].proxyBufferType == GrallocPointers) + { + PROXY_CHK_VERSION(pParamStruct, OMX_TI_PARAMNATIVEBUFFERUSAGE); + pUsage->nUsage = GRALLOC_USAGE_HW_RENDER; + goto EXIT; + } + } +#endif eError = PROXY_GetParameter(hComponent,nParamIndex, pParamStruct); PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy GetParameter"); if( nParamIndex == OMX_IndexParamPortDefinition) { + PROXY_CHK_VERSION(pParamStruct, OMX_PARAM_PORTDEFINITIONTYPE); + pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) { if(pCompPrv->proxyPortBuffers[pPortDef->nPortIndex].proxyBufferType == GrallocPointers) @@ -295,9 +362,11 @@ OMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, } else if ( nParamIndex == OMX_IndexParamVideoPortFormat) { + PROXY_CHK_VERSION(pParamStruct, OMX_VIDEO_PARAM_PORTFORMATTYPE); + pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; if(pPortParam->eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) - { - if(pCompPrv->proxyPortBuffers[pPortDef->nPortIndex].proxyBufferType == GrallocPointers) + { + if(pCompPrv->proxyPortBuffers[pPortParam->nPortIndex].proxyBufferType == GrallocPointers) { pPortParam->eColorFormat = HAL_NV12_PADDED_PIXEL_FORMAT; } @@ -305,7 +374,7 @@ OMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, { pPortParam->eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; } - } + } } EXIT: |