1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License as published by the Free Software Foundation; either
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Lesser General Public License for more details.
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ==============================================================================
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*             Texas Instruments OMAP (TM) Platform Software
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  Use of this software is controlled by the terms and conditions found
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ============================================================================ */
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @file OMX_VPP.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements OMX Component for VPP that
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* is  compliant with the OMX khronos 1.0.
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @path  $(CSLPATH)\
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @rev  1.0
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! Revision History
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! ===================================
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 17-april-2005 mf:  Initial Version. Change required per OMAPSWxxxxxxxxx
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! to provide _________________.
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ============================================================================= */
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  INCLUDE FILES
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------program files ----------------------------------------*/
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "LCML_DspCodec.h"
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP.h"
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_Utils.h"
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_CompThread.h"
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "perf.h"
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <ResourceManagerProxyAPI.h>
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_CONTRAST_MIN     -100
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_CONTRAST_MAX     100
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_CONTRAST_OFFSET  100
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_CONTRAST_FACTOR  64/100
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_MAX_NAMESIZE     127
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_NUM_CUSTOM_PARAMS 9
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  EXTERNAL REFERENCES NOTE : only use if not found in header file
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  PUBLIC DECLARATIONS Defined here, used elsewhere
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  PRIVATE DECLARATIONS Defined here, used only here
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* --------- Globals ------------ */
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_STRING cVPPName = "OMX.TI.VPP";
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic VPP_CUSTOM_PARAM_DEFINITION sVPPCustomParams[VPP_NUM_CUSTOM_PARAMS] = {
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.ZoomFactor", OMX_IndexCustomSetZoomFactor},
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.ZoomLimit", OMX_IndexCustomSetZoomLimit},
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.ZoomSpeed", OMX_IndexCustomSetZoomSpeed},
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.ZoomXoffsetFromCenter16", OMX_IndexCustomSetZoomXoffsetFromCenter16},
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.ZoomYoffsetFromCenter16", OMX_IndexCustomSetZoomYoffsetFromCenter16},
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.FrostedGlassOvly", OMX_IndexCustomSetFrostedGlassOvly},
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.VideoColorRange", OMX_IndexCustomVideoColorRange},
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Param.RGB4ColorFormat", OMX_IndexCustomRGB4ColorFormat},
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {"OMX.TI.VPP.Config.InputSize",OMX_IndexCustomConfigInputSize}
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    };
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetCallbacks (OMX_HANDLETYPE hComp,
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_CALLBACKTYPE* pCallBacks,
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_PTR pAppData);
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetComponentVersion (OMX_HANDLETYPE   hComp,
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_STRING       szComponentName,
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_VERSIONTYPE* pComponentVersion,
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_VERSIONTYPE* pSpecVersion,
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_UUIDTYPE*    pComponentUUID
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              );
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SendCommand (OMX_IN OMX_HANDLETYPE  hComponent,
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_COMMANDTYPE Cmd,
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_U32         nParam,
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_PTR         pCmdData
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      );
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetParameter(OMX_HANDLETYPE hComp,
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_INDEXTYPE nParamIndex,
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_PTR pComponentParameterStructure);
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetParameter (OMX_HANDLETYPE hComp,
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_INDEXTYPE nParamIndex,
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_PTR ComponentParameterStructure);
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetConfig (OMX_HANDLETYPE hComp,
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_INDEXTYPE nConfigIndex,
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_PTR ComponentConfigStructure);
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetConfig (OMX_HANDLETYPE hComp,
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_INDEXTYPE nConfigIndex,
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_PTR ComponentConfigStructure);
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBufHdr);
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_FillThisBuffer (OMX_HANDLETYPE hComp,OMX_BUFFERHEADERTYPE* pBufferHdr);
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_ComponentTunnelRequest (OMX_HANDLETYPE hComp,
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_U32 nPort,
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_HANDLETYPE hTunneledComp,
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_U32 nTunneledPort,
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_ComponentDeInit(OMX_HANDLETYPE pHandle);
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_IN OMX_U32 nPortIndex,
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_IN OMX_PTR pAppPrivate,
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_IN OMX_U32 nSizeBytes,
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_IN OMX_U8* pBuffer);
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent,
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_IN OMX_U32 nPortIndex,
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_IN OMX_PTR pAppPrivate,
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_IN OMX_U32 nSizeBytes);
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_IN  OMX_U32 nPortIndex,
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_IN  OMX_BUFFERHEADERTYPE* pBufHeader);
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent,
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_IN OMX_STRING cParameterName,
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_OUT OMX_INDEXTYPE* pIndexType);
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_IN OMX_HANDLETYPE hComponent,
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_OUT OMX_U8 *cRole,
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_IN OMX_U32 nIndex);
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * AllocateBuffer()
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * Allocate a video driver buffer.
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_ErrorNone                    Successful operation.
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorBadParameter            Invalid operation.
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorIncorrectStateOperation If called when port is disabled.
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent,
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes)
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComponent;
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE* pComponentPrivate = NULL;
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHdr = NULL;
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8  *pBufferAligned = NULL;
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8  *pBufferStart = NULL;
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DIRTYPE nDirection = OMX_DirMax;
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nBufSize;
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComponent, ppBufferHdr, OMX_TRUE);
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::Inside the AllocateBuffer portindex =%ld\n",nPortIndex);
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nPortIndex) {
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef = &(pComponentPrivate->sCompPorts[nPortIndex].pPortDef);
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("OMX_ErrorBadparameter AllocateBuffer!!\n");
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nBufferSize > nSizeBytes) {
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nBufSize   = pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nBufferSize;
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nBufSize = nSizeBytes;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nDirection = pComponentPrivate->sCompPorts[nPortIndex].pPortDef.eDir;
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nCount  = pComponentPrivate->sCompPorts[nPortIndex].nBufferCount;
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Allocate memory for all input buffer headers..
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    * This memory pointer will be sent to LCML */
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC (pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufHeader     = pBufferHdr;
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nCount].bSelfAllocated = OMX_TRUE;
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d :: --------- Inside Ip Loop\n",__LINE__);
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer --.5   pBufferHdr =%p\n" ,  pBufferHdr);
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nSize      = sizeof(OMX_BUFFERHEADERTYPE);
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nAllocLen  = nBufSize;
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nFilledLen = 0;
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nVersion.s.nVersionMajor = VPP_MAJOR_VER;
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nVersion.s.nVersionMinor = VPP_MINOR_VER;
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* TO CONDITION FOR INPUT AND OUTPUT PORT */
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer --1   pBufferHdr =%p\n" ,  pBufferHdr);
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nDirection == OMX_DirInput) {
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->pInputPortPrivate  = &(pComponentPrivate->sCompPorts[nPortIndex].pPortDef);
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->pOutputPortPrivate = NULL;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->nOutputPortIndex   = OMX_NOPORT;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->nInputPortIndex    = nPortIndex;
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT){
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Allocate buffer for overlay process only one buffer*/
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->RGBbuffer == NULL){
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_MALLOC(pComponentPrivate->RGBbuffer, nBufSize);
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->pOutputPortPrivate = &(pComponentPrivate->sCompPorts[nPortIndex].pPortDef);
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->pInputPortPrivate  = NULL;
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->nOutputPortIndex   = nPortIndex;
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->nInputPortIndex    = OMX_NOPORT;
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer --2  pBufferHdr =%p\n" ,  pBufferHdr);
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->pPlatformPrivate = pHandle->pComponentPrivate;
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->pAppPrivate      = pAppPrivate;
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->pMarkData        = NULL;
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nTickCount       = 0;
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nTimeStamp     = 0;
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pBufferStart, nBufSize + 32 + 256);
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferAligned = pBufferStart;
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while ((((int)pBufferAligned) & 0x1f) != 0)
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferAligned++;
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer pBuffer =%p\n",pBufferHdr);
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP:: Inside the AllocateBuffer   pBuffer->pBuffer =%p\n" ,  pBufferHdr->pBuffer);
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer --3  pBuffer =%p\n",pBufferHdr);
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferAligned            = ((OMX_U8*)pBufferAligned) +128;
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->pBuffer            = pBufferAligned;
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufferStart = pBufferStart;
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].nBufferCount++;
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferHdr->pBuffer,
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferHdr->nAllocLen,
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_ModuleMemory);
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the AllocateBuffer ( nBufferCountActual  =%ld nBufferCount =%ld " ,
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nBufferCountActual,
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].nBufferCount);
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nBufferCountActual ==
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[nPortIndex].nBufferCount) {
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef->bPopulated = OMX_TRUE;
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_InitBufferDataPropagation(pComponentPrivate, nPortIndex);
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::Inside the AllocateBuffer PORT populated\n" );
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    * ppBufferHdr =  pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufHeader;
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone){
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREE(pComponentPrivate->RGBbuffer);
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * FreeBuffer()
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * Free buffer allocated for VPP.
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_ErrorNone                    Successful operation.
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorBadParameter            Invalid operation.
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorIncorrectStateOperation If called when port is disabled.
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_IN  OMX_U32 nPortIndex,
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_IN  OMX_BUFFERHEADERTYPE* pBufHeader)
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)hComponent;
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pMyData = NULL;
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8  *pBufferStart = NULL;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComponent, pBufHeader, OMX_TRUE);
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pMyData, OMX_TRUE, OMX_TRUE);
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!((nPortIndex == OMX_VPP_INPUT_PORT) ||
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT) ||
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (nPortIndex == OMX_VPP_RGB_OUTPUT_PORT)||
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (nPortIndex == OMX_VPP_YUV_OUTPUT_PORT))){
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP.c: VPP_FreeBuffer port %d\n", nPortIndex);
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP:: # allocated buffers = %d\n", pMyData->sCompPorts[nPortIndex].nBufferCount);
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pBufHeader, pMyData, nPortIndex, &nCount);
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone){
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferStart = pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufferStart;
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT(" Free_ComponentResources --nPortIndex= %d, Header = %p \n", nPortIndex,
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufHeader);
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].bSelfAllocated == OMX_TRUE) {
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d :: FreeBuffer --1\n",__LINE__);
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pBufHeader) {
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHeader->pBuffer) {
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_SendingFrame(pMyData->pPERF,
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHeader->pBuffer,
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHeader->nAllocLen,
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleMemory);
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               VPP_DPRINT ("VPP::%d :: FreeBuffer --1.5\n",__LINE__);
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_FREE(pBufferStart);
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufferStart = NULL;
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHeader->pBuffer = NULL;
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("VPP::%d :: FreeBuffer --1.6\n",__LINE__);
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FREE(pBufHeader);
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHeader = NULL;
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pBufHeader) {
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_SendingFrame(pMyData->pPERF,
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHeader->pBuffer,
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHeader->nAllocLen,
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleHLMM);
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FREE(pBufHeader);
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHeader = NULL;
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData->sCompPorts[nPortIndex].nBufferCount--;
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	VPP_DPRINT("nBufferCount %d\n", pMyData->sCompPorts[nPortIndex].nBufferCount);
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pMyData->sCompPorts[nPortIndex].nBufferCount == 0) {
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		VPP_DPRINT("port %d is unpopulated\n", nPortIndex);
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pMyData->sCompPorts[nPortIndex].pPortDef.bPopulated = OMX_FALSE;
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pMyData->sCompPorts[nPortIndex].pPortDef.bEnabled &&
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((pMyData->curState == OMX_StateIdle && pMyData->toState != OMX_StateLoaded) ||
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pMyData->curState == OMX_StateExecuting ||
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pMyData->curState == OMX_StatePause)) {
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					VPP_DPRINT("FreeBuf: cur state %d to %d\n", pMyData->curState, pMyData->toState);
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pMyData->cbInfo.EventHandler (pMyData->pHandle,
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pMyData->pHandle->pApplicationPrivate,
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_EventError,
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ErrorPortUnpopulated,
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_TI_ErrorMinor,
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    "port unpopulated");
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	VPP_DPRINT("nPortIndex %d\n", nPortIndex);
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	VPP_DPRINT("pPortDef->bEnabled %d pPortDef->bPopulated %d pMyData->bDisableIncomplete[nPortIndex] %d (%d)\n",
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pMyData->sCompPorts[nPortIndex].pPortDef.bEnabled,
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pMyData->sCompPorts[nPortIndex].pPortDef.bPopulated,
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pMyData->bDisableIncomplete[nPortIndex],
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			nPortIndex);
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      if ((!pMyData->sCompPorts[nPortIndex].pPortDef.bEnabled) &&
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		  (pMyData->sCompPorts[nPortIndex].pPortDef.bPopulated == OMX_FALSE)) {
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			  VPP_DPRINT("VPP: %d\n", __LINE__);
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pMyData->bDisableIncomplete[nPortIndex] == OMX_TRUE) {
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pMyData->sCompPorts[nPortIndex].pPortDef.bEnabled = OMX_FALSE;
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pMyData->bDisableIncomplete[nPortIndex] = OMX_FALSE;
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			VPP_DPRINT("send OMX_CommandPortDisable for port %d\n", nPortIndex);
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    pMyData->cbInfo.EventHandler (pMyData->pHandle,
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												pMyData->pHandle->pApplicationPrivate,
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_EventCmdComplete,
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_CommandPortDisable,
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												nPortIndex,
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												NULL);
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      	}
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*----------------------------------------------------------------------------*/
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  UseBuffer()
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*----------------------------------------------------------------------------*/
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_IN OMX_U32 nPortIndex,
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_IN OMX_PTR pAppPrivate,
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_IN OMX_U32 nSizeBytes,
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_IN OMX_U8* pBuffer)
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)hComponent;
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pMyData = NULL;
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBufListObj = NULL;
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComponent, ppBufferHdr, pBuffer);
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::UseBuffer nPortIndex= %lu\n",nPortIndex);
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pMyData, OMX_TRUE, OMX_TRUE);
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == pMyData->pInPortFormat->nPortIndex) {
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef = &(pMyData->sCompPorts[nPortIndex].pPortDef);
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (nPortIndex == pMyData->pInPortOverlayFormat->nPortIndex) {
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef = &(pMyData->sCompPorts[nPortIndex].pPortDef);
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (nPortIndex == pMyData->pOutPortRGBFormat->nPortIndex) {
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef = &(pMyData->sCompPorts[nPortIndex].pPortDef);
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (nPortIndex == pMyData->pOutPortYUVFormat->nPortIndex) {
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef = &(pMyData->sCompPorts[nPortIndex].pPortDef);
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pPortDef->bEnabled) {
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorIncorrectStateOperation);
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pBufListObj, sizeof(OMX_BUFFERHEADERTYPE));
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT((pBufListObj), OMX_BUFFERHEADERTYPE);
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufListObj->pBuffer          = pBuffer;
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufListObj->pPlatformPrivate = NULL;
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufListObj->nAllocLen        = nSizeBytes;
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((nPortIndex == pMyData->pInPortFormat->nPortIndex) ||
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (nPortIndex == pMyData->pInPortOverlayFormat->nPortIndex)) {
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->nInputPortIndex = nPortIndex;
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pMyData->sCompPorts[nPortIndex].hTunnelComponent) {
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufListObj->nOutputPortIndex = OMX_NOPORT;
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufListObj->nOutputPortIndex = pMyData->sCompPorts[nPortIndex].nTunnelPort;
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->pInputPortPrivate  = &(pMyData->sCompPorts[nPortIndex].pPortDef);
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->pOutputPortPrivate = NULL;
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT){
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Allocate buffer for overlay process only one buffer*/
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pMyData->RGBbuffer == NULL){
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_MALLOC(pMyData->RGBbuffer, nSizeBytes);
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (( nPortIndex == pMyData->pOutPortRGBFormat->nPortIndex) ||
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ( nPortIndex == pMyData->pOutPortYUVFormat->nPortIndex)) {
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->nOutputPortIndex = nPortIndex;
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pMyData->sCompPorts[nPortIndex].hTunnelComponent) {
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufListObj->nInputPortIndex = OMX_NOPORT;
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufListObj->nInputPortIndex = pMyData->sCompPorts[nPortIndex].nTunnelPort;
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->pInputPortPrivate = NULL;
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufListObj->pOutputPortPrivate = &(pMyData->sCompPorts[nPortIndex].pPortDef);
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nCount = pMyData->sCompPorts[nPortIndex].nBufferCount;
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].pBufHeader = pBufListObj;
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].bSelfAllocated = OMX_FALSE;
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pMyData->sCompPorts[nPortIndex].hTunnelComponent) {
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pMyData->sCompPorts[nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pMyData->sCompPorts[nPortIndex].nBufferCount++;
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pMyData->sCompPorts[nPortIndex].nBufferCount == pPortDef->nBufferCountActual) {
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef->bPopulated = OMX_TRUE;
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_InitBufferDataPropagation(pMyData, nPortIndex);
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *ppBufferHdr = pBufListObj;
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("In UseBuffer: pBufferHdr is %p, (int) %p, (out)%p \n",
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *ppBufferHdr,
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pBufListObj->pInputPortPrivate),
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pBufListObj->pOutputPortPrivate));
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::Exit UseBuffer with Error=0x%X",eError);
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_ReceivedFrame(pMyData->pPERF,
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufListObj->pBuffer,
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufListObj->nAllocLen,
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_ModuleHLMM);
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * OMX_ComponentInit() Set the all the function pointers of component
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update the component function pointer to the handle
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorInsufficientResources If the malloc fails
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError       = OMX_ErrorUndefined;
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8  colorKey[3]  = {3,5,250}; /*RGB*/
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pTemp = NULL;
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComp, OMX_TRUE, OMX_TRUE);
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList_Create(&AllocList);
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set the all component function pointer to the handle*/
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetCallbacks           = VPP_SetCallbacks;
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetComponentVersion    = VPP_GetComponentVersion;
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SendCommand            = VPP_SendCommand;
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetParameter           = VPP_GetParameter;
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetParameter           = VPP_SetParameter;
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetConfig              = VPP_GetConfig;
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetConfig              = VPP_SetConfig;
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetState               = VPP_GetState;
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->EmptyThisBuffer        = VPP_EmptyThisBuffer;
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FillThisBuffer         = VPP_FillThisBuffer;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentTunnelRequest = VPP_ComponentTunnelRequest;
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentDeInit        = VPP_ComponentDeInit;
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->AllocateBuffer         = VPP_AllocateBuffer;
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->UseBuffer              = VPP_UseBuffer;
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FreeBuffer             = VPP_FreeBuffer;
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetExtensionIndex      = VPP_GetExtensionIndex;
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentRoleEnum      = ComponentRoleEnum;
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Allocate the memory for Component private data area*/
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   OMX_MALLOC(pHandle->pComponentPrivate, sizeof(VPP_COMPONENT_PRIVATE));
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Allcocating FrameStatus*/
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pIpFrameStatus, sizeof(GPPToVPPInputFrameStatus) + 256);
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = ((OMX_U8*)(pComponentPrivate->pIpFrameStatus))+128;
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus =  (GPPToVPPInputFrameStatus *)pTemp;
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pOpYUVFrameStatus, sizeof(GPPToVPPOutputFrameStatus) + 256);
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = ((OMX_U8*)(pComponentPrivate->pOpYUVFrameStatus))+128;
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpYUVFrameStatus = (GPPToVPPOutputFrameStatus *)pTemp;
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pOpRGBFrameStatus, sizeof(GPPToVPPOutputFrameStatus) + 256);
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = ((OMX_U8*)(pComponentPrivate->pOpRGBFrameStatus))+128;
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpRGBFrameStatus = (GPPToVPPOutputFrameStatus *)pTemp;
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy((char *)pComponentPrivate->componentRole.cRole,"iv_renderer.yuv.overlay");
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Init pIpFrameStatus*/
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Frame Width and Height*/
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInWidth             = DEFAULT_WIDTH;
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInHeight            = 220; /*Default value for StdCompRoleTest*/
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulCInOffset           = DEFAULT_WIDTH * 220;  /* offset of the C frame in the   *
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                    * buffer (equal to zero if there *
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                    * is no C frame)                 */
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* crop */
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInXstart            = 0;
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInXsize             = 0; /*176 Default value for StdCompRoleTest */
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInYstart            = 0;
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulInYsize             = 0; /* 220 Default value for StdCompRoleTest*/
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* zoom*/
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulZoomFactor          = 1 << 10;
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulZoomLimit           = 1 << 10;
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulZoomSpeed           = 0;
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulFrostedGlassOvly    = OMX_FALSE;
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulLightChroma         = OMX_TRUE;
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulLockedRatio         = OMX_FALSE;
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulMirror              = OMX_FALSE;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulRGBRotation         = 0;
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulYUVRotation         = 0;
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulContrastType        = 0;
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulVideoGain           = 1 << 6;   /*Video Gain (contrast) in VGPOP ranges from 0 to 127, being 64 = Gain 1 (no contrast)*/
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulXoffsetFromCenter16 = 0;
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulYoffsetFromCenter16 = 0;
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulOutPitch = 0;  /*Not supported at OMX level*/
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pIpFrameStatus->ulAlphaRGB = 0; /*Not supported at OMX level*/
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Init pComponentPrivate->pOpYUVFrameStatus */
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpYUVFrameStatus->ulOutWidth            = DEFAULT_WIDTH;
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpYUVFrameStatus->ulOutHeight           = DEFAULT_HEIGHT;
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset          = 0;/*  Offset of the C frame in the buffer *
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                *   (equal to 0 if there is no C frame)*/
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Init pComponentPrivate->pOpRGBFrameStatus */
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpRGBFrameStatus->ulOutWidth            = DEFAULT_WIDTH;
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpRGBFrameStatus->ulOutHeight           = DEFAULT_HEIGHT;
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOpRGBFrameStatus->ulCOutOffset          = 0;/*  Offset of the C frame in the buffer *
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                *   (equal to 0 if there is no C frame)*/
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('V','P','P',' '),
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleLLMM |
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleVideoEncode | PERF_ModuleImageEncode |
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleVideoDecode | PERF_ModuleImageDecode);
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pInPortFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pInPortOverlayFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pOutPortRGBFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pOutPortYUVFormat, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeImage, sizeof(OMX_PORT_PARAM_TYPE));
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeAudio, sizeof(OMX_PORT_PARAM_TYPE));
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeVideo, sizeof(OMX_PORT_PARAM_TYPE));
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeOthers, sizeof(OMX_PORT_PARAM_TYPE));
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCrop, sizeof(OMX_CONFIG_RECTTYPE));
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->cComponentName,  VPP_MAX_NAMESIZE + 1);
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strncpy(pComponentPrivate->cComponentName, cVPPName, VPP_MAX_NAMESIZE);
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->colorKey, 3 * sizeof(OMX_U8));
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = memcpy (pComponentPrivate->colorKey, (OMX_U8 *)colorKey,(3 * sizeof(OMX_U8)));
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp == NULL){
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->tVPPIOConf, sizeof(VPPIOConf));
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError=VPP_Initialize_PrivateStruct(pComponentPrivate);
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::Error=0x%X returned from VPP_Initialize_PrivateStruct\n",eError);
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* load the ResourceManagerProxy thread*/
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewInitalizeEx(OMX_COMPONENTTYPE_VPP);
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d::Error 0x%X returned from loading ResourceManagerProxy thread\n", __LINE__,eError);
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* start the component thread */
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_Start_ComponentThread(pHandle);
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::Error=0x%X returned from Start_ComponentThread\n",eError);
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNone;
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone){
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* LinkedList_DisplayAll(&AllocList); */
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREEALL();
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LinkedList_Destroy(&AllocList);
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetCallbacks() Sets application callbacks to the component
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update application callbacks
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * the application.
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetCallbacks (OMX_HANDLETYPE pComponent,
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_CALLBACKTYPE* pCallBacks,
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_PTR pAppData)
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponent, pCallBacks, OMX_TRUE);
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Copy the callbacks of the application to the component private */
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp == NULL){
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*copy the application private data to component memory*/
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetComponentVersion() Sets application callbacks to the component
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update application callbacks
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * the application.
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetComponentVersion (OMX_HANDLETYPE   hComp,
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_STRING       szComponentName,
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_VERSIONTYPE* pComponentVersion,
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_VERSIONTYPE* pSpecVersion,
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_UUIDTYPE*    pComponentUUID)
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE          eError            = OMX_ErrorNone;
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE    * pHandle           = NULL;
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE* pComponentPrivate = NULL;
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!hComp || !szComponentName || !pComponentVersion || !pSpecVersion || !pComponentUUID) {
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComp;
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pHandle->pComponentPrivate) {
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strncpy(szComponentName, pComponentPrivate->cComponentName, VPP_MAX_NAMESIZE);
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp == NULL){
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = memcpy(pSpecVersion, &(pComponentPrivate->SpecVersion.s), sizeof(pComponentPrivate->SpecVersion.s));
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp == NULL){
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SendCommand() used to send the commands to the component
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will be used by the application.
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param phandle         handle for this instance of the component
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param Cmd             Command to be sent to the component
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParam          indicates commmad is sent using this method
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SendCommand (OMX_IN OMX_HANDLETYPE phandle,
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_COMMANDTYPE Cmd,
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_U32 nParam,
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_IN OMX_PTR pCmdData)
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet;
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MARKTYPE *pMarkType = NULL;
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(phandle, OMX_TRUE, OMX_TRUE);
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( pComponentPrivate->curState == OMX_StateInvalid ) {
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d :: INVALID ALREADY",__LINE__);
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(Cmd)
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandStateSet:
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		  pComponentPrivate->toState = nParam;
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		VPP_DPRINT("VPP:: OMX_CommandStateSet: tostate %d\n", nParam);
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (nParam == OMX_StateIdle && pComponentPrivate->curState == OMX_StateExecuting) {
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->bIsStopping = OMX_TRUE;
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			VPP_DPRINT("VPP:: Is stopping!!\n");
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortDisable:
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((nParam >= NUM_OF_VPP_PORTS) && (nParam != OMX_ALL)) {
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(nParam != OMX_ALL) {  /*If only one port is requested might come from the application, then disable from here to avoid race condition*/
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("set port %d as diabled\n", nParam);
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->sCompPorts[nParam].pPortDef.bEnabled=OMX_FALSE;
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->sCompPorts[nParam].pPortDef.bPopulated) {
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			    pComponentPrivate->bDisableIncomplete[nParam] = OMX_TRUE;
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			} else {
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableIncomplete[nParam] = OMX_FALSE;
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												pComponentPrivate->pHandle->pApplicationPrivate,
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_EventCmdComplete,
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_CommandPortDisable,
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												nParam,
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												NULL);
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		} else { /* nParam == 0xFFFFFFFF */
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			int i;
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			for (i = 0; i < NUM_OF_VPP_PORTS; i ++) {
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				VPP_DPRINT("set port %d as disabled\n", i);
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			    pComponentPrivate->sCompPorts[i].pPortDef.bEnabled=OMX_FALSE;
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				if (pComponentPrivate->sCompPorts[i].pPortDef.bPopulated) {
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				    pComponentPrivate->bDisableIncomplete[i] = OMX_TRUE;
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				} else {
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bDisableIncomplete[i] = OMX_FALSE;
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												pComponentPrivate->pHandle->pApplicationPrivate,
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_EventCmdComplete,
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												OMX_CommandPortDisable,
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												i,
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												NULL);
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortEnable:
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandFlush:
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*if invalid port, send error, and don't write to any pipe*/
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((nParam >= NUM_OF_VPP_PORTS) && (nParam != OMX_ALL)) {
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandMarkBuffer:
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* we can only mark buffers on input port */
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nParam > 1) {
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP:: OMX_CommandMarkBuffer\n");
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pMarkType = (OMX_MARKTYPE *)pCmdData;
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkData = pMarkType->pMarkData;
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->hMarkTargetComponent = pMarkType->hMarkTargetComponent;
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandMax:
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone){
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Write to the command pipe*/
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = write (pComponentPrivate->cmdPipe[1], &Cmd, sizeof(OMX_COMMANDTYPE));
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_SendingCommand(pComponentPrivate->pPERF,
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Cmd,
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Cmd == OMX_CommandMarkBuffer ? ((OMX_U32) pCmdData) : nParam,
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_ModuleComponent);
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nRet = write (pComponentPrivate->nCmdDataPipe[1], &nParam, sizeof(OMX_U32));
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nRet == -1) {
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetParameter() Gets the current configurations of the component
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParamIndex
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentParameterStructure
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetParameter (OMX_HANDLETYPE hComp,
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_INDEXTYPE nParamIndex,
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_PTR pComponentParameterStructure)
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComp, pComponentParameterStructure, OMX_TRUE);
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponentPrivate, OMX_TRUE, OMX_TRUE);
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the GetParameter %lu\n",(OMX_U32)nParamIndex);
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( pComponentPrivate->curState == OMX_StateInvalid ) {
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorIncorrectStateOperation);
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParamIndex)
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamImageInit:
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentParameterStructure,
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortParamTypeImage,
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_PORT_PARAM_TYPE));
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioInit:
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentParameterStructure,
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortParamTypeAudio,
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_PORT_PARAM_TYPE));
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoInit:
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentParameterStructure,
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortParamTypeVideo,
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_PORT_PARAM_TYPE));
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamOtherInit:
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentParameterStructure,
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortParamTypeOthers,
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_PORT_PARAM_TYPE));
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PARAM_PORTDEFINITIONTYPE *pComponentParam =(OMX_PARAM_PORTDEFINITIONTYPE *)pComponentParameterStructure;
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 portindex = pComponentParam->nPortIndex;
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(portindex >= 0 && portindex < NUM_OF_VPP_PORTS){ /*The validation  should be done in two parts, if the portindex is a wrong number the next validation could generate a segmentation fault*/
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				VPP_DPRINT ("VPP::Inside the GetParameter portindex = %d (%d)\n",(int)portindex, pComponentPrivate->sCompPorts[portindex].pPortDef.nPortIndex);
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				if(portindex == pComponentPrivate->sCompPorts[portindex].pPortDef.nPortIndex){
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                pTemp = memcpy(pComponentParameterStructure,
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                    &pComponentPrivate->sCompPorts[portindex].pPortDef,
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                    sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                if(pTemp == NULL){
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                    eError = OMX_ErrorUndefined;
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                    break;
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                }
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				else{
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					eError = OMX_ErrorBadPortIndex;
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoPortFormat:
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_VIDEO_PARAM_PORTFORMATTYPE * pVidFmt = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pVidFmt->nPortIndex == pComponentPrivate->pInPortFormat->nPortIndex) {
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pVidFmt->nIndex > pComponentPrivate->pInPortFormat->nIndex) {
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorNoMore;
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pTemp = memcpy(pComponentParameterStructure,
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pInPortFormat,
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pTemp == NULL){
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorUndefined;
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(pVidFmt->nPortIndex == pComponentPrivate->pInPortOverlayFormat->nPortIndex) {
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pVidFmt->nIndex > pComponentPrivate->pInPortOverlayFormat->nIndex) {
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorNoMore;
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pTemp = memcpy(pComponentParameterStructure,
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pInPortOverlayFormat,
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pTemp == NULL){
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorUndefined;
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (pVidFmt->nPortIndex == pComponentPrivate->pOutPortRGBFormat->nPortIndex) {
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pVidFmt->nIndex > pComponentPrivate->pOutPortRGBFormat->nIndex) {
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorNoMore;
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pTemp = memcpy(pComponentParameterStructure,
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pOutPortRGBFormat,
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pTemp == NULL){
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorUndefined;
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (pVidFmt->nPortIndex == pComponentPrivate->pOutPortYUVFormat->nPortIndex) {
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pVidFmt->nIndex > pComponentPrivate->pOutPortYUVFormat->nIndex) {
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorNoMore;
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pTemp = memcpy(pComponentParameterStructure,
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pOutPortYUVFormat,
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pTemp == NULL){
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorUndefined;
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)pComponentParameterStructure;
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::Inside the GetParameter portindex =%d\n" , (int)pBuffSupplierParam->nPortIndex);
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBuffSupplierParam->nPortIndex == OMX_VPP_INPUT_PORT ||
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT ||
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT ||
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT ) {
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBuffSupplierParam->eBufferSupplier = pComponentPrivate->sCompPorts[pBuffSupplierParam->nPortIndex].eSupplierSetting;
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentParameterStructure,
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPriorityMgmt,
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sizeof(OMX_PRIORITYMGMTTYPE));
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetParameter() Sets configuration paramets to the component
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParamIndex
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompParam
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetParameter (OMX_HANDLETYPE hComp,
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_INDEXTYPE nParamIndex,
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_PTR pCompParam)
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VIDEO_PORTDEFINITIONTYPE *pVidDef = NULL;
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole = NULL;
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComp, pCompParam, OMX_TRUE);
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponentPrivate, OMX_TRUE, OMX_TRUE);
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateLoaded) {
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorIncorrectStateOperation);
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (nParamIndex)
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoPortFormat:
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_VIDEO_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pCompParam;
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentParam->nPortIndex == pComponentPrivate->pInPortFormat->nPortIndex) {
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp = memcpy(pComponentPrivate->pInPortFormat,
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentParam,
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pTemp == NULL){
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorUndefined;
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (pComponentParam->nPortIndex == pComponentPrivate->pInPortOverlayFormat->nPortIndex) {
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp = memcpy(pComponentPrivate->pInPortOverlayFormat,
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentParam,
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pTemp == NULL){
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorUndefined;
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (pComponentParam->nPortIndex == pComponentPrivate->pOutPortRGBFormat->nPortIndex) {
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp = memcpy(pComponentPrivate->pOutPortRGBFormat,
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentParam,
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pTemp == NULL){
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorUndefined;
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (pComponentParam->nPortIndex == pComponentPrivate->pOutPortYUVFormat->nPortIndex) {
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp = memcpy(pComponentPrivate->pOutPortYUVFormat,
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentParam,
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pTemp == NULL){
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorUndefined;
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoInit:
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortParamTypeVideo,
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompParam,
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sizeof(OMX_PORT_PARAM_TYPE));
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PARAM_PORTDEFINITIONTYPE *pComponentParam = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 portIndex = pComponentParam->nPortIndex;
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((portIndex == OMX_VPP_INPUT_PORT) || (portIndex == OMX_VPP_INPUT_OVERLAY_PORT)) {
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentParam->eDir != OMX_DirInput) {
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("%d :: Invalid input buffer Direction\n", __LINE__);
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadParameter;
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (portIndex == OMX_VPP_INPUT_OVERLAY_PORT) {
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if ((OMX_COLOR_Format24bitRGB888 != pComponentParam->format.video.eColorFormat) &&
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (OMX_COLOR_FormatUnused != pComponentParam->format.video.eColorFormat)) {
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorUnsupportedSetting;
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (portIndex == OMX_VPP_INPUT_PORT) {
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulInWidth = pComponentParam->format.video.nFrameWidth;
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulInHeight = pComponentParam->format.video.nFrameHeight;
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulCInOffset = 0;
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (portIndex == OMX_VPP_YUV_OUTPUT_PORT){
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentParam->eDir != OMX_DirOutput) {
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("VPP::%d :: Invalid Output buffer Direction\n", __LINE__);
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadParameter;
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpYUVFrameStatus->ulOutWidth  = pComponentParam->format.video.nFrameWidth;
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpYUVFrameStatus->ulOutHeight = pComponentParam->format.video.nFrameHeight;
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(portIndex == OMX_VPP_RGB_OUTPUT_PORT){
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentParam->eDir != OMX_DirOutput) {
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("VPP::%d :: Invalid Output buffer Direction\n", __LINE__);
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadParameter;
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpRGBFrameStatus->ulOutWidth  = pComponentParam->format.video.nFrameWidth;
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpRGBFrameStatus->ulOutHeight = pComponentParam->format.video.nFrameHeight;
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("VPP::%d :: Wrong Port Index Parameter\n", __LINE__);
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp = memcpy (&(((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sCompPorts[portIndex].pPortDef),
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentParam,
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pTemp == NULL){
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUndefined;
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* update nBufferSize */
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize =
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentParam->format.video.nFrameWidth * pComponentParam->format.video.nFrameHeight;
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch(pComponentPrivate->sCompPorts[portIndex].pPortDef.format.video.eColorFormat) {
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatYUV420PackedPlanar:
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 3;
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize/= 2;
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatCbYCrY:
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 2;
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatYCbYCr:
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 2;
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_Format32bitARGB8888:
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 4;
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_Format24bitRGB888:
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 3;
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_Format16bitRGB565:
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 2;
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_Format12bitRGB444:
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 2;
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_Format8bitRGB332:
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize*= 2;
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatL8:
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatL4:
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize/= 2;
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case OMX_COLOR_FormatL2:
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize/= 4;
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case  OMX_COLOR_FormatMonochrome:
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize/= 8;
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                default:
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[portIndex].pPortDef.nBufferSize/= 2;
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("after setparam: %d\n",
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sCompPorts[portIndex].pPortDef.nPortIndex);
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (portIndex == OMX_VPP_YUV_OUTPUT_PORT) {
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pVidDef     = &(pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video);
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pVidDef->eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar) {
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset =
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOpYUVFrameStatus->ulOutWidth * pComponentPrivate->pOpYUVFrameStatus->ulOutHeight;
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset = 0;
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (portIndex == OMX_VPP_INPUT_PORT) {
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pVidDef     = &(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video);
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pVidDef->eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar) {
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulCInOffset =
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulInWidth * pComponentPrivate->pIpFrameStatus->ulInHeight;
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulCInOffset = 0;
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(pComponentPrivate->pPriorityMgmt,
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (OMX_PRIORITYMGMTTYPE*)pCompParam,
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sizeof(OMX_PRIORITYMGMTTYPE));
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)pCompParam;
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Verify if it's a correct port index*/
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ( pBuffSupplierParam->nPortIndex == OMX_VPP_INPUT_PORT ||
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT ||
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT ||
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT ) {
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Copy parameters to input port buffer supplier type */
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[pBuffSupplierParam->nPortIndex].eSupplierSetting =
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffSupplierParam->eBufferSupplier;
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pCompParam) {
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetConfig() Gets the current configuration of to the component
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nConfigIndex
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentConfigStructure
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetConfig (OMX_HANDLETYPE hComp,
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_INDEXTYPE nConfigIndex,
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_PTR ComponentConfigStructure)
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the GetConfig\n");
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComp, ComponentConfigStructure, OMX_TRUE);
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nConfigIndex)
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonInputCrop :
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_RECTTYPE *crop = (OMX_CONFIG_RECTTYPE*)ComponentConfigStructure;
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            crop->nLeft   = pComponentPrivate->pCrop->nLeft;
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            crop->nWidth  = pComponentPrivate->pCrop->nWidth;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            crop->nTop    = pComponentPrivate->pCrop->nTop;
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            crop->nHeight = pComponentPrivate->pCrop->nHeight;
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonRotate :/*On Rotation, the OMX_CONFIG_ROTATIONTYPE must indicate the port index, since VPP supports independent rotation on each port*/
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_ROTATIONTYPE *Rotate = (OMX_CONFIG_ROTATIONTYPE*)ComponentConfigStructure;
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (Rotate->nPortIndex==OMX_VPP_RGB_OUTPUT_PORT) {
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                Rotate->nRotation = pComponentPrivate->pIpFrameStatus->ulRGBRotation;
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (Rotate->nPortIndex==OMX_VPP_YUV_OUTPUT_PORT) {
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                Rotate->nRotation = pComponentPrivate->pIpFrameStatus->ulYUVRotation;
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (Rotate->nPortIndex==OMX_VPP_INPUT_PORT ||Rotate->nPortIndex==OMX_VPP_INPUT_OVERLAY_PORT){
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                Rotate->nRotation = pComponentPrivate->pIpFrameStatus->ulYUVRotation;
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonMirror:
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_MIRRORTYPE *nMirror = (OMX_CONFIG_MIRRORTYPE*)ComponentConfigStructure;
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nMirror->nPortIndex > OMX_VPP_MAXPORT_NUM){
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nMirror->eMirror = ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sCompPorts[nMirror->nPortIndex].eMirror;
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonScale:
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_SCALEFACTORTYPE *sScale = (OMX_CONFIG_SCALEFACTORTYPE*)ComponentConfigStructure;
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(sScale->nPortIndex > OMX_VPP_MAXPORT_NUM){
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sScale->xWidth = ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sScale.xWidth;
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sScale->xHeight = ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sScale.xHeight;
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomConfigInputSize:
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FRAMESIZETYPE *pInputSize = (OMX_FRAMESIZETYPE *)ComponentConfigStructure;
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_COMPONENT_PRIVATE *pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((pInputSize->nPortIndex != OMX_VPP_INPUT_PORT) && (pInputSize->nPortIndex != OMX_VPP_INPUT_OVERLAY_PORT)){
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pInputSize->nPortIndex == OMX_VPP_INPUT_PORT){
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInputSize->nWidth = pComponentPrivate->pIpFrameStatus->ulInWidth;
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInputSize->nHeight = pComponentPrivate->pIpFrameStatus->ulInHeight;
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(pInputSize->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT){
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInputSize->nWidth = pComponentPrivate->pIpFrameStatus->ulInWidth;
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInputSize->nHeight = pComponentPrivate->pIpFrameStatus->ulInHeight;
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonOutputSize:
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FRAMESIZETYPE *pOutputSize = (OMX_FRAMESIZETYPE *)ComponentConfigStructure;
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_COMPONENT_PRIVATE *pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((pOutputSize->nPortIndex != OMX_VPP_YUV_OUTPUT_PORT) && (pOutputSize->nPortIndex != OMX_VPP_RGB_OUTPUT_PORT)){
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pOutputSize->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT){
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pOutputSize->nWidth = pComponentPrivate->pOpYUVFrameStatus->ulOutWidth;
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pOutputSize->nHeight = pComponentPrivate->pOpYUVFrameStatus->ulOutHeight;
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(pOutputSize->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT){
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pOutputSize->nWidth = pComponentPrivate->pOpRGBFrameStatus->ulOutWidth;
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pOutputSize->nHeight = pComponentPrivate->pOpRGBFrameStatus->ulOutHeight;
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetConfig() Sets the configraiton to the component
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nConfigIndex
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentConfigStructure
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetConfig (OMX_HANDLETYPE hComp,
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_INDEXTYPE nConfigIndex,
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_PTR ComponentConfigStructure)
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComp, ComponentConfigStructure, OMX_TRUE);
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Inside the SetConfig\n");
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nConfigIndex)
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonColorKey:
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Already allocated in ComponentInit*/
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_COLORKEYTYPE *transcolorkey = (OMX_CONFIG_COLORKEYTYPE*)ComponentConfigStructure;
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp = memcpy (((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)-> colorKey,
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((OMX_U8 *) transcolorkey ->nARGBMask )+1,
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                3 * sizeof(OMX_U8));
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pTemp == NULL){
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUndefined;
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonInputCrop :
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_RECTTYPE *crop = (OMX_CONFIG_RECTTYPE*)ComponentConfigStructure;
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pIpFrameStatus->ulInXstart = crop->nLeft;
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pIpFrameStatus->ulInXsize  = crop->nWidth;
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pIpFrameStatus->ulInYstart = crop->nTop;
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pIpFrameStatus->ulInYsize  = crop->nHeight;
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*StdcomponentRoleTest*/
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pCrop->nLeft = crop->nLeft;
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pCrop->nWidth = crop->nWidth;
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pCrop->nTop = crop->nTop;
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pCrop->nHeight = crop->nHeight;
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonContrast :
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 nContrast;
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_CONTRASTTYPE *contrast = (OMX_CONFIG_CONTRASTTYPE*)ComponentConfigStructure;
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (contrast->nContrast < VPP_CONTRAST_MIN) {  VPP_DPRINT("Out of range value, setting Contrast to Minimum\n");
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                contrast->nContrast = VPP_CONTRAST_MIN;
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(contrast->nContrast > VPP_CONTRAST_MAX)
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("Out of range value, setting Contrast to Maximum\n");
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                contrast->nContrast = VPP_CONTRAST_MAX;
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Normalize for VGPOP range*/
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nContrast = (OMX_U32) ((contrast->nContrast+VPP_CONTRAST_OFFSET)*VPP_CONTRAST_FACTOR);
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulVideoGain = nContrast;
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonRotate :
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_ROTATIONTYPE *Rotate = (OMX_CONFIG_ROTATIONTYPE*)ComponentConfigStructure;
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::Inside the SetConfig in OMX_IndexConfigCommonRotate  \n");
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (((Rotate->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT) || (Rotate->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT)) &&
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (Rotate->nRotation == 0 ||
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 90 ||
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 180 ||
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 270)) {
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(Rotate->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT){
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((VPP_COMPONENT_PRIVATE*)
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation = Rotate->nRotation;
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if (Rotate->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT) {
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((VPP_COMPONENT_PRIVATE*)
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pHandle->pComponentPrivate)->pIpFrameStatus->ulYUVRotation = Rotate->nRotation;
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (((Rotate->nPortIndex == OMX_VPP_INPUT_PORT) || (Rotate->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT)) &&
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (Rotate->nRotation == 0 ||
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 90 ||
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 180 ||
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        Rotate->nRotation == 270)) {
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((VPP_COMPONENT_PRIVATE*)
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pHandle->pComponentPrivate)->pIpFrameStatus->ulYUVRotation = Rotate->nRotation;
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetZoomFactor :
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *nZoomfactor = (OMX_U32*)ComponentConfigStructure;
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulZoomFactor = *nZoomfactor;
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetZoomLimit :
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *nZoomlimit = (OMX_U32*)ComponentConfigStructure;
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulZoomLimit = *nZoomlimit;
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetZoomSpeed :
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *nZoomspeed = (OMX_U32*)ComponentConfigStructure;
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulZoomSpeed = *nZoomspeed;
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetFrostedGlassOvly :
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *FrostedGlassOvly = (OMX_U32*)ComponentConfigStructure;
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulFrostedGlassOvly = *FrostedGlassOvly;
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetZoomXoffsetFromCenter16 :
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *XoffsetFromCenter16 = (OMX_U32*)ComponentConfigStructure;
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulXoffsetFromCenter16 = *XoffsetFromCenter16;
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomSetZoomYoffsetFromCenter16 :
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *YoffsetFromCenter16 = (OMX_U32*)ComponentConfigStructure;
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pHandle->pComponentPrivate)->pIpFrameStatus->ulYoffsetFromCenter16 = *YoffsetFromCenter16;
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonMirror:
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Only RGB output mirroring supported*/
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_MIRRORTYPE *nMirror = (OMX_CONFIG_MIRRORTYPE*)ComponentConfigStructure;
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_S32 nMirrorRotation = 0;
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_MIRRORTYPE eMirrorPrev = OMX_MirrorNone;
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nMirror->nPortIndex > OMX_VPP_MAXPORT_NUM){
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eMirrorPrev = ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sCompPorts[nMirror->nPortIndex].eMirror;
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eMirrorPrev != OMX_MirrorNone){
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulMirror = OMX_FALSE;
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(eMirrorPrev == OMX_MirrorVertical|| eMirrorPrev == OMX_MirrorBoth){
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nMirrorRotation = ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation;
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(nMirrorRotation <= 90){
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nMirrorRotation += 180;
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else{
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nMirrorRotation -= 180;
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation = nMirrorRotation;
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nMirror->eMirror == OMX_MirrorHorizontal){
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ->pIpFrameStatus->ulMirror = OMX_TRUE;
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ->sCompPorts[nMirror->nPortIndex].eMirror = OMX_MirrorHorizontal;
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (nMirror->eMirror == OMX_MirrorVertical){
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nMirrorRotation = 180;
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulMirror = OMX_TRUE;
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ->sCompPorts[nMirror->nPortIndex].eMirror = OMX_MirrorVertical;
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nMirrorRotation += ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation;
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (nMirrorRotation >= 360){
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nMirrorRotation -= 180;
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation = nMirrorRotation;
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (nMirror->eMirror == OMX_MirrorBoth) {
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ->sCompPorts[nMirror->nPortIndex].eMirror = OMX_MirrorBoth;
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nMirrorRotation = 180;
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nMirrorRotation += ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation;
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (nMirrorRotation >= 360){
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nMirrorRotation -= 180;
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulRGBRotation = nMirrorRotation;
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(nMirror->eMirror == OMX_MirrorNone){
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ->sCompPorts[nMirror->nPortIndex].eMirror = OMX_MirrorNone;
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUnsupportedSetting;
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonDithering:
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_DITHERTYPE *nDither = (OMX_CONFIG_DITHERTYPE *)ComponentConfigStructure;
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nDither->eDither == OMX_DitherErrorDiffusion && nDither->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT) {
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->ulDithering = OMX_TRUE;
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUnsupportedSetting;
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomVideoColorRange:
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 *nColorRange = (OMX_U32*)ComponentConfigStructure;
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::Inside the SetConfig in OMX_IndexConfigCommonColorRange  \n");
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((*nColorRange == VGPOP_IN_16_235_OUT_16_235 ||
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    *nColorRange == VGPOP_IN_00_255_OUT_00_255 ||
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    *nColorRange == VGPOP_IN_00_255_OUT_16_235 ||
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    *nColorRange == VGPOP_IN_16_235_OUT_00_255)) {
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                ((VPP_COMPONENT_PRIVATE*)
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->pIpFrameStatus->eIORange = *nColorRange;
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonScale:
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_CONFIG_SCALEFACTORTYPE *sScale = (OMX_CONFIG_SCALEFACTORTYPE*)ComponentConfigStructure;
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(sScale->nPortIndex > OMX_VPP_MAXPORT_NUM){
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sScale.xWidth = sScale->xWidth;
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->sScale.xHeight = sScale->xHeight;
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomConfigInputSize:
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FRAMESIZETYPE *pInputSize = (OMX_FRAMESIZETYPE *)ComponentConfigStructure;
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_COMPONENT_PRIVATE *pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((pInputSize->nPortIndex != OMX_VPP_INPUT_PORT) && (pInputSize->nPortIndex != OMX_VPP_INPUT_OVERLAY_PORT)){
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pInputSize->nPortIndex == OMX_VPP_INPUT_PORT){
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulInWidth = pInputSize->nWidth;
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulInHeight = pInputSize->nHeight;
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar){
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->pIpFrameStatus->ulCInOffset =
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pIpFrameStatus->ulInWidth * pComponentPrivate->pIpFrameStatus->ulInHeight;
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else{
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pIpFrameStatus->ulCInOffset = 0;
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(pInputSize->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT){
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUnsupportedSetting;
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexConfigCommonOutputSize:
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FRAMESIZETYPE *pOutputSize = (OMX_FRAMESIZETYPE *)ComponentConfigStructure;
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_COMPONENT_PRIVATE *pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((pOutputSize->nPortIndex != OMX_VPP_YUV_OUTPUT_PORT) && (pOutputSize->nPortIndex != OMX_VPP_RGB_OUTPUT_PORT)){
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pOutputSize->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT){
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpYUVFrameStatus->ulOutWidth = pOutputSize->nWidth;
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpYUVFrameStatus->ulOutHeight = pOutputSize->nHeight;
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar){
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset =
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pOpYUVFrameStatus->ulOutWidth * pComponentPrivate->pOpYUVFrameStatus->ulOutHeight;
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else{
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset = 0;
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(pOutputSize->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT){
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpRGBFrameStatus->ulOutWidth            = pOutputSize->nWidth;
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpRGBFrameStatus->ulOutHeight           = pOutputSize->nHeight;
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOpRGBFrameStatus->ulCOutOffset          = 0;
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetState() Gets the current state of the component
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompomponent handle for this instance of the component
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pState
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponent, pState, OMX_TRUE);
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pHandle->pComponentPrivate) {
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pState = ((VPP_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->curState;
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNone;
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  EmptyThisBuffer() This callback is used to send the input buffer to
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  component
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponent       handle for this instance of the component
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pBuffer          buffer to be sent to codec
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_EmptyThisBuffer (OMX_HANDLETYPE pComponent, OMX_BUFFERHEADERTYPE* pBufHdr)
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_BUFFERDATA_PROPAGATION* pDataProp = NULL;
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_S16 nRet = 0;
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponent, pBufHdr, OMX_TRUE);
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufHdr->pBuffer,
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufHdr->nFilledLen,
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_ModuleHLMM);
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: EmptyThisBuffer() %p\n", pBufHdr);
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    portDef = pBufHdr->pInputPortPrivate;
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufHdr->nInputPortIndex != OMX_VPP_INPUT_PORT &&
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHdr->nInputPortIndex != OMX_VPP_INPUT_OVERLAY_PORT) {
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error ! Incorrect input port index\n");
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: Incorrect state. state = %d\n", pComponentPrivate->curState);
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pBufHdr->nInputPortIndex == OMX_VPP_INPUT_PORT &&
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.bEnabled){
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error (in VPP)! OMX_ErrorIncorrectStateOperation, %d\n", pComponentPrivate->curState);
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(pBufHdr->nInputPortIndex == OMX_VPP_INPUT_OVERLAY_PORT &&
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.bEnabled){
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error (in VPP)! OMX_ErrorIncorrectStateOperation, %d\n", pComponentPrivate->curState);
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufHdr->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pBufHdr->nVersion.s.nVersionMajor != VPP_MAJOR_VER) ||
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHdr->nVersion.s.nVersionMinor != VPP_MINOR_VER) ||
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHdr->nVersion.s.nRevision != VPP_REVISION) ||
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHdr->nVersion.s.nStep != VPP_STEP)) {
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pBufHdr, pComponentPrivate, portDef->nPortIndex, &nCount);
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError !=OMX_ErrorNone) {
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pComponentPrivate->toState == OMX_StateIdle && pComponentPrivate->curState == OMX_StateExecuting) {
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if(pComponentPrivate->sCompPorts[pBufHdr->nInputPortIndex].hTunnelComponent == NULL){
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			VPP_DPRINT("Not right state, return buf %p\n", pBufHdr);
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                                    pComponentPrivate->pHandle->pApplicationPrivate,
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                                    pBufHdr
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	                                    );
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else{
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          if(pComponentPrivate->sCompPorts[portDef->nPortIndex].eSupplierSetting == OMX_BufferSupplyOutput){
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_TUNNEL_COMPONENT;
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP:: call to OMX_FillThisBuffer():: %d\n", __LINE__);
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_FillThisBuffer(
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pComponentPrivate->sCompPorts[pBufHdr->nInputPortIndex].hTunnelComponent,
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHdr);
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			goto EXIT;
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*usmc  VPP-JPEG TUNNELING*/
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((pComponentPrivate->bIsStopping == OMX_TRUE) &&
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (!pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].hTunnelComponent)) {
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].nReturnedBufferCount--;
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }/*USMC VPP-JPEG TUNNELING*/
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pBufHdr->nInputPortIndex == OMX_VPP_INPUT_PORT){
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->nInputFrame ++;
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->nOverlayFrame ++;
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->nInputFrame != pComponentPrivate->nOverlayFrame){
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->IsYUVdataout){
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInYUVBufferCount ++;
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->IsRGBdataout){
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInRGBBufferCount ++;
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("nInBufferCount %d, nInRGBBufferCount %d:: InputCount= %d, OverlayCount= %d\n ", pComponentPrivate->nInYUVBufferCount, pComponentPrivate->nInRGBBufferCount, pComponentPrivate->nInputFrame, pComponentPrivate->nOverlayFrame);
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   if(pBufHdr->pMarkData == NULL){
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufHdr->pMarkData = pComponentPrivate->pMarkData;
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufHdr->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->hMarkTargetComponent = NULL;
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pBufHdr->nFlags) || (pBufHdr->pMarkData) || (pBufHdr->nTickCount) || (pBufHdr->nTimeStamp)){
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef  VPP_DEBUG
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHdr->nInputPortIndex == OMX_VPP_INPUT_PORT){
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("OMX_VPP_INPUT_PORT\n");
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("OMX_VPP_OVERLAY_PORT\n");
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHdr->nFlags & OMX_BUFFERFLAG_EOS){
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("END OF STREAM DETECTED EmptyThis buffer\n");
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHdr->pMarkData){
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("\nMarkDataDetected\n");
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((pBufHdr->nTickCount) || (pBufHdr->nTimeStamp)){
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("\n nTickCount= %d,   nTimeStamp = %d\n\n", pBufHdr->nTickCount, pBufHdr->nTimeStamp);
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i = 0; i < pComponentPrivate->sCompPorts[pBufHdr->nInputPortIndex].pPortDef.nBufferCountActual; i ++) {
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pDataProp = &(pComponentPrivate->sCompPorts[pBufHdr->nInputPortIndex].sBufferDataProp[i]);
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pDataProp->buffer_idYUV == 0xFFFFFFFF && pDataProp->buffer_idRGB == 0xFFFFFFFF) {
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pDataProp->flag = pBufHdr->nFlags;
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentPrivate->IsYUVdataout){
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idYUV= pComponentPrivate->nInYUVBufferCount;
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentPrivate->IsRGBdataout){
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idRGB= pComponentPrivate->nInRGBBufferCount;
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("Record buff in array[%d] buffer_idYUV = %d, buffer_idRGB = %d\n, nFlags= %x", i, pDataProp->buffer_idYUV, pComponentPrivate->nInRGBBufferCount, pDataProp->flag);
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 /* mark the first buffer from input port after receiving mark buffer command */
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 if (pBufHdr->pMarkData) {
2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Get mark buffer command, mark buffer %p\n", pBufHdr);
2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->pMarkData = pBufHdr->pMarkData;
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->hMarkTargetComponent = pBufHdr->hMarkTargetComponent;
2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 if((pBufHdr->nTickCount) || (pBufHdr->nTimeStamp)){
2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("Record TimeStamp= %Ld & nTickCount =%ld\n", pBufHdr->nTimeStamp, pBufHdr->nTickCount);
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->nTickCount = pBufHdr->nTickCount;
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->nTimeStamp = pBufHdr->nTimeStamp;
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 }
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].pBufHeader->pBuffer = pBufHdr->pBuffer; /*Updating pBuffer*/
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].bHolding = OMX_TRUE;
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("\n------------------------------------------\n\n");
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("%d :: Component Sending Filled ip buff %p \
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        to Component Thread\n",pBufHdr->nInputPortIndex, pBufHdr);
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("\n------------------------------------------\n\n");
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE *fp;
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fp = fopen("mytestcvnew.raw", "w");
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fwrite(pBufHdr->pBuffer, 1, pBufHdr->nFilledLen, fp);
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fclose(fp);
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP get %d bytes of data from %p\n", pBufHdr->nFilledLen, pBufHdr->pBuffer);
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = write(pComponentPrivate->nFilled_iPipe[1],&pBufHdr, sizeof(OMX_BUFFERHEADERTYPE*));
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  FillThisBuffer() This callback is used to send the output buffer to
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  the component
2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nPortIndex    output port number
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pBufferHdr       buffer to be sent to codec
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_FillThisBuffer (OMX_HANDLETYPE pComponent,
2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         OMX_BUFFERHEADERTYPE* pBufferHdr)
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = 0;
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pComponent, pBufferHdr, OMX_TRUE);
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("\n------------------------------------------\n\n");
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("%d :: Component Sending Emptied op buff %p \
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            to Component Thread\n",__LINE__,pBufferHdr);
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("\n------------------------------------------\n\n");
2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	VPP_DPRINT("get output buffer %p (%p %p)\n", pBufferHdr, pBufferHdr->hMarkTargetComponent, pBufferHdr->pMarkData);
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    portDef = pBufferHdr->pOutputPortPrivate;
2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHdr->pBuffer,
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        0,
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_ModuleHLMM);
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufferHdr->nOutputPortIndex != OMX_VPP_YUV_OUTPUT_PORT &&
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufferHdr->nOutputPortIndex != OMX_VPP_RGB_OUTPUT_PORT) {
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error ! Incorrect output port index\n");
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateExecuting &&
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState != OMX_StatePause &&
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState != OMX_StateIdle) {
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error (in VPP)! OMX_ErrorIncorrectStateOperation, %d\n", pComponentPrivate->curState);
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pBufferHdr->nOutputPortIndex == OMX_VPP_YUV_OUTPUT_PORT &&
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.bEnabled){
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error (in VPP)! OMX_ErrorIncorrectStateOperation, %d\n", pComponentPrivate->curState);
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(pBufferHdr->nOutputPortIndex == OMX_VPP_RGB_OUTPUT_PORT &&
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.bEnabled){
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error (in VPP)! OMX_ErrorIncorrectStateOperation, %d\n", pComponentPrivate->curState);
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufferHdr->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Error ! OMX_ErrorBadParameter\n");
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pBufferHdr->nVersion.s.nVersionMajor != VPP_MAJOR_VER) ||
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufferHdr->nVersion.s.nVersionMinor != VPP_MINOR_VER) ||
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufferHdr->nVersion.s.nRevision != VPP_REVISION) ||
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufferHdr->nVersion.s.nStep != VPP_STEP)) {
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->toState == OMX_StateIdle) && (pComponentPrivate->curState == OMX_StateExecuting || pComponentPrivate->curState == OMX_StatePause)) {
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::to state is IDLE, return buf %p\n", pBufferHdr);
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->sCompPorts[portDef->nPortIndex].eSupplierSetting == OMX_BufferSupplyOutput){
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle,
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pHandle->pApplicationPrivate,
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferHdr);
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nFilledLen = 0;
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pBufferHdr,pComponentPrivate,portDef->nPortIndex, &nCount);
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( eError !=OMX_ErrorNone) {
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].pBufHeader->pBuffer = pBufferHdr->pBuffer; /*Updating pBuffer*/
2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].bHolding = OMX_TRUE;
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: fillthisbuffer: (%p) %d %d %d\n", pBufferHdr, portDef->nPortIndex, nCount, pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].bHolding);
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHdr->nFilledLen = 0;
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("%d :: Component Sending Emptied op buff  with index %d \
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            to Component Thread\n",__LINE__,pBufferHdr->nOutputPortIndex);
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_lock(&pComponentPrivate->buf_mutex);
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_unlock(&pComponentPrivate->buf_mutex);
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = write(pComponentPrivate->nFree_oPipe[1],&pBufferHdr,sizeof(OMX_BUFFERHEADERTYPE*));
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d :: Error in Writing to the Data pipe\n", __LINE__);
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     return eError;
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * OMX_ComponentDeinit() this methold will de init the component
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_ComponentDeInit(OMX_HANDLETYPE pHandle)
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pHandle, OMX_TRUE, OMX_TRUE);
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT (" IN ComponentDeInit \n");
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Freeing OMX pComponentPrivate \n");
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_Free_ComponentResources(pHandle);
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::Error While Stoping the Component Thread\n");
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("\n");
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* load the ResourceManagerProxy thread*/
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_VPP_COMPONENT, 0, 3456, NULL);
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("%d ::Error returned from destroy ResourceManagerProxy thread\n",
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        __LINE__);
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_DeinitalizeEx(OMX_COMPONENTTYPE_VPP);
2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d ::Error returned from destroy ResourceManagerProxy thread\n",
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        __LINE__);
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  VerifyTunnelConnection()
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_VerifyTunnelConnection(VPP_PORT_TYPE *pPort,
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         OMX_HANDLETYPE hTunneledComp,
2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         OMX_PARAM_PORTDEFINITIONTYPE* pPortDef)
2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* 1.4 Check if input port is compatible with output port */
2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE MyPortDef ;
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(pPort, hTunneledComp, pPortDef);
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyPortDef.nVersion.s.nVersionMajor = VPP_MAJOR_VER;
2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyPortDef.nVersion.s.nVersionMinor = VPP_MINOR_VER;
2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyPortDef.nPortIndex = pPort->nTunnelPort;
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetParameter(hTunneledComp, OMX_IndexParamPortDefinition, &MyPortDef);
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::Error 0x%X\n",eError);
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return eError;
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(pPortDef->eDomain)
2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_PortDomainOther:
2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (MyPortDef.format.other.eFormat!= pPortDef->format.other.eFormat) {
2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->hTunnelComponent  = 0;
2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->nTunnelPort       = 0;
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_PortDomainAudio:
2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (MyPortDef.format.audio.eEncoding != pPortDef->format.audio.eEncoding) {
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->nTunnelPort      = 0;
2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_PortDomainVideo:
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("my eColorFormat is %d, partner is %d\n",
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        MyPortDef.format.video.eColorFormat,
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortDef->format.video.eColorFormat);
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* The program should check the colorformat for tunneled components as the code shown here.
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        * However, because of big-endian/little-endian issue, we just ignore the format checking
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        * as this moment
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (MyPortDef.format.video.eColorFormat != pPortDef->format.video.eColorFormat)
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->nTunnelPort      = 0;
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        */
2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_PortDomainImage:
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (MyPortDef.format.image.eCompressionFormat != pPortDef->format.image.eCompressionFormat) {
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->nTunnelPort      = 0;
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->hTunnelComponent     = 0;
2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->nTunnelPort          = 0;
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return OMX_ErrorPortsNotCompatible; /* Our current port is not set up correctly */
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  ComponentTunnelRequest() this method is not implemented in 1.5
2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update application callbacks
2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * the application.
2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorNotImplemented
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_ComponentTunnelRequest (OMX_HANDLETYPE hComponent,
2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_U32 nPort,
2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_HANDLETYPE hTunneledComp,
2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_U32 nTunneledPort,
2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup)
2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)hComponent;
2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_PORT_TYPE *pPort = NULL;
2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_CMD(hComponent, OMX_TRUE, OMX_TRUE);
2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPort = &(pComponentPrivate->sCompPorts[nPort]);
2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pTunnelSetup == NULL || hTunneledComp == 0) {
2470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* cancel previous tunnel */
2471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->hTunnelComponent = 0;
2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->nTunnelPort = 0;
2473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->eSupplierSetting = OMX_BufferSupplyUnspecified;
2474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorNone;
2475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[nPort].pPortDef.eDir != OMX_DirInput &&
2479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[nPort].pPortDef.eDir != OMX_DirOutput) {
2480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Check if the other component is developed by TI */
2485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(IsTIOMXComponent(hTunneledComp) != OMX_TRUE) {
2486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("OMX_ErrorTunnelingUnsupported\n");
2487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorTunnelingUnsupported;
2488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPort->hTunnelComponent = hTunneledComp;
2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPort->nTunnelPort      = nTunneledPort;
2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP comp = %x, tunneled comp = %x\n",(int)hComponent, (int)pPort->hTunnelComponent);
2494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[nPort].pPortDef.eDir == OMX_DirOutput) {
2496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Component is the output (source of data) */
2497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTunnelSetup->eSupplier = pPort->eSupplierSetting;
2498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP:: set output port supplier as OMX_BufferSupplyInput\n");
2499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else { /* Component is the input (sink of data) */
2501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_VerifyTunnelConnection(pPort, hTunneledComp, &pComponentPrivate->sCompPorts[nPort].pPortDef);
2502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (OMX_ErrorNone != eError) {
2503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT(" Error !! VPP VerifyTunnelConnection failed\n");
2504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Invalid connection formats. Return eError */
2505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* If specified obey output port's preferences. Otherwise choose output */
2508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPort->eSupplierSetting = pTunnelSetup->eSupplier;
2509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (OMX_BufferSupplyUnspecified == pPort->eSupplierSetting) {
2510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPort->eSupplierSetting = pTunnelSetup->eSupplier = OMX_BufferSupplyOutput;
2511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Tell the output port who the supplier is */
2514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sBufferSupplier.nSize = sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE);
2515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sBufferSupplier.nVersion.s.nVersionMajor = VPP_MAJOR_VER;
2517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sBufferSupplier.nVersion.s.nVersionMinor = VPP_MINOR_VER ;
2518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sBufferSupplier.nPortIndex      = nTunneledPort;
2520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sBufferSupplier.eBufferSupplier = pPort->eSupplierSetting;
2521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter(hTunneledComp, OMX_IndexParamCompBufferSupplier, &sBufferSupplier);
2522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone){
2523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * VPP_GetExtensionIndex()
2533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * Free a video driver buffer.
2535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_ErrorNone                    Successful operation.
2537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorBadParameter            Invalid operation.
2538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorIncorrectStateOperation If called when port is disabled.
2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE* pIndexType)
2542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIndex;
2544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
2545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComponent;
2546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE* pComponentPrivate = NULL;
2547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Check parameter validity */
2549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pHandle) {
2550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate) {
2557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (nIndex = 0; nIndex < VPP_NUM_CUSTOM_PARAMS; nIndex++) {
2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!strcmp((const char *)cParameterName, (const char *)(&(sVPPCustomParams[nIndex].cCustomParamName)))) {
2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *pIndexType = sVPPCustomParams[nIndex].nCustomParamIndex;
2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorNone;
2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  ComponentRoleEnum()
2575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
2582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef KHRONOS_1_1
2588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
2590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_IN OMX_HANDLETYPE hComponent,
2591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_OUT OMX_U8 *cRole,
2592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_IN OMX_U32 nIndex)
2593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
2596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nIndex == 0){
2600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = memcpy(cRole, &(pComponentPrivate->componentRole.cRole), sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE - 1);
2601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pTemp == NULL){
2602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
2603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      eError = OMX_ErrorNoMore;
2608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2615