155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* 255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * Copyright (c) 2010, Texas Instruments Incorporated 355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * All rights reserved. 455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * Redistribution and use in source and binary forms, with or without 655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * modification, are permitted provided that the following conditions 755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * are met: 855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * * Redistributions of source code must retain the above copyright 1055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * notice, this list of conditions and the following disclaimer. 1155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 1255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * * Redistributions in binary form must reproduce the above copyright 1355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * notice, this list of conditions and the following disclaimer in the 1455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * documentation and/or other materials provided with the distribution. 1555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 1655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * * Neither the name of Texas Instruments Incorporated nor the names of 1755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * its contributors may be used to endorse or promote products derived 1855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * from this software without specific prior written permission. 1955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 2055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 2255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 3055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 3255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 3355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/** 34806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * @file omx_proxy_mpeg4enc.c 3555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * This file contains methods that provides the functionality for 36806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * the OpenMAX1.1 DOMX Framework Proxy component. 3755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ********************************************************************************************* 3855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal This is the proxy specific wrapper that passes the component name to the generic proxy init() 3955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal The proxy wrapper also does some runtime/static time onfig on per proxy basis 4055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal This is a thin wrapper that is called when componentiit() of the proxy is called 4155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal static OMX_ERRORTYPE PROXY_Wrapper_init(OMX_HANDLETYPE hComponent, OMX_PTR pAppData); 4255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal this layer gets called first whenever a proxy's get handle is called 4355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ************************************************************************************************ 4455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @path WTSD_DucatiMMSW\omx\omx_il_1_x\omx_proxy_component\src 4555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 4655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @rev 1.0 4755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 4855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 4955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/*============================================================== 5055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal *! Revision History 5155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal *! ============================ 52806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * 31-August-2011 Lakshman N : Support for color conv at encoder 53806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * input port 54806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * 5555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal *! 20-August-2010 Sarthak Aggarwal sarthak@ti.com: Initial Version 5655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal *================================================================*/ 5755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 5855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/****************************************************************** 5955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * INCLUDE FILES 6055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ******************************************************************/ 61806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 6255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <stdio.h> 6355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <string.h> 6455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <assert.h> 6555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include "omx_proxy_common.h" 6655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <timm_osal_interfaces.h> 6755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include "OMX_TI_IVCommon.h" 6855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include "OMX_TI_Video.h" 6955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include "OMX_TI_Index.h" 7055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 7155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <MetadataBufferType.h> 7255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ENABLE_GRALLOC_BUFFER 7355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include "native_handle.h" 7455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <hal_public.h> 7555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#include <VideoMetadata.h> 7655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 7755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 7855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.MPEG4E" 7955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* needs to be specific for every configuration wrapper */ 8055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 8155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#define OMX_MPEG4E_INPUT_PORT 0 8255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#define LINUX_PAGE_SIZE 4096 8355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 8455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 859a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal/* Opaque color format requires below quirks to be enabled 869a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal * ENABLE_GRALLOC_BUFFER 879a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal * ANDROID_QUIRK_CHANGE_PORT_VALUES 889a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal */ 8955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 9055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 9155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 9255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 9355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 9455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 9555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 9655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 97806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 98806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define OMX_MPEG4E_NUM_INTERNAL_BUF (8) 99806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define HAL_PIXEL_FORMAT_TI_NV12 (0x100) 100806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 101806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define COLORCONVERT_MAX_SUB_BUFFERS (3) 102806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 103806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define COLORCONVERT_BUFTYPE_VIRTUAL (0x0) 104806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define COLORCONVERT_BUFTYPE_ION (0x1) 105806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#define COLORCONVERT_BUFTYPE_GRALLOCOPAQUE (0x2) 106806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 1079a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwalint COLORCONVERT_open(void **hCC, PROXY_COMPONENT_PRIVATE *pCompPrv); 108806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdaint COLORCONVERT_PlatformOpaqueToNV12(void *hCC, void *pSrc[], 109806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda void *pDst[], int nWidth, 110806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nHeight, int nStride, 111806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nSrcBufType, int nDstBufType); 1129a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwalint COLORCONVERT_close(void *hCC,PROXY_COMPONENT_PRIVATE *pCompPrv); 113806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 114806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_MPEG4E_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent, 115806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_IN OMX_U32 nPortIndex, 116806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_IN OMX_PTR pAppPrivate, OMX_IN OMX_U32 nSizeBytes); 117806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 118806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_MPEG4E_FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, 119806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_BUFFERHEADERTYPE * pBufferHdr); 120806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 121806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_MPEG4E_ComponentDeInit(OMX_HANDLETYPE hComponent); 122806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 123806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdatypedef struct _OMX_PROXY_MPEG4E_PRIVATE 124806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 125806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PTR hBufPipe; 126806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_BOOL bAndroidOpaqueFormat; 127806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PTR hCC; 1289a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal IMG_native_handle_t* gralloc_handle[OMX_MPEG4E_NUM_INTERNAL_BUF]; 129806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_S32 nCurBufIndex; 1309a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal alloc_device_t* mAllocDev; 131806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda}OMX_PROXY_MPEG4E_PRIVATE; 132806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 133806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 13455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 13555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType); 13655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 13755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_EmptyThisBuffer(OMX_HANDLETYPE hComponent, 13855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_BUFFERHEADERTYPE * pBufferHdr); 13955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 14055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent) 14155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal{ 14255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ERRORTYPE eError = OMX_ErrorNone; 14355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_COMPONENTTYPE *pHandle = NULL; 14455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL; 14555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle = (OMX_COMPONENTTYPE *) hComponent; 14655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_TI_PARAM_ENHANCEDPORTRECONFIG tParamStruct; 147806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 148806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 149806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 150806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 151806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 15255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_ENTER(""); 15355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 15455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME); 15555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 15655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle->pComponentPrivate = 15755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal (PROXY_COMPONENT_PRIVATE *) 15855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE, 15955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 0, TIMMOSAL_MEM_SEGMENT_INT); 16055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 16155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(pHandle->pComponentPrivate != NULL, 16255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorInsufficientResources, 16355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE"); 16455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 16555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pComponentPrivate = 16655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 16755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 16855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Memset(pComponentPrivate, 0, 16955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sizeof(PROXY_COMPONENT_PRIVATE)); 17055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 17155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pComponentPrivate->cCompName = 17255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 17355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 17455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 17555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(pComponentPrivate->cCompName != NULL, 17655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorInsufficientResources, 17755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal " Error in Allocating space for proxy component table"); 17855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 179806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 180806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pComponentPrivate->pCompProxyPrv = 181806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda (OMX_PROXY_MPEG4E_PRIVATE *) 182806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_Malloc(sizeof(OMX_PROXY_MPEG4E_PRIVATE), TIMM_OSAL_TRUE, 183806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 0, TIMMOSAL_MEM_SEGMENT_INT); 184806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 185806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(pComponentPrivate->pCompProxyPrv != NULL, 186806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ErrorInsufficientResources, 187806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda " Could not allocate proxy component private"); 188806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 189806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_Memset(pComponentPrivate->pCompProxyPrv, 0, 190806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_PROXY_MPEG4E_PRIVATE)); 191806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 192806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pComponentPrivate->pCompProxyPrv; 193806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 194806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* Create Pipe of for encoder input buffers */ 195806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eOSALStatus = TIMM_OSAL_CreatePipe(&pProxy->hBufPipe, sizeof(OMX_U32), 196806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_MPEG4E_NUM_INTERNAL_BUF, 1); 197806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, 198806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ErrorInsufficientResources, 199806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda "Pipe creation failed"); 200806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 201806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 202806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 20355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal // Copying component Name - this will be picked up in the proxy common 20455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH, 20555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorInvalidComponentName, 20655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal "Length of component name is longer than the max allowed"); 20755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 20855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal strlen(COMPONENT_NAME) + 1); 20955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 21055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError = OMX_ProxyCommonInit(hComponent); // Calling Proxy Common Init() 21155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 21255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle->SetParameter = LOCAL_PROXY_MPEG4E_SetParameter; 21355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle->GetParameter = LOCAL_PROXY_MPEG4E_GetParameter; 21455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 215806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pHandle->ComponentDeInit = LOCAL_PROXY_MPEG4E_ComponentDeInit; 216806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pHandle->FreeBuffer = LOCAL_PROXY_MPEG4E_FreeBuffer; 217806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pHandle->AllocateBuffer = LOCAL_PROXY_MPEG4E_AllocateBuffer; 218806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 21955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pComponentPrivate->IsLoadedState = OMX_TRUE; 22055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle->EmptyThisBuffer = LOCAL_PROXY_MPEG4E_EmptyThisBuffer; 22155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pHandle->GetExtensionIndex = LOCAL_PROXY_MPEG4E_GetExtensionIndex; 22255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 223806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda EXIT: 22455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if (eError != OMX_ErrorNone) 22555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 22655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Error in Initializing Proxy"); 227806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 228806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 229806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(pProxy->hBufPipe != NULL) 230806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 231806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_DeletePipe(pProxy->hBufPipe); 232806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy->hBufPipe = NULL; 233806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 234806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 235806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(pComponentPrivate->pCompProxyPrv != NULL) 236806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 237806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_Free(pComponentPrivate->pCompProxyPrv); 238806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pComponentPrivate->pCompProxyPrv = NULL; 239806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = NULL; 240806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 241806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 24255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if (pComponentPrivate->cCompName != NULL) 24355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 24455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Free(pComponentPrivate->cCompName); 24555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pComponentPrivate->cCompName = NULL; 24655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 24755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if (pComponentPrivate != NULL) 24855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 24955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal TIMM_OSAL_Free(pComponentPrivate); 25055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pComponentPrivate = NULL; 25155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 25255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 25355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return eError; 25455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal} 25555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 25655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 25755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 25855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 25955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/** 26055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @name PROXY_MPEG4E_GetParameter() 26155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @brief 26255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @param void 26355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @return OMX_ErrorNone = Successful 26455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @sa TBD 26555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 26655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 26755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 26855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 26955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct) 27055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal{ 27155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ERRORTYPE eError = OMX_ErrorNone; 27255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 27355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 274806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL; 275806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = NULL; 276806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 277806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 278806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 27955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 28055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 28155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert((hComp->pComponentPrivate != NULL), 28255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorBadParameter, NULL); 28355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 28455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 285806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 286806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 287806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 28855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 28955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_ENTER 29055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 29155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal hComponent, pCompPrv, nParamIndex, pParamStruct); 29255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 29355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError = PROXY_GetParameter(hComponent,nParamIndex, pParamStruct); 29455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 295806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(nParamIndex == OMX_IndexParamPortDefinition) 29655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 297806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 298806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 29955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) 30055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 301806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 302806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(pProxy->bAndroidOpaqueFormat == OMX_TRUE) 303806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 304806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_COLOR_FormatAndroidOpaque; 305806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 306806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else 307806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 308806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 309806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 310806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 31155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 31255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 313806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else if (nParamIndex == OMX_IndexParamVideoPortFormat) 31455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 315806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 316806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 317806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if((eError == OMX_ErrorNone) && 318806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda (pPortParam->eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar)) 31955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 32055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pPortParam->eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 32155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 322806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 323806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else if ((eError == OMX_ErrorNoMore) && (pPortParam->nIndex == 1)) 324806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 325806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* HACK:Remote OMX-MPEG4E supports only 1 color format (index 0). The 326806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * OMX_COLOR_FormatAndroidOpaque is supported only at the proxy. 327806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * Call GetParameter() to fill in defaults for parameters and 328806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * override color format and index for the additional 329806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda * OMX_COLOR_FormatAndroidOpaque support*/ 330806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortParam->nIndex = 0; 331806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = PROXY_GetParameter(hComponent, nParamIndex, pParamStruct); 332806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortParam->nIndex = 1; 333806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortParam->eColorFormat = OMX_COLOR_FormatAndroidOpaque; 334806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = OMX_ErrorNone; 335806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 336806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 33755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 33855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 339806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert((eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore), 340806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError," Error in Proxy GetParameter"); 341806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 34255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal EXIT: 34355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_EXIT("eError: %d", eError); 34455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return eError; 34555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal} 34655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 34755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 34855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/** 34955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @name PROXY_MPEG4E_SetParameter() 35055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @brief 35155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @param void 35255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @return OMX_ErrorNone = Successful 35355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @sa TBD 35455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 35555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 35655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 35755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 35855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct) 35955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal{ 36055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ERRORTYPE eError = OMX_ErrorNone; 36155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 36255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 36355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 36455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParams = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 36555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_VIDEO_STOREMETADATAINBUFFERSPARAMS* pStoreMetaData = (OMX_VIDEO_STOREMETADATAINBUFFERSPARAMS *) pParamStruct; 36655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_TI_PARAM_BUFFERPREANNOUNCE tParamSetNPA; 36755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_PARAM_PORTDEFINITIONTYPE sPortDef; 368806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 369806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 370806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 371806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 372806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_ENTER 373806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 374806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda hComponent, pCompPrv, nParamIndex, pParamStruct); 37555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 37655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 37755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require((hComp->pComponentPrivate != NULL), 37855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorBadParameter, NULL); 37955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 38055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 381806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 382806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 383806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 384806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 38555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(nParamIndex == OMX_IndexParamPortDefinition) 38655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 38755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(pPortDef->format.video.eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar) 38855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 38955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 39055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 391806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 392806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatAndroidOpaque) 393806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 3949a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal if(COLORCONVERT_open(&pProxy->hCC,pCompPrv) != 0) 395806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 396806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(0, OMX_ErrorInsufficientResources, 397806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda "Failed to open Color converting service"); 398806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 399806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy->bAndroidOpaqueFormat = OMX_TRUE; 400806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 401806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 402806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 40355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 40455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal else if(nParamIndex == OMX_IndexParamVideoPortFormat) 40555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 40655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(pPortParams->eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar) 40755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 40855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 40955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 410806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 411806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else if(pPortParams->eColorFormat == OMX_COLOR_FormatAndroidOpaque) 412806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 4139a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal if(COLORCONVERT_open(&pProxy->hCC,pCompPrv) != 0) 414806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 415806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(0, OMX_ErrorInsufficientResources, 416806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda "Failed to open Color converting service"); 417806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 418806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy->bAndroidOpaqueFormat = OMX_TRUE; 419806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 420806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 421806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 42255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 42355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal else if(nParamIndex == (OMX_INDEXTYPE) OMX_TI_IndexEncoderStoreMetadatInBuffers) 42455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 42555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Moving to Metadatamode"); 42655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if (pStoreMetaData->nPortIndex == OMX_MPEG4E_INPUT_PORT && pStoreMetaData->bStoreMetaData == OMX_TRUE) 42755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 42855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nSize = sizeof(OMX_TI_PARAM_BUFFERPREANNOUNCE); 42955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 43055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nVersion.s.nVersionMinor = OMX_VER_MINOR; 43155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nVersion.s.nRevision = 0x0; 43255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nVersion.s.nStep = 0x0; 43355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.nPortIndex = OMX_MPEG4E_INPUT_PORT; 43455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal tParamSetNPA.bEnabled = OMX_TRUE; 43555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal //Call NPA on OMX encoder on ducati. 43655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_SetParameter(hComponent,OMX_TI_IndexParamBufferPreAnnouncement, &tParamSetNPA); 43755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pCompPrv->proxyPortBuffers[pStoreMetaData->nPortIndex].proxyBufferType = EncoderMetadataPointers; 43855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Moving to Metadatamode done"); 43955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 44055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal /*Initializing Structure */ 44155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 44255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 44355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR; 44455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nVersion.s.nRevision = 0x0; 44555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nVersion.s.nStep = 0x0; 44655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.nPortIndex = OMX_MPEG4E_INPUT_PORT; 44755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 44855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition, &sPortDef); 44955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy GetParameter for Port Def"); 45055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 45155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal sPortDef.format.video.nStride = LINUX_PAGE_SIZE; 45255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 45355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError = PROXY_SetParameter(hComponent,OMX_IndexParamPortDefinition, &sPortDef); 45455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 45555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy SetParameter for Port Def"); 45655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 45755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal goto EXIT; 45855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 45955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 46055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError = PROXY_SetParameter(hComponent, nParamIndex, pParamStruct); 46155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_assert(eError == OMX_ErrorNone, 46255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal eError," Error in Proxy SetParameter"); 46355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 46455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal EXIT: 46555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_EXIT("eError: %d", eError); 46655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return eError; 46755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal} 46855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 46955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 47055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 47155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 47255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 47355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/** 47455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @name PROXY_GetExtensionIndex() 47555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @brief 47655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @param void 47755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @return OMX_ErrorNone = Successful 47855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @sa TBD 47955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 48055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 48155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 48255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 48355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType) 48455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal{ 48555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ERRORTYPE eError = OMX_ErrorNone; 48655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 48755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_COMPONENTTYPE *hComp = hComponent; 48855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 48955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require((hComp->pComponentPrivate != NULL), 49055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorBadParameter, NULL); 49155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL); 49255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL); 49355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 49455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 49555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 49655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_ENTER("%s hComponent = %p, pCompPrv = %p, cParameterName = %s", 49755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal __FUNCTION__,hComponent, pCompPrv, cParameterName); 49855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 49955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal // Check for NULL Parameters 50055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require((cParameterName != NULL && pIndexType != NULL), 50155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ErrorBadParameter, NULL); 50255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 50355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal // Ensure that String length is not greater than Max allowed length 50455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL); 50555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 50655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(strcmp(cParameterName, "OMX.google.android.index.storeMetaDataInBuffers") == 0) 50755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 50855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal // If Index type is 2D Buffer Allocated Dimension 50955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal *pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexEncoderStoreMetadatInBuffers; 51055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal goto EXIT; 51155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 51255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 51355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); 51455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 51555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal EXIT: 51655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_EXIT("%s eError: %d",__FUNCTION__, eError); 51755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return eError; 51855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal} 51955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 52055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 52155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/** 52255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @name PROXY_MPEG4E_EmptyThisBuffer() 52355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @brief 52455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @param void 52555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @return OMX_ErrorNone = Successful 52655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * @sa TBD 52755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal * 52855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal */ 52955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal/* ===========================================================================*/ 53055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas KowtalOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_EmptyThisBuffer(OMX_HANDLETYPE hComponent, 53155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_BUFFERHEADERTYPE * pBufferHdr) 53255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal{ 53355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 53455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_ERRORTYPE eError = OMX_ErrorNone; 53555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_COMPONENT_PRIVATE *pCompPrv; 53655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 537cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal OMX_PTR pBufferOrig = pBufferHdr->pBuffer; 53855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_U32 nStride = 0, nNumLines = 0; 53970f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal OMX_PARAM_PORTDEFINITIONTYPE tParamStruct; 54070f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal OMX_U32 nFilledLen, nAllocLen; 541806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 542806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 543806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 544806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_U32 nBufIndex = 0, nSize=0, nRet=0; 545806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 54655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 54755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL); 54855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 54955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal NULL); 55055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE); 55155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 55255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 553806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 554806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 555806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 55655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 55770f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 55870f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 55970f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR; 56070f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nVersion.s.nRevision = 0x0; 56170f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nVersion.s.nStep = 0x0; 56270f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal tParamStruct.nPortIndex = OMX_MPEG4E_INPUT_PORT; 56370f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal 56470f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal eError = PROXY_GetParameter(hComponent, OMX_IndexParamPortDefinition, &tParamStruct); 56570f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal PROXY_require(eError == OMX_ErrorNone, OMX_ErrorBadParameter, "Error is Get Parameter for port def"); 56670f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal nFilledLen = pBufferHdr->nFilledLen; 56770f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal nAllocLen = pBufferHdr->nAllocLen; 56870f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal if(nFilledLen != 0) 56970f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal { 57070f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal pBufferHdr->nFilledLen = tParamStruct.nBufferSize; 57170f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal } 57270f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal pBufferHdr->nAllocLen = tParamStruct.nBufferSize; 57370f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal 57455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG 57555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ("%s hComponent=%p, pCompPrv=%p, nFilledLen=%d, nOffset=%d, nFlags=%08x", 57655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal __FUNCTION__,hComponent, pCompPrv, pBufferHdr->nFilledLen, 57755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferHdr->nOffset, pBufferHdr->nFlags); 57855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 57970f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal if( pCompPrv->proxyPortBuffers[OMX_MPEG4E_INPUT_PORT].proxyBufferType == EncoderMetadataPointers 58070f13fcd9afab8e2e2281fa52c3507ac93553d58Sarthak Aggarwal && nFilledLen != 0) 58155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 58255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_U32 *pTempBuffer; 58355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal OMX_U32 nMetadataBufferType; 58455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Passing meta data to encoder"); 58555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 58655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferOrig = pBufferHdr->pBuffer; 58755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 58855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pTempBuffer = (OMX_U32 *) (pBufferHdr->pBuffer); 58955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal nMetadataBufferType = *pTempBuffer; 59055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 59155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if(nMetadataBufferType == kMetadataBufferTypeCameraSource) 59255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 59355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ENABLE_GRALLOC_BUFFER 59455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal IMG_native_handle_t* pGrallocHandle; 59555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal video_metadata_t* pVideoMetadataBuffer; 59655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("MetadataBufferType is kMetadataBufferTypeCameraSource"); 59755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 59855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pVideoMetadataBuffer = (video_metadata_t*) ((OMX_U32 *)(pBufferHdr->pBuffer)); 59955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pGrallocHandle = (IMG_native_handle_t*) (pVideoMetadataBuffer->handle); 60055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Grallloc buffer recieved in metadata buffer 0x%x",pGrallocHandle ); 60155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 60255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferHdr->pBuffer = (OMX_U8 *)(pGrallocHandle->fd[0]); 60355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> 604806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pAuxBuf1 = (OMX_PTR) pGrallocHandle->fd[1]; 60555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("%s Gralloc=0x%x, Y-fd=%d, UV-fd=%d", __FUNCTION__, pGrallocHandle, 60655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pGrallocHandle->fd[0], pGrallocHandle->fd[1]); 60755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 60855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferHdr->nOffset = pVideoMetadataBuffer->offset; 60955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 61055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 61155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal else if(nMetadataBufferType == kMetadataBufferTypeGrallocSource) 61255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 61355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ENABLE_GRALLOC_BUFFER 61455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal IMG_native_handle_t* pGrallocHandle; 615806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda buffer_handle_t tBufHandle; 61655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("MetadataBufferType is kMetadataBufferTypeGrallocSource"); 61755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 61855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pTempBuffer++; 619806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tBufHandle = *((buffer_handle_t *)pTempBuffer); 620806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pGrallocHandle = (IMG_native_handle_t*) tBufHandle; 62155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("Grallloc buffer recieved in metadata buffer 0x%x",pGrallocHandle ); 62255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 62355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferHdr->pBuffer = (OMX_U8 *)(pGrallocHandle->fd[0]); 62455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> 625806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pAuxBuf1 = (OMX_PTR) pGrallocHandle->fd[1]; 62655bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal DOMX_DEBUG("%s Gralloc=0x%x, Y-fd=%d, UV-fd=%d", __FUNCTION__, pGrallocHandle, 62755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pGrallocHandle->fd[0], pGrallocHandle->fd[1]); 628806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 629806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if (pProxy->bAndroidOpaqueFormat) 630806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 631806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_DEBUG(" ++TIMM_OSAL_ReadFromPipe() "); 632806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* Dequeue NV12 buffer for encoder */ 633806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eOSALStatus = TIMM_OSAL_ReadFromPipe(pProxy->hBufPipe, &nBufIndex, 634806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_PTR), (TIMM_OSAL_U32 *)(&nSize), 635806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_SUSPEND); 636806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, OMX_ErrorBadParameter, NULL); 637806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 638806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* Get NV12 data after colorconv*/ 6399a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal nRet = COLORCONVERT_PlatformOpaqueToNV12(pProxy->hCC, (void **) &pGrallocHandle, (void **) &pProxy->gralloc_handle[nBufIndex], 640806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pGrallocHandle->iWidth, 641806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pGrallocHandle->iHeight, 642806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 4096, COLORCONVERT_BUFTYPE_GRALLOCOPAQUE, 6439a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal COLORCONVERT_BUFTYPE_GRALLOCOPAQUE ); 644806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(nRet != 0) 645806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 646806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &nBufIndex, 647806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 648806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(0, OMX_ErrorBadParameter, "Color conversion routine failed"); 649806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 650806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_DEBUG(" --COLORCONVERT_PlatformOpaqueToNV12() "); 651806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 652806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* Update pBufferHdr with NV12 buffers for OMX component */ 6539a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal pBufferHdr->pBuffer= pProxy->gralloc_handle[nBufIndex]->fd[0]; 6549a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1 = pProxy->gralloc_handle[nBufIndex]->fd[1]; 655806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 656806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 65755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#endif 65855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 65955bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal else 66055bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal { 66155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return OMX_ErrorBadParameter; 66255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 66355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal } 66455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 66555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal PROXY_EmptyThisBuffer(hComponent, pBufferHdr); 666806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 667806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if (pProxy->bAndroidOpaqueFormat) 668806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 669806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /*Write buffer to end of pipe for re-circulation for future ETB()*/ 670806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &nBufIndex, 671806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 672806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, OMX_ErrorBadParameter, "Pipe write failed"); 673806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 674806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 67555bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal if( pCompPrv->proxyPortBuffers[pBufferHdr->nInputPortIndex].proxyBufferType == EncoderMetadataPointers) 676cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal { 67755bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal pBufferHdr->pBuffer = pBufferOrig; 678cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal pBufferHdr->nFilledLen = nFilledLen; 679cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal pBufferHdr->nAllocLen = nAllocLen; 680cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal } 68155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal 68255bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal EXIT: 68355bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal return eError; 68455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal} 685806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 686806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 687806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_MPEG4E_AllocateBuffer(OMX_HANDLETYPE hComponent, 688806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_U32 nPortIndex, 689806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PTR pAppPrivate, OMX_U32 nSizeBytes) 690806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 691806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 692806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 693806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 694806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_CONFIG_RECTTYPE tParamRect; 695806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 696806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 697806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_DEBUG(" ++LOCAL_PROXY_MPEG4E_AllocateBuffer"); 6989a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal int err, nStride; 699806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 700806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 701806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda NULL); 702806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 703806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 704806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 705806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if((nPortIndex == OMX_MPEG4E_INPUT_PORT) && 706806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 707806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 708806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nSize = sizeof(OMX_CONFIG_RECTTYPE); 709806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nVersion.s.nVersionMajor = 1; 710806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nVersion.s.nVersionMinor = 1; 711806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nVersion.s.nRevision = 0; 712806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nVersion.s.nStep = 0; 713806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda tParamRect.nPortIndex = nPortIndex; 714806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 715806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = PROXY_GetParameter(hComponent, (OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension, &tParamRect); 7169a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy GetParameter from 2d index in allocate buffer"); 7179a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal 7189a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal err = pProxy->mAllocDev->alloc(pProxy->mAllocDev,(int) tParamRect.nWidth,(int) tParamRect.nHeight, 7199a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal (int) HAL_PIXEL_FORMAT_TI_NV12,(int) GRALLOC_USAGE_HW_RENDER, &(pProxy->gralloc_handle[pProxy->nCurBufIndex]), &nStride); 720806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 721806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 722806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = PROXY_AllocateBuffer(hComponent, ppBufferHdr, nPortIndex, 723806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pAppPrivate, nSizeBytes); 724806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman GowdaEXIT: 725806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if((nPortIndex == OMX_MPEG4E_INPUT_PORT) && 726806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 727806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 728806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(eError != OMX_ErrorNone) 729806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 7309a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal err = pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[pProxy->nCurBufIndex]); 731806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 732806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else 733806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 734806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /*Populate buffer to pipe*/ 735806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &pProxy->nCurBufIndex, 736806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 737806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy->nCurBufIndex++; 738806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 739806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 740806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_DEBUG(" --LOCAL_PROXY_MPEG4E_AllocateBuffer"); 741806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return eError; 742806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 743806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 744806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_MPEG4E_FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, 745806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_BUFFERHEADERTYPE * pBufferHdr) 746806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 747806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 748806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 749806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 750806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_U32 nBufIndex, nSize, nCount=0; 751806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 752806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 753806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 754806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda NULL); 755806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 756806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 757806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 758806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if((nPortIndex == OMX_MPEG4E_INPUT_PORT) && 759806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 760806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 761806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy->nCurBufIndex--; 762806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_require(pProxy->nCurBufIndex >=0, 763806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ErrorBadParameter, "Buffer index underflow"); 764806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 7659a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal if(pProxy->gralloc_handle[pProxy->nCurBufIndex]) 7669a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal { 7679a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[pProxy->nCurBufIndex]); 7689a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal pProxy->gralloc_handle[pProxy->nCurBufIndex] = NULL; 7699a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal } 770806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 771806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /*Clear the Bufindex pipe by dummy reads*/ 772806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_GetPipeReadyMessageCount(pProxy->hBufPipe, (TIMM_OSAL_U32 *)&nCount); 773806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(nCount) 774806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 775806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_ReadFromPipe(pProxy->hBufPipe, &nBufIndex, 776806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda sizeof(OMX_PTR), (TIMM_OSAL_U32 *)&nSize, TIMM_OSAL_NO_SUSPEND); 777806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 778806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 779806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 780806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = PROXY_FreeBuffer(hComponent, nPortIndex, pBufferHdr); 781806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 782806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman GowdaEXIT: 783806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return eError; 784806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 785806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 786806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman GowdaOMX_ERRORTYPE LOCAL_PROXY_MPEG4E_ComponentDeInit(OMX_HANDLETYPE hComponent) 787806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 788806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 789806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv; 790806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 791806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 792806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 793806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda OMX_U32 i; 794806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 795806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 796806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda NULL); 797806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 798806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 799806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 800b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy if(pProxy->hBufPipe != NULL) 801b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy { 802b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy eOSALStatus = TIMM_OSAL_DeletePipe(pProxy->hBufPipe); 803b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy pProxy->hBufPipe = NULL; 804b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy 805b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy if(eOSALStatus != TIMM_OSAL_ERR_NONE) 806b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy { 807b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy DOMX_ERROR("Pipe deletion failed"); 808b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy } 809b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy } 810b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy 811806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(pProxy->bAndroidOpaqueFormat == OMX_TRUE) 812806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 813806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda /* Cleanup internal buffers in pipe if not freed on FreeBuffer */ 814806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda for(i=0; i<OMX_MPEG4E_NUM_INTERNAL_BUF; i++) 815806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 816a9628ddb2c9889484e83678b6536d32996abc1f7Sarthak Aggarwal if(pProxy->gralloc_handle[i]) 817806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 818a9628ddb2c9889484e83678b6536d32996abc1f7Sarthak Aggarwal pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[i]); 819a9628ddb2c9889484e83678b6536d32996abc1f7Sarthak Aggarwal pProxy->gralloc_handle[i] = NULL; 820806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 821806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 822806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 8239a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal COLORCONVERT_close(pProxy->hCC,pCompPrv); 824a9628ddb2c9889484e83678b6536d32996abc1f7Sarthak Aggarwal pProxy->bAndroidOpaqueFormat = OMX_FALSE; 8259a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal 826806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if(pCompPrv->pCompProxyPrv != NULL) 827806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 828806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda TIMM_OSAL_Free(pCompPrv->pCompProxyPrv); 829806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda pCompPrv->pCompProxyPrv = NULL; 830806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 831806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 832806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 833806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda eError = PROXY_ComponentDeInit(hComponent); 834806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman GowdaEXIT: 835806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_EXIT("eError: %d", eError); 836806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return eError; 837806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 838806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 8399a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwalint COLORCONVERT_open(void **hCC, PROXY_COMPONENT_PRIVATE *pCompPrv) 840806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 841806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nErr = -1; 842806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda hw_module_t const* module = NULL; 8439a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 844806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 8459a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 846806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda nErr = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); 847806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 848806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if (nErr == 0) 849806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 850806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda *hCC = (void *) ((IMG_gralloc_module_public_t const *)module); 851806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 852806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda else 853806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 854806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda DOMX_ERROR("FATAL: gralloc api hw_get_module() returned error: Can't find \ 855806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda %s module err = %x", GRALLOC_HARDWARE_MODULE_ID, nErr); 856806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 857806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 8589a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal gralloc_open(module, &(pProxy->mAllocDev)); 8599a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal 860806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return nErr; 861806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 862806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 863806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowdaint COLORCONVERT_PlatformOpaqueToNV12(void *hCC, 864806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda void *pSrc[COLORCONVERT_MAX_SUB_BUFFERS], 865806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda void *pDst[COLORCONVERT_MAX_SUB_BUFFERS], 866806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nWidth, int nHeight, int nStride, 867806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nSrcBufType,int nDstBufType) 868806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 869806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda IMG_gralloc_module_public_t const* module = hCC; 870806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda int nErr = -1; 871806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 872806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda if((nSrcBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE) && (nDstBufType == COLORCONVERT_BUFTYPE_VIRTUAL)) 873806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda { 874806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda nErr = module->Blit(module, pSrc[0], pDst, HAL_PIXEL_FORMAT_TI_NV12); 875806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 876806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda } 8779a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal else if((nSrcBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE) && (nDstBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE )) 8789a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal { 8799a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal nErr = module->Blit2(module, pSrc[0], pDst[0], nWidth, nHeight, 0, 0); 8809a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal } 881806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 882806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return nErr; 883806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 884806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda 8859a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwalint COLORCONVERT_close(void *hCC,PROXY_COMPONENT_PRIVATE *pCompPrv) 886806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda{ 8879a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal OMX_PROXY_MPEG4E_PRIVATE *pProxy = NULL; 8889a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal pProxy = (OMX_PROXY_MPEG4E_PRIVATE *) pCompPrv->pCompProxyPrv; 8899a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal if(pProxy && pProxy->mAllocDev) 8909a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal { 8919a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal gralloc_close(pProxy->mAllocDev); 8929a30da5a109bd88aaddfe0ff850189c8a078be89Sarthak Aggarwal } 893806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda return 0; 894806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda} 895806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda#endif 896