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