summaryrefslogtreecommitdiffstats
path: root/domx
diff options
context:
space:
mode:
authorLakshman Gowda <lakshman79@ti.com>2011-08-23 20:58:25 -0700
committerIliyan Malchev <malchev@google.com>2011-08-30 19:42:15 -0700
commit9e964f98a366c756b96a97809b31579fdcc43e97 (patch)
treed98e40b36a537dbf0609f20b8fc783193163451f /domx
parente5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9 (diff)
downloadhardware_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-xdomx/domx/omx_proxy_common.h4
-rw-r--r--domx/domx/omx_proxy_common/src/omx_proxy_common.c14
-rwxr-xr-xdomx/omx_core/inc/OMX_TI_IVCommon.h15
-rwxr-xr-xdomx/omx_core/inc/OMX_TI_Index.h3
-rw-r--r--domx/omx_proxy_component/Android.mk2
-rwxr-xr-xdomx/omx_proxy_component/omx_video_dec/src/omx_proxy_videodec.c79
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: