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