1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (c) 2010, Texas Instruments Incorporated 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * All rights reserved. 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Redistribution and use in source and binary forms, with or without 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * modification, are permitted provided that the following conditions 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * are met: 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions of source code must retain the above copyright 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer. 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions in binary form must reproduce the above copyright 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer in the 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * documentation and/or other materials provided with the distribution. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Neither the name of Texas Instruments Incorporated nor the names of 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * its contributors may be used to endorse or promote products derived 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * from this software without specific prior written permission. 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 34e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * @file omx_proxy_h264enc.c 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This file contains methods that provides the functionality for 36e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * the OpenMAX1.1 DOMX Framework Proxy component. 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ********************************************************************************************* 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev This is the proxy specific wrapper that passes the component name to the generic proxy init() 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev The proxy wrapper also does some runtime/static time onfig on per proxy basis 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev This is a thin wrapper that is called when componentiit() of the proxy is called 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static OMX_ERRORTYPE PROXY_Wrapper_init(OMX_HANDLETYPE hComponent, OMX_PTR pAppData); 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev this layer gets called first whenever a proxy's get handle is called 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ************************************************************************************************ 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @path WTSD_DucatiMMSW\omx\omx_il_1_x\omx_proxy_component\src 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @rev 1.0 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*============================================================== 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================ 52e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * 26-August-2011 Abhishek Ranka : Support for color conv at encoder 53e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * input port 54e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 20-August-2010 Sarthak Aggarwal sarthak@ti.com: Initial Version 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/ 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * INCLUDE FILES 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 61e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <assert.h> 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h" 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h> 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_IVCommon.h" 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Video.h" 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Index.h" 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <MetadataBufferType.h> 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFER 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "native_handle.h" 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <hal_public.h> 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <VideoMetadata.h> 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.H264E" 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* needs to be specific for every configuration wrapper */ 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_H264E_INPUT_PORT 0 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LINUX_PAGE_SIZE 4096 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 8455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 955a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal/* Opaque color format requires below quirks to be enabled 965a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal * ENABLE_GRALLOC_BUFFER 975a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal * ANDROID_QUIRCK_CHANGE_PORT_VALUES 985a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal */ 99e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define OMX_H264VE_NUM_INTERNAL_BUF (8) 100e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define HAL_PIXEL_FORMAT_TI_NV12 (0x100) 101e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 102e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define COLORCONVERT_MAX_SUB_BUFFERS (3) 103e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 104e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define COLORCONVERT_BUFTYPE_VIRTUAL (0x0) 105e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define COLORCONVERT_BUFTYPE_ION (0x1) 106e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#define COLORCONVERT_BUFTYPE_GRALLOCOPAQUE (0x2) 107e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 1085a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwalint COLORCONVERT_open(void **hCC, PROXY_COMPONENT_PRIVATE *pCompPrv); 109e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdaint COLORCONVERT_PlatformOpaqueToNV12(void *hCC, void *pSrc[], 110e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda void *pDst[], int nWidth, 111e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nHeight, int nStride, 112e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nSrcBufType, int nDstBufType); 1135a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwalint COLORCONVERT_close(void *hCC,PROXY_COMPONENT_PRIVATE *pCompPrv); 114e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 115e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_H264E_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent, 116e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_IN OMX_U32 nPortIndex, 117e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_IN OMX_PTR pAppPrivate, OMX_IN OMX_U32 nSizeBytes); 118e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 119e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_H264E_FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, 120e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_BUFFERHEADERTYPE * pBufferHdr); 121e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 122e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_H264E_ComponentDeInit(OMX_HANDLETYPE hComponent); 123e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 124e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdatypedef struct _OMX_PROXY_H264E_PRIVATE 125e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 126e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PTR hBufPipe; 127e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_BOOL bAndroidOpaqueFormat; 128e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PTR hCC; 1295a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal IMG_native_handle_t* gralloc_handle[OMX_H264VE_NUM_INTERNAL_BUF]; 130e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_S32 nCurBufIndex; 1315a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal alloc_device_t* mAllocDev; 132e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda}OMX_PROXY_H264E_PRIVATE; 133e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 134e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType); 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_EmptyThisBuffer(OMX_HANDLETYPE hComponent, 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBufferHdr); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent) 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *pHandle = NULL; 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL; 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle = (OMX_COMPONENTTYPE *) hComponent; 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PARAM_ENHANCEDPORTRECONFIG tParamStruct; 148e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 149e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 150e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 151e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 152e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME); 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->pComponentPrivate = 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE, 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 0, TIMMOSAL_MEM_SEGMENT_INT); 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(pHandle->pComponentPrivate != NULL, 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE"); 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate = 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset(pComponentPrivate, 0, 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(PROXY_COMPONENT_PRIVATE)); 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->cCompName = 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(pComponentPrivate->cCompName != NULL, 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev " Error in Allocating space for proxy component table"); 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 180e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 181e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pComponentPrivate->pCompProxyPrv = 182e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (OMX_PROXY_H264E_PRIVATE *) 183e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_Malloc(sizeof(OMX_PROXY_H264E_PRIVATE), TIMM_OSAL_TRUE, 184e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 0, TIMMOSAL_MEM_SEGMENT_INT); 185e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 186e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(pComponentPrivate->pCompProxyPrv != NULL, 187e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ErrorInsufficientResources, 188e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda " Could not allocate proxy component private"); 189e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 190e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_Memset(pComponentPrivate->pCompProxyPrv, 0, 191e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_PROXY_H264E_PRIVATE)); 192e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 193e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pComponentPrivate->pCompProxyPrv; 194e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 195e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* Create Pipe of for encoder input buffers */ 196e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eOSALStatus = TIMM_OSAL_CreatePipe(&pProxy->hBufPipe, sizeof(OMX_U32), 197e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_H264VE_NUM_INTERNAL_BUF, 1); 198e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, 199e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ErrorInsufficientResources, 200e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda "Pipe creation failed"); 201e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 202e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Copying component Name - this will be picked up in the proxy common 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH, 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInvalidComponentName, 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Length of component name is longer than the max allowed"); 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strlen(COMPONENT_NAME) + 1); 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ProxyCommonInit(hComponent); // Calling Proxy Common Init() 21155bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->SetParameter = LOCAL_PROXY_H264E_SetParameter; 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->GetParameter = LOCAL_PROXY_H264E_GetParameter; 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->IsLoadedState = OMX_TRUE; 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->EmptyThisBuffer = LOCAL_PROXY_H264E_EmptyThisBuffer; 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->GetExtensionIndex = LOCAL_PROXY_H264E_GetExtensionIndex; 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 219e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 220e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pHandle->ComponentDeInit = LOCAL_PROXY_H264E_ComponentDeInit; 221e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pHandle->FreeBuffer = LOCAL_PROXY_H264E_FreeBuffer; 222e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pHandle->AllocateBuffer = LOCAL_PROXY_H264E_AllocateBuffer; 223e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 224e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 225e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda EXIT: 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != OMX_ErrorNone) 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Error in Initializing Proxy"); 229e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 230e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 231e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(pProxy->hBufPipe != NULL) 232e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 233e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_DeletePipe(pProxy->hBufPipe); 234e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy->hBufPipe = NULL; 235e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 236e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 237e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(pComponentPrivate->pCompProxyPrv != NULL) 238e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 239e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_Free(pComponentPrivate->pCompProxyPrv); 240e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pComponentPrivate->pCompProxyPrv = NULL; 241e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = NULL; 242e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 243e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pComponentPrivate->cCompName != NULL) 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate->cCompName); 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->cCompName = NULL; 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pComponentPrivate != NULL) 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate); 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate = NULL; 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 25855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_H264E_GetParameter() 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct) 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 276e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL; 277e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = NULL; 278e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 279e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 280e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((hComp->pComponentPrivate != NULL), 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 287e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 288e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 289e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, pCompPrv, nParamIndex, pParamStruct); 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,nParamIndex, pParamStruct); 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 297e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(nParamIndex == OMX_IndexParamPortDefinition) 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 299e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 300e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 303e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 304e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(pProxy->bAndroidOpaqueFormat == OMX_TRUE) 305e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 306e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_COLOR_FormatAndroidOpaque; 307e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 308e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else 309e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 310e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 311e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 312e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 314831d195f81fcd391e54bddd46b56e251f84f4638John Wei 315831d195f81fcd391e54bddd46b56e251f84f4638John Wei if(pPortDef->nPortIndex == OMX_H264E_INPUT_PORT) 316831d195f81fcd391e54bddd46b56e251f84f4638John Wei { 317831d195f81fcd391e54bddd46b56e251f84f4638John Wei if(pCompPrv->proxyPortBuffers[OMX_H264E_INPUT_PORT].proxyBufferType == EncoderMetadataPointers) 318831d195f81fcd391e54bddd46b56e251f84f4638John Wei { 319831d195f81fcd391e54bddd46b56e251f84f4638John Wei pPortDef->nBufferSize = sizeof(video_metadata_t); 320831d195f81fcd391e54bddd46b56e251f84f4638John Wei } 321831d195f81fcd391e54bddd46b56e251f84f4638John Wei } 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 323e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else if (nParamIndex == OMX_IndexParamVideoPortFormat) 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 325e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 326e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 327e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if((eError == OMX_ErrorNone) && 328e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (pPortParam->eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar)) 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortParam->eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 332e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 333e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else if ((eError == OMX_ErrorNoMore) && 334e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (pPortParam->nIndex == 1)) 335e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 336e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* HACK:Remote OMX-H264E supports only 1 color format (index 0). The 337e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * OMX_COLOR_FormatAndroidOpaque is supported only at the proxy. 338e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * Call GetParameter() to fill in defaults for parameters and 339e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * override color format and index for the additional 340e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda * OMX_COLOR_FormatAndroidOpaque support*/ 341e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParam->nIndex = 0; 342e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = PROXY_GetParameter(hComponent, nParamIndex, pParamStruct); 343e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParam->nIndex = 1; 344e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParam->eColorFormat = OMX_COLOR_FormatAndroidOpaque; 345e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = OMX_ErrorNone; 346e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 347e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 350806c4f9ecde18ebd6d50355f3dc5267240c14e17Lakshman Gowda PROXY_assert((eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore), 351e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError," Error in Proxy GetParameter"); 352e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_H264E_SetParameter() 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct) 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 374e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL; 375e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParams = NULL; 376e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_VIDEO_STOREMETADATAINBUFFERSPARAMS* pStoreMetaData = NULL; 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PARAM_BUFFERPREANNOUNCE tParamSetNPA; 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_PORTDEFINITIONTYPE sPortDef; 379e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 380e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 381e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 382e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 383e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda DOMX_ENTER 384e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 385e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda hComponent, pCompPrv, nParamIndex, pParamStruct); 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 392e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 393e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 394e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 395e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(nParamIndex == OMX_IndexParamPortDefinition) 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 398e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 399e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortDef->format.video.eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar) 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 404e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 405e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatAndroidOpaque) 406e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 4075a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal if(COLORCONVERT_open(&pProxy->hCC,pCompPrv) != 0) 408e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 409e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(0, OMX_ErrorInsufficientResources, 410e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda "Failed to open Color converting service"); 411e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 412e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy->bAndroidOpaqueFormat = OMX_TRUE; 413e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 414e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 415e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if(nParamIndex == OMX_IndexParamVideoPortFormat) 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 419e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParams = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 420e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortParams->eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar) 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 425e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 426e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else if(pPortParams->eColorFormat == OMX_COLOR_FormatAndroidOpaque) 427e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 4285a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal if(COLORCONVERT_open(&pProxy->hCC,pCompPrv) != 0) 429e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 430e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(0, OMX_ErrorInsufficientResources, 431e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda "Failed to open Color converting service"); 432e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 433e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy->bAndroidOpaqueFormat = OMX_TRUE; 434e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 435e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 436e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if(nParamIndex == (OMX_INDEXTYPE) OMX_TI_IndexEncoderStoreMetadatInBuffers) 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 440e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pStoreMetaData = (OMX_VIDEO_STOREMETADATAINBUFFERSPARAMS *) pParamStruct; 441e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Moving to Metadatamode"); 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pStoreMetaData->nPortIndex == OMX_H264E_INPUT_PORT && pStoreMetaData->bStoreMetaData == OMX_TRUE) 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nSize = sizeof(OMX_TI_PARAM_BUFFERPREANNOUNCE); 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nVersion.s.nVersionMinor = OMX_VER_MINOR; 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nVersion.s.nRevision = 0x0; 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nVersion.s.nStep = 0x0; 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamSetNPA.nPortIndex = OMX_H264E_INPUT_PORT; 451c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamSetNPA.bEnabled = OMX_FALSE; 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Call NPA on OMX encoder on ducati. 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_SetParameter(hComponent,OMX_TI_IndexParamBufferPreAnnouncement, &tParamSetNPA); 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv->proxyPortBuffers[pStoreMetaData->nPortIndex].proxyBufferType = EncoderMetadataPointers; 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Moving to Metadatamode done"); 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Initializing Structure */ 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR; 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nRevision = 0x0; 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nStep = 0x0; 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nPortIndex = OMX_H264E_INPUT_PORT; 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition, &sPortDef); 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy GetParameter for Port Def"); 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.format.video.nStride = LINUX_PAGE_SIZE; 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_SetParameter(hComponent,OMX_IndexParamPortDefinition, &sPortDef); 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy SetParameter for Port Def"); 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_SetParameter(hComponent, nParamIndex, pParamStruct); 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy SetParameter"); 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetExtensionIndex() 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType) 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = hComponent; 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL); 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL); 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("%s hComponent = %p, pCompPrv = %p, cParameterName = %s", 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev __FUNCTION__,hComponent, pCompPrv, cParameterName); 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Check for NULL Parameters 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((cParameterName != NULL && pIndexType != NULL), 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Ensure that String length is not greater than Max allowed length 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL); 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(strcmp(cParameterName, "OMX.google.android.index.storeMetaDataInBuffers") == 0) 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // If Index type is 2D Buffer Allocated Dimension 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexEncoderStoreMetadatInBuffers; 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("%s eError: %d",__FUNCTION__, eError); 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_H264E_EmptyThisBuffer() 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE LOCAL_PROXY_H264E_EmptyThisBuffer(OMX_HANDLETYPE hComponent, 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBufferHdr) 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv; 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 554cd24c84966f2abddfb1f4ffba30f500e5fc63db3Sarthak Aggarwal OMX_PTR pBufferOrig = pBufferHdr->pBuffer; 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nStride = 0, nNumLines = 0; 556c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal OMX_PARAM_PORTDEFINITIONTYPE tParamStruct; 557c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal OMX_U32 nFilledLen, nAllocLen; 558e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 559e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 560e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 561e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_U32 nBufIndex = 0, nSize=0, nRet=0; 562e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL); 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE); 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 570e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 571e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 572e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 574c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 575c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 576c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR; 577c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nVersion.s.nRevision = 0x0; 578c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nVersion.s.nStep = 0x0; 579c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal tParamStruct.nPortIndex = OMX_H264E_INPUT_PORT; 580c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal 581c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal eError = PROXY_GetParameter(hComponent, OMX_IndexParamPortDefinition, &tParamStruct); 582c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal PROXY_require(eError == OMX_ErrorNone, OMX_ErrorBadParameter, "Error is Get Parameter for port def"); 583c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal nFilledLen = pBufferHdr->nFilledLen; 584c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal nAllocLen = pBufferHdr->nAllocLen; 5850a866629f2245a112033476c2f2a29cbb353fd73Sarthak Aggarwal if(nFilledLen != 0) 5860a866629f2245a112033476c2f2a29cbb353fd73Sarthak Aggarwal { 5870a866629f2245a112033476c2f2a29cbb353fd73Sarthak Aggarwal pBufferHdr->nFilledLen = tParamStruct.nBufferSize; 5880a866629f2245a112033476c2f2a29cbb353fd73Sarthak Aggarwal } 589c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal pBufferHdr->nAllocLen = tParamStruct.nBufferSize; 590c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("%s hComponent=%p, pCompPrv=%p, nFilledLen=%d, nOffset=%d, nFlags=%08x", 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev __FUNCTION__,hComponent, pCompPrv, pBufferHdr->nFilledLen, 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nOffset, pBufferHdr->nFlags); 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 5960a866629f2245a112033476c2f2a29cbb353fd73Sarthak Aggarwal if( pCompPrv->proxyPortBuffers[OMX_H264E_INPUT_PORT].proxyBufferType == EncoderMetadataPointers && nFilledLen != 0 ) 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 *pTempBuffer; 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nMetadataBufferType; 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Passing meta data to encoder"); 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferOrig = pBufferHdr->pBuffer; 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempBuffer = (OMX_U32 *) (pBufferHdr->pBuffer); 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nMetadataBufferType = *pTempBuffer; 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(nMetadataBufferType == kMetadataBufferTypeCameraSource) 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFER 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMG_native_handle_t* pGrallocHandle; 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev video_metadata_t* pVideoMetadataBuffer; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("MetadataBufferType is kMetadataBufferTypeCameraSource"); 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pVideoMetadataBuffer = (video_metadata_t*) ((OMX_U32 *)(pBufferHdr->pBuffer)); 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pGrallocHandle = (IMG_native_handle_t*) (pVideoMetadataBuffer->handle); 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Grallloc buffer recieved in metadata buffer 0x%x",pGrallocHandle ); 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pBuffer = (OMX_U8 *)(pGrallocHandle->fd[0]); 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> 620e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pAuxBuf1 = (OMX_PTR) pGrallocHandle->fd[1]; 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("%s Gralloc=0x%x, Y-fd=%d, UV-fd=%d", __FUNCTION__, pGrallocHandle, 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pGrallocHandle->fd[0], pGrallocHandle->fd[1]); 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nOffset = pVideoMetadataBuffer->offset; 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if(nMetadataBufferType == kMetadataBufferTypeGrallocSource) 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFER 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMG_native_handle_t* pGrallocHandle; 631e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda buffer_handle_t tBufHandle; 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("MetadataBufferType is kMetadataBufferTypeGrallocSource"); 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempBuffer++; 635e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tBufHandle = *((buffer_handle_t *)pTempBuffer); 636e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pGrallocHandle = (IMG_native_handle_t*) tBufHandle; 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Grallloc buffer recieved in metadata buffer 0x%x",pGrallocHandle ); 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pBuffer = (OMX_U8 *)(pGrallocHandle->fd[0]); 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> 641e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pAuxBuf1 = (OMX_PTR) pGrallocHandle->fd[1]; 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("%s Gralloc=0x%x, Y-fd=%d, UV-fd=%d", __FUNCTION__, pGrallocHandle, 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pGrallocHandle->fd[0], pGrallocHandle->fd[1]); 644e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 645e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if (pProxy->bAndroidOpaqueFormat) 646e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 647e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* Dequeue NV12 buffer for encoder */ 648e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eOSALStatus = TIMM_OSAL_ReadFromPipe(pProxy->hBufPipe, &nBufIndex, 649e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_PTR), (TIMM_OSAL_U32 *)(&nSize), 650e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_SUSPEND); 651e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, OMX_ErrorBadParameter, NULL); 652e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 653e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* Get NV12 data after colorconv*/ 6545a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal nRet = COLORCONVERT_PlatformOpaqueToNV12(pProxy->hCC, (void **) &pGrallocHandle, (void **) &pProxy->gralloc_handle[nBufIndex], 655e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pGrallocHandle->iWidth, 656e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pGrallocHandle->iHeight, 657e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 4096, COLORCONVERT_BUFTYPE_GRALLOCOPAQUE, 6585a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal COLORCONVERT_BUFTYPE_GRALLOCOPAQUE ); 659e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(nRet != 0) 660e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 661e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &nBufIndex, 662e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 663e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(0, OMX_ErrorBadParameter, "Color conversion routine failed"); 664e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 665e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 666e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* Update pBufferHdr with NV12 buffers for OMX component */ 6675a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal pBufferHdr->pBuffer= pProxy->gralloc_handle[nBufIndex]->fd[0]; 6685a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1 = pProxy->gralloc_handle[nBufIndex]->fd[1]; 669e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 670e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return OMX_ErrorBadParameter; 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_EmptyThisBuffer(hComponent, pBufferHdr); 680e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 681e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if (pProxy->bAndroidOpaqueFormat) 682e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 683e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /*Write buffer to end of pipe for re-circulation for future ETB()*/ 684e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &nBufIndex, 685e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 686e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(eOSALStatus == TIMM_OSAL_ERR_NONE, OMX_ErrorBadParameter, "Pipe write failed"); 687e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 688e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( pCompPrv->proxyPortBuffers[pBufferHdr->nInputPortIndex].proxyBufferType == EncoderMetadataPointers) 690c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal { 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pBuffer = pBufferOrig; 692c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal pBufferHdr->nFilledLen = nFilledLen; 693c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal pBufferHdr->nAllocLen = nAllocLen; 694c6d1deff9a4cffd55b5bc94f6999ac3b29309b6dSarthak Aggarwal } 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 698e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 699e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#ifdef ANDROID_CUSTOM_OPAQUECOLORFORMAT 700e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_H264E_AllocateBuffer(OMX_HANDLETYPE hComponent, 701e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_U32 nPortIndex, 702e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PTR pAppPrivate, OMX_U32 nSizeBytes) 703e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 704e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 705e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 706e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 707e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_CONFIG_RECTTYPE tParamRect; 708e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 709e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 7105a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal int err, nStride; 711e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 712e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 713e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda NULL); 714e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 715e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 716e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 717e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if((nPortIndex == OMX_H264E_INPUT_PORT) && 718e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 719e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 720e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 721e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nSize = sizeof(OMX_CONFIG_RECTTYPE); 722e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nVersion.s.nVersionMajor = 1; 723e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nVersion.s.nVersionMinor = 1; 724e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nVersion.s.nRevision = 0; 725e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nVersion.s.nStep = 0; 726e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda tParamRect.nPortIndex = nPortIndex; 727e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 728e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = PROXY_GetParameter(hComponent, (OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension, &tParamRect); 729e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_assert(eError == OMX_ErrorNone, eError," Error in Proxy GetParameter"); 730e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 7315a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal err = pProxy->mAllocDev->alloc(pProxy->mAllocDev,(int) tParamRect.nWidth,(int) tParamRect.nHeight, 7325a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal (int) HAL_PIXEL_FORMAT_TI_NV12,(int) GRALLOC_USAGE_HW_RENDER, &(pProxy->gralloc_handle[pProxy->nCurBufIndex]), &nStride); 733e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 734e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 735e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = PROXY_AllocateBuffer(hComponent, ppBufferHdr, nPortIndex, 736e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pAppPrivate, nSizeBytes); 737e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaEXIT: 738e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if((nPortIndex == OMX_H264E_INPUT_PORT) && 739e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 740e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 741e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(eError != OMX_ErrorNone) 742e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 7435a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal err = pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[pProxy->nCurBufIndex]); 744e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 745e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else 746e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 747e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /*Populate buffer to pipe*/ 748e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eOSALStatus = TIMM_OSAL_WriteToPipe(pProxy->hBufPipe, (void *) &pProxy->nCurBufIndex, 749e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_U32), TIMM_OSAL_SUSPEND); 750e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy->nCurBufIndex++; 751e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 752e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 753e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return eError; 754e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 755e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 756e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdastatic OMX_ERRORTYPE LOCAL_PROXY_H264E_FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, 757e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_BUFFERHEADERTYPE * pBufferHdr) 758e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 759e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 760e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 761e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 762e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_U32 nBufIndex, nSize, nCount=0; 763e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 764e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 765e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 766e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda NULL); 767e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 768e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 769e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 770e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if((nPortIndex == OMX_H264E_INPUT_PORT) && 771e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda (pProxy->bAndroidOpaqueFormat)) 772e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 773e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy->nCurBufIndex--; 774e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_require(pProxy->nCurBufIndex >=0, 775e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ErrorBadParameter, "Buffer index underflow"); 776e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 7775a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal if(pProxy->gralloc_handle[pProxy->nCurBufIndex]) 7785a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal { 7795a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[pProxy->nCurBufIndex]); 7805a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal pProxy->gralloc_handle[pProxy->nCurBufIndex] = NULL; 7815a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal } 782e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 783e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /*Clear the Bufindex pipe by dummy reads*/ 784e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_GetPipeReadyMessageCount(pProxy->hBufPipe, (TIMM_OSAL_U32 *)&nCount); 785e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(nCount) 786e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 787e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_ReadFromPipe(pProxy->hBufPipe, &nBufIndex, 788e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda sizeof(OMX_PTR), (TIMM_OSAL_U32 *)&nSize, TIMM_OSAL_NO_SUSPEND); 789e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 790e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 791e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 792e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = PROXY_FreeBuffer(hComponent, nPortIndex, pBufferHdr); 793e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 794e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaEXIT: 795e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return eError; 796e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 797e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 798e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaOMX_ERRORTYPE LOCAL_PROXY_H264E_ComponentDeInit(OMX_HANDLETYPE hComponent) 799e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 800e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 801e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv; 802e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 803e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 804e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_ERRORTYPE eOSALStatus = TIMM_OSAL_ERR_NONE; 805e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda OMX_U32 i; 806e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 807e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 808e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda NULL); 809e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 810e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 811e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 812b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy if(pProxy->hBufPipe != NULL) 813b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy { 814b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy eOSALStatus = TIMM_OSAL_DeletePipe(pProxy->hBufPipe); 815b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy pProxy->hBufPipe = NULL; 816b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy 817b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy if(eOSALStatus != TIMM_OSAL_ERR_NONE) 818b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy { 819b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy DOMX_ERROR("Pipe deletion failed"); 820b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy } 821b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy } 822b471a4ea8699f7444612aa9e00fd2724e83a8d08Devaraj Rangasamy 823e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(pProxy->bAndroidOpaqueFormat == OMX_TRUE) 824e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 825e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda /* Cleanup internal buffers in pipe if not freed on FreeBuffer */ 826e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda for(i=0; i<OMX_H264VE_NUM_INTERNAL_BUF; i++) 827e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 8282526013667f27e46c71a5c579b107353bb33dee8Sarthak Aggarwal if(pProxy->gralloc_handle[i]) 829e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 8302526013667f27e46c71a5c579b107353bb33dee8Sarthak Aggarwal pProxy->mAllocDev->free(pProxy->mAllocDev, pProxy->gralloc_handle[i]); 8312526013667f27e46c71a5c579b107353bb33dee8Sarthak Aggarwal pProxy->gralloc_handle[i] = NULL; 832e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 833e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 834e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 8355a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal 8365a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal COLORCONVERT_close(pProxy->hCC,pCompPrv); 8372526013667f27e46c71a5c579b107353bb33dee8Sarthak Aggarwal pProxy->bAndroidOpaqueFormat = OMX_FALSE; 8385a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal 839e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if(pCompPrv->pCompProxyPrv != NULL) 840e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 841e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda TIMM_OSAL_Free(pCompPrv->pCompProxyPrv); 842e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda pCompPrv->pCompProxyPrv = NULL; 843e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 844e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 845e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 846e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda eError = PROXY_ComponentDeInit(hComponent); 847e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaEXIT: 848e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda DOMX_EXIT("eError: %d", eError); 849e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return eError; 850e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 851e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 8525a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwalint COLORCONVERT_open(void **hCC, PROXY_COMPONENT_PRIVATE *pCompPrv) 853e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 854e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nErr = -1; 855e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda hw_module_t const* module = NULL; 8565a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 857e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 8585a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 859e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda nErr = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); 860e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 861e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if (nErr == 0) 862e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 863e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda *hCC = (void *) ((IMG_gralloc_module_public_t const *)module); 864e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 865e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda else 866e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 867e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda DOMX_ERROR("FATAL: gralloc api hw_get_module() returned error: Can't find \ 868e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda %s module err = %x", GRALLOC_HARDWARE_MODULE_ID, nErr); 869e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 870e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 8715a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal gralloc_open(module, &(pProxy->mAllocDev)); 8725a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal 873e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return nErr; 874e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 875e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 876e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowdaint COLORCONVERT_PlatformOpaqueToNV12(void *hCC, 877e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda void *pSrc[COLORCONVERT_MAX_SUB_BUFFERS], 878e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda void *pDst[COLORCONVERT_MAX_SUB_BUFFERS], 879e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nWidth, int nHeight, int nStride, 880e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nSrcBufType,int nDstBufType) 881e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 882e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda IMG_gralloc_module_public_t const* module = hCC; 883e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda int nErr = -1; 884e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 885e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda if((nSrcBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE) && (nDstBufType == COLORCONVERT_BUFTYPE_VIRTUAL)) 886e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda { 887e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda nErr = module->Blit(module, pSrc[0], pDst, HAL_PIXEL_FORMAT_TI_NV12); 888e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda } 8895a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal else if((nSrcBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE) && (nDstBufType == COLORCONVERT_BUFTYPE_GRALLOCOPAQUE )) 8905a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal { 8915a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal nErr = module->Blit2(module, pSrc[0], pDst[0], nWidth, nHeight, 0, 0); 8925a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal } 893e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 894e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return nErr; 895e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 896e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda 8975a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwalint COLORCONVERT_close(void *hCC,PROXY_COMPONENT_PRIVATE *pCompPrv) 898e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda{ 8995a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal OMX_PROXY_H264E_PRIVATE *pProxy = NULL; 9005a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal pProxy = (OMX_PROXY_H264E_PRIVATE *) pCompPrv->pCompProxyPrv; 9015a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal if(pProxy && pProxy->mAllocDev) 9025a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal { 9035a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal gralloc_close(pProxy->mAllocDev); 9045a86cf98b1a2bdb33d2269a45542d8bff815f0ecSarthak Aggarwal } 905e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda return 0; 906e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda} 907e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman Gowda#endif 908