if ((pVideoDec->bDRMPlayerMode == OMX_TRUE) &&
(nPortIndex == INPUT_PORT_INDEX)) {
mem_type = SECURE_MEMORY;
+ } else if (pExynosPort->bNeedContigMem == OMX_TRUE) {
+ mem_type = CONTIG_MEMORY;
} else if ((nPortIndex == OUTPUT_PORT_INDEX) &&
(pExynosPort->bufferProcessType & BUFFER_SHARE)) {
mem_type = NORMAL_MEMORY;
}
break;
#endif
+ case OMX_IndexVendorNeedContigMemory:
+ {
+ EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE *pPortMemType = (EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE *)ComponentParameterStructure;
+ OMX_U32 nPortIndex = pPortMemType->nPortIndex;
+ EXYNOS_OMX_BASEPORT *pExynosPort;
+
+ if (nPortIndex >= pExynosComponent->portParam.nPorts) {
+ ret = OMX_ErrorBadPortIndex;
+ goto EXIT;
+ }
+
+ ret = Exynos_OMX_Check_SizeVersion(pPortMemType, sizeof(EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE));
+ if (ret != OMX_ErrorNone)
+ goto EXIT;
+
+ pExynosPort = &pExynosComponent->pExynosPort[nPortIndex];
+
+ pPortMemType->bNeedContigMem = pExynosPort->bNeedContigMem;
+ }
+ break;
default:
{
ret = Exynos_OMX_GetParameter(hComponent, nParamIndex, ComponentParameterStructure);
}
break;
#endif
+ case OMX_IndexVendorNeedContigMemory:
+ {
+ EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE *pPortMemType = (EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE *)ComponentParameterStructure;
+ OMX_U32 nPortIndex = pPortMemType->nPortIndex;
+ EXYNOS_OMX_BASEPORT *pExynosPort;
+
+ if (nPortIndex >= pExynosComponent->portParam.nPorts) {
+ ret = OMX_ErrorBadPortIndex;
+ goto EXIT;
+ }
+
+ ret = Exynos_OMX_Check_SizeVersion(pPortMemType, sizeof(EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE));
+ if (ret != OMX_ErrorNone)
+ goto EXIT;
+
+ pExynosPort = &pExynosComponent->pExynosPort[nPortIndex];
+
+ if ((pExynosComponent->currentState != OMX_StateLoaded) && (pExynosComponent->currentState != OMX_StateWaitForResources)) {
+ if (pExynosPort->portDefinition.bEnabled == OMX_TRUE) {
+ ret = OMX_ErrorIncorrectStateOperation;
+ goto EXIT;
+ }
+ }
+
+ pExynosPort->bNeedContigMem = pPortMemType->bNeedContigMem;
+ }
+ break;
default:
{
ret = Exynos_OMX_SetParameter(hComponent, nIndex, ComponentParameterStructure);
goto EXIT;
}
+ if (Exynos_OSAL_Strcmp(cParameterName, EXYNOS_INDEX_PARAM_NEED_CONTIG_MEMORY) == 0) {
+ *pIndexType = (OMX_INDEXTYPE) OMX_IndexVendorNeedContigMemory;
+ ret = OMX_ErrorNone;
+ goto EXIT;
+ }
+
#ifdef USE_ANB
if (Exynos_OSAL_Strcmp(cParameterName, EXYNOS_INDEX_PARAM_ENABLE_ANB) == 0)
*pIndexType = (OMX_INDEXTYPE) OMX_IndexParamEnableAndroidBuffers;