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/**
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *  @file  omx_proxy_videodecoder.c
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *         This file contains methods that provides the functionality for
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *         the OpenMAX1.1 DOMX Framework Tunnel 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 *! ============================
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 20-August-2010 Sarthak Aggarwal sarthak@ti.com: Initial Version
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/******************************************************************
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *   INCLUDE FILES
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h>
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h>
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <assert.h>
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h"
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h>
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_IVCommon.h"
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Video.h"
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Index.h"
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
67e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
68e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define LOG_TAG "OMXPROXYVIDEODEC"
69e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <fcntl.h>
70e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <cutils/properties.h>
71e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <utils/Log.h>
72e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
73e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.DECODER"
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* needs to be specific for every configuration wrapper */
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef USE_ENHANCED_PORTRECONFIG
78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Define port indices in video decoder proxy
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_VIDEODECODER_INPUT_PORT 0
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_VIDEODECODER_OUTPUT_PORT 1
81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef SET_STRIDE_PADDING_FROM_PROXY
84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LINUX_PAGE_SIZE (4 * 1024)
86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TOTAL_DEC_PORTS 2
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define HAL_NV12_PADDED_PIXEL_FORMAT (OMX_TI_COLOR_FormatYUV420PackedSemiPlanar - OMX_COLOR_FormatVendorStartUnused)
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_UTIL_SetStrideAndPadding(OMX_COMPONENTTYPE * hRemoteComp, PROXY_COMPONENT_PRIVATE * pCompPrv);
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SendCommand(OMX_IN OMX_HANDLETYPE hComponent,
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_COMMANDTYPE eCmd,
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData);
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_EventHandler(OMX_HANDLETYPE hComponent,
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pAppData, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2,
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pEventData);
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif //SET_STRIDE_PADDING_FROM_PROXY
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1019e964f98a366c756b96a97809b31579fdcc43e97Lakshman GowdaOMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent,
1029e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda    OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType);
1039e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
10455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent,
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct);
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SetParameter(OMX_IN OMX_HANDLETYPE hComponent,
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct);
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <hardware/gralloc.h>
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <hardware/hardware.h>
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "hal_public.h"
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE * pBufferHdr);
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillBufferDone(OMX_HANDLETYPE hComponent,
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags,
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS nTimeStamp, OMX_HANDLETYPE hMarkTargetComponent,
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pMarkData);
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
126e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenextern OMX_ERRORTYPE PrearrageEmptyThisBuffer(OMX_HANDLETYPE hComponent,
127e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	OMX_BUFFERHEADERTYPE * pBufferHdr);
128e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
129e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
130e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenextern void DumpVideoFrame(DebugFrame_Dump *frameInfo);
131e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
132e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
133e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenOMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent);
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent)
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *pHandle = NULL;
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL;
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pHandle = (OMX_COMPONENTTYPE *) hComponent;
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME);
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pHandle->pComponentPrivate =
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (PROXY_COMPONENT_PRIVATE *)
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE,
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    0, TIMMOSAL_MEM_SEGMENT_INT);
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(pHandle->pComponentPrivate != NULL,
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorInsufficientResources,
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE");
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pComponentPrivate =
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_Memset(pComponentPrivate, 0,
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sizeof(PROXY_COMPONENT_PRIVATE));
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pComponentPrivate->cCompName =
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8),
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT);
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(pComponentPrivate->cCompName != NULL,
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorInsufficientResources,
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    " Error in Allocating space for proxy component table");
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
16949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	eError = OMX_ProxyViddecInit(hComponent);
17049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
171e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
172e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	if (eError == OMX_ErrorNone)
173e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	{
174e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		char value[PROPERTY_VALUE_MAX];
175e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		property_get("debug.video.dumpframe", value, "0:0");
176e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		/* -ve value for fromFrame would disable this automatically */
177e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pComponentPrivate->debugframeInfo.fromFrame = atoi(strtok(value, ":"));
178e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pComponentPrivate->debugframeInfo.toFrame = atoi(strtok(NULL, ":"));
179e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pComponentPrivate->debugframeInfo.runningFrame = pComponentPrivate->debugframeInfo.fromFrame;
180e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	}
181e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
18249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	EXIT:
183e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	if (eError != OMX_ErrorNone)
184e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	{
185e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		DOMX_DEBUG("Error in Initializing Proxy");
186e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		if (pComponentPrivate->cCompName != NULL)
187e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		{
188e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			TIMM_OSAL_Free(pComponentPrivate->cCompName);
189e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pComponentPrivate->cCompName = NULL;
190e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		}
191e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		if (pComponentPrivate != NULL)
192e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		{
193e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			TIMM_OSAL_Free(pComponentPrivate);
194e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pComponentPrivate = NULL;
195e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		}
196e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	}
19749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		return eError;
19849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal}
19949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
20049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak AggarwalOMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent)
20149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal{
20249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_ERRORTYPE eError = OMX_ErrorNone;
20349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_COMPONENTTYPE *pHandle = NULL;
20449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL;
20549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	pHandle = (OMX_COMPONENTTYPE *) hComponent;
20649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal        OMX_TI_PARAM_ENHANCEDPORTRECONFIG tParamStruct;
20749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
20849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef ANDROID_QUIRK_LOCK_BUFFER
20949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 err;
21049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	hw_module_t const* module;
21149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
21249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	DOMX_ENTER("");
21349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
21449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME);
21549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
2163cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        pComponentPrivate =
2173cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal            (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
2183cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
2193cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	// Copying component Name - this will be picked up in the proxy common
2203cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH,
2213cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	    OMX_ErrorInvalidComponentName,
2223cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	    "Length of component name is longer than the max allowed");
2233cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME,
2243cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	    strlen(COMPONENT_NAME) + 1);
22549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = OMX_ProxyCommonInit(hComponent);	// Calling Proxy Common Init()
227e005708a4599caa650c653028bea2ccb216fc653Sarthak Aggarwal	PROXY_assert(eError == OMX_ErrorNone, eError, "Proxy common init returned error");
22855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES
229e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	pHandle->SetParameter = PROXY_VIDDEC_SetParameter;
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        pHandle->GetParameter = PROXY_VIDDEC_GetParameter;
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
2329e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	pHandle->GetExtensionIndex = PROXY_VIDDEC_GetExtensionIndex;
2339e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef  SET_STRIDE_PADDING_FROM_PROXY
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        pHandle->SendCommand = PROXY_VIDDEC_SendCommand;
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pComponentPrivate->proxyEventHandler = PROXY_VIDDEC_EventHandler;
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pComponentPrivate->IsLoadedState = OMX_TRUE;
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        pComponentPrivate->proxyFillBufferDone = PROXY_VIDDEC_FillBufferDone;
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pHandle->FillThisBuffer = PROXY_VIDDEC_FillThisBuffer;
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if (err == 0)
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                pComponentPrivate->grallocModule = (gralloc_module_t const *)module;
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                DOMX_ERROR("FATAL: gralloc api hw_get_module() returned error: Can't find \
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		 %s module err = %x", GRALLOC_HARDWARE_MODULE_ID, err);
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_ErrorInsufficientResources;
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		return eError;
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef USE_ENHANCED_PORTRECONFIG
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Initializing Structure */
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nSize = sizeof(OMX_TI_PARAM_ENHANCEDPORTRECONFIG);
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR;
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nVersion.s.nRevision = 0x0;
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nVersion.s.nStep = 0x0;
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tParamStruct.nPortIndex = OMX_VIDEODECODER_OUTPUT_PORT;
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        tParamStruct.bUsePortReconfigForCrop = OMX_TRUE;
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        tParamStruct.bUsePortReconfigForPadding = OMX_TRUE;
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_SetParameter(hComponent,(OMX_INDEXTYPE)OMX_TI_IndexParamUseEnhancedPortReconfig,
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   &tParamStruct);
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone,
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    eError," Error in Proxy SetParameter for Enhanced port reconfig usage");
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
274e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	/* This is required to handle WMV/VC-1 content */
275e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	pHandle->EmptyThisBuffer = PrearrageEmptyThisBuffer;
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2819e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/* ===========================================================================*/
2829e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/**
2839e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @name PROXY_VIDDEC_GetExtensionIndex()
2849e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @brief
2859e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @param void
2869e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @return OMX_ErrorNone = Successful
2879e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @sa TBD
2889e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda *
2899e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda */
2909e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/* ===========================================================================*/
2919e964f98a366c756b96a97809b31579fdcc43e97Lakshman GowdaOMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent,
2929e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType)
2939e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda{
2949e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	OMX_ERRORTYPE eError = OMX_ErrorNone;
2959e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
2969e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
2979e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
2989e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_require((hComp->pComponentPrivate != NULL), OMX_ErrorBadParameter, NULL);
2999e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL);
3009e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL);
3019e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
3029e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	DOMX_ENTER("hComponent = %p, cParameterName = %p", hComponent, cParameterName);
3039e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
3049e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#ifdef ENABLE_GRALLOC_BUFFERS
3059e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	// Ensure that String length is not greater than Max allowed length
3069e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL);
3079e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
3089e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	if (strcmp(cParameterName, "OMX.google.android.index.getAndroidNativeBufferUsage") == 0)
3099e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	{
3109e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		*pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexAndroidNativeBufferUsage;
3119e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	}
3129e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	else
3139e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	{
3149e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType);
3159e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		PROXY_assert(eError == OMX_ErrorNone,
3169e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		    eError," Error in PROXY_GetExtensionIndex");
3179e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	}
3189e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#else
3199e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType);
3209e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	PROXY_assert(eError == OMX_ErrorNone,
3219e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		eError," Error in PROXY_GetExtensionIndex");
3229e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#endif
3239e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	EXIT:
3249e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	DOMX_EXIT("eError: %d", eError);
3259e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	return eError;
3269e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda}
3279e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda
32855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef  ANDROID_QUIRK_CHANGE_PORT_VALUES
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetParameter()
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent,
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct)
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
3469e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL;
3479e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = NULL;
3489e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	OMX_TI_PARAMNATIVEBUFFERUSAGE *pUsage = NULL;
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL);
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((hComp->pComponentPrivate != NULL),
352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p",
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nParamIndex, pParamStruct);
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
3609e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#ifdef ENABLE_GRALLOC_BUFFERS
3619e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	if( nParamIndex == OMX_TI_IndexAndroidNativeBufferUsage)
3629e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	{
3639e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		pUsage = (OMX_TI_PARAMNATIVEBUFFERUSAGE*)pParamStruct;
3649e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		if(pCompPrv->proxyPortBuffers[pUsage->nPortIndex].proxyBufferType == GrallocPointers)
3659e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		{
3669e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda			PROXY_CHK_VERSION(pParamStruct, OMX_TI_PARAMNATIVEBUFFERUSAGE);
3679e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda			pUsage->nUsage = GRALLOC_USAGE_HW_RENDER;
368e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
369e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pUsage->nUsage |= GRALLOC_USAGE_SW_READ_RARELY;
370e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
3719e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda			goto EXIT;
3729e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		}
3739e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda	}
3749e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#endif
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_GetParameter(hComponent,nParamIndex, pParamStruct);
376e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	PROXY_assert(eError == OMX_ErrorNone,
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    eError," Error in Proxy GetParameter");
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if( nParamIndex == OMX_IndexParamPortDefinition)
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
3819e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		PROXY_CHK_VERSION(pParamStruct, OMX_PARAM_PORTDEFINITIONTYPE);
3829e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct;
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar)
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if(pCompPrv->proxyPortBuffers[pPortDef->nPortIndex].proxyBufferType == GrallocPointers)
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pPortDef->format.video.eColorFormat = HAL_NV12_PADDED_PIXEL_FORMAT;
388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			else
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pPortDef->format.video.eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar;
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else if ( nParamIndex == OMX_IndexParamVideoPortFormat)
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
3979e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		PROXY_CHK_VERSION(pParamStruct, OMX_VIDEO_PARAM_PORTFORMATTYPE);
3989e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct;
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pPortParam->eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar)
4009e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		{
4019e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda			if(pCompPrv->proxyPortBuffers[pPortParam->nPortIndex].proxyBufferType == GrallocPointers)
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pPortParam->eColorFormat = HAL_NV12_PADDED_PIXEL_FORMAT;
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			else
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pPortParam->eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar;
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
4099e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		}
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetParameter()
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SetParameter(OMX_IN OMX_HANDLETYPE hComponent,
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct)
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct;
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParams = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct;
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL);
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p",
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nParamIndex, pParamStruct);
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(nParamIndex == OMX_IndexParamPortDefinition)
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pPortDef->format.video.eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			|| pPortDef->format.video.eColorFormat == HAL_NV12_PADDED_PIXEL_FORMAT)
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar;
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else if(nParamIndex == OMX_IndexParamVideoPortFormat)
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pPortParams->eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			|| pPortParams->eColorFormat == HAL_NV12_PADDED_PIXEL_FORMAT)
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar;
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_SetParameter(hComponent, nParamIndex, pParamStruct);
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone,
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    eError," Error in Proxy SetParameter");
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	EXIT:
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef SET_STRIDE_PADDING_FROM_PROXY
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_SendCommand()
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SendCommand(OMX_IN OMX_HANDLETYPE hComponent,
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_COMMANDTYPE eCmd,
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData)
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, eCmd = %d, nParam = %d, pCmdData = %p",
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, eCmd, nParam, pCmdData);
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(eCmd == OMX_CommandStateSet)
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//Set appropriate stride before Loaded to Idle transition.
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if((OMX_STATETYPE)nParam == OMX_StateIdle && pCompPrv->IsLoadedState == OMX_TRUE)
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = RPC_UTIL_SetStrideAndPadding(hComponent, pCompPrv);
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_require(eError == OMX_ErrorNone, eError,
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               "Stride and padding setting from proxy returned");
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->IsLoadedState = OMX_FALSE;
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else if(eCmd == OMX_CommandPortEnable)
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(nParam == OMX_ALL || nParam == OMX_VIDEODECODER_OUTPUT_PORT)
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = RPC_UTIL_SetStrideAndPadding(hComponent, pCompPrv);
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_require(eError == OMX_ErrorNone, eError,
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                               "Stride and padding setting from proxy returned");
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError =
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    PROXY_SendCommand(hComponent, eCmd, nParam, pCmdData);
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_EventHandler()
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_EventHandler(OMX_HANDLETYPE hComponent,
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pAppData, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2,
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pEventData)
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "This is fatal error, processing cant proceed - please debug");
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent=%p, pCompPrv=%p, eEvent=%p, nData1=%p, nData2=%p, pEventData=%p",
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, eEvent, nData1, nData2, pEventData);
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if((eEvent ==  OMX_EventCmdComplete) && ((OMX_COMMANDTYPE)nData1 == OMX_CommandStateSet))
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if((OMX_STATETYPE)nData2 == OMX_StateLoaded)
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->IsLoadedState = OMX_TRUE;
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_EventHandler(hComponent, pAppData, eEvent, nData1, nData2, pEventData);
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	EXIT:
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		return eError;
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UTIL_RPC_UTIL_SetStrideAndPadding()
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRemoteComp [IN]  : Remote component handle.
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_SetStrideAndPadding(OMX_COMPONENTTYPE * hComponent,PROXY_COMPONENT_PRIVATE * pCompPrv)
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE sPortDef;
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_CONFIG_RECTTYPE tParamStruct;
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nPortIndex = 0;
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for(nPortIndex=0; nPortIndex < TOTAL_DEC_PORTS ;nPortIndex++ )
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Initializing Structure */
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR;
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nRevision = 0x0;
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nStep = 0x0;
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nPortIndex = nPortIndex;
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition,
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			   &sPortDef);
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone,
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    eError," Error in Proxy GetParameter for Port Def");
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (sPortDef.eDomain == OMX_PortDomainVideo && sPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingUnused)
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if(pCompPrv->proxyPortBuffers[nPortIndex].IsBuffer2D == OMX_TRUE)
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				sPortDef.format.video.nStride = LINUX_PAGE_SIZE;
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			else
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nSize = sizeof(OMX_CONFIG_RECTTYPE);
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR;
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nVersion.s.nRevision = 0x0;
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nVersion.s.nStep = 0x0;
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				tParamStruct.nPortIndex = nPortIndex;
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				eError = PROXY_GetParameter(hComponent,(OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension,
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev						  &tParamStruct);
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				PROXY_assert(eError == OMX_ErrorNone,
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev					    eError," Error in Proxy GetParameter for 2D index");
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				sPortDef.format.video.nStride = tParamStruct.nWidth;
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = PROXY_SetParameter(hComponent,OMX_IndexParamPortDefinition,
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				   &sPortDef);
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_assert(eError == OMX_ErrorNone,
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    eError," Error in Proxy SetParameter for Port Def");
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_FillThisBuffer()
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE * pBufferHdr)
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 count = 0;
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	IMG_native_handle_t*  grallocHandle;
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE sPortDef;
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL);
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter,
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    NULL);
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE);
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
658e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	if(pCompPrv->proxyPortBuffers[OMX_VIDEODECODER_OUTPUT_PORT].proxyBufferType
659e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			== GrallocPointers)
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* Lock the Gralloc buffer till it gets rendered completely */
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* Extract the Gralloc handle from the Header and then call lock on that */
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* Note# There is no error check for the pBufferHdr here*/
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		grallocHandle = (IMG_native_handle_t*)pBufferHdr->pBuffer;
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Initializing Structure */
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR;
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nRevision = 0x0;
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nVersion.s.nStep = 0x0;
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		sPortDef.nPortIndex = OMX_VIDEODECODER_INPUT_PORT;
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition,
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				&sPortDef);
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone,
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				eError," Error in Proxy GetParameter for Port Def");
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
678e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
679e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		/* Get the Video frame crop window */
680e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		OMX_CONFIG_RECTTYPE rect;
681e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nSize = sizeof(rect);
682e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
683e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nVersion.s.nVersionMinor = OMX_VER_MINOR;
684e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nVersion.s.nRevision = 0x0;
685e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nVersion.s.nStep = 0x0;
686e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		rect.nPortIndex = OMX_VIDEODECODER_OUTPUT_PORT;
687e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
688e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		eError = PROXY_GetConfig(hComponent, OMX_IndexConfigCommonOutputCrop, &rect);
689e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
690e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		PROXY_assert(eError == OMX_ErrorNone,
691e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			eError," Error while getting output crop");
692e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pCompPrv->debugframeInfo.frame_width = rect.nWidth;
693e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pCompPrv->debugframeInfo.frame_height = rect.nHeight;
694e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pCompPrv->debugframeInfo.frame_xoffset = rect.nLeft;
695e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		pCompPrv->debugframeInfo.frame_yoffset = rect.nTop;
696e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->grallocModule->lock((gralloc_module_t const *) pCompPrv->grallocModule,
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				(buffer_handle_t)grallocHandle, GRALLOC_USAGE_HW_RENDER,
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				0,0,sPortDef.format.video.nFrameWidth, sPortDef.format.video.nFrameHeight,NULL);
700e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	}
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eRPCError = PROXY_FillThisBuffer(hComponent, pBufferHdr);
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone,
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    eError," Error in Proxy SetParameter for Port Def");
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_FillBufferDone()
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillBufferDone(OMX_HANDLETYPE hComponent,
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags,
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS nTimeStamp, OMX_HANDLETYPE hMarkTargetComponent,
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pMarkData)
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 count = 0;
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	IMG_native_handle_t*  grallocHandle;
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			OMX_ErrorBadParameter,
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			"This is fatal error, processing cant proceed - please debug");
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Lock the Gralloc buffer till it gets rendered completely */
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Extract the Gralloc handle from the Header and then call lock on that */
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* Note# There is no error check for the pBufferHdr here*/
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(pCompPrv->proxyPortBuffers[OMX_VIDEODECODER_OUTPUT_PORT].proxyBufferType
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			== GrallocPointers) {
742e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		for (count = 0; count < pCompPrv->nTotalBuffers; ++count)
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pCompPrv->tBufList[count].pBufHeaderRemote == remoteBufHdr)
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				grallocHandle = (IMG_native_handle_t*)(pCompPrv->tBufList[count].pBufHeader)->pBuffer;
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				break;
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((count != pCompPrv->nTotalBuffers),
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				OMX_ErrorBadParameter,
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				"Received invalid-buffer header from OMX component");
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->grallocModule->unlock((gralloc_module_t const *) pCompPrv->grallocModule, (buffer_handle_t)grallocHandle);
755e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
756e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY
757e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		ALOGV("frm[%u] to[%u] run[%u]", pCompPrv->debugframeInfo.fromFrame, pCompPrv->debugframeInfo.toFrame, pCompPrv->debugframeInfo.runningFrame);
758e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		/* Fill buffer Done successed, hence start dumping if requested	*/
759e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		OMX_BUFFERHEADERTYPE *pBufHdr = pCompPrv->tBufList[count].pBufHeader;
760e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		if ((pCompPrv->debugframeInfo.fromFrame == 0) && (pCompPrv->debugframeInfo.runningFrame <= pCompPrv->debugframeInfo.toFrame))
761e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		{
762e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			/* Lock the buffer for SW read usage and then access it */
763e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pCompPrv->grallocModule->lock((gralloc_module_t const*) pCompPrv->grallocModule,
764e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen				(buffer_handle_t)grallocHandle,
765e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen				GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_SW_READ_RARELY,
766e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen				pCompPrv->debugframeInfo.frame_xoffset,
767e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen                                pCompPrv->debugframeInfo.frame_yoffset,
768e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen				pCompPrv->debugframeInfo.frame_width,
769e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen                                pCompPrv->debugframeInfo.frame_height,
770e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen				(void*)pCompPrv->debugframeInfo.y_uv);
771e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
772e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			DumpVideoFrame(&pCompPrv->debugframeInfo);
773e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen
774e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pCompPrv->grallocModule->unlock((gralloc_module_t const *) pCompPrv->grallocModule,
775e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen							(buffer_handle_t)grallocHandle);
776e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pCompPrv->debugframeInfo.runningFrame++;
777e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		}
778e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		else if (pCompPrv->debugframeInfo.fromFrame > 0)
779e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		{
780e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen			pCompPrv->debugframeInfo.fromFrame--;
781e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen		}
782e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif
783e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen	}
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = PROXY_FillBufferDone(hComponent,remoteBufHdr, nfilledLen, nOffset, nFlags,
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nTimeStamp, hMarkTargetComponent, pMarkData);
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone,
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError," Error in PROXY FillBufferDone for Port Def");
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevEXIT:
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
798