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_common.c
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *         This file contains methods that provides the functionality for
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *         the OpenMAX1.1 DOMX Framework OMX Common Proxy .
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *  @path \WTSD_DucatiMMSW\framework\domx\omx_proxy_common\src
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *  @rev 1.0
41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*==============================================================
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation
47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *!
48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version
49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/
50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ------compilation control switches ----------------------------------------*/
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TILER_BUFF
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define ALLOCATE_TILER_BUFFER_IN_PROXY
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// This has been enabled enbled only in Android.mk
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// #define ENABLE_GRALLOC_BUFFER
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/******************************************************************
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *   INCLUDE FILES
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ----- system and platform files ----------------------------*/
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h>
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_memory.h"
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_mutex.h"
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Common.h"
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Index.h"
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Core.h"
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*-------program files ----------------------------------------*/
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h"
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc.h"
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc_stub.h"
71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc_utils.h"
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_IVCommon.h"
73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ALLOCATE_TILER_BUFFER_IN_PROXY
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
7649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
7749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#include <unistd.h>
784a35937fcb950ccd05af56c49214b88e393233e3Rebecca Schultz Zavin#include <ion.h>
7949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#include <sys/ioctl.h>
8049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#include <sys/mman.h>
8149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#include <sys/eventfd.h>
8249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#include <fcntl.h>
83a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal
84a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
85a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#include "memmgr.h"
86a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#include "tiler.h"
87a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
88a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal
8949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef  ENABLE_GRALLOC_BUFFERS
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "native_handle.h"
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "hal_public.h"
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef TILER_BUFF
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PortFormatIsNotYUV 0
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if 0
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_PrepareBuffer_Remote(PROXY_COMPONENT_PRIVATE *
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    pCompPrv, OMX_COMPONENTTYPE * hRemoteComp, OMX_U32 nPortIndex,
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nSizeBytes, OMX_BUFFERHEADERTYPE * pChironBuf,
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pDucBuf, OMX_PTR pBufToBeMapped);
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_PrepareBuffer_Chiron(PROXY_COMPONENT_PRIVATE *
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    pCompPrv, OMX_COMPONENTTYPE * hRemoteComp, OMX_U32 nPortIndex,
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nSizeBytes, OMX_BUFFERHEADERTYPE * pDucBuf,
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pChironBuf);
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_UnMapBuffer_Ducati(OMX_PTR pBuffer);
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_MapBuffer_Ducati(OMX_U8 * pBuf, OMX_U32 nBufLineSize,
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nBufLines, OMX_U8 ** pMappedBuf, OMX_PTR pBufToBeMapped);
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_MapMetaData_Host(OMX_BUFFERHEADERTYPE * pBufHdr);
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_UnMapMetaData_Host(OMX_BUFFERHEADERTYPE * pBufHdr);
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE _RPC_IsProxyComponent(OMX_HANDLETYPE hComponent,
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BOOL * bIsProxy);
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_GetStride(OMX_COMPONENTTYPE * hRemoteComp,
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nPortIndex, OMX_U32 * nStride);
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_GetNumLines(OMX_COMPONENTTYPE * hComp,
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nPortIndex, OMX_U32 * nNumOfLines);
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ALLOCATE_TILER_BUFFER_IN_PROXY
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr,
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_PTR pAppPrivate,
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nSizeBytes, OMX_IN OMX_U8 * pBuffer);
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
13349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#define LINUX_PAGE_SIZE 4096
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAXNAMESIZE 128
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CORE_MAX 4
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CORE_CHIRON 3
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CORE_SYSM3 2
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CORE_APPM3 1
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define CORE_TESLA 0
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define MAX_CORENAME_LENGTH 32
143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevchar Core_Array[][MAX_CORENAME_LENGTH] =
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    { "TESLA", "DUCATI1", "DUCATI0", "CHIRON" };
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/******************************************************************
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *   MACROS - LOCAL
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define PROXY_checkRpcError() do { \
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if (eRPCError == RPC_OMX_ErrorNone) \
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    { \
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        DOMX_DEBUG("Corresponding RPC function executed successfully"); \
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eError = eCompReturn; \
15573bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman        PROXY_assert((eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore), eError, "Error returned from OMX API in ducati"); \
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } else \
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    { \
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        DOMX_ERROR("RPC function returned error 0x%x", eRPCError); \
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        switch (eRPCError) \
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        { \
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case RPC_OMX_ErrorHardware: \
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorHardware; \
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break; \
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case RPC_OMX_ErrorInsufficientResources: \
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorInsufficientResources; \
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break; \
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case RPC_OMX_ErrorBadParameter: \
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorBadParameter; \
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break; \
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case RPC_OMX_ErrorUnsupportedIndex: \
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorUnsupportedIndex; \
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break; \
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            case RPC_OMX_ErrorTimeout: \
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorTimeout; \
175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break; \
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            default: \
177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                eError = OMX_ErrorUndefined; \
178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        } \
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    } \
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} while(0)
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
18249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
18349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
18473bfc819486d5f632fd113996e6ecdbd647d2085Sundar RamanRPC_OMX_ERRORTYPE RPC_RegisterBuffer(OMX_HANDLETYPE hRPCCtx, int fd,
18549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				     struct ion_handle **handle)
18649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal{
18749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	int status;
18849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	struct ion_fd_data data;
18949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	RPC_OMX_CONTEXT *pRPCCtx = (RPC_OMX_CONTEXT *) hRPCCtx;
19049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
19149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	data.fd = fd;
19249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	status = ioctl(pRPCCtx->fd_omx, ION_IOC_IMPORT, &data);
19349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	if (status < 0)
19449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		return RPC_OMX_ErrorInsufficientResources;
19549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	*handle = data.handle;
19649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	return RPC_OMX_ErrorNone;
19749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal}
19849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
19973bfc819486d5f632fd113996e6ecdbd647d2085Sundar Ramanstatic OMX_ERRORTYPE PROXY_AllocateBufferIonCarveout(PROXY_COMPONENT_PRIVATE *pCompPrv,
20049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal						 size_t len, struct ion_handle **handle)
20149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal{
20249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	int fd;
20349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	int ret;
20449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	struct ion_handle *temp;
20549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
206dd67ecfa02b48f73c371802314403ea31a0689afSuman Anna	ret = ion_alloc(pCompPrv->ion_fd, len, 0x1000, 1 << ION_HEAP_TYPE_CARVEOUT, &temp);
20749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	DOMX_DEBUG("ION being USED for allocation!!!!! handle = %x, ret =%x",temp,ret);
20849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	if (ret)
20949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			return OMX_ErrorInsufficientResources;
21073bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman	/*
21149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	ret = ion_share(pCompPrv->ion_fd, temp, &fd);
21249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	if (ret) {
21349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		ion_free(pCompPrv->ion_fd, temp);
21449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		return OMX_ErrorHardware;
21549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	}
21649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	RPC_RegisterBuffer(pCompPrv->hRemoteComp, fd, handle);
21749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	close(fd);
21849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	ion_free(pCompPrv->ion_fd, temp);
21949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	*/
22049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	*handle = temp;
22149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	return OMX_ErrorNone;
22249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal}
22349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
22449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_EventHandler()
229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_EventHandler(OMX_HANDLETYPE hComponent,
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pAppData, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2,
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pEventData)
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pTmpData = NULL;
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "This is fatal error, processing cant proceed - please debug");
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent=%p, pCompPrv=%p, eEvent=%p, nData1=%p, nData2=%p, pEventData=%p",
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, eEvent, nData1, nData2, pEventData);
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	switch (eEvent)
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if 0
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_TI_EventBufferRefCount:
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("Received Ref Count Event");
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*nData1 will be pBufferHeader, nData2 will be present count. Need to find local
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		   buffer header for nData1 which is remote buffer header */
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((nData1 != 0), OMX_ErrorBadParameter,
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Received NULL buffer header from OMX component");
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*find local buffer header equivalent */
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		for (count = 0; count < pCompPrv->nTotalBuffers; ++count)
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pCompPrv->tBufList[count].pBufHeaderRemote ==
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    nData1)
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pLocalBufHdr =
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    pCompPrv->tBufList[count].pBufHeader;
274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pLocalBufHdr->pBuffer =
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    (OMX_U8 *) pCompPrv->tBufList[count].
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    pBufferActual;
277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				break;
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((count != pCompPrv->nTotalBuffers),
281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_ErrorBadParameter,
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Received invalid-buffer header from OMX component");
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*update local buffer header */
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nData1 = (OMX_U32) pLocalBufHdr;
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	case OMX_EventMark:
289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("Received Mark Event");
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((pEventData != NULL), OMX_ErrorUndefined,
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "MarkData corrupted");
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pTmpData = pEventData;
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pEventData =
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ((PROXY_MARK_DATA *) pEventData)->pMarkDataActual;
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pTmpData);
296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	default:
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		break;
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError == OMX_ErrorNone)
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.EventHandler(hComponent,
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, eEvent, nData1, nData2, pEventData);
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (pCompPrv)
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.EventHandler(hComponent,
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, OMX_EventError, eError, 0, NULL);
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_EmptyBufferDone()
320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_EmptyBufferDone(OMX_HANDLETYPE hComponent,
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags)
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U16 count;
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufHdr = NULL;
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "This is fatal error, processing cant proceed - please debug");
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent=%p, pCompPrv=%p, remoteBufHdr=%p, nFilledLen=%d, nOffset=%d, nFlags=%08x",
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, remoteBufHdr, nfilledLen, nOffset, nFlags);
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; ++count)
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeaderRemote ==
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    remoteBufHdr)
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr = pCompPrv->tBufList[count].pBufHeader;
352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nFilledLen = nfilledLen;
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nOffset = nOffset;
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nFlags = nFlags;
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Setting mark info to NULL. This would always be
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			   NULL in EBD, whether component has propagated the
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			   mark or has generated mark event */
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->hMarkTargetComponent = NULL;
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->pMarkData = NULL;
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((count != pCompPrv->nTotalBuffers),
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Received invalid-buffer header from OMX component");
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError == OMX_ErrorNone)
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.EmptyBufferDone(hComponent,
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, pBufHdr);
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (pCompPrv)
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.EventHandler(hComponent,
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, OMX_EventError, eError, 0, NULL);
376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_FillBufferDone()
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param
387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_FillBufferDone(OMX_HANDLETYPE hComponent,
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags,
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_TICKS nTimeStamp, OMX_HANDLETYPE hMarkTargetComponent,
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_PTR pMarkData)
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U16 count;
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufHdr = NULL;
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "This is fatal error, processing cant proceed - please debug");
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent=%p, pCompPrv=%p, remoteBufHdr=%p, nFilledLen=%d, nOffset=%d, nFlags=%08x",
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, remoteBufHdr, nfilledLen, nOffset, nFlags);
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; ++count)
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeaderRemote ==
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    remoteBufHdr)
418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr = pCompPrv->tBufList[count].pBufHeader;
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nFilledLen = nfilledLen;
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nOffset = nOffset;
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nFlags = nFlags;
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufHdr->nTimeStamp = nTimeStamp;
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pMarkData != NULL)
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				/*Update mark info in the buffer header */
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pBufHdr->pMarkData =
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    ((PROXY_MARK_DATA *)
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    pMarkData)->pMarkDataActual;
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pBufHdr->hMarkTargetComponent =
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    ((PROXY_MARK_DATA *)
432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    pMarkData)->hComponentActual;
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				TIMM_OSAL_Free(pMarkData);
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((count != pCompPrv->nTotalBuffers),
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Received invalid-buffer header from OMX component");
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError == OMX_ErrorNone)
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.FillBufferDone(hComponent,
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, pBufHdr);
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (pCompPrv)
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tCBFunc.EventHandler(hComponent,
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pCompPrv->pILAppData, OMX_EventError, eError, 0, NULL);
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNone;
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_EmptyThisBuffer()
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_EmptyThisBuffer(OMX_HANDLETYPE hComponent,
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pBufferHdr)
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 count = 0;
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *pMarkComp = NULL;
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pMarkCompPrv = NULL;
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pMarkData = NULL;
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bFreeMarkIfError = OMX_FALSE;
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bIsProxy = OMX_FALSE , bMapBuffer;
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL);
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter,
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    NULL);
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE);
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent=%p, pCompPrv=%p, nFilledLen=%d, nOffset=%d, nFlags=%08x",
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, pBufferHdr->nFilledLen,
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBufferHdr->nOffset, pBufferHdr->nFlags);
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*First find the index of this buffer header to retrieve remote buffer header */
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; count++)
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeader == pBufferHdr)
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_DEBUG("Buffer Index of Match %d ", count);
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((count != pCompPrv->nTotalBuffers),
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Could not find the remote header in buffer list");
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pBufferHdr->hMarkTargetComponent != NULL)
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkComp =
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (OMX_COMPONENTTYPE *) (pBufferHdr->hMarkTargetComponent);
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* Check is mark comp is proxy */
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = _RPC_IsProxyComponent(pMarkComp, &bIsProxy);
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError, "");
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Replacing original mark data with proxy specific structure */
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkData = pBufferHdr->pMarkData;
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferHdr->pMarkData =
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_Malloc(sizeof(PROXY_MARK_DATA), TIMM_OSAL_TRUE,
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    0, TIMMOSAL_MEM_SEGMENT_INT);
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(pBufferHdr->pMarkData != NULL,
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_ErrorInsufficientResources, "Malloc failed");
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		bFreeMarkIfError = OMX_TRUE;
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((PROXY_MARK_DATA *) (pBufferHdr->
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkData))->hComponentActual = pMarkComp;
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((PROXY_MARK_DATA *) (pBufferHdr->
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkData))->pMarkDataActual = pMarkData;
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* If proxy comp then replace hMarkTargetComponent with remote
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		   handle */
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (bIsProxy)
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkCompPrv = pMarkComp->pComponentPrivate;
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_assert(pMarkCompPrv != NULL,
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_ErrorBadParameter, NULL);
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Replacing with remote component handle */
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pBufferHdr->hMarkTargetComponent =
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    ((RPC_OMX_CONTEXT *) pMarkCompPrv->hRemoteComp)->
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    hActualRemoteCompHandle;
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	bMapBuffer =
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->proxyPortBuffers[pBufferHdr->nInputPortIndex].proxyBufferType ==
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			EncoderMetadataPointers;
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_EmptyThisBuffer(pCompPrv->hRemoteComp, pBufferHdr,
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pCompPrv->tBufList[count].pBufHeaderRemote, &eCompReturn,bMapBuffer);
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*If ETB is about to return an error then this means that buffer has not
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   been accepted by the component. Thus the allocated mark data will be
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   lost so free it here. Also replace original mark data in the header */
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((eError != OMX_ErrorNone) && bFreeMarkIfError)
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferHdr->hMarkTargetComponent =
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ((PROXY_MARK_DATA *) (pBufferHdr->
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkData))->hComponentActual;
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkData =
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ((PROXY_MARK_DATA *) (pBufferHdr->
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkData))->pMarkDataActual;
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pBufferHdr->pMarkData);
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pBufferHdr->pMarkData = pMarkData;
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_FillThisBuffer()
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_FillThisBuffer(OMX_HANDLETYPE hComponent,
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pBufferHdr)
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 count = 0;
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL);
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter,
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    NULL);
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE);
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nFilledLen = %d, nOffset = %d, nFlags = %08x",
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, pBufferHdr->nFilledLen,
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBufferHdr->nOffset, pBufferHdr->nFlags);
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*First find the index of this buffer header to retrieve remote buffer header */
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; count++)
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeader == pBufferHdr)
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_DEBUG("Buffer Index of Match %d ", count);
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((count != pCompPrv->nTotalBuffers),
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Could not find the remote header in buffer list");
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_FillThisBuffer(pCompPrv->hRemoteComp, pBufferHdr,
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pCompPrv->tBufList[count].pBufHeaderRemote, &eCompReturn);
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_AllocateBuffer()
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
637e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaOMX_ERRORTYPE PROXY_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent,
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr,
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nPortIndex,
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_PTR pAppPrivate, OMX_IN OMX_U32 nSizeBytes)
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 currentBuffer = 0, i = 0;
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bSlotFound = OMX_FALSE;
64749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
64849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	struct ion_handle *handle = NULL;
649a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
650a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal     	MemAllocBlock block;
651a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal        MemAllocBlock blocks[2];
65249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
653a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ALLOCATE_TILER_BUFFER_IN_PROXY
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	// Do the tiler allocations in Proxy and call use buffers on Ducati.
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
65749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	//Round Off the size to allocate and map to next page boundary.
65849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 nSize = (nSizeBytes + LINUX_PAGE_SIZE - 1) & ~(LINUX_PAGE_SIZE - 1);
65949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 nStride = 0;
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8* pMemptr = NULL;
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_CONFIG_RECTTYPE tParamRect;
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE tParamPortDef;
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(ppBufferHdr != NULL, OMX_ErrorBadParameter,
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Pointer to buffer header is NULL");
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
669a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifndef USE_ION
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    	memset(&block, 0, sizeof(MemAllocBlock));
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        memset(blocks, 0, sizeof(MemAllocBlock)*2);
672a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nPortIndex = %p, pAppPrivate = %p, nSizeBytes = %d",
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nPortIndex, pAppPrivate, nSizeBytes);
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*To find whether buffer is 2D or 1D */
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError =
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_UTIL_GetStride(pCompPrv->hRemoteComp, nPortIndex, &nStride);
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone, eError,
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Failed to get stride of component");
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
686831d195f81fcd391e54bddd46b56e251f84f4638John Wei	if (nStride == LINUX_PAGE_SIZE && \
687831d195f81fcd391e54bddd46b56e251f84f4638John Wei			pCompPrv->proxyPortBuffers[nPortIndex].proxyBufferType != EncoderMetadataPointers) //Allocate 2D buffer
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
689a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#if USE_ION
690a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		DOMX_ERROR ("Tiler 2d port buffers not implemented");
691a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		eError = OMX_ErrorNotImplemented;
692a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		goto EXIT;
693a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    	tParamRect.nSize = sizeof(OMX_CONFIG_RECTTYPE);
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    	tParamRect.nVersion.s.nVersionMajor = 1;
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    	tParamRect.nVersion.s.nVersionMinor = 1;
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    	tParamRect.nVersion.s.nRevision = 0;
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    	tParamRect.nVersion.s.nStep = 0;
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		tParamRect.nPortIndex = nPortIndex;
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = PROXY_GetParameter(hComponent, (OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension, &tParamRect);
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(eError == OMX_ErrorNone)
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
7041f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev			blocks[0].fmt = PIXEL_FMT_8BIT;
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].dim.area.width  = tParamRect.nWidth;
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].dim.area.height = tParamRect.nHeight;
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].stride = 0;
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
7091f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev			blocks[1].fmt = PIXEL_FMT_16BIT;
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].dim.area.width  = tParamRect.nWidth >> 1;
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].dim.area.height = tParamRect.nHeight >> 1;
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].stride = 0;
71349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		else if(eError == OMX_ErrorUnsupportedIndex)
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_ERROR("Component does not support OMX_TI_IndexParam2DBufferAllocDimension, \
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev					reverting to OMX_PARAM_PORTDEFINITIONTYPE");
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			tParamPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    	tParamPortDef.nVersion.s.nVersionMajor = 1;
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    	tParamPortDef.nVersion.s.nVersionMinor = 1;
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    	tParamPortDef.nVersion.s.nRevision = 0;
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    	tParamPortDef.nVersion.s.nStep = 0;
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			tParamPortDef.nPortIndex = nPortIndex;
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = PROXY_GetParameter(hComponent, OMX_IndexParamPortDefinition, &tParamPortDef);
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if(eError != OMX_ErrorNone)
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				DOMX_ERROR("PROXY_GetParameter returns err %d (0x%x)", eError, eError);
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				return eError;
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
7331f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev			blocks[0].fmt = PIXEL_FMT_8BIT;
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].dim.area.width  = tParamPortDef.format.video.nFrameWidth;
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].dim.area.height = tParamPortDef.format.video.nFrameHeight;
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[0].stride = 0;
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
7381f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev			blocks[1].fmt = PIXEL_FMT_16BIT;
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].dim.area.width  = tParamPortDef.format.video.nFrameWidth >> 1;
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].dim.area.height = tParamPortDef.format.video.nFrameHeight >> 1;
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			blocks[1].stride = 0;
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(eError != OMX_ErrorNone)
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_ERROR("PROXY_GetParameter returns err %d (0x%x)", eError, eError);
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			return eError;
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMemptr = (OMX_U8*) MemMgr_Alloc(blocks, 2);
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((pMemptr != NULL), OMX_ErrorInsufficientResources, "MemMgr_Alloc returns NULL, abort,");
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG(" Y Buffer : Allocated Width:%d, Height:%d",blocks[0].dim.area.width, blocks[0].dim.area.height);
753a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
75549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
756a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	else if (pCompPrv->bUseIon == OMX_TRUE)
75749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	{
75849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		eError = PROXY_AllocateBufferIonCarveout(pCompPrv, nSize, &handle);
75949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		pMemptr = handle;
76049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		DOMX_DEBUG ("Ion handle recieved = %x",handle);
76149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		if (eError != OMX_ErrorNone)
76249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			return eError;
76349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	}
764a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else //Allocate 1D buffer
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
7671f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev		block.fmt = PIXEL_FMT_PAGE;
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    		block.dim.len = nSize;
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    	        block.stride = 0;
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    	        pMemptr = (OMX_U8*) MemMgr_Alloc(&block, 1);
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                PROXY_assert((pMemptr != NULL), OMX_ErrorInsufficientResources,"MemMgr_Alloc returns NULL, abort,");
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    	}
774a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Pick up 1st empty slot */
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*The same empty spot will be picked up by the subsequent
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	Use buffer call to fill in the corresponding buffer
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	Buffer header in the list */
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for (i = 0; i < pCompPrv->nTotalBuffers; i++)
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if (pCompPrv->tBufList[i].pBufHeader == NULL)
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        currentBuffer = i;
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        bSlotFound = OMX_TRUE;
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        break;
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (!bSlotFound)
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		currentBuffer = pCompPrv->nTotalBuffers;
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*No need to increment Allocated buffers here.
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	It will be done in the subsequent use buffer call below*/
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_UseBuffer(hComponent, ppBufferHdr, nPortIndex, pAppPrivate, nSize, pMemptr);
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(eError != OMX_ErrorNone) {
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_ERROR("PROXY_UseBuffer in PROXY_AllocateBuffer failed with error %d (0x%08x)", eError, eError);
802a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
803a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		ion_free(pCompPrv->ion_fd, pMemptr);
804a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		MemMgr_Free(pMemptr);
806a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
807a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		goto EXIT;
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else {
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->tBufList[currentBuffer].pYBuffer = pMemptr;
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
81349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
814a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	if (pCompPrv->bUseIon == OMX_TRUE && pCompPrv->bMapIonBuffers == OMX_TRUE)
81549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	{
81649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		DOMX_DEBUG("before mapping, handle = %x, nSize = %d",handle,nSize);
81749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal        	if (ion_map(pCompPrv->ion_fd, handle, nSize, PROT_READ | PROT_WRITE, MAP_SHARED, 0,
81849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal                          &((*ppBufferHdr)->pBuffer),
81949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal                                    &(pCompPrv->tBufList[currentBuffer].mmap_fd)) < 0)
82049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		{
82149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			DOMX_ERROR("userspace mapping of ION buffers returned error");
82249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			return OMX_ErrorInsufficientResources;
82349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		}
82449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		//ion_free(pCompPrv->ion_fd, handleToMap);
82549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	}
82649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
82749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//This code is the un-changed version of original implementation.
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 pBufHeaderRemote = 0;
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 currentBuffer = 0, i = 0;
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pBuffer = NULL;
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL;
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bSlotFound = OMX_FALSE;
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eCompReturn = OMX_ErrorNone;
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(ppBufferHdr != NULL, OMX_ErrorBadParameter,
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Pointer to buffer header is NULL");
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nPortIndex = %p, pAppPrivate = %p, nSizeBytes = %d",
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nPortIndex, pAppPrivate, nSizeBytes);
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Pick up 1st empty slot */
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < pCompPrv->nTotalBuffers; i++)
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[i].pBufHeader == 0)
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			currentBuffer = i;
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			bSlotFound = OMX_TRUE;
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (!bSlotFound)
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		currentBuffer = pCompPrv->nTotalBuffers;
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("In AB, no. of buffers = %d", pCompPrv->nTotalBuffers);
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((pCompPrv->nTotalBuffers < MAX_NUM_PROXY_BUFFERS),
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorInsufficientResources,
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Proxy cannot handle more than MAX buffers");
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Allocating Local bufferheader to be maintained locally within proxy
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBufferHeader =
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_BUFFERHEADERTYPE *)
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE), TIMM_OSAL_TRUE, 0,
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMMOSAL_MEM_SEGMENT_INT);
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((pBufferHeader != NULL), OMX_ErrorInsufficientResources,
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Allocation of Buffer Header structure failed");
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pPlatformPrivate =
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_TI_PLATFORMPRIVATE *)
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(sizeof(OMX_TI_PLATFORMPRIVATE), TIMM_OSAL_TRUE,
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    0, TIMMOSAL_MEM_SEGMENT_INT);
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(pPlatformPrivate != NULL, OMX_ErrorInsufficientResources,
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Allocation of platform private structure failed");
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBufferHeader->pPlatformPrivate = pPlatformPrivate;
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG(" Calling RPC ");
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_AllocateBuffer(pCompPrv->hRemoteComp, &pBufferHeader,
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    nPortIndex, &pBufHeaderRemote, pAppPrivate, nSizeBytes,
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    &eCompReturn);
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Allocate Buffer Successful");
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Value of pBufHeaderRemote: %p   LocalBufferHdr :%p",
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBufHeaderRemote, pBufferHeader);
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->tBufList[currentBuffer].pBufHeader = pBufferHeader;
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->tBufList[currentBuffer].pBufHeaderRemote = pBufHeaderRemote;
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//keeping track of number of Buffers
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->nAllocatedBuffers++;
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pCompPrv->nTotalBuffers < pCompPrv->nAllocatedBuffers)
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->nTotalBuffers = pCompPrv->nAllocatedBuffers;
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	*ppBufferHdr = pBufferHeader;
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError != OMX_ErrorNone)
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pPlatformPrivate)
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pPlatformPrivate);
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufferHeader)
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pBufferHeader);
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif //ALLOCATE_TILER_BUFFER_IN_PROXY
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_UseBuffer()
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr,
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_PTR pAppPrivate,
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nSizeBytes, OMX_IN OMX_U8 * pBuffer)
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 pBufHeaderRemote = 0;
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 currentBuffer = 0, i = 0, nStride = 0, nNumLines = 0;
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL;
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bSlotFound = OMX_FALSE;
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pAuxBuf0 = pBuffer;
956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TI_PARAM_METADATABUFFERINFO tMetaDataBuffer;
95749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 nBufferHeight = 0;
95849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_CONFIG_RECTTYPE tParamRect;
95949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_PARAM_PORTDEFINITIONTYPE tParamPortDef;
96049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
961a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
962a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	OMX_PTR pMetadataBuffer = NULL;
963a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
964a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	MemAllocBlock block;
965a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(ppBufferHdr != NULL, OMX_ErrorBadParameter,
970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Pointer to buffer header is NULL");
971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
972a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifndef USE_ION
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	memset(&block, 0, sizeof(MemAllocBlock));
974a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nPortIndex = %p, pAppPrivate = %p, nSizeBytes = %d, pBuffer = %p",
980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nPortIndex, pAppPrivate, nSizeBytes,
981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBuffer);
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Pick up 1st empty slot */
984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < pCompPrv->nTotalBuffers; i++)
985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[i].pBufHeader == 0)
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			currentBuffer = i;
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			bSlotFound = OMX_TRUE;
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (!bSlotFound)
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		currentBuffer = pCompPrv->nTotalBuffers;
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("In UB, no. of buffers = %d", pCompPrv->nTotalBuffers);
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((pCompPrv->nTotalBuffers < MAX_NUM_PROXY_BUFFERS),
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorInsufficientResources,
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Proxy cannot handle more than MAX buffers");
1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Allocating Local bufferheader to be maintained locally within proxy
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBufferHeader =
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_BUFFERHEADERTYPE *)
1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE), TIMM_OSAL_TRUE, 0,
1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMMOSAL_MEM_SEGMENT_INT);
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((pBufferHeader != NULL), OMX_ErrorInsufficientResources,
1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Allocation of Buffer Header structure failed");
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pPlatformPrivate =
1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_TI_PLATFORMPRIVATE *)
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    TIMM_OSAL_Malloc(sizeof(OMX_TI_PLATFORMPRIVATE), TIMM_OSAL_TRUE,
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    0, TIMMOSAL_MEM_SEGMENT_INT);
1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(pPlatformPrivate != NULL, OMX_ErrorInsufficientResources,
1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Allocation of platform private structure failed");
1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	TIMM_OSAL_Memset(pPlatformPrivate, 0, sizeof(OMX_TI_PLATFORMPRIVATE));
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBufferHeader->pPlatformPrivate = pPlatformPrivate;
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->nSize = sizeof(OMX_TI_PLATFORMPRIVATE);
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFERS
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(pCompPrv->proxyPortBuffers[nPortIndex].proxyBufferType == GrallocPointers)
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//Extracting buffer pointer from the gralloc buffer
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pAuxBuf0 = (OMX_U8 *)(((IMG_native_handle_t*)pBuffer)->fd[0]);
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Preparing buffer to Remote Core...");
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBufferHeader->pBuffer = pBuffer;
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*To find whether buffer is 2D or 1D */
1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError =
1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_UTIL_GetStride(pCompPrv->hRemoteComp, nPortIndex, &nStride);
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone, eError,
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Failed to get stride of component");
1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (nStride == LINUX_PAGE_SIZE)
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		// Change this to extract UV pointer from gralloc handle once new gralloc interface is available
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*2D buffer, assume NV12 format */
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    RPC_UTIL_GetNumLines(pCompPrv->hRemoteComp, nPortIndex,
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    &nNumLines);
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError,
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Failed to get num of lines");
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pCompPrv->proxyPortBuffers[nPortIndex].proxyBufferType == GrallocPointers)
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			((OMX_TI_PLATFORMPRIVATE *) pBufferHeader->pPlatformPrivate)->
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pAuxBuf1 = (OMX_U8 *)(((IMG_native_handle_t*)pBuffer)->fd[1]);
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1053a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#if 0
105449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		else
105549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		{
105649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		    	tParamRect.nSize = sizeof(OMX_CONFIG_RECTTYPE);
105749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		    	tParamRect.nVersion.s.nVersionMajor = 1;
105849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		    	tParamRect.nVersion.s.nVersionMinor = 1;
105949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		    	tParamRect.nVersion.s.nRevision = 0;
106049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		    	tParamRect.nVersion.s.nStep = 0;
106149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			tParamRect.nPortIndex = nPortIndex;
106249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
106349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			eError = PROXY_GetParameter(hComponent, (OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension, &tParamRect);
106449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			if(eError == OMX_ErrorNone)
106549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			{
106649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				nBufferHeight = tParamRect.nHeight;
106749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			}
106849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			else if(eError == OMX_ErrorUnsupportedIndex)
106949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			{
107049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				DOMX_ERROR("Component does not support OMX_TI_IndexParam2DBufferAllocDimension, \
107149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal						reverting to OMX_PARAM_PORTDEFINITIONTYPE");
107249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				tParamPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
107349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			    	tParamPortDef.nVersion.s.nVersionMajor = 1;
107449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			    	tParamPortDef.nVersion.s.nVersionMinor = 1;
107549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			    	tParamPortDef.nVersion.s.nRevision = 0;
107649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			    	tParamPortDef.nVersion.s.nStep = 0;
107749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				tParamPortDef.nPortIndex = nPortIndex;
107849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
107949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				eError = PROXY_GetParameter(hComponent, OMX_IndexParamPortDefinition, &tParamPortDef);
108049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				if(eError != OMX_ErrorNone)
108149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				{
108249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal					DOMX_ERROR("PROXY_GetParameter returns err %d (0x%x)", eError, eError);
108349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal					return eError;
108449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				}
108549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
108649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				nBufferHeight = tParamPortDef.format.video.nFrameHeight;
108749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			}
108849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			if(eError != OMX_ErrorNone)
108949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			{
109049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				DOMX_ERROR("PROXY_GetParameter returns err %d (0x%x)", eError, eError);
109149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				return eError;
109249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			}
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
109449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			((OMX_TI_PLATFORMPRIVATE *) pBufferHeader->pPlatformPrivate)->
109549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				pAuxBuf1 = (OMX_U8*) ((OMX_U32)pBuffer + (LINUX_PAGE_SIZE*nBufferHeight));
109649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal		}
109749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif
1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pCompPrv->proxyPortBuffers[nPortIndex].proxyBufferType == EncoderMetadataPointers)
1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			((OMX_TI_PLATFORMPRIVATE *) pBufferHeader->pPlatformPrivate)->
1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pAuxBuf1 = NULL;
1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Initializing Structure */
1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nSize = sizeof(OMX_TI_PARAM_METADATABUFFERINFO);
1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nVersion.s.nVersionMinor = OMX_VER_MINOR;
1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nVersion.s.nRevision = 0x0;
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nVersion.s.nStep = 0x0;
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	tMetaDataBuffer.nPortIndex = nPortIndex;
1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError = PROXY_GetParameter(hComponent, (OMX_INDEXTYPE)OMX_TI_IndexParamMetaDataBufferInfo, (OMX_PTR)&tMetaDataBuffer);
1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone, eError,
1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Get Parameter for Metadata infor failed");
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Metadata size = %d",tMetaDataBuffer.nMetaDataSize);
1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(tMetaDataBuffer.bIsMetaDataEnabledOnPort)
1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1120a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
1121a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->nMetaDataSize =
1122a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			(tMetaDataBuffer.nMetaDataSize + LINUX_PAGE_SIZE - 1) & ~(LINUX_PAGE_SIZE -1);
1123a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		eError = PROXY_AllocateBufferIonCarveout(pCompPrv, ((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->nMetaDataSize,
1124a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			&(((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer));
1125a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		pCompPrv->tBufList[currentBuffer].pMetaDataBuffer = ((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->
1126a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			pPlatformPrivate)->pMetaDataBuffer;
1127a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		DOMX_DEBUG("Metadata buffer ion handle = %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer);
1128a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
11291f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev		block.fmt = PIXEL_FMT_PAGE;
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		block.dim.len = tMetaDataBuffer.nMetaDataSize;
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->
1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pPlatformPrivate)->pMetaDataBuffer = MemMgr_Alloc(&block, 1);
1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->
1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pPlatformPrivate)->pMetaDataBuffer != NULL,OMX_ErrorInsufficientResources,
1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				"MemMngr alloc call for allocating metadata buffers failed");
1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->nMetaDataSize = tMetaDataBuffer.nMetaDataSize;
1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("Metadata buffer = %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer);
1138a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_UseBuffer(pCompPrv->hRemoteComp, &pBufferHeader, nPortIndex,
1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pAppPrivate, nSizeBytes, pAuxBuf0, &pBufHeaderRemote, &eCompReturn);
1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Use Buffer Successful");
1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG
1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("Value of pBufHeaderRemote: %p LocalBufferHdr :%p, LocalBuffer :%p",
1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBufHeaderRemote, pBufferHeader, pBufferHeader->pBuffer);
1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1151a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
1152a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	if (pCompPrv->bUseIon == OMX_TRUE && pCompPrv->bMapIonBuffers == OMX_TRUE && tMetaDataBuffer.bIsMetaDataEnabledOnPort)
1153a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	{
1154a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		DOMX_DEBUG("Metadata buffer ion handle given to ion map = %d",
1155a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer);
1156a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal        	if (ion_map(pCompPrv->ion_fd, ((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer,
1157a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->nMetaDataSize, PROT_READ | PROT_WRITE, MAP_SHARED, 0,
1158a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				&pMetadataBuffer,&(pCompPrv->tBufList[currentBuffer].mmap_fd_metadata_buff)) < 0)
1159a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		{
1160a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			DOMX_ERROR("userspace mapping of ION metadata buffers returned error");
1161a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			return OMX_ErrorInsufficientResources;
1162a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		}
1163a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer = pMetadataBuffer;
1164a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		//ion_free(pCompPrv->ion_fd, handleToMap);
1165a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal		memset(((OMX_TI_PLATFORMPRIVATE *)pBufferHeader->pPlatformPrivate)->pMetaDataBuffer,
1166a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			0x0, tMetaDataBuffer.nMetaDataSize);
1167a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	}
1168a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
1169a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal
1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Storing details of pBufferHeader/Mapped/Actual buffer address locally.
1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->tBufList[currentBuffer].pBufHeader = pBufferHeader;
1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->tBufList[currentBuffer].pBufHeaderRemote = pBufHeaderRemote;
1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//keeping track of number of Buffers
1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->nAllocatedBuffers++;
1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pCompPrv->nTotalBuffers < pCompPrv->nAllocatedBuffers)
1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pCompPrv->nTotalBuffers = pCompPrv->nAllocatedBuffers;
1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Updating no. of buffer to %d", pCompPrv->nTotalBuffers);
1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	*ppBufferHdr = pBufferHeader;
1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError != OMX_ErrorNone)
1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pPlatformPrivate)
1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pPlatformPrivate);
1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pBufferHeader)
1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pBufferHeader);
1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_FreeBuffer()
1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1205e5d86ac2b8d0b0172944bb46c7a5d2c6b659b2a9Lakshman GowdaOMX_ERRORTYPE PROXY_FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent,
1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_BUFFERHEADERTYPE * pBufferHdr)
1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone, eTmpRPCError =
1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_OMX_ErrorNone;
121349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 count = 0, nStride = 0;
1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 pBuffer = 0;
1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pMetaDataBuffer = NULL;
1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL);
1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter,
1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    NULL);
1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE);
1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, nPortIndex = %p, pBufferHdr = %p, pBuffer = %p",
1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, nPortIndex, pBufferHdr,
1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pBufferHdr->pBuffer);
1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; count++)
1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeader == pBufferHdr)
1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_DEBUG("Buffer Index of Match %d", count);
1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((count != pCompPrv->nTotalBuffers),
1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter,
1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Could not find the mapped address in component private buffer list");
1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBuffer = pBufferHdr->pBuffer;
1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Not having asserts from this point since even if error occurs during
1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   unmapping/freeing, still trying to clean up as much as possible */
1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_FreeBuffer(pCompPrv->hRemoteComp, nPortIndex,
1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pCompPrv->tBufList[count].pBufHeaderRemote, pBuffer,
1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    &eCompReturn);
1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eRPCError != RPC_OMX_ErrorNone)
1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eTmpRPCError = eRPCError;
1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pCompPrv->tBufList[count].pBufHeader)
1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1255a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef ALLOCATE_TILER_BUFFER_IN_PROXY
125649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef USE_ION
125743bdd31577be33023b40de6b730eef24f484cc4bSarthak Aggarwal		if(pCompPrv->tBufList[count].pYBuffer)
125843bdd31577be33023b40de6b730eef24f484cc4bSarthak Aggarwal		{
1259a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal        		if (pCompPrv->bUseIon == OMX_TRUE)
126049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			{
126149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				if(pCompPrv->bMapIonBuffers == OMX_TRUE)
126249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				{
1263f3f2df863d1bc55a7901fbebe042b69c8a778c3cSarthak Aggarwal	                                munmap(pBufferHdr->pBuffer, pBufferHdr->nAllocLen);
126449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal        				close(pCompPrv->tBufList[count].mmap_fd);
126549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				}
126649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				ion_free(pCompPrv->ion_fd, pCompPrv->tBufList[count].pYBuffer);
126749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal				pCompPrv->tBufList[count].pYBuffer = NULL;
126849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal			}
126943bdd31577be33023b40de6b730eef24f484cc4bSarthak Aggarwal		}
1270a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if(pCompPrv->tBufList[count].pYBuffer)
1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			MemMgr_Free(pCompPrv->tBufList[count].pYBuffer);
1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->tBufList[count].pYBuffer = NULL;
1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1277a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMetaDataBuffer = ((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pPlatformPrivate)->pMetaDataBuffer;
1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pMetaDataBuffer)
1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1282a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
1283a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal        		if (pCompPrv->bUseIon == OMX_TRUE)
1284a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			{
1285a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				if(pCompPrv->bMapIonBuffers == OMX_TRUE)
1286a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				{
1287a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	                                munmap(pMetaDataBuffer, ((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1288a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal							pPlatformPrivate)->nMetaDataSize);
1289a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal        				close(pCompPrv->tBufList[count].mmap_fd_metadata_buff);
1290a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				}
1291a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				ion_free(pCompPrv->ion_fd, pCompPrv->tBufList[count].pMetaDataBuffer);
1292a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1293a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					pPlatformPrivate)->pMetaDataBuffer = NULL;
1294a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			}
1295a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			MemMgr_Free(pMetaDataBuffer);
1297a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeader->pPlatformPrivate)
1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pCompPrv->tBufList[count].pBufHeader->
1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pPlatformPrivate);
1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pCompPrv->tBufList[count].pBufHeader);
1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Memset(&(pCompPrv->tBufList[count]), 0,
1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    sizeof(PROXY_BUFFER_INFO));
1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->nAllocatedBuffers--;
1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetParameter()
1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetParameter(OMX_IN OMX_HANDLETYPE hComponent,
1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct,
1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pLocBufNeedMap)
1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFERS
1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_TI_PARAMUSENATIVEBUFFER *pParamNativeBuffer = NULL;
1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL);
1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p",
1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		hComponent, pCompPrv, nParamIndex, pParamStruct);
1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFERS
1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	switch(nParamIndex)
1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		case OMX_TI_IndexUseNativeBuffers:
1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			//Add check version.
1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pParamNativeBuffer = (OMX_TI_PARAMUSENATIVEBUFFER* )pParamStruct;
1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if(pParamNativeBuffer->bEnable == OMX_TRUE)
1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pCompPrv->proxyPortBuffers[pParamNativeBuffer->nPortIndex].proxyBufferType = GrallocPointers;
1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pCompPrv->proxyPortBuffers[pParamNativeBuffer->nPortIndex].IsBuffer2D = OMX_TRUE;
1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		default:
1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eRPCError =
1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				RPC_SetParameter(pCompPrv->hRemoteComp, nParamIndex, pParamStruct,
1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev					pLocBufNeedMap, &eCompReturn);
1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		RPC_SetParameter(pCompPrv->hRemoteComp, nParamIndex, pParamStruct,
1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pLocBufNeedMap, &eCompReturn);
1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT:
1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetParameter()
1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_SetParameter(OMX_IN OMX_HANDLETYPE hComponent,
1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct)
1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return __PROXY_SetParameter(hComponent, nParamIndex, pParamStruct, NULL);
1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name __PROXY_GetParameter()
1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetParameter(OMX_IN OMX_HANDLETYPE hComponent,
14099e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct,
14109e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		OMX_PTR pLocBufNeedMap)
1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL);
1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((hComp->pComponentPrivate != NULL),
14199e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda			OMX_ErrorBadParameter, NULL);
1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
14249e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p",
14259e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda		 hComponent, pCompPrv, nParamIndex, pParamStruct);
1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		RPC_GetParameter(pCompPrv->hRemoteComp, nParamIndex, pParamStruct,
14299e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda				pLocBufNeedMap, &eCompReturn);
1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
14339e964f98a366c756b96a97809b31579fdcc43e97Lakshman GowdaEXIT:
1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d index: 0x%x", eError, nParamIndex);
1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetParameter()
1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_GetParameter(OMX_IN OMX_HANDLETYPE hComponent,
1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct)
1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return __PROXY_GetParameter(hComponent, nParamIndex, pParamStruct, NULL);
1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name __PROXY_GetConfig()
1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetConfig(OMX_HANDLETYPE hComponent,
1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_INDEXTYPE nConfigIndex, OMX_PTR pConfigStruct, OMX_PTR pLocBufNeedMap)
1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pConfigStruct != NULL), OMX_ErrorBadParameter, NULL);
1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_ErrorBadParameter, NULL);
1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p, nConfigIndex = %d, "
1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				"pConfigStruct = %p",
1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				hComponent, pCompPrv, nConfigIndex,
1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pConfigStruct);
1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		RPC_GetConfig(pCompPrv->hRemoteComp, nConfigIndex, pConfigStruct,
1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pLocBufNeedMap, &eCompReturn);
1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT:
1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetConfig()
1498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_GetConfig(OMX_HANDLETYPE hComponent,
1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_INDEXTYPE nConfigIndex, OMX_PTR pConfigStruct)
1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return __PROXY_GetConfig(hComponent, nConfigIndex, pConfigStruct, NULL);
1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name __PROXY_SetConfig()
1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetConfig(OMX_IN OMX_HANDLETYPE hComponent,
1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_IN OMX_INDEXTYPE nConfigIndex, OMX_IN OMX_PTR pConfigStruct,
1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pLocBufNeedMap)
1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pConfigStruct != NULL), OMX_ErrorBadParameter, NULL);
1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((hComp->pComponentPrivate != NULL),
1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		OMX_ErrorBadParameter, NULL);
1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p, nConfigIndex = %d, "
1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				"pConfigStruct = %p",
1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				hComponent, pCompPrv, nConfigIndex,
1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				pConfigStruct);
1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		RPC_SetConfig(pCompPrv->hRemoteComp, nConfigIndex, pConfigStruct,
1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pLocBufNeedMap, &eCompReturn);
1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetConfig()
1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_SetConfig(OMX_IN OMX_HANDLETYPE hComponent,
1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_INDEXTYPE nConfigIndex, OMX_IN OMX_PTR pConfigStruct)
1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return __PROXY_SetConfig(hComponent, nConfigIndex, pConfigStruct, NULL);
1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetState()
1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_GetState(OMX_IN OMX_HANDLETYPE hComponent,
1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_OUT OMX_STATETYPE * pState)
1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = hComponent;
1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pState != NULL), OMX_ErrorBadParameter, NULL);
1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p", hComponent, pCompPrv);
1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_GetState(pCompPrv->hRemoteComp, pState, &eCompReturn);
1598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Returned from RPC_GetState, state: ", *pState);
1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SendCommand()
1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_SendCommand(OMX_IN OMX_HANDLETYPE hComponent,
1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_COMMANDTYPE eCmd,
1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData)
1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *pMarkComp = NULL;
1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pMarkCompPrv = NULL;
1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pMarkData = NULL, pMarkToBeFreedIfError = NULL;
1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bIsProxy = OMX_FALSE;
1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER
1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    ("hComponent = %p, pCompPrv = %p, eCmd = %d, nParam = %d, pCmdData = %p",
1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, eCmd, nParam, pCmdData);
1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eCmd == OMX_CommandMarkBuffer)
1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_require(pCmdData != NULL, OMX_ErrorBadParameter, NULL);
1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkComp = (OMX_COMPONENTTYPE *)
1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (((OMX_MARKTYPE *) pCmdData)->hMarkTargetComponent);
1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_require(pMarkComp != NULL, OMX_ErrorBadParameter, NULL);
1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* To check if mark comp is a proxy or a real component */
1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = _RPC_IsProxyComponent(pMarkComp, &bIsProxy);
1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError, "");
1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Replacing original mark data with proxy specific structure */
1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkData = ((OMX_MARKTYPE *) pCmdData)->pMarkData;
1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_MARKTYPE *) pCmdData)->pMarkData =
1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    TIMM_OSAL_Malloc(sizeof(PROXY_MARK_DATA), TIMM_OSAL_TRUE,
1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    0, TIMMOSAL_MEM_SEGMENT_INT);
1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(((OMX_MARKTYPE *) pCmdData)->pMarkData != NULL,
1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_ErrorInsufficientResources, "Malloc failed");
1660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMarkToBeFreedIfError =
1661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ((OMX_MARKTYPE *) pCmdData)->pMarkData;
1662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((PROXY_MARK_DATA *) (((OMX_MARKTYPE *)
1663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pCmdData)->pMarkData))->hComponentActual =
1664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pMarkComp;
1665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((PROXY_MARK_DATA *) (((OMX_MARKTYPE *)
1666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pCmdData)->pMarkData))->pMarkDataActual =
1667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pMarkData;
1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/* If it is proxy component then replace hMarkTargetComponent
1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		   with remote handle */
1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (bIsProxy)
1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pMarkCompPrv = pMarkComp->pComponentPrivate;
1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_assert(pMarkCompPrv != NULL,
1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_ErrorBadParameter, NULL);
1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			/* Replacing with remote component handle */
1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			((OMX_MARKTYPE *) pCmdData)->hMarkTargetComponent =
1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    ((RPC_OMX_CONTEXT *) pMarkCompPrv->hRemoteComp)->
1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    hActualRemoteCompHandle;
1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_SendCommand(pCompPrv->hRemoteComp, eCmd, nParam, pCmdData,
1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    &eCompReturn);
1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eCmd == OMX_CommandMarkBuffer && bIsProxy)
1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Resetting to original values */
1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_MARKTYPE *) pCmdData)->hMarkTargetComponent = pMarkComp;
1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_MARKTYPE *) pCmdData)->pMarkData = pMarkData;
1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*If SendCommand is about to return an error then this means that the
1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   command has not been accepted by the component. Thus the allocated mark data
1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   will be lost so free it here */
1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((eError != OMX_ErrorNone) && pMarkToBeFreedIfError)
1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pMarkToBeFreedIfError);
1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetComponentVersion()
1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_GetComponentVersion(OMX_IN OMX_HANDLETYPE
1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    hComponent, OMX_OUT OMX_STRING pComponentName,
1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_OUT OMX_VERSIONTYPE * pComponentVersion,
1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_OUT OMX_VERSIONTYPE * pSpecVersion,
1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_OUT OMX_UUIDTYPE * pComponentUUID)
1726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = hComponent;
1730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p", hComponent, pCompPrv);
1733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pComponentName != NULL, OMX_ErrorBadParameter, NULL);
1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pComponentVersion != NULL, OMX_ErrorBadParameter, NULL);
1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pSpecVersion != NULL, OMX_ErrorBadParameter, NULL);
1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pComponentUUID != NULL, OMX_ErrorBadParameter, NULL);
1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_GetComponentVersion(pCompPrv->hRemoteComp,
1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pComponentName,
1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pComponentVersion, pSpecVersion, pComponentUUID, &eCompReturn);
1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetExtensionIndex()
1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent,
1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType)
1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv = NULL;
1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = hComponent;
1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
1774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL);
1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL);
1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p, cParameterName = %s",
1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    hComponent, pCompPrv, cParameterName);
1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ENABLE_GRALLOC_BUFFERS
1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	// Check for NULL Parameters
1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((cParameterName != NULL && pIndexType != NULL),
1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	// Ensure that String length is not greater than Max allowed length
1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL);
1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if(strcmp(cParameterName, "OMX.google.android.index.enableAndroidNativeBuffers") == 0)
1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		// If Index type is 2D Buffer Allocated Dimension
1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexUseNativeBuffers;
1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		goto EXIT;
1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else if (strcmp(cParameterName, "OMX.google.android.index.useAndroidNativeBuffer2") == 0)
1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//This is call just a dummy for android to support backward compatibility
1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*pIndexType = (OMX_INDEXTYPE) NULL;
1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		goto EXIT;
1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else
1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eRPCError = RPC_GetExtensionIndex(pCompPrv->hRemoteComp,
1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                   cParameterName, pIndexType, &eCompReturn);
1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_checkRpcError();
1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else
1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_GetExtensionIndex(pCompPrv->hRemoteComp,
1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    cParameterName, pIndexType, &eCompReturn);
1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_ComponentRoleEnum()
1831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_ComponentRoleEnum(OMX_IN OMX_HANDLETYPE hComponent,
1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_OUT OMX_U8 * cRole, OMX_IN OMX_U32 nIndex)
1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p", hComponent);
1844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG(" EMPTY IMPLEMENTATION ");
1845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_ComponentTunnelRequest()
1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_ComponentTunnelRequest(OMX_IN OMX_HANDLETYPE
1862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    hComponent, OMX_IN OMX_U32 nPort, OMX_IN OMX_HANDLETYPE hTunneledComp,
1863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_IN OMX_U32 nTunneledPort,
1864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_INOUT OMX_TUNNELSETUPTYPE * pTunnelSetup)
1865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
1867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p", hComponent);
1869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG(" EMPTY IMPLEMENTATION ");
1870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetCallbacks()
1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_SetCallbacks(OMX_HANDLETYPE hComponent,
1887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_CALLBACKTYPE * pCallBacks, OMX_PTR pAppData)
1888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
1890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
1891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
1892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((pCallBacks != NULL), OMX_ErrorBadParameter, NULL);
1894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((hComp->pComponentPrivate != NULL),
1896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p, pCompPrv = %p", hComponent, pCompPrv);
1901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Store App callback and data to proxy- managed by proxy */
1903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->tCBFunc = *pCallBacks;
1904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->pILAppData = pAppData;
1905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
1907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
1908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
1909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_UseEGLImage()
1915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief : This returns error not implemented by default as no component
1916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *          implements this. In case there is a requiremet, support for this
1917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *          can be added later.
1918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE PROXY_UseEGLImage(OMX_HANDLETYPE hComponent,
1922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE ** ppBufferHdr,
1923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nPortIndex, OMX_PTR pAppPrivate, void *pBuffer)
1924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return OMX_ErrorNotImplemented;
1926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_ComponentDeInit()
1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
1936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
1937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
1938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
1939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_ComponentDeInit(OMX_HANDLETYPE hComponent)
1940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone, eTmpRPCError =
1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_OMX_ErrorNone;
1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
1945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
194649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	OMX_U32 count = 0, nStride = 0;
1947a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal	OMX_PTR pMetaDataBuffer = NULL;
1948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p", hComponent);
1950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((hComp->pComponentPrivate != NULL),
1952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
1953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
1955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
195649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	ion_close(pCompPrv->ion_fd);
195749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal
1958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (count = 0; count < pCompPrv->nTotalBuffers; count++)
1959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
1960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (pCompPrv->tBufList[count].pBufHeader)
1961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
1962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ALLOCATE_TILER_BUFFER_IN_PROXY
1963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if(pCompPrv->tBufList[count].pYBuffer)
1964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
1965a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
1966a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				if(pCompPrv->tBufList[count].pYBuffer)
1967a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				{
1968a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					if (pCompPrv->bUseIon == OMX_TRUE)
1969a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					{
1970a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						if(pCompPrv->bMapIonBuffers == OMX_TRUE)
1971a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						{
1972a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					                munmap(pCompPrv->tBufList[count].pBufHeader->pBuffer, pCompPrv->tBufList[count].pBufHeader->nAllocLen);
1973a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal							close(pCompPrv->tBufList[count].mmap_fd);
1974a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						}
1975a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						ion_free(pCompPrv->ion_fd, pCompPrv->tBufList[count].pYBuffer);
1976a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						pCompPrv->tBufList[count].pYBuffer = NULL;
1977a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					}
1978a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				}
1979a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
1980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				MemMgr_Free(pCompPrv->tBufList[count].pYBuffer);
1981a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
1982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
1983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1984a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			pMetaDataBuffer = ((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1985a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				pPlatformPrivate)->pMetaDataBuffer;
1986a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			if (pMetaDataBuffer)
1987a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			{
1988a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#ifdef USE_ION
1989a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				if (pCompPrv->bUseIon == OMX_TRUE)
1990a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				{
1991a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					if(pCompPrv->bMapIonBuffers == OMX_TRUE)
1992a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					{
1993a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			                        munmap(pMetaDataBuffer, ((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1994a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal								pPlatformPrivate)->nMetaDataSize);
1995a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						close(pCompPrv->tBufList[count].mmap_fd_metadata_buff);
1996a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					}
1997a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					ion_free(pCompPrv->ion_fd, pMetaDataBuffer);
1998a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal					((OMX_TI_PLATFORMPRIVATE *)(pCompPrv->tBufList[count].pBufHeader)->
1999a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal						pPlatformPrivate)->pMetaDataBuffer = NULL;
2000a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				}
2001a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#else
2002a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal				MemMgr_Free(pMetaDataBuffer);
2003a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal#endif
2004a05ce708888256c4798c419007cee864a60cd526Sarthak Aggarwal			}
2005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (pCompPrv->tBufList[count].pBufHeader->pPlatformPrivate)
2006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
2007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				TIMM_OSAL_Free(pCompPrv->tBufList[count].pBufHeader->
2008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    pPlatformPrivate);
2009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
2010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Free(pCompPrv->tBufList[count].pBufHeader);
2011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			TIMM_OSAL_Memset(&(pCompPrv->tBufList[count]), 0,
2012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    sizeof(PROXY_BUFFER_INFO));
2013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_FreeHandle(pCompPrv->hRemoteComp, &eCompReturn);
2017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eRPCError != RPC_OMX_ErrorNone)
2018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eTmpRPCError = eRPCError;
2019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_InstanceDeInit(pCompPrv->hRemoteComp);
2021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eRPCError != RPC_OMX_ErrorNone)
2022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eTmpRPCError = eRPCError;
2023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pCompPrv->cCompName)
2025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pCompPrv->cCompName);
2027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (pCompPrv)
2030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		TIMM_OSAL_Free(pCompPrv);
2032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = eTmpRPCError;
2035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
2036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name OMX_ProxyCommonInit()
2046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
2047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
2048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
2050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ProxyCommonInit(OMX_HANDLETYPE hComponent)
2054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
2056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
2057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_COMPONENT_PRIVATE *pCompPrv;
2058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent;
2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_HANDLETYPE hRemoteComp = NULL;
2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        OMX_U32 i = 0;
2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("hComponent = %p", hComponent);
2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_require((hComp->pComponentPrivate != NULL),
2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorBadParameter, NULL);
2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate;
2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->nTotalBuffers = 0;
2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->nAllocatedBuffers = 0;
2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->proxyEmptyBufferDone = PROXY_EmptyBufferDone;
2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->proxyFillBufferDone = PROXY_FillBufferDone;
2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->proxyEventHandler = PROXY_EventHandler;
2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for (i=0; i<PROXY_MAXNUMOFPORTS ; i++)
2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev              pCompPrv->proxyPortBuffers[i].proxyBufferType = VirtualPointers;
2078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_InstanceInit(pCompPrv->cCompName, &hRemoteComp);
2081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eRPCError == RPC_OMX_ErrorNone,
2082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorUndefined, "Error initializing RPC");
2083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(hRemoteComp != NULL,
2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_ErrorUndefined, "Error initializing RPC");
2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Send the proxy component handle for pAppData
2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_GetHandle(hRemoteComp, pCompPrv->cCompName,
2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) hComponent, NULL, &eCompReturn);
2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->SetCallbacks = PROXY_SetCallbacks;
2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->ComponentDeInit = PROXY_ComponentDeInit;
2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->UseBuffer = PROXY_UseBuffer;
2096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->GetParameter = PROXY_GetParameter;
2097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->SetParameter = PROXY_SetParameter;
2098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->EmptyThisBuffer = PROXY_EmptyThisBuffer;
2099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->FillThisBuffer = PROXY_FillThisBuffer;
2100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->GetComponentVersion = PROXY_GetComponentVersion;
2101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->SendCommand = PROXY_SendCommand;
2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->GetConfig = PROXY_GetConfig;
2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->SetConfig = PROXY_SetConfig;
2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->GetState = PROXY_GetState;
2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->GetExtensionIndex = PROXY_GetExtensionIndex;
2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->FreeBuffer = PROXY_FreeBuffer;
2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->ComponentRoleEnum = PROXY_ComponentRoleEnum;
2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->AllocateBuffer = PROXY_AllocateBuffer;
2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->ComponentTunnelRequest = PROXY_ComponentTunnelRequest;
2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	hComp->UseEGLImage = PROXY_UseEGLImage;
2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pCompPrv->hRemoteComp = hRemoteComp;
2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
211403187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal#ifdef USE_ION
211503187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal	pCompPrv->bUseIon = OMX_TRUE;
211603187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal	pCompPrv->bMapIonBuffers = OMX_TRUE;
211703187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal
211803187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal	pCompPrv->ion_fd = ion_open();
211949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal	if(pCompPrv->ion_fd == 0)
212073bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman	{
212103187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal		DOMX_ERROR("ion_open failed!!!");
212203187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal		return OMX_ErrorInsufficientResources;
212303187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal	}
212403187db146a199f5274a89261e3a6372587c483eSarthak Aggarwal#endif
2125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eError != OMX_ErrorNone)
2128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		RPC_InstanceDeInit(hRemoteComp);
2129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UTIL_GetStride()
2139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to determine whether buffer is 1D or 2D
2140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRemoteComp [IN]  : Remote component handle.
2141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nPortIndex [IN]   : Port index.
2142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nStride [OUT]     : Stride returned by the component.
2143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_GetStride(OMX_COMPONENTTYPE * hRemoteComp,
2147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nPortIndex, OMX_U32 * nStride)
2148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone;
2150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
2151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE sPortDef = { 0 };
2152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*Initializing Structure */
2154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
2155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR;
2156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR;
2157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nVersion.s.nRevision = 0x0;
2158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nVersion.s.nStep = 0x0;
2159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sPortDef.nPortIndex = nPortIndex;
2160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError =
2162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    RPC_GetParameter(hRemoteComp, OMX_IndexParamPortDefinition,
2163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) (&sPortDef), NULL, &eCompReturn);
2164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_checkRpcError();
2165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (sPortDef.eDomain == OMX_PortDomainVideo)
2167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*nStride = sPortDef.format.video.nStride;
2169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (sPortDef.eDomain == OMX_PortDomainImage)
2170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*nStride = sPortDef.format.image.nStride;
2172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (sPortDef.eDomain == OMX_PortDomainMax && nPortIndex == 0)
2173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		/*Temp - just for testing sample */
2175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*nStride = LINUX_PAGE_SIZE;
2176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
2177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*nStride = 0;
2179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UTIL_GetNumLines()
2190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
2191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
2192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
2194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_GetNumLines(OMX_COMPONENTTYPE * hRemoteComp,
2198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nPortIndex, OMX_U32 * nNumOfLines)
2199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eCompReturn;
2202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone;
2203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_BOOL bUseEnhancedPortReconfig = OMX_FALSE;
2204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PARAM_PORTDEFINITIONTYPE portDef;
2206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_CONFIG_RECTTYPE sRect;
2207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/*initializing Structure */
2211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
2212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nVersion.s.nVersionMajor = 0x1;
2213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nVersion.s.nVersionMinor = 0x1;
2214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nVersion.s.nRevision = 0x0;
2215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nVersion.s.nStep = 0x0;
2216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	portDef.nPortIndex = nPortIndex;
2218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nSize = sizeof(OMX_CONFIG_RECTTYPE);
2220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nVersion.s.nVersionMajor = 0x1;
2221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nVersion.s.nVersionMinor = 0x1;
2222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nVersion.s.nRevision = 0x0;
2223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nVersion.s.nStep = 0x0;
2224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nPortIndex = nPortIndex;
2226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nLeft = 0;
2227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nTop = 0;
2228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nHeight = 0;
2229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	sRect.nWidth = 0;
2230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef USE_ENHANCED_PORTRECONFIG
2232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	bUseEnhancedPortReconfig = OMX_TRUE;
2233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
2234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eRPCError = RPC_GetParameter(hRemoteComp,
2235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_TI_IndexParam2DBufferAllocDimension,
2236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (OMX_PTR) & sRect, NULL, &eCompReturn);
2237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eRPCError == RPC_OMX_ErrorNone)
2238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG(" PROXY_UTIL Get Parameter Successful");
2240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = eCompReturn;
2241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
2242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_ERROR("RPC_GetParameter returned error 0x%x", eRPCError);
2244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError = OMX_ErrorUndefined;
2245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		goto EXIT;
2246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (eCompReturn == OMX_ErrorNone && bUseEnhancedPortReconfig == OMX_FALSE)
2249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*nNumOfLines = sRect.nHeight;
2251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else if (eCompReturn == OMX_ErrorUnsupportedIndex || bUseEnhancedPortReconfig == OMX_TRUE)
2252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eRPCError =
2254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    RPC_GetParameter(hRemoteComp,
2255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_IndexParamPortDefinition, (OMX_PTR) & portDef,
2256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    NULL, &eCompReturn);
2257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (eRPCError == RPC_OMX_ErrorNone)
2259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_DEBUG(" PROXY_UTIL Get Parameter Successful");
2261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = eCompReturn;
2262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
2263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_ERROR("RPC_GetParameter returned error 0x%x",
2265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    eRPCError);
2266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError = OMX_ErrorUndefined;
2267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			goto EXIT;
2268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (eCompReturn == OMX_ErrorNone)
2271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			//start with 1 meaning 1D buffer
2274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			*nNumOfLines = 1;
2275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			if (portDef.eDomain == OMX_PortDomainVideo)
2277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
2278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				*nNumOfLines =
2279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    portDef.format.video.nFrameHeight;
2280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//DOMX_DEBUG("Port definition Type is video...");
2281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//DOMX_DEBUG("&&Colorformat is:%p", portDef.format.video.eColorFormat);
2282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//DOMX_DEBUG("nFrameHeight is:%d", portDef.format.video.nFrameHeight);
2283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//*nNumOfLines = portDef.format.video.nFrameHeight;
2284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//if((portDef.format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) ||
2286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//  (portDef.format.video.eColorFormat == OMX_COLOR_FormatYUV420Planar))
2287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//{
2288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//DOMX_DEBUG("Setting FrameHeight as Number of lines...");
2289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//*nNumOfLines = portDef.format.video.nFrameHeight;
2290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//}
2291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else if (portDef.eDomain == OMX_PortDomainImage)
2292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
2293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				DOMX_DEBUG
2294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    ("Image DOMAIN TILER SUPPORT for NV12 format only");
2295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				*nNumOfLines =
2296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				    portDef.format.image.nFrameHeight;
2297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else if (portDef.eDomain == OMX_PortDomainAudio)
2298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
2299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				DOMX_DEBUG("Audio DOMAIN TILER SUPPORT");
2300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else if (portDef.eDomain == OMX_PortDomainOther)
2301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{
2302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				DOMX_DEBUG("Other DOMAIN TILER SUPPORT");
2303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			} else
2304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			{	//this is the sample component test
2305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				//Temporary - just to get check functionality
2306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				DOMX_DEBUG("Sample component TILER SUPPORT");
2307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				*nNumOfLines = 4;
2308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			}
2309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
2310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			DOMX_ERROR(" ERROR IN RECOVERING UV POINTER");
2312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
2314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_ERROR(" ERROR IN RECOVERING UV POINTER");
2316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("Port Number: %d :: NumOfLines %d", nPortIndex,
2319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    *nNumOfLines);
2320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if 0
2329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_PrepareBuffer_Chiron(PROXY_COMPONENT_PRIVATE * pCompPrv,
2331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_COMPONENTTYPE * hRemoteComp, OMX_U32 nPortIndex, OMX_U32 nSizeBytes,
2332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pDucBuf, OMX_BUFFERHEADERTYPE * pChironBuf)
2333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nNumOfLines = 1;
2336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pBuffer;
2337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DSPtr dsptr[2];
2339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	bytes_t lengths[2];
2340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 i = 0;
2341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 numBlocks = 0;
2342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBuffer = pDucBuf->pBuffer;
2344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (((OMX_TI_PLATFORMPRIVATE *) pDucBuf->pPlatformPrivate)->
2348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    pAuxBuf1 == NULL)
2349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("One component buffer");
2351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (!(pCompPrv->nNumOfLines[nPortIndex]))
2353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->nNumOfLines[nPortIndex] = 1;
2355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		dsptr[0] = (OMX_U32) pBuffer;
2358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		numBlocks = 1;
2359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		lengths[0] =
2360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    LINUX_PAGE_SIZE * ((nSizeBytes + (LINUX_PAGE_SIZE -
2361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    1)) / LINUX_PAGE_SIZE);
2362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
2363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("Two component buffers");
2365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		dsptr[0] = (OMX_U32) pBuffer;
2366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		dsptr[1] =
2367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (OMX_U32) (((OMX_TI_PLATFORMPRIVATE *)
2368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pDucBuf->pPlatformPrivate)->pAuxBuf1);
2369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (!(pCompPrv->nNumOfLines[nPortIndex]))
2371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError =
2373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    RPC_UTIL_GetNumLines(hRemoteComp, nPortIndex,
2374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    &nNumOfLines);
2375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_assert((eError == OMX_ErrorNone),
2376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    OMX_ErrorUndefined,
2377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    "ERROR WHILE GETTING FRAME HEIGHT");
2378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->nNumOfLines[nPortIndex] = nNumOfLines;
2380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
2381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			nNumOfLines = pCompPrv->nNumOfLines[nPortIndex];
2383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		lengths[0] = nNumOfLines * LINUX_PAGE_SIZE;
2386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		lengths[1] = nNumOfLines / 2 * LINUX_PAGE_SIZE;
2387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		numBlocks = 2;
2388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	//Map back to chiron
2391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_DEBUG("NumBlocks = %d", numBlocks);
2392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < numBlocks; i++)
2393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("dsptr[%d] = %p", i, dsptr[i]);
2395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG("length[%d] = %d", i, lengths[i]);
2396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pDucBuf->pBuffer =
2399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    tiler_assisted_phase1_D2CReMap(numBlocks, dsptr, lengths);
2400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert((pDucBuf->pBuffer != NULL), OMX_ErrorUndefined,
2401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Mapping to Chiron failed");
2402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Takes chiron buffer buffer header and updates with ducati buffer ptr and UV ptr
2410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_PrepareBuffer_Remote(PROXY_COMPONENT_PRIVATE * pCompPrv,
2411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_COMPONENTTYPE * hRemoteComp, OMX_U32 nPortIndex,
2412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nSizeBytes, OMX_BUFFERHEADERTYPE * pChironBuf,
2413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BUFFERHEADERTYPE * pDucBuf, OMX_PTR pBufToBeMapped)
2414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nNumOfLines = 1;
2417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U8 *pBuffer;
2418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	pBuffer = pChironBuf->pBuffer;
2422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (!MemMgr_Is2DBlock(pBuffer))
2424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (!(pCompPrv->nNumOfLines[nPortIndex]))
2427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->nNumOfLines[nPortIndex] = 1;
2429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pChironBuf->pBuffer = NULL;
2432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
2433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    RPC_MapBuffer_Ducati(pBuffer, nSizeBytes, nNumOfLines,
2434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    &(pChironBuf->pBuffer), pBufToBeMapped);
2435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError, "Map failed");
2436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	} else
2437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (!(pCompPrv->nNumOfLines[nPortIndex]))
2439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			eError =
2441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    RPC_UTIL_GetNumLines(hRemoteComp, nPortIndex,
2442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    &nNumOfLines);
2443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			PROXY_assert((eError == OMX_ErrorNone), eError,
2444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    "ERROR WHILE GETTING FRAME HEIGHT");
2445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			pCompPrv->nNumOfLines[nPortIndex] = nNumOfLines;
2447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		} else
2448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		{
2449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			nNumOfLines = pCompPrv->nNumOfLines[nPortIndex];
2450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		}
2451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pChironBuf->pBuffer = NULL;
2453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_TI_PLATFORMPRIVATE *) (pChironBuf->pPlatformPrivate))->
2454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pAuxBuf1 = NULL;
2455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
2457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    RPC_MapBuffer_Ducati(pBuffer, LINUX_PAGE_SIZE,
2458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    nNumOfLines, &(pChironBuf->pBuffer), pBufToBeMapped);
2459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError, "Map failed");
2460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		eError =
2461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    RPC_MapBuffer_Ducati((OMX_U8 *) ((OMX_U32) pBuffer +
2462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			nNumOfLines * LINUX_PAGE_SIZE), LINUX_PAGE_SIZE,
2463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    nNumOfLines / 2,
2464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (OMX_U8 **) (&((OMX_TI_PLATFORMPRIVATE
2465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev				*) (pChironBuf->pPlatformPrivate))->pAuxBuf1),
2466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufToBeMapped);
2467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(eError == OMX_ErrorNone, eError, "Map failed");
2468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*(OMX_U32 *) pBufToBeMapped = (OMX_U32) pBuffer;
2469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_MapBuffer_Ducati()
2480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
2481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
2482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
2484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_MapBuffer_Ducati(OMX_U8 * pBuf, OMX_U32 nBufLineSize,
2488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_U32 nBufLines, OMX_U8 ** pMappedBuf, OMX_PTR pBufToBeMapped)
2489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	ProcMgr_MapType mapType;
2491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	SyslinkMemUtils_MpuAddrToMap MpuAddr_list_1D = { 0 };
2492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	MemAllocBlock block = { 0 };
2493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_S32 status;
2494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nDiff = 0;
2495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	*(OMX_U32 *) pBufToBeMapped = (OMX_U32) pBuf;
2500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (!MemMgr_IsMapped(pBuf) && (nBufLines == 1))
2502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		DOMX_DEBUG
2504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ("Buffer is not mapped: Mapping as 1D buffer now..");
25051f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev		block.fmt = PIXEL_FMT_PAGE;
2506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		block.ptr = (OMX_PTR) (((OMX_U32) pBuf / LINUX_PAGE_SIZE) *
2507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    LINUX_PAGE_SIZE);
2508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		block.dim.len = (OMX_U32) ((((OMX_U32) pBuf + nBufLineSize +
2509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    LINUX_PAGE_SIZE - 1) / LINUX_PAGE_SIZE) *
2510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    LINUX_PAGE_SIZE) - (OMX_U32) block.ptr;
2511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		block.stride = 0;
2512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nDiff = (OMX_U32) pBuf - (OMX_U32) block.ptr;
2513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		(*(OMX_U32 *) (pBufToBeMapped)) =
2515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (OMX_U32) (MemMgr_Map(&block, 1));
2516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(*(OMX_U32 *) pBufToBeMapped != 0,
2517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_ErrorInsufficientResources,
2518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Map to TILER space failed");
2519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//*pMappedBuf = MemMgr_Map(&block, 1);
2520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if (MemMgr_IsMapped((OMX_PTR) (*(OMX_U32 *) pBufToBeMapped)))
2523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//If Tiler 1D buffer, get corresponding ducati address and send out buffer to ducati
2525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//For 2D buffers, in phase1, retrive the ducati address (SSPtrs) for Y and UV buffers
2526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		//and send out buffer to ducati
2527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		mapType = ProcMgr_MapType_Tiler;
2528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		MpuAddr_list_1D.mpuAddr =
2529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (*(OMX_U32 *) pBufToBeMapped) + nDiff;
2530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		MpuAddr_list_1D.size = nBufLineSize * nBufLines;
2531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		status =
2533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    SysLinkMemUtils_map(&MpuAddr_list_1D, 1,
2534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (UInt32 *) pMappedBuf, mapType, PROC_APPM3);
2535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert(status >= 0, OMX_ErrorInsufficientResources,
2536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Syslink map failed");
2537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UnMapBuffer_Ducati()
2549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief
2550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param
2551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return
2552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa
2553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UnMapBuffer_Ducati(OMX_PTR pBuffer)
2557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 status = 0;
2559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	status = MemMgr_UnMap(pBuffer);
2564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(status == 0, OMX_ErrorUndefined,
2565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "MemMgr_UnMap returned an error");
2566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_MapMetaData_Host()
2575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief This utility maps metadata buffer in OMX buffer header to Chiron
2576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * virtual address space (metadata buffer is TILER 1D buffer in Ducati Virtual
2577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * space). It overrides the metadata buffer with Chiron address in the same
2578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * field. Metadata buffer size represents max size (alloc size) that needs to
2579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * be mapped
2580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
2581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
2583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_MapMetaData_Host(OMX_BUFFERHEADERTYPE * pBufHdr)
2587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_PTR pMappedMetaDataBuffer = NULL;
2589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 nMetaDataSize = 0;
2590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DSPtr dsptr[2];
2593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	bytes_t lengths[2];
2594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 numBlocks = 0;
2595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((pBufHdr->pPlatformPrivate != NULL) &&
2599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (((OMX_TI_PLATFORMPRIVATE *) pBufHdr->pPlatformPrivate)->
2600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMetaDataBuffer != NULL))
2601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMappedMetaDataBuffer = NULL;
2604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nMetaDataSize =
2606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    ((OMX_TI_PLATFORMPRIVATE *) pBufHdr->pPlatformPrivate)->
2607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    nMetaDataSize;
2608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((nMetaDataSize != 0), OMX_ErrorBadParameter,
2609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Received ZERO metadata size from Ducati, cannot map");
2610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		dsptr[0] =
2612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    (OMX_U32) ((OMX_TI_PLATFORMPRIVATE *)
2613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pBufHdr->pPlatformPrivate)->pMetaDataBuffer;
2614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		numBlocks = 1;
2615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		lengths[0] =
2616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    LINUX_PAGE_SIZE * ((nMetaDataSize + (LINUX_PAGE_SIZE -
2617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    1)) / LINUX_PAGE_SIZE);
2618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMappedMetaDataBuffer =
2620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    tiler_assisted_phase1_D2CReMap(numBlocks, dsptr, lengths);
2621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((pMappedMetaDataBuffer != NULL),
2623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    OMX_ErrorInsufficientResources,
2624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Mapping metadata to Chiron space failed");
2625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		((OMX_TI_PLATFORMPRIVATE *) pBufHdr->pPlatformPrivate)->
2627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    pMetaDataBuffer = pMappedMetaDataBuffer;
2628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UnMapMetaData_Host()
2638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief This utility unmaps the previously mapped metadata on host from remote
2639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * components
2640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void
2641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD
2643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
2645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UnMapMetaData_Host(OMX_BUFFERHEADERTYPE * pBufHdr)
2647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_S32 nReturn = 0;
2650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_ENTER("");
2652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((pBufHdr->pPlatformPrivate != NULL) &&
2654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    (((OMX_TI_PLATFORMPRIVATE *) pBufHdr->pPlatformPrivate)->
2655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		pMetaDataBuffer != NULL))
2656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		nReturn =
2659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    tiler_assisted_phase1_DeMap((((OMX_TI_PLATFORMPRIVATE *)
2660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			    pBufHdr->pPlatformPrivate)->pMetaDataBuffer));
2661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		PROXY_assert((nReturn == 0), OMX_ErrorUndefined,
2662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		    "Metadata unmap failed");
2663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	DOMX_EXIT("eError: %d", eError);
2666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
2670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/**
2673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name _RPC_IsProxyComponent()
2674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief This function calls GetComponentVersion API on the component and
2675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *        based on the component name decidec whether the component is a proxy
2676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *        or real component. The naming component convention assumed is
2677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *        <OMX>.<Company Name>.<Core Name>.<Domain>.<Component Details> with
2678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *        all characters in upper case for e.g. OMX.TI.DUCATI1.VIDEO.H264E
2679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hComponent [IN] : The component handle
2680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *        bIsProxy [OUT]  : Set to true is handle is for a proxy component
2681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful
2682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
2683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev **/
2684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/
2685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE _RPC_IsProxyComponent(OMX_HANDLETYPE hComponent,
2686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    OMX_BOOL * bIsProxy)
2687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_ERRORTYPE eError = OMX_ErrorNone;
2689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_S8 cComponentName[MAXNAMESIZE] = { 0 }
2690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	, cCoreName[32] =
2691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	0};
2693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_VERSIONTYPE sCompVer, sSpecVer;
2694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_UUIDTYPE sCompUUID;
2695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	OMX_U32 i = 0, ret = 0;
2696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	eError =
2698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    OMX_GetComponentVersion(hComponent, (OMX_STRING) cComponentName,
2699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    &sCompVer, &sSpecVer, &sCompUUID);
2700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(eError == OMX_ErrorNone, eError, "");
2701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	ret =
2702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    sscanf((char *)cComponentName, "%*[^'.'].%*[^'.'].%[^'.'].%*s",
2703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    cCoreName);
2704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(ret == 1, OMX_ErrorBadParameter,
2705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Incorrect component name");
2706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	for (i = 0; i < CORE_MAX; i++)
2707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	{
2708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		if (strcmp((char *)cCoreName, Core_Array[i]) == 0)
2709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev			break;
2710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	}
2711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	PROXY_assert(i < CORE_MAX, OMX_ErrorBadParameter,
2712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	    "Unknown core name");
2713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	/* If component name indicates remote core, it means proxy
2715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	   component */
2716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	if ((i == CORE_SYSM3) || (i == CORE_APPM3) || (i == CORE_TESLA))
2717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*bIsProxy = OMX_TRUE;
2718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	else
2719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev		*bIsProxy = OMX_FALSE;
2720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev      EXIT:
2722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev	return eError;
2723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2724