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_Utils.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements OMX Component for PCM decoder that
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* is fully compliant with the OMX specification 1.1.
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*! 13-Dec-2005 mf:  Initial Version. Change required per OMAPSWxxxxxxxxx
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! to provide _________________.
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 13-Dec-2005 mf:
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! This is newest file
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* =========================================================================== */
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  INCLUDE FILES
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sched.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "LCML_DspCodec.h"
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP.h"
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_Utils.h"
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "VPPsocket_ti.h"
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_CompThread.h"
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h"
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <ResourceManagerProxyAPI.h>
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_VPP_STRNCPY(dst, src, size)         strncpy(dst, src, size)
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_VPP_ITOA(value, buffer)    sprintf((char*)buffer, "%d", value);
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_VPP_MAX(x, y)                       ((x) > (y) ? (x) : (y))
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinHINSTANCE g_hLcmlDllHandle = NULL;
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_IsValidBuffer(OMX_BUFFERHEADERTYPE *pBufHeader,
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                VPP_COMPONENT_PRIVATE *pComponentPrivate,
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_U32 pIndex,
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_U32 *pCount)
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("Entering Valid buffer -- %lu\n ",pIndex);
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pComponentPrivate->sCompPorts[pIndex].pVPPBufHeader[nCount].pBufHeader != pBufHeader)
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nCount ++;
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nCount >= NUM_OF_VPP_BUFFERS) {
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *pCount = nCount;
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("Exiting Valid buffer -- %lu\n ",nCount);
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_GetPortDefFromBufHeader(OMX_BUFFERHEADERTYPE *pBufHeader,
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_PARAM_PORTDEFINITIONTYPE **portDef )
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pBufHeader->nOutputPortIndex != OMX_VPP_RGB_OUTPUT_PORT) &&
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHeader->nOutputPortIndex != OMX_VPP_YUV_OUTPUT_PORT) &&
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((pBufHeader->nInputPortIndex == OMX_VPP_INPUT_PORT) ||
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHeader->nInputPortIndex == OMX_VPP_INPUT_OVERLAY_PORT ))){   /* input port */
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *portDef = pBufHeader->pInputPortPrivate;
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if ((pBufHeader->nOutputPortIndex == OMX_VPP_RGB_OUTPUT_PORT) ||
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pBufHeader->nOutputPortIndex == OMX_VPP_YUV_OUTPUT_PORT)){ /* output port */
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *portDef = pBufHeader->pOutputPortPrivate;
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent, OMX_U16 arr[], LCML_DSP *plcml_Init)
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize;
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char  valueStr[52]; /*Changed length*/
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 Input_FrameWidth;
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 Output_FrameWidth;
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 OutputRGB_Format;
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 Input_FrameFormat;
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 Output_FrameFormat;
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 Overlay;
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 Alpha = 0; /*Not implemented at OMX level*/
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 ParamSize = 0;
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char * pcSNArgs = NULL;
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int index;
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pHandle) {
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError=OMX_ErrorBadParameter;
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d :: Entered Fill_LCMLInitParams\n",__LINE__);
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->NumofOutputPort = 0;
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->IsYUVdataout    = 0;
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->IsRGBdataout    = 0;
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->IsOverlay       = 0;
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBuf = pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferCountMin;
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBufSize = pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferSize;
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBuf = OMX_VPP_MAX(pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nBufferCountMin,
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nBufferCountMin);
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBufSize = OMX_VPP_MAX(pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nBufferSize,
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nBufferSize);
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nBuffers      = nIpBuf;
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nSize         = nIpBufSize;
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.DataTrMethod  = DMM_METHOD;
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nBuffers     = nOpBuf;
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nSize        = nOpBufSize;
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD;
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->DeviceInfo.TypeofDevice       = 0;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->DeviceInfo.DspStream          = NULL;
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.nNumOfDLLs           = 3;
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].uuid     = &VPPNODE_TI_UUID;
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char *)plcml_Init->NodeInfo.AllUUIDs[0].DllName, VPP_NODE_DLL);
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].uuid     = &VPPNODE_TI_UUID;
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char *)plcml_Init->NodeInfo.AllUUIDs[1].DllName, VPP_NODE_DLL);
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].uuid     = (struct DSP_UUID *) &COMMON_TI_UUID;
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char *)plcml_Init->NodeInfo.AllUUIDs[2].DllName, USN_DLL_NAME);
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->SegID     = 0;
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Timeout   = -1;
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Alignment = 0;
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Priority = 5;
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("priority is %d\n", plcml_Init->Priority);
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->ProfileID = 0;
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Main input port */
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[0] = 5; /*# of Streams*/
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[1] = 0; /*Stream ID*/
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[2] = 0; /*Stream based input stream*/
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[3] = NUM_OF_VPP_BUFFERS; /*Number of buffers on input stream*/
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Overlay input port*/
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[4] = 1; /*Stream ID*/
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[5] = 0; /*Stream based input stream*/
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[6] = NUM_OF_VPP_BUFFERS; /*Number of buffers on input stream*/
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*RGB output port*/
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[7] = 2; /*Stream ID*/
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[8] = 0; /*Stream basedoutput stream for RGB data*/
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[9] = NUM_OF_VPP_BUFFERS; /*Number of buffers on output stream*/
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*YUV output port*/
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[10] = 3; /*Stream ID*/
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[11] = 0; /*Stream based output stream for YUV data*/
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[12] = NUM_OF_VPP_BUFFERS; /*Number of buffers on output stream*/
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Alpha input port, Not implemented at OMX level*/
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[13] = 4; /*Stream ID*/
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[14] = 0; /*Stream based input stream*/
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[15] = NUM_OF_VPP_BUFFERS; /*Number of buffers on output stream*/
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pcSNArgs = (char *) (arr + 16);
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Input_FrameWidth = pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.nFrameWidth;
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Output_FrameWidth = OMX_VPP_MAX(pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.nFrameWidth,
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.nFrameWidth);
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP:: INPPUT WIDTH=  in Fill_LCMLInitParams  %d\n ",Input_FrameWidth);
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP:: OUTPUT WIDTH=  in Fill_LCMLInitParams  %d\n ",Output_FrameWidth);
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* RGB type for output*/
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.bEnabled) {
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch (pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.eColorFormat)
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_Format16bitRGB565:
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB16_OUT;
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_Format24bitRGB888:
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB24_OUT;
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_Format32bitARGB8888:
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB32_OUT;
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_Format12bitRGB444:
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB12_OUT;
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_Format8bitRGB332:
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB8_OUT;
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexCustomRGB4ColorFormat:
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB4_OUT;
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatL8:
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_EGRAY8_OUT;
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatL4:
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_EGRAY4_OUT;
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatL2:
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_EGRAY2_OUT;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatMonochrome:
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_EGRAY1_OUT;
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 1;
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OutputRGB_Format = VGPOP_ERGB_NONE;
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsRGBdataout = 0;
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OutputRGB_Format = VGPOP_ERGB_NONE;
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Input frame format*/
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.eColorFormat)
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatYUV420PackedPlanar:
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_E420_IN;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatCbYCrY:
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_E422_IN_UY;
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatYCbYCr:
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_E422_IN_YU;
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*image formats*/
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_Format16bitRGB565:
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_ERGB16_IN;
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_Format12bitRGB444:
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_ERGB12_IN;
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_Format8bitRGB332:
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_ERGB8_IN;
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomRGB4ColorFormat:
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_ERGB4_IN;
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatL8:
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_EGRAY8_IN;
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatL4:
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_EGRAY4_IN;
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatL2:
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_EGRAY2_IN;
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_FormatMonochrome:
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_EGRAY1_IN;
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_COLOR_Format24bitRGB888:
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_ERGB24_IN;
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Input_FrameFormat = VGPOP_E420_IN;
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d :: NOT SUPPORTED INPUT FORMAT setting default as 420 planar",__LINE__);
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Output YUV frame format*/
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.bEnabled) {
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch (pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.eColorFormat)
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatYUV420PackedPlanar:
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Output_FrameFormat = VGPOP_E420_OUT;
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsYUVdataout = 1;
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatYCbYCr:
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Output_FrameFormat = VGPOP_E422_OUT_YU;
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsYUVdataout = 1;
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_COLOR_FormatCbYCrY:
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Output_FrameFormat = VGPOP_E422_OUT_UY;
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->NumofOutputPort++;
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsYUVdataout = 1;
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Output_FrameFormat = VGPOP_EYUV_NONE;
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IsYUVdataout=0;
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Output_FrameFormat = VGPOP_EYUV_NONE;
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT(":: Ports Available in Fill_LCMLInitParams  %ld\n ",pComponentPrivate->NumofOutputPort);
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*for overlay*/
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.bEnabled) {
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Overlay = 1;
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->IsOverlay = 1 ;
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::OVERLAY ENABLED");
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Overlay = 0;
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(valueStr, 0, sizeof(valueStr));
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT(":%lu:%lu:%u:%u:%u:%d:%d\n",
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Input_FrameWidth,
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Output_FrameWidth,
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OutputRGB_Format,
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Input_FrameFormat,
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Output_FrameFormat,
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Overlay,
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Alpha);
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sprintf(valueStr, ":%lu:%lu:%u:%u:%u:%d:%d\n",
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Input_FrameWidth,
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Output_FrameWidth,
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OutputRGB_Format,
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Input_FrameFormat,
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Output_FrameFormat,
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Overlay,
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Alpha);
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while(valueStr[ParamSize] != '\0'){
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ParamSize++;
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("ParamSize is %d\n", ParamSize);
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Copy VPP parameters */
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = memcpy(pcSNArgs,valueStr,ParamSize);
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp == NULL){
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( (ParamSize % 2) != 0) {
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        index =(ParamSize+1) >> 1;
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        index = ParamSize >> 1;  /*Divide by 2*/
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    index = index + 16;  /*Add 16 to the index in order to point to the correct location*/
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[index] = END_OF_CR_PHASE_ARGS;
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->pCrPhArgs = arr;
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d :: Exiting Fill_LCMLInitParams",__LINE__);
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @Start_ComponentThread() This function is called by the component to create
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* the component thread, command pipe, data pipe and LCML Pipe.
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent  handle for this instance of the component
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ==========================================================================* */
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Start_ComponentThread(OMX_HANDLETYPE pComponent)
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_attr_t attr;
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(&attr, 0, sizeof(attr));
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__inheritsched = PTHREAD_EXPLICIT_SCHED;
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__schedparam.__sched_priority = OMX_VGPOP_THREAD_PRIORITY;
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d :: Enetering  Start_ComponentThread\n", __LINE__);
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create the pipe used to send commands to the thread */
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->cmdPipe);
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorContentPipeCreationFailed;
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create the pipe used to send commands data to the thread */
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->nCmdDataPipe);
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorContentPipeCreationFailed;
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Create pipe to hold filled input buffers from APP to Component*/
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe(pComponentPrivate->nFilled_iPipe);
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorContentPipeCreationFailed;
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Create pipe to hold empty output buffers from APP to Component*/
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe(pComponentPrivate->nFree_oPipe);
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorContentPipeCreationFailed;
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pthread_create (&(pComponentPrivate->ComponentThread),
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            &attr,
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            VPP_ComponentThreadFunc,
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate);
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pthread_create (&(pComponentPrivate->ComponentThread),
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                NULL,
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                VPP_ComponentThreadFunc,
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate);
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError || !pComponentPrivate->ComponentThread) {
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_ThreadCreated(pComponentPrivate->pPERF,
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->ComponentThread,
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_FOURCC('V','P','P','T'));
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: Exiting from Start_ComponentThread\n", __LINE__);
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* Free_ComponentResources() This function is called by the component during
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* de-init to close component thread, Command pipe, data pipe & LCML pipe.
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent  handle for this instance of the component
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Free_ComponentResources(OMX_HANDLETYPE pComponent)
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = (VPP_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE threadError = OMX_ErrorNone;
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE err = OMX_ErrorNone;
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMMANDTYPE stop = EXIT_COMPONENT_THRD;
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i=0;
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_BoundaryStart | PERF_BoundaryCleanup);
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_SendingCommand(pComponentPrivate->pPERF, stop, 0, PERF_ModuleComponent);
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pLcmlHandle !=NULL) {
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT (" IN ComponentDeInit calling EMMCodecControlDestroy  \n");
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL);
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d : Error: in Destroying the codec\n",__LINE__);
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    err = write (pComponentPrivate->cmdPipe[1], &stop, sizeof(OMX_COMMANDTYPE));
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (err == -1) {
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("%d :: Error in Writing to the cmd  pipe  In deinit\n", eError);
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("%d :: Free_ComponentResources \n",__LINE__);
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->ComponentThread){
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = pthread_join (pComponentPrivate->ComponentThread,
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    (void*)&threadError);
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = oaf_pthread_join (pComponentPrivate->ComponentThread,
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        (void*)&threadError);
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (err) {
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error while closing Component Thread\n",__LINE__);
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error Component Thread = NULL\n",__LINE__);
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<2; i++) {
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->cmdPipe[i]);
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (err && OMX_ErrorNone == eError) {
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error while closing cmdPipe\n",__LINE__);
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->nCmdDataPipe[i]);
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (err && OMX_ErrorNone == eError) {
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error while closing Command Data Pipe\n",__LINE__);
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*close the data pipe handles*/
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close(pComponentPrivate->nFree_oPipe[i]);
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (err && OMX_ErrorNone == eError) {
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error while closing Free Output pipe\n",__LINE__);
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close(pComponentPrivate->nFilled_iPipe[i]);
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (err && OMX_ErrorNone == eError) {
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error while closing Filled Input pipe\n",__LINE__);
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->vpp_mutex);
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->stop_cond);
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->buf_mutex);
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_BoundaryComplete | PERF_BoundaryCleanup);
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_Done(pComponentPrivate->pPERF);
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* LinkedList_DisplayAll(&AllocList); */
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREEALL();
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList_Destroy(&AllocList);
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("Exiting Successfully After Freeing All Resources\n");
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_DisablePort() This function is called by the component when ever it
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_DisablePort (VPP_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1)
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate) {
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle;
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   if (pComponentPrivate->curState == OMX_StateExecuting || pComponentPrivate->curState == OMX_StatePause) {
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       if (((nParam1 >= 0) && (nParam1 < 4)) || (nParam1 == -1)) {
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           eError = VPP_HandleCommandFlush(pComponentPrivate, nParam1, OMX_FALSE);
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   }
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_EnablePort() This function is called by the component when ever it
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_EnablePort (VPP_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1)
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ports;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nTimeout;
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: Enable port index=%ld",nParam1);
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate) {
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle;
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nParam1 >= 0 && nParam1 < NUM_OF_VPP_PORTS ){
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* enable port*/
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[nParam1].pPortDef.bEnabled = OMX_TRUE;
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nParam1 == -1) {
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (ports = 0; ports < NUM_OF_VPP_PORTS; ports++)
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[ports].pPortDef.bEnabled = OMX_TRUE;
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nTimeout = 0;
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (OMX_TRUE)
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((nParam1 >= 0 && nParam1 < NUM_OF_VPP_PORTS) &&
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                (pComponentPrivate->curState == OMX_StateLoaded ||
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nParam1].pPortDef.bPopulated)) {
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pHandle,
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventCmdComplete,
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_CommandPortEnable,
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    nParam1,
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (nParam1 == -1 &&
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                (pComponentPrivate->curState == OMX_StateLoaded ||
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->sCompPorts[0].pPortDef.bPopulated &&
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[1].pPortDef.bPopulated &&
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[2].pPortDef.bPopulated &&
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[3].pPortDef.bPopulated))) {
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (ports = 0; ports < NUM_OF_VPP_PORTS; ports++) {
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler (pHandle,
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        pHandle->pApplicationPrivate,
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_EventCmdComplete,
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_CommandPortEnable,
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        ports,
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        NULL);
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (nTimeout++ > 0xEFFFFFFE) {
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentPrivate->pHandle->pApplicationPrivate,
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_EventError,
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_ErrorInsufficientResources,
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_TI_ErrorMajor,
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            "Port Unresponsive - Idle");
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sched_yield();
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_EnablePort() This function is called by the component when ever it
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_HandleCommandFlush (VPP_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1, OMX_BOOL return_event)
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nCount = 0;
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char    *pArgs      = "damedesuStr";
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE * pBufHeader;
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef ;
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int                    nRet;
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int                    i;
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BOOL               bFoundBuffer;
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate) {
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle;
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("nParam1 %d return_event is %x OMX_FALSE %x\n", nParam1, return_event, OMX_FALSE);
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pLcmlHandle = pComponentPrivate->pLcmlHandle;
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDisable = OMX_FALSE;
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP_UTILS: send STOP as flush\n");
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = LCML_ControlCodec(
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            MMCodecControlStop,
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (void *)pArgs);
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d: Error 0x%X Occurred in Codec Stop..\n",__LINE__,eError);
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pComponentPrivate->bDisable == OMX_FALSE) {
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sched_yield();
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = LCML_ControlCodec(
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            EMMCodecControlStart,
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (void *)pArgs);
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d: Error 0x%X Occurred in Codec Start..\n",__LINE__,eError);
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i = 0; i < NUM_OF_VPP_PORTS; i ++) {
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (return_event == OMX_TRUE) {
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (nCount = 0; nCount < NUM_OF_VPP_BUFFERS; nCount ++){
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner  == VPP_BUFFER_DSP ||
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner  == VPP_BUFFER_COMPONENT_IN ||
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner  == VPP_BUFFER_COMPONENT_OUT){
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    switch (pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner) {
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    case VPP_BUFFER_DSP:
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].pBufHeader->nFilledLen = 0;
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /* pComponentPrivate->nInPortOut ++; */
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->sCompPorts[0].pVPPBufHeader[nCount].pBufHeader), pBuffer),
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->sCompPorts[0].pVPPBufHeader[nCount].pBufHeader), nFilledLen),
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          PERF_ModuleHLMM);
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (i == OMX_VPP_INPUT_PORT ||
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            i == OMX_VPP_INPUT_OVERLAY_PORT) {
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle,
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].pBufHeader);
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        } else if (i == OMX_VPP_RGB_OUTPUT_PORT ||
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            i == OMX_VPP_YUV_OUTPUT_PORT) {
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle,
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].pBufHeader);
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    case VPP_BUFFER_COMPONENT_IN:
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        bFoundBuffer = OMX_FALSE;
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        while (bFoundBuffer == OMX_FALSE) {
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if (i == OMX_VPP_INPUT_PORT || i == OMX_VPP_INPUT_OVERLAY_PORT) {
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nRet = read(pComponentPrivate->nFilled_iPipe[0], &(pBufHeader),sizeof(pBufHeader));
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (-1 == nRet) {
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    VPP_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = VPP_GetPortDefFromBufHeader(pBufHeader, &portDef);
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (eError != OMX_ErrorNone) {
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    VPP_DPRINT("VPP:: Got error in _GetPortDefFromBufHeader. Code %x\n", eError);
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    goto EXIT;
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (portDef->nPortIndex == i) {
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle,
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pComponentPrivate->pHandle->pApplicationPrivate,
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pBufHeader);
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    bFoundBuffer = OMX_TRUE;
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                else {
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    write(pComponentPrivate->nFilled_iPipe[1], &(pBufHeader), sizeof(pBufHeader));
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            else if (i == OMX_VPP_RGB_OUTPUT_PORT ||i == OMX_VPP_YUV_OUTPUT_PORT) {
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nRet = read(pComponentPrivate->nFree_oPipe[0], &pBufHeader, sizeof(pBufHeader));
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (-1 == nRet) {
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    VPP_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = VPP_GetPortDefFromBufHeader(pBufHeader, &portDef);
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (eError != OMX_ErrorNone) {
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    VPP_DPRINT("Error in _GetPortDefFromBufHeader. Code %d\n", eError);
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    goto EXIT;
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (portDef->nPortIndex == i) {
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->sCompPorts[i].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->cbInfo.FillBufferDone(pHandle,
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pBufHeader);
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    bFoundBuffer = OMX_TRUE;
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                else {
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    write(pComponentPrivate->nFree_oPipe[1],&pBufHeader,sizeof(OMX_BUFFERHEADERTYPE*));
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        } /* end of while () */
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    case VPP_BUFFER_COMPONENT_OUT:
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /* since we don't have this queue, there is nothing
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        to flush.  Buffers are handled immediately */
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    case VPP_BUFFER_CLIENT:
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    case VPP_BUFFER_TUNNEL_COMPONENT:
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventCmdComplete,
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_CommandFlush,
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                i,
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } /* for (i = 0; i < NUM_OF_VPP_PORTS; i ++) */
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @StateToIdle() This function is called by the component when ever it
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_StateToIdle(VPP_COMPONENT_PRIVATE *pComponentPrivate)
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE                eError      = OMX_ErrorNone;
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE            *pHandle    = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE               pLcmlHandle = pComponentPrivate->pLcmlHandle;
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef   = NULL;
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_PORT_TYPE                *pPortTp    = NULL;
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8                  *pBufferAligned = NULL;
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8                  *pBufferStart = NULL;
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char                         *pArgs      = "damedesuStr";
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32                      nTimeout;
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16                      array[100];  /*Used to pass to Fill_LCMLInitParams*/
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d: HandleCommand: Cmd Idle \n",__LINE__);
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("Current state is %d = %d\n", pComponentPrivate->curState, OMX_StateLoaded);
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid) {
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorIncorrectStateTransition,
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorSevere,
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->toState = OMX_StateIdle;
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->curState == OMX_StateLoaded) ||
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->curState == OMX_StateWaitForResources)) { /* from Loaded to Idle */
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LCML_CALLBACKTYPE cb;
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LCML_DSP *pLcmlDsp;
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        char *p = "damedesuStr";
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nPortIndex = 0;
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_Boundary(pComponentPrivate->pPERFcomp,
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_BoundaryStart | PERF_BoundarySetup);
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (OMX_HANDLETYPE) VPP_GetLCMLHandle(pComponentPrivate);
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pLcmlHandle == NULL) {
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d :: LCML Handle is NULL........exiting..\n",__LINE__);
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", __LINE__, pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d: before init LCML \n",__LINE__);
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (nPortIndex = 0; nPortIndex < NUM_OF_VPP_PORTS; nPortIndex++) {
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_U32 nBuf;
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortTp = &(pComponentPrivate->sCompPorts[nPortIndex]);
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef = &(pComponentPrivate->sCompPorts[nPortIndex].pPortDef);
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pPortTp->hTunnelComponent != NULL ) &&
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((pPortTp->eSupplierSetting == OMX_BufferSupplyInput && 2 > nPortIndex) ||
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (pPortTp->eSupplierSetting == OMX_BufferSupplyOutput && 2 < nPortIndex))) {
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* assuming i am the supplier */
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (nBuf=0; nBuf< pPortDef->nBufferCountActual; nBuf++) {
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_U32 nsize;
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_U8 *nbuffer = NULL;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nsize = pPortDef->format.video.nFrameWidth * pPortDef->format.video.nFrameHeight * 2;
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_MALLOC(pBufferStart, nsize + 32 + 256);
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("allocated pBufferStart with address %p\n", nbuffer);
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferAligned = pBufferStart;
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    while ((((int)pBufferAligned) & 0x1f) != 0)
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    {
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufferAligned++;
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferAligned            = ((OMX_U8*)pBufferAligned)+128;
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufferStart = pBufferStart;
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nbuffer            = pBufferAligned;
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_XferingFrame(pComponentPrivate->pPERFcomp,
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nbuffer, nsize,
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_ModuleMemory,
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_ModuleLLMM);
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_UseBuffer(
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pPortTp->hTunnelComponent,
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        &(pPortTp->pVPPBufHeader[nBuf].pBufHeader),
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pPortTp->nTunnelPort,
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        NULL,
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        nsize,
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        nbuffer);
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pPortTp->eSupplierSetting == OMX_BufferSupplyInput) {
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->nFilledLen = nsize;
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->nAllocLen = nsize;
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].nIndex = OMX_VPP_INPUT_PORT;
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].bSelfAllocated = OMX_TRUE;
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].bHolding = OMX_TRUE;
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].nBufSupplier = OMX_TRUE;
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->pInputPortPrivate = &pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef;
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bPopulated = OMX_TRUE;
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].nBufferCount ++;
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->nFilledLen = nsize;
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->nAllocLen = nsize;
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].nIndex = nPortIndex;
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].bSelfAllocated = OMX_TRUE;
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].bHolding = OMX_TRUE;
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].nBufSupplier = OMX_TRUE;
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader->pOutputPortPrivate = &pComponentPrivate->sCompPorts[nPortIndex].pPortDef;
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bPopulated = OMX_TRUE;
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nPortIndex].nBufferCount ++;
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_InitBufferDataPropagation(pComponentPrivate, nPortIndex);
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } /* end if I am a supplier */
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pPortDef->bEnabled == OMX_TRUE) {
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nTimeout = 0;
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                while(1)
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pPortDef->bPopulated) {
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else if (nTimeout ++ > 0xEFFFFFFE) {
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("TimeOut Error ! .. Buffers not allocated in time.\n");
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentPrivate->pHandle->pApplicationPrivate,
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_EventError,
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_ErrorPortUnresponsiveDuringDeallocation,
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_TI_ErrorSevere,
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            "Port Unresponsive - Idle");
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sched_yield();
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } /* end of for loop */
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", __LINE__, pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_Fill_LCMLInitParams(pHandle,array, pLcmlDsp);
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", __LINE__, pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Error 0x%X returned from Fill_LCMLInitParams()\n",__LINE__,eError);
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle;
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cb.LCML_Callback = (void *) VPP_LCML_Callback;
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->lcml_nCntIp = 0;
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->lcml_nCntOpReceived = 0;
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle,
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    p,
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    &pLcmlHandle,
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    (void *)p,
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    &cb);
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       if (eError != OMX_ErrorNone) {
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d :: Error 0x%X : InitMMCodec failed...>>>>>> \n",__LINE__,eError);
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", __LINE__, pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef LCML_USE_HASH
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef VPP_USE_HASH
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Enable Hashing for this component */
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("enable hashing\n");
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LCML_SetHashingState(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, OMX_TRUE);
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED /* Resource Manager Proxy Calls */
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *)ResourceManagerCallback;
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState != OMX_StateWaitForResources) {
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, OMX_VPP_COMPONENT, 50, 3456, &(pComponentPrivate->rmproxyCallback));/*50Mhz*/
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* resource is not available, need set state to OMX_StateWaitForResources*/
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Resource is not available\n");
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError,
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorInsufficientResources,
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_TI_ErrorSevere,
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorNone;
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_BoundaryComplete | PERF_BoundarySetup);
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex = %d\n", __LINE__, pComponentPrivate->sCompPorts[0].pPortDef.nPortIndex);
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateIdle;
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_VPP_COMPONENT, OMX_StateIdle, 3456, NULL);
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("Resources not available Loaded ->Idle\n");
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError,
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorInsufficientResources,
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventCmdComplete,
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_CommandStateSet,
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->curState,
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                NULL);
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d :: VPP: State has been Set to Idle\n",__LINE__);
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StateExecuting ||
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause ) {
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nIndex = 0;
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_U32 nCount = 0;
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nFilledInBuf = 0;
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nFreeInBuf = 0;
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nFilledOutBuf = 0;
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int nFreeOutBuf = 0;
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int kk;
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bIsStopping = OMX_TRUE;
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->toState = OMX_StateIdle;
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef LCML_USE_HASH
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* clear out any mappings that might have accumulated */
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("Error occurred in Codec mapping flush!\n");
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d :: In HandleCommand: Stopping the codec\n",__LINE__);
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_Boundary(pComponentPrivate->pPERFcomp,
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_BoundaryComplete | PERF_BoundarySteadyState);
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* PERF_SendingCommand(pComponentPrivate->pPERFcomp,
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            MMCodecControlStop,
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (OMX_U32) pArgs,
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer); */
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            MMCodecControlStop,
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (void *)pArgs);
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d: Error 0x%X Occurred in Codec Stop..\n",__LINE__,eError);
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->vpp_mutex);
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        while ((pComponentPrivate->ExeToIdleFlag & VPP_DSPSTOP) == 0) {
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->stop_cond, &pComponentPrivate->vpp_mutex);
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->vpp_mutex);
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP_Utils.c: get STOP back from DSP\n");
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for( nIndex = 0; nIndex < NUM_OF_VPP_PORTS; nIndex++) {
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("port %d is %d (%p)\n", nIndex, pComponentPrivate->sCompPorts[nIndex].pPortDef.bEnabled,pComponentPrivate->sCompPorts[nIndex].hTunnelComponent);
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*if (!(pComponentPrivate->sCompPorts[nIndex].pPortDef.bEnabled == OMX_TRUE)) {
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                continue;
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }*/
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sCompPorts[nIndex].hTunnelComponent != NULL) {
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (nCount = 0; nCount < pComponentPrivate->sCompPorts[nIndex].nBufferCount; nCount++) {
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!(pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].bSelfAllocated == OMX_TRUE)) {
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("VPP return buf to tunneled: %d %d\n",
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->nFlags,
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->nFilledLen);
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->nFlags = OMX_BUFFERFLAG_EOS;
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->nFilledLen = 0;
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (pComponentPrivate->sCompPorts[nIndex].pPortDef.eDir == OMX_DirOutput) {
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            VPP_DPRINT("VPP is at output port\n");
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->pBuffer,
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->nFilledLen,
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleLLMM);
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_CLIENT){
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = OMX_EmptyThisBuffer(
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pComponentPrivate->sCompPorts[nIndex].hTunnelComponent,
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        else { /* pComponentPrivate->sCompPorts[nIndex].pPortDef.eDir == OMX_DirInput */
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            VPP_DPRINT("VPP is at input port\n");
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader->pBuffer,
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                0,
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleLLMM);
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            VPP_DPRINT("VPP return buffer to tunnel\n");
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_CLIENT){
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                VPP_DPRINT("VPP_UTILS: call to OMX_FillThisBuffer():: %d\n", __LINE__);
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = OMX_FillThisBuffer(
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pComponentPrivate->sCompPorts[nIndex].hTunnelComponent,
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           }
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {  /* pComponentPrivate->sCompPorts[nIndex].hTunnelComponent == NULL */
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* for (nIndex = 0; nIndex < NUM_OF_VPP_PORTS; nIndex ++) { */
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP_Utils.c: (%d) %d %p\n", __LINE__, nIndex, pComponentPrivate->sCompPorts[nIndex].hTunnelComponent);
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (nCount = 0; nCount < pComponentPrivate->sCompPorts[nIndex].nBufferCount; nCount++) {
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP:: port %d count %d bufHeader %p owner %d\n", nIndex, nCount,
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader,
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner);
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->buf_mutex);
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_CLIENT) {
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner == VPP_BUFFER_COMPONENT_IN){
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (nIndex == 0 || nIndex == 1) {
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nFilledInBuf ++;
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    } else {
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("index %d cnt %d owner %d %p\n", nIndex, nCount,
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner,
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nFreeOutBuf ++;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else if (pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner == VPP_BUFFER_COMPONENT_OUT){
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (nIndex == 0 || nIndex == 1) {
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nFreeInBuf ++;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    } else {
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nFilledOutBuf ++;
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else {
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Buffer %p is in DSP, error!\n", pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_CLIENT;
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (nIndex == 0 || nIndex == 1) {
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone(
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle,
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle->pApplicationPrivate,
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    } else {
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.FillBufferDone(
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle,
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle->pApplicationPrivate,
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].pBufHeader);
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->buf_mutex);
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("nFilledInBuf %d nFreeInBuf %d nFilledOutBuf %d nFreeOutBuf %d\n", nFilledInBuf, nFreeInBuf, nFilledOutBuf, nFreeOutBuf);
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("nFilledInBuf %d nFreeInBuf %d nFilledOutBuf %d nFreeOutBuf %d\n", nFilledInBuf, nFreeInBuf, nFilledOutBuf, nFreeOutBuf);
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (kk = 0; kk < nFilledInBuf; kk ++) {
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_Process_FilledInBuf(pComponentPrivate);
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (kk = 0; kk < nFreeOutBuf; kk ++) {
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_Process_FreeOutBuf(pComponentPrivate);
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP after loop: nFilledInBuf %d nFreeInBuf %d nFilledOutBuf %d nFreeOutBuf %d\n", nFilledInBuf, nFreeInBuf, nFilledOutBuf, nFreeOutBuf);
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for( nIndex = 0; nIndex < NUM_OF_VPP_PORTS; nIndex++) {
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("port %d is %d (%p)\n", nIndex, pComponentPrivate->sCompPorts[nIndex].pPortDef.bEnabled,pComponentPrivate->sCompPorts[nIndex].hTunnelComponent);
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sCompPorts[nIndex].pPortDef.bEnabled == OMX_FALSE) {
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                continue;
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sCompPorts[nIndex].hTunnelComponent != NULL) {
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (nCount = 0; nCount < pComponentPrivate->sCompPorts[nIndex].nBufferCount; nCount++) {
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     if (pComponentPrivate->sCompPorts[nIndex].pPortDef.eDir == OMX_DirOutput
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                && pComponentPrivate->sCompPorts[nIndex].eSupplierSetting == OMX_BufferSupplyOutput) {
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         VPP_DPRINT("VPP :: pHandle=%p, eBufferOwner= %d, nIndex= %d\n", pComponentPrivate->pHandle, pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner, nIndex);
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner == VPP_BUFFER_DSP) {
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_OUT;;
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                while((pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_COMPONENT_IN) &&
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        (pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_COMPONENT_OUT)){
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_OUT;
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sched_yield();
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         VPP_DPRINT("VPP:: Component have all the buffers, eBufferOwner= %d\n", pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner);
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else if(pComponentPrivate->sCompPorts[nIndex].pPortDef.eDir == OMX_DirInput
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                && pComponentPrivate->sCompPorts[nIndex].eSupplierSetting == OMX_BufferSupplyInput) {
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("VPP Utils :: pHandle=%p, eBufferOwner= %d, nIndex= %d\n", pComponentPrivate->pHandle, pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner, nIndex);
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner == VPP_BUFFER_DSP) {
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner = VPP_BUFFER_COMPONENT_OUT;;
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                while((pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_COMPONENT_IN) &&
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        (pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner != VPP_BUFFER_COMPONENT_OUT)){
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sched_yield();
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         VPP_DPRINT("VPP Utils:: Component have all the buffers, eBufferOwner= %d\n", pComponentPrivate->sCompPorts[nIndex].pVPPBufHeader[nCount].eBufferOwner);
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->ExeToIdleFlag |= VPP_BUFFERBACK;
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->ExeToIdleFlag == VPP_IDLEREADY) {
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateIdle;
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventCmdComplete,
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_ErrorNone,
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_StateIdle,
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                "NULL");
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->ExeToIdleFlag = VPP_ZERO;
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_VPP_COMPONENT, OMX_StateIdle, 3456, NULL);
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d: Comp: Sending ErrorNotification: Invalid State\n", __LINE__);
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle,
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle->pApplicationPrivate,
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventCmdComplete,
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorInvalidState,
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            0,
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            "Invalid State Error from VPP");
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @StateToExecuting() This function is called by the component when ever it
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_StateToExecuting(VPP_COMPONENT_PRIVATE *pComponentPrivate)
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE    pLcmlHandle = pComponentPrivate->pLcmlHandle;
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufHdr = NULL;
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int     i, j;
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int     nBuf;
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d: HandleCommand: Cmd Executing \n",__LINE__);
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateExecuting) {
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: send OMX_ErrorSameState from OMX_StateInvalid\n");
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle,
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorSameState,
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorMinor,
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     pComponentPrivate->toState = OMX_StateExecuting;
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateIdle) {/* from Idle to Executing */
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_U32 Inputports = 1;
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int bufCount;
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->tVPPIOConf->overlayInputImage = 0;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->tVPPIOConf->YUVOutputImage = 0;
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->tVPPIOConf->RGBOutputImage = 0;
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].nReturnedBufferCount = pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].nBufferCount; /*usmc*/
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->IsOverlay == OMX_TRUE) {
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->tVPPIOConf->overlayInputImage = 1;
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Inputports =2;
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->NumofOutputPort && pComponentPrivate->NumofOutputPort < 2 ) {
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->IsYUVdataout) {
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->tVPPIOConf->YUVOutputImage = 1;
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->tVPPIOConf->RGBOutputImage = 1;
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(pComponentPrivate->NumofOutputPort == 2) {
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->tVPPIOConf->YUVOutputImage = 1;
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->tVPPIOConf->RGBOutputImage = 1;
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d: before START control \n",__LINE__);
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    EMMCodecControlStart,
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (void *)pArgs);
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d: Error 0x%X Occurred in Codec Start..\n",__LINE__,eError);
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bIsStopping=0;
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d :: Comp :: After LCML_StartCodec function \n",__LINE__);
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for( j=0; j<(int)Inputports; j++) {
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nBuf =pComponentPrivate->sCompPorts[j].nBufferCount;
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::Sending Input buffer to Application bufcount=%lu \n",nBuf);
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*TUNNEL HERE */
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (bufCount = 0; bufCount < nBuf; bufCount++) {
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHdr = pComponentPrivate->sCompPorts[j].pVPPBufHeader[bufCount].pBufHeader;
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if ((pComponentPrivate->sCompPorts[j].hTunnelComponent != NULL) &&
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (pComponentPrivate->sCompPorts[j].eSupplierSetting == OMX_BufferSupplyInput)) {
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* VPP owns this buffer */
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("VPP: send fillthisbuffer, out index %p, %d\n", pBufHdr, pBufHdr->nOutputPortIndex);
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PREF(pBufHdr,pBuffer),
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    0,
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PERF_ModuleLLMM);
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[j].pVPPBufHeader[bufCount].eBufferOwner = VPP_BUFFER_CLIENT;
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("VPP_UTILS: call to OMX_FillThisBuffer():: %d\n", __LINE__);
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_FillThisBuffer(pComponentPrivate->sCompPorts[j].hTunnelComponent, pBufHdr);
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP:: %d:: Ports Available in Fill_LCMLInitParams  %ld\n ",__LINE__, pComponentPrivate->NumofOutputPort);
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->IsYUVdataout){
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nBuf = pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].nBufferCount;
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].hTunnelComponent != NULL) &&
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].eSupplierSetting == OMX_BufferSupplyOutput)) {
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (i=0; i < nBuf; i++) {
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHdr = pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pVPPBufHeader[i].pBufHeader;
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBufHdr->pBuffer,
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBufHdr->nFilledLen,
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PERF_ModuleCommonLayer);
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("LCML_QueueBuffer YUV: %s::%s: %d: VPP\n", __FILE__, __FUNCTION__, __LINE__);
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_QueueBuffer(
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                EMMCodecStream3,
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHdr->pBuffer,
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHdr->nAllocLen,0,
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (OMX_U8 *)pComponentPrivate->pOpYUVFrameStatus,
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                sizeof(GPPToVPPOutputFrameStatus),
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)pBufHdr);
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("VPP::%d :: Comp:: Error 0x%X While sending the output buffers to Codec\n", __LINE__,eError);
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("VPP::%d :: Component Sending Output buffer to Codec %p\n",__LINE__, pBufHdr);
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(pComponentPrivate->IsRGBdataout){
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nBuf = pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].nBufferCount;
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].hTunnelComponent != NULL) &&
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].eSupplierSetting == OMX_BufferSupplyOutput)) {
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (i=0; i < nBuf; i++) {
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHdr = pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pVPPBufHeader[i].pBufHeader;
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBufHdr->pBuffer,
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBufHdr->nFilledLen,
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PERF_ModuleCommonLayer);
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("LCML_QueueBuffer RGB: %s::%s: %d: VPP\n", __FILE__, __FUNCTION__, __LINE__);
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_QueueBuffer(
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                EMMCodecStream2,
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHdr->pBuffer,
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHdr->nAllocLen,0,
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (OMX_U8 *)pComponentPrivate->pOpRGBFrameStatus,
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                sizeof(GPPToVPPOutputFrameStatus),
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)pBufHdr);
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT("VPP::%d :: Comp:: Error 0x%X While sending the output buffers to Codec\n", __LINE__,eError);
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("VPP::%d :: Component Sending Output buffer to Codec %p\n",__LINE__, pBufHdr);
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP:: %d : No Port enable\n");
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StatePause) {
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d: Comp: Resume Command Came from App\n",__LINE__);
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* char *pArgs = "damedesuStr";*/
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    EMMCodecControlStart,(void *)pArgs);
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("Error While Resuming the codec\n");
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else { /* if current state is not Idle or Pause ... */
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle, pHandle->pApplicationPrivate,
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorIncorrectStateTransition,OMX_TI_ErrorMinor,
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            "Invalid State from VPP");
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ExeToIdleFlag = VPP_ZERO;
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->toState = OMX_StateExecuting;
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_VPP_COMPONENT, OMX_StateExecuting, 3456, NULL);
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateExecuting;
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->cbInfo.EventHandler(
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pHandle,
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pHandle->pApplicationPrivate,
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_EventCmdComplete,
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_ErrorNone,
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_StateExecuting,
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        NULL);
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @StateToLoaded() This function is called by the component when ever it
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_StateToLoaded(VPP_COMPONENT_PRIVATE *pComponentPrivate)
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE     eError = OMX_ErrorNone;
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE    pLcmlHandle = pComponentPrivate->pLcmlHandle;
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int     nPortIndex;
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nTimeout = 0;
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d: HandleCommand: Cmd Loaded\n",__LINE__);
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: %d: HandleCommand: Cmd Loaded, current state: %d\n",__LINE__, pComponentPrivate->curState);
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateIdle && pComponentPrivate->curState != OMX_StateWaitForResources ) {
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle,
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle->pApplicationPrivate,
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorIncorrectStateTransition,
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorMinor,
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            "Invalid State from VPP");
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     pComponentPrivate->toState = OMX_StateLoaded;
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateIdle ||
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateWaitForResources) {
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_Boundary(pComponentPrivate->pPERFcomp,
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_BoundaryStart | PERF_BoundaryCleanup);
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateWaitForResources) {
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError= RMProxy_NewSendCommand(pHandle,  RMProxy_CancelWaitForResource, OMX_VPP_COMPONENT, 0, 3456, NULL);
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("CancelWaitForResource Failed\n");
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError,
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorUndefined,
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_TI_ErrorSevere,
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState != OMX_StateWaitForResources) {
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError= RMProxy_NewSendCommand(pHandle,  RMProxy_FreeResource, OMX_VPP_COMPONENT, 0, 3456, NULL);
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Cannot Free Resources\n");
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError,
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorUndefined,
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_TI_ErrorSevere,
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pLcmlHandle !=NULL) {
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d: HandleCommand: : Loaded calling destroy\n",__LINE__);
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        EMMCodecControlDestroy,
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        NULL);
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             FreeLibrary(g_hLcmlDllHandle);
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            g_hLcmlDllHandle = NULL;
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: %d\n", __LINE__);
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          if(pComponentPrivate->pLcmlHandle){
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               dlclose(pComponentPrivate->pDllHandle);
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pLcmlHandle = NULL;
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pLCML = NULL;
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d : Error 0x%X: in Destroying the codec\n",__LINE__,eError);
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: %d\n", __LINE__);
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       for(nPortIndex = 0; nPortIndex < NUM_OF_VPP_PORTS; nPortIndex++) {
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP free tunneled buf %d %p %x %x\n", nPortIndex,
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[nPortIndex].hTunnelComponent,
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[nPortIndex].nBufSupplier,
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bEnabled);
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sCompPorts[nPortIndex].hTunnelComponent != NULL &&
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[nPortIndex].nBufSupplier == OMX_TRUE
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*&& pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[0].bSelfAllocated*/) {
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_U32 nBuf;
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_U8 *pBufferStart = NULL;
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_BUFFERHEADERTYPE *pBufHeader;
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               for (nBuf=0; nBuf<pComponentPrivate->sCompPorts[nPortIndex].pPortDef.nBufferCountActual; nBuf++) {
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("PORT  %d is Supplier !! .....\n",nPortIndex);
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufferStart = pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufferStart;
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHeader = pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader;
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PREF(pBufHeader,pBuffer),
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PREF(pBufHeader,nAllocLen),
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    PERF_ModuleLLMM);
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pBufHeader != NULL){
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_FREE(pBufferStart);
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufferStart = NULL;
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->pBuffer = NULL;
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nPortIndex].nBufferCount --;
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bPopulated = OMX_FALSE;
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_FreeBuffer(pComponentPrivate->sCompPorts[nPortIndex].hTunnelComponent,
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nPortIndex].nTunnelPort,
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->sCompPorts[nPortIndex].pVPPBufHeader[nBuf].pBufHeader
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                );
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        VPP_DPRINT ("OMX_FreeBuffer Failed !! .....\n");
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }/*End of Tunneling component*/
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInputFrame = 0;
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nOverlayFrame = 0;
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInYUVBufferCount = 0;
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInRGBBufferCount = 0;
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nOutYUVBufferCount = 0;
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nOutRGBBufferCount = 0;
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef = &(pComponentPrivate->sCompPorts[nPortIndex].pPortDef);
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d pPortDef.bEnabled %d\n", nPortIndex, pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bEnabled);
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bEnabled == OMX_TRUE) {
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nTimeout = 0;
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                while(1)
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!pComponentPrivate->sCompPorts[nPortIndex].pPortDef.bPopulated) {
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else if (nTimeout++ > 0xEFFFFFFE) {
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pComponentPrivate->pHandle->pApplicationPrivate,
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_EventError,
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_ErrorPortUnresponsiveDuringDeallocation,
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_TI_ErrorSevere,
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            "Port Unresponsive - Idle");
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sched_yield();
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERFcomp,
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_BoundaryComplete | PERF_BoundaryCleanup);
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->curState == OMX_StateIdle) &&
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         (pComponentPrivate->bPreempted == 1 )){
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateLoaded;
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventError,
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_ErrorResourcesLost,
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_TI_ErrorSevere,
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               NULL);
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bPreempted = 0;
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateLoaded;
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_CommandStateSet,
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_StateLoaded,
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               NULL);
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @HandleCommand() This function is called by the component when ever it
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_HandleCommand (VPP_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1)
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;*/
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: >>> Entering HandleCommand Function\n",__LINE__);
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == nParam1) {
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: send OMX_ErrorSameState from OMX_StateInvalid\n");
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle,
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorSameState,
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorMinor,
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d : Error 0x%X: in Destroying the codec\n",__LINE__,eError);
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParam1)
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateInvalid:
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState == OMX_StateIdle ||
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState == OMX_StateExecuting ||
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState == OMX_StatePause  ) {
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_ControlCodec(
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        EMMCodecControlDestroy,
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        NULL);
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            FreeLibrary(g_hLcmlDllHandle);
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            g_hLcmlDllHandle = NULL;
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->pLcmlHandle){
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                dlclose(pComponentPrivate->pDllHandle);
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pLcmlHandle = NULL;
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pLCML = NULL;
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateInvalid;
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorInvalidState,
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorCritical,
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventCmdComplete,
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_CommandStateSet,
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->curState,
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateIdle:
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_StateToIdle(pComponentPrivate);
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateExecuting:
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_StateToExecuting(pComponentPrivate);
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateLoaded:
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_StateToLoaded(pComponentPrivate);
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StatePause:
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("%d: HandleCommand: Cmd Pause: Cur State = %d\n",__LINE__, pComponentPrivate->curState);
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ( pComponentPrivate->curState == OMX_StateExecuting ||
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState == OMX_StateIdle ) {
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_BoundaryComplete | PERF_BoundarySteadyState);
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->toState = OMX_StatePause;
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->ExeToIdleFlag = VPP_ZERO;
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_ControlCodec(
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        EMMCodecControlPause,
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (void *)pArgs);
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d : Error0x%X: in Pausing the codec\n",__LINE__,eError);
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Sending to Idle until receiving EMMCodecProcessingPaused call back*/
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->pHandle->pApplicationPrivate,
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventError,
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_ErrorIncorrectStateTransition,
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_TI_ErrorMinor,
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                NULL);
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Error: Invalid State Given by Application\n",__LINE__);
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateWaitForResources:
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: SetState to WaitForResources, curState is %d\n", pComponentPrivate->curState);
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState == OMX_StateLoaded) {
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError= RMProxy_NewSendCommand(pComponentPrivate->pHandle, RMProxy_StateSet, OMX_VPP_COMPONENT, OMX_StateWaitForResources, 3456, NULL);
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("RMProxy_NewSendCommand(OMX_StateWaitForResources) failed\n");
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError,
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorUndefined,
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateWaitForResources;
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP: my state is %d, from OMX_StateLoaded, before call EventHandler\n", pComponentPrivate->curState);
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->pHandle->pApplicationPrivate,
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventCmdComplete,
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_CommandStateSet,
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->curState,
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                NULL);
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP: after call EventHandler\n");
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->pHandle->pApplicationPrivate,
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventError,
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_ErrorIncorrectStateTransition,
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_TI_ErrorMinor,
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                NULL);
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_StateMax:
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d: HandleCommand: Cmd OMX_StateMax::\n",__LINE__);
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: Exiting HandleCommand Function, eError=0x%X,\n",__LINE__,eError);
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_ProcessFilledInBuf() This function is called by the component  Thread whenever it
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the an input buffer from the application
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pBufHeader Buffer from the application
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Process_FilledInBuf(VPP_COMPONENT_PRIVATE* pComponentPrivate)
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DIRTYPE eDir = OMX_DirMax;
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIndex;
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VPP_COMPONENT_BUFFER *pComponentBuf = NULL;
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBufHeader = NULL;
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE               *pHandle = NULL;
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet=0;
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = pComponentPrivate->pHandle;
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("In VPP_Process_FilledInBuf\n");
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = read(pComponentPrivate->nFilled_iPipe[0], &(pBufHeader),sizeof(pBufHeader));
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (-1 == nRet) {
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("%d :: Entering VPP_Process_FilledInBuf with pBufHeader=%p\n",__LINE__, pBufHeader);
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufHeader->nFlags & OMX_BUFFERFLAG_EOS) {
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("EOS flag is in input buffer (len %d)\n", pBufHeader->nFilledLen);
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_GetPortDefFromBufHeader(pBufHeader, &portDef);
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP:: Got error in _GetPortDefFromBufHeader. Code %x\n", eError);
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("THE PORT INDEX BEFORE VPP_ISVALIDBUFFER IS %d\n", portDef->nPortIndex);
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pBufHeader, pComponentPrivate, portDef->nPortIndex, &nIndex);
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_TRUE;
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate->sCompPorts[portDef->nPortIndex].pPortDef.bEnabled) {
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("cur port %p is disabled\n", portDef);
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_CLIENT;
2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EmptyBufferDone (
2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHeader
2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                );
2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bIsStopping == OMX_TRUE) {
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: stop! return buffer to %p\n", pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent);
2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent == NULL) {
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                  pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_CLIENT;
2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EmptyBufferDone (pHandle,
2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pHandle->pApplicationPrivate,
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pBufHeader
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               );
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->sCompPorts[portDef->nPortIndex].eSupplierSetting == OMX_BufferSupplyOutput){
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_TUNNEL_COMPONENT;
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP_UTILS: call to OMX_FillThisBuffer():: %d\n", __LINE__);
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_FillThisBuffer(
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent,
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].pBufHeader);
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (portDef->nPortIndex == OMX_VPP_INPUT_PORT || portDef->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT) {
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP:: INPUT Buffer Came %ld ...\n",portDef->nPortIndex);
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eDir = OMX_DirInput;
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::%d :: The PBufHeader is not found in the list\n", __LINE__);
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufHeader->nFilledLen >= 0) {
2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirInput, &pComponentBuf, portDef->nPortIndex );
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->bIsStopping == 1) {
2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (pHandle,
2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pHandle->pApplicationPrivate,
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*check for overlay data if yes then go for no parameter BUFER */
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (portDef->nPortIndex == OMX_VPP_INPUT_PORT) {
2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHeader->pBuffer,
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHeader->nFilledLen,
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_ModuleCommonLayer);
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_DSP;
2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP: queue input buffer nFilledLen = (%d), BufHdr = %p\n", pBufHeader->nFilledLen, pBufHeader);
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("Queued Input Buffer: Input Width= %lu, Input Height=%lu, Inp. Offset: %lu \
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            RGBRotation = %lu, ulYUVRotation = %lu, ulMirror = %lu\n",
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulInWidth,
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulInHeight,
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulCInOffset,
2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulRGBRotation,
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulYUVRotation,
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pIpFrameStatus->ulMirror);
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle,
2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        EMMCodecInputBuffer,
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->pBuffer,
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->nAllocLen,
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->nFilledLen,
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (OMX_U8 *) pComponentPrivate->pIpFrameStatus,
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        sizeof(GPPToVPPInputFrameStatus),
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (void *) pBufHeader);
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (portDef->nPortIndex == OMX_VPP_INPUT_OVERLAY_PORT) {
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp = memcpy(pComponentPrivate->RGBbuffer,pBufHeader->pBuffer,pBufHeader->nFilledLen);
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pTemp == NULL){
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUndefined;
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d: before calling ComputeTiOverlayImgFormat \n",__LINE__);
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = ComputeTiOverlayImgFormat(pComponentPrivate,
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->RGBbuffer,
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBufHeader->pBuffer,
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->colorKey);
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("VPP::%d ::ComputeTiOverlayImgFormat, Error Occurred: %x\n",__LINE__, eError);
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d: after calling ComputeTiOverlayImgFormat \n",__LINE__);
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHeader->nFilledLen= (pBufHeader->nFilledLen*2)/3;
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE *fp;
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fp = fopen("mytestcvnew.raw", "w");
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fwrite(pBufHeader->pBuffer, 1, pBufHeader->nFilledLen, fp);
2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fclose(fp);
2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           VPP_DPRINT("write %d bytes to mytestcvnew.raw\n", pBufHeader->nFilledLen);
2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           exit(0);
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHeader->pBuffer,
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHeader->nFilledLen,
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer);
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_DSP;
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_QueueBuffer(
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pLcmlHandle->pCodecinterfacehandle,
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        EMMCodecStream1,
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->pBuffer,
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->nAllocLen,
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBufHeader->nFilledLen,
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        NULL,
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        0,
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (void *) pBufHeader);
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("LCML_QueueBuffer from OMX_VPP_INPUT_OVERLAY_PORT, pBufHeader %p, ->pBuffer %p\n",
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHeader, pBufHeader->pBuffer);
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d ::Comp: SetBuff: IP: Error Occurred\n",__LINE__);
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::Sending Input buffer to Codec\n");
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * VPP_Process_FreeOutBuf()
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * Called by component thread, handles free output buffers from app.
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponentPrivate private component structure for this instance of the component
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param phandle LCML_DSP_INTERFACE handle for this instance of the component
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_ErrorNone                  success, ready to roll
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorInsufficientResources if the malloc fails
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Process_FreeOutBuf(VPP_COMPONENT_PRIVATE* pComponentPrivate)
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIndex;
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VPP_COMPONENT_BUFFER *pComponentBuf  = NULL;
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBufHeader = NULL;
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE               *pHandle = NULL;
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = 0;
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("In VPP_Process_FreeOutBuf\n");
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = pComponentPrivate->pHandle;
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = read(pComponentPrivate->nFree_oPipe[0], &pBufHeader,sizeof(pBufHeader));
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (-1 == nRet) {
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("In VPP_Process_FreeOutBuf\n");
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_GetPortDefFromBufHeader(pBufHeader, &portDef);
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: Error in _GetPortDefFromBufHeader. Code %d\n", eError);
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pBufHeader, pComponentPrivate, portDef->nPortIndex, &nIndex);
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( eError != OMX_ErrorNone) {
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->bIsStopping != OMX_FALSE ) || (pComponentPrivate->curState == OMX_StateIdle)) {
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP is not in executing state (in FreeOutBuf %d %d %p)\n", portDef->nPortIndex, nIndex, pBufHeader);
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("cur state %d to state %d\n", pComponentPrivate->curState, pComponentPrivate->toState);
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->buf_mutex);
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP: return buffer to (%d) %p\n", portDef->nPortIndex, pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent);
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent == NULL) {
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_CLIENT;
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.FillBufferDone (
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHeader
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                );
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->sCompPorts[portDef->nPortIndex].eSupplierSetting == OMX_BufferSupplyInput){
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_TUNNEL_COMPONENT;
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 eError = OMX_EmptyThisBuffer(
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent,
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].pBufHeader);
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_COMPONENT_IN;
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->buf_mutex);
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       goto EXIT;
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pComponentPrivate->sCompPorts[portDef->nPortIndex].pPortDef.bEnabled) {
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("In VPP_Process_FreeOutBuf port %p is disabled %p\n", portDef, pBufHeader);
2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_CLIENT;
2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.FillBufferDone (
2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBufHeader
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                );
2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_TRUE;
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirOutput, &pComponentBuf, portDef->nPortIndex);
2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bIsStopping == OMX_FALSE) {
2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBufHeader->pBuffer,
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            0,
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer);
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].eBufferOwner = VPP_BUFFER_DSP;
2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (portDef->nPortIndex == OMX_VPP_RGB_OUTPUT_PORT) {
2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_QueueBuffer(
2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHandle->pCodecinterfacehandle,
2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    EMMCodecStream2,
2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHeader->pBuffer,
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHeader->nAllocLen,0,
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (OMX_U8 *) pComponentPrivate->pOpRGBFrameStatus,
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sizeof(GPPToVPPOutputFrameStatus),
2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (void *) pBufHeader);
2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP queue OMX_VPP_RGB_OUTPUT_PORT %p\n", pBufHeader);
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else { /* portDef->nPortIndex == OMX_VPP_YUV_OUTPUT_PORT) */
2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           eError = LCML_QueueBuffer(
2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHandle->pCodecinterfacehandle,
2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    EMMCodecStream3,
2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHeader->pBuffer,
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBufHeader->nAllocLen,0,
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (OMX_U8 *) pComponentPrivate->pOpYUVFrameStatus,
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sizeof(GPPToVPPOutputFrameStatus),
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (void *) pBufHeader);
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP queue OMX_VPP_YUV_OUTPUT_PORT %p\n", pBufHeader);
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Queued Output Buffer: Out Width= %lu, Out Height=%lu, Out. Offset: %lu, befferlen: %lu\n",
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOpYUVFrameStatus->ulOutWidth,
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOpYUVFrameStatus->ulOutHeight,
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOpYUVFrameStatus->ulCOutOffset,
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHeader->nAllocLen);
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone ) {
2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::%d :: Comp:: SetBuff OP: Error Occurred\n", __LINE__);
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%s::%d::Error 0x%X from LCML_QueueBuffer\n",__FILE__,__LINE__,eError);
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_Process_FreeInBuf() This function is called by the component  Thread whenever it
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the a Freed Input buffer from the DSP
2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Process_FreeInBuf(VPP_COMPONENT_PRIVATE* pComponentPrivate,
2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_VPP_COMPONENT_BUFFER *pComponentBuf)
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle;
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIndex;
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->toState == OMX_StateIdle) {
2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("%d :: Entering HandleDataBuf_FromLCML Function\n",__LINE__);
2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d: Component Sending Empty Input buffer%p to App\n",__LINE__,pComponentBuf->pBufHeader->pBuffer);
2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    portDef = pComponentBuf->pBufHeader->pInputPortPrivate;
2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pComponentBuf->pBufHeader, pComponentPrivate, portDef->nPortIndex, &nIndex);
2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->toState == OMX_StateIdle) {
2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP_Process_FreeInBuf: VPP_IsValidBuffer %d\n", eError);
2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( eError !=OMX_ErrorNone) {
2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*If Tunneling*/
2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->toState == OMX_StateIdle) {
2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("tunneling %p\n", pComponentPrivate->sCompPorts[pComponentBuf->pBufHeader->nInputPortIndex].hTunnelComponent);
2470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[pComponentBuf->pBufHeader->nInputPortIndex].hTunnelComponent != NULL) {
2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (OMX_StateExecuting == pComponentPrivate->curState) {
2473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((!pComponentPrivate->bIsStopping) ||
2474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (OMX_TRUE != pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bSelfAllocated)) {
2475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_FALSE;
2476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("VPP::Sending INput buffer to TUNNEL component (%d)\n", pComponentPrivate->bIsStopping);
2477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentBuf->pBufHeader->pBuffer,
2481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                0,
2482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleLLMM);
2483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentBuf->eBufferOwner != VPP_BUFFER_CLIENT ){
2485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("$$$VPP_UTILS: call to OMX_FillThisBuffer():: %d\n", __LINE__);
2487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_FillThisBuffer(pComponentPrivate->sCompPorts[pComponentBuf->pBufHeader->nInputPortIndex].hTunnelComponent, pComponentBuf->pBufHeader);
2488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("VPP:: buffer is sent to tunnel component\n");
2489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else{
2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("VPP:: buffer is already in tunnel component\n");
2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("pComponentPrivate->bIsEOFSent %d\n", pComponentPrivate->bIsEOFSent);
2498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (1) { /* if (pComponentPrivate->bIsEOFSent != 1) { */
2499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_FALSE;
2500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PREF(pComponentBuf->pBufHeader,pBuffer),
2504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            0,
2505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleHLMM);
2506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->toState == OMX_StateIdle) {
2509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("pComponentBuf->eBufferOwner %d (%p)\n", pComponentBuf->eBufferOwner, pComponentBuf->pBufHeader);
2510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentBuf->eBufferOwner != VPP_BUFFER_CLIENT){
2512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentBuf->pBufHeader->pMarkData) {
2514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   VPP_DPRINT("return marked buffer %x %d\n", pComponentBuf->pBufHeader->pMarkData, pComponentBuf->pBufHeader->nInputPortIndex);
2515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP:: Sent buffer to the client\n");
2517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (pHandle,
2518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pHandle->pApplicationPrivate,
2519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->toState == OMX_StateIdle) {
2522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP:: Sent buffer to the client\n");
2523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           }
2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
2526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP:: Buffer already with the client\n");
2527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
2531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("%d :: Comp: Last IP Buffer: So will not be sent to app\n", __LINE__);
2532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
2533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @VPP_ProcessFilledOutBuf() This function is called by the component  Thread whenever it
2543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the an Filled output buffer from the DSP
2544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate  Component private data
2546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
2548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
2550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
2551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
2552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
2553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Process_FilledOutBuf(VPP_COMPONENT_PRIVATE* pComponentPrivate,
2554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_VPP_COMPONENT_BUFFER *pComponentBuf)
2555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle;
2558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIndex;
2559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portDef = NULL;
2560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP %d :: Entering HandleDataBuf_FromLCML Function\n",__LINE__);
2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    portDef = pComponentBuf->pBufHeader->pOutputPortPrivate;
2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP::%d: Component Sending Filled Output buffer of index %lu to App\n",__LINE__,portDef->nPortIndex);
2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = VPP_IsValidBuffer(pComponentBuf->pBufHeader, pComponentPrivate, portDef->nPortIndex, &nIndex);
2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( eError !=OMX_ErrorNone){
2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SET_ERROR_BAIL(eError, OMX_ErrorBadParameter);
2568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentBuf->pBufHeader->pMarkData && pComponentBuf->pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle) {
2571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("Send OMX_MarkEvent\n");
2572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentBuf->pBufHeader->nOutputPortIndex == OMX_VPP_YUV_OUTPUT_PORT) {
2573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentPrivate->pHandle->pApplicationPrivate,
2575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_EventMark,
2576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_VPP_YUV_OUTPUT_PORT,
2577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        0,
2578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentBuf->pBufHeader->pMarkData);
2579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else { /*OMX_VPP_RGB_OUTPUT_PORT*/
2581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentPrivate->pHandle->pApplicationPrivate,
2583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_EventMark,
2584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_VPP_RGB_OUTPUT_PORT,
2585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        0,
2586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentBuf->pBufHeader->pMarkData);
2587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentBuf->pBufHeader->nFlags & OMX_BUFFERFLAG_EOS){
2591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       VPP_DPRINT("set EOS flag at YUV output buffer\n");
2592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
2593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentPrivate->pHandle->pApplicationPrivate,
2594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_EventBufferFlag,
2595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentBuf->pBufHeader->nOutputPortIndex,
2596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_BUFFERFLAG_EOS,
2597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        NULL);
2598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: VPP_Process_FilledOutBuf: nPortIndex=%d, nIndex= %d, bHolding= %d\n", portDef->nPortIndex, nIndex, pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding);
2601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*TUNNEL HERE*/
2603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sCompPorts[portDef->nPortIndex].hTunnelComponent != NULL) {
2604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_FALSE;
2605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->pBuffer,
2610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->nFilledLen,
2611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_ModuleLLMM);
2612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((pComponentBuf->eBufferOwner != VPP_BUFFER_CLIENT) && (pComponentPrivate->toState != OMX_StateIdle)){
2615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::Sending Output buffer to TUNNEL component\n");
2616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_EmptyThisBuffer(pComponentPrivate->sCompPorts[pComponentBuf->pBufHeader->nOutputPortIndex].hTunnelComponent, pComponentBuf->pBufHeader);
2618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP:: Output buffer already with the TUNNEL component\n");
2621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
2623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FILE *fp;
2624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fp = fopen("mytestcv.yuv", "w");
2626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fwrite(pComponentBuf->pBufHeader->pBuffer, 1, pComponentBuf->pBufHeader->nFilledLen, fp);
2627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fclose(fp);
2628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->sCompPorts[portDef->nPortIndex].pVPPBufHeader[nIndex].bHolding = OMX_FALSE;
2633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PREF(pComponentBuf->pBufHeader,pBuffer),
2637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PREF(pComponentBuf->pBufHeader,nFilledLen),
2638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        PERF_ModuleHLMM);
2639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentBuf->eBufferOwner != VPP_BUFFER_CLIENT){
2642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::Sending Output buffer to Applcation %p (%p %p)\n", pComponentBuf->pBufHeader, pComponentBuf->pBufHeader->hMarkTargetComponent, pComponentBuf->pBufHeader->pMarkData);
2643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.FillBufferDone (
2645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
2646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
2647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentBuf->pBufHeader
2648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                );
2649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP:: Buffer already with the client\n");
2652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: VPP_Process_FilledOutBuf Function with eError %d\n",__LINE__, eError);
2658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
2664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  Callback() function will be called LCML component to write the msg
2666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param msgBuffer                 This buffer will be returned by the LCML
2668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
2669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
2672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
2673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_LCML_Callback (TUsnCodecEvent event,void * args [10])
2674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pBuffer = args[1];
2677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VPP_COMPONENT_BUFFER *pComponentBuf = NULL;
2678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE* pComponentPrivate = NULL;
2680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
2681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE* pLcmlDspInterface = NULL;
2682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_BUFFERDATA_PROPAGATION *pDataProp = NULL;
2683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 i = 0;
2684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (args[6]) {
2686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlDspInterface = (LCML_DSP_INTERFACE*)args[6];
2687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pLcmlDspInterface->pComponentPrivate;
2689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = (OMX_COMPONENTTYPE *)pComponentPrivate->pHandle;
2691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("wrong in LCML callback, exit\n");
2695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: Entering the LCML_Callback Function, event = %d\n",__LINE__, event);
2699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (event)
2701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferProcessed:
2703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch ((int)args[0])
2704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
2705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case EMMCodecInputBuffer:
2706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP :: Inside the LCML_Callback EMMCodecInputBuffer\n");
2707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Input: pBufferr = %p\n",__LINE__, pBuffer);
2708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirInput, &pComponentBuf, 0);
2709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Input: pLcmlHeader = %p.\n",__LINE__, pComponentBuf->pBufHeader);
2714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bFlushComplete == OMX_FALSE && pComponentPrivate->nFlushPort == 0) {
2716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PREF(pComponentBuf->pBufHeader,pBuffer),
2726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                0,
2727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleCommonLayer);
2728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_COMPONENT_OUT;
2731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Freed Input buffers from DSP to component*/
2733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FreeInBuf(pComponentPrivate, pComponentBuf);
2734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EventError,
2738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_ErrorUndefined,
2739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_TI_ErrorSevere,
2740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    NULL);
2741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case EMMCodecStream1:
2745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP:: Inside the LCML_Callback EMMCodecInputBuffer Overlay\n");
2746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Overlay: pBuffer = %p\n",__LINE__, pBuffer);
2747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirInput, &pComponentBuf,1);
2748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Input: pLcmlHeader = %p\n",__LINE__, pComponentBuf);
2753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Overlay: pLcmlHeader = %p.\n",__LINE__, pComponentBuf->pBufHeader);
2754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bFlushComplete == OMX_FALSE && pComponentPrivate->nFlushPort == 1) {
2756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PREF(pComponentBuf->pBufHeader,pBuffer),
2766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            0,
2767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer);
2768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_COMPONENT_OUT;
2770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Freed Input buffers from DSP to component*/
2772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FreeInBuf(pComponentPrivate, pComponentBuf);
2773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EventError,
2777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_ErrorUndefined,
2778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_TI_ErrorSevere,
2779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    NULL);
2780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case EMMCodecStream2:
2784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP :: Inside the LCML_Callback EMMCodecOuputBuffer stream2 \n");
2785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output: pBufferr = %p\n",__LINE__, pBuffer);
2786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirOutput, &pComponentBuf, 2);
2787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->pBufHeader->nFilledLen = (int)args[8];
2792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output(2): pLcmlHeader = %p\n",__LINE__, pComponentBuf);
2793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output: Filled Len = %ld\n",__LINE__, pComponentBuf->pBufHeader->nFilledLen);
2794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentBuf->eBufferOwner == VPP_BUFFER_DSP){
2796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nOutRGBBufferCount ++;
2797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("RGB Filled Data from DSP \n");
2799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("buffer summary (LCML for output buffer %p) %d %d %d %d\n", pComponentBuf->pBufHeader,
2800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nInYUVBufferCount,
2801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nInRGBBufferCount,
2802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutYUVBufferCount,
2803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutRGBBufferCount);
2804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i = 0; i < pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferCountActual; i ++) {
2807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pDataProp = &(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].sBufferDataProp[i]);
2808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pDataProp->buffer_idRGB == pComponentPrivate->nOutRGBBufferCount) {
2809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Output RGB buffer %d has data from Input port. \nFlag=%x, nTickCount=%ld, nTimeStamp=%Ld\n",
2810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->buffer_idRGB,
2811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->flag,
2812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTickCount,
2813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTimeStamp);
2814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nFlags = pDataProp->flag;
2815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->pMarkData = pDataProp->pMarkData;
2816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->hMarkTargetComponent = pDataProp->hMarkTargetComponent;
2817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTickCount = pDataProp->nTickCount;
2818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTimeStamp = pDataProp->nTimeStamp;
2819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idRGB = 0xFFFFFFFF;
2820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
2821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i = 0; i < pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nBufferCountActual; i ++) {
2825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pDataProp = &(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].sBufferDataProp[i]);
2826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pDataProp->buffer_idRGB == pComponentPrivate->nOutRGBBufferCount) {
2827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Output RGB buffer %d has data from Overlay port. \nFlag=%x, nTickCount=%ld, nTimeStamp=%Ld\n",
2828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->buffer_idRGB,
2829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->flag,
2830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTickCount,
2831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTimeStamp);
2832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nFlags |= pDataProp->flag;
2833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*if both input ports are been mark RGB output port propagate Input overlay mark*/
2834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->pMarkData = pDataProp->pMarkData;
2835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->hMarkTargetComponent = pDataProp->hMarkTargetComponent;
2836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
2837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pComponentBuf->pBufHeader->hMarkTargetComponent == NULL){ /*OMX_VPP_INPUT_PORT has preference while marking data*/
2838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->pMarkData = pDataProp->pMarkData;
2839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->hMarkTargetComponent = pDataProp->hMarkTargetComponent;
2840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
2841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTickCount = pDataProp->nTickCount;
2843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTimeStamp = pDataProp->nTimeStamp;
2844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idRGB = 0xFFFFFFFF;
2845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
2846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bFlushComplete == OMX_FALSE && pComponentPrivate->nFlushPort == 2) {
2850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentBuf->pBufHeader->pBuffer,
2861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentBuf->pBufHeader->nFilledLen,
2862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer);
2863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->lcml_nCntOpReceived++; /*CRITICAL: increment Op counter!!! */
2864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pComponentPrivate->lcml_nCntIp >= 1) &&
2865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->lcml_nCntOpReceived == 1)) {
2866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,
2867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_BoundaryStart | PERF_BoundarySteadyState);
2868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->eBufferOwner = VPP_BUFFER_COMPONENT_OUT;
2872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Filled Output buffer from DSP to Component */
2874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FilledOutBuf(pComponentPrivate, pComponentBuf);
2875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError,
2879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorUndefined,
2880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
2881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
2882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case EMMCodecStream3:
2886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("VPP::Inside the LCML_Callback EMMCodecOuputBuffer stream3\n");
2887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output: pBufferr = %p\n",__LINE__, pBuffer);
2888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirOutput, &pComponentBuf,3);
2889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("VPP::%d :: Error: Invalid Buffer Came ...\n",__LINE__);
2891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentBuf->pBufHeader->nFilledLen = (int)args[8];
2894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output(3): pLcmlHeader = %p\n",__LINE__, pComponentBuf);
2895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d :: Output: Filled Len = %ld\n",__LINE__, pComponentBuf->pBufHeader->nFilledLen);
2896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentBuf->eBufferOwner == VPP_BUFFER_DSP){
2898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nOutYUVBufferCount ++;
2899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("YUV Filled Data from DSP \n");
2901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("buffer summary (LCML for output buffer %p) %d %d %d %d\n", pComponentBuf->pBufHeader,
2902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nInYUVBufferCount,
2903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nInRGBBufferCount,
2904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutYUVBufferCount,
2905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutRGBBufferCount);
2906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i = 0; i < pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferCountActual; i ++) {
2908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pDataProp = &(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].sBufferDataProp[i]);
2909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pDataProp->buffer_idYUV == pComponentPrivate->nOutYUVBufferCount) {
2910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Output YUV buffer %d has data from Input port. \nFlag=%x, nTickCount=%ld, nTimeStamp=%Ld\n\n",
2911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->buffer_idYUV,
2912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->flag,
2913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTickCount,
2914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTimeStamp);
2915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nFlags = pDataProp->flag;
2917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->pMarkData = pDataProp->pMarkData;
2918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->hMarkTargetComponent = pDataProp->hMarkTargetComponent;
2919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTickCount = pDataProp->nTickCount;
2920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTimeStamp = pDataProp->nTimeStamp;
2921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idYUV = 0xFFFFFFFF;
2922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
2923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i = 0; i < pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nBufferCountActual; i ++) {
2927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pDataProp = &(pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].sBufferDataProp[i]);
2928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pDataProp->buffer_idYUV == pComponentPrivate->nOutYUVBufferCount) {
2929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT("Output YUV buffer %d has data from Overlay port. \nFlag=%x, nTickCount=%ld, nTimeStamp=%Ld\n\n",
2930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->buffer_idYUV,
2931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->flag,
2932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTickCount,
2933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pDataProp->nTimeStamp);
2934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nFlags |= pDataProp->flag;
2935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pComponentBuf->pBufHeader->hMarkTargetComponent == NULL){ /*OMX_VPP_INPUT_PORT has preference while marking data*/
2936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->pMarkData = pDataProp->pMarkData;
2937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentBuf->pBufHeader->hMarkTargetComponent = pDataProp->hMarkTargetComponent;
2938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
2939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTickCount = pDataProp->nTickCount;
2940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentBuf->pBufHeader->nTimeStamp = pDataProp->nTimeStamp;
2941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pDataProp->buffer_idYUV = 0xFFFFFFFF;
2942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
2943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bFlushComplete == OMX_FALSE && pComponentPrivate->nFlushPort == 3) {
2948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentBuf->eBufferOwner = VPP_BUFFER_CLIENT;
2949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
2951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentBuf->pBufHeader
2952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    );
2953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
2954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            #ifdef __PERF_INSTRUMENTATION__
2957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentBuf->pBufHeader->pBuffer,
2959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentBuf->pBufHeader->nFilledLen,
2960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_ModuleCommonLayer);
2961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->lcml_nCntOpReceived++; /*CRITICAL: increment Op counter!!! */
2962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pComponentPrivate->lcml_nCntIp >= 1) &&
2963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->lcml_nCntOpReceived == 1)) {
2964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,
2965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            PERF_BoundaryStart | PERF_BoundarySteadyState);
2966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentBuf->eBufferOwner = VPP_BUFFER_COMPONENT_OUT;
2970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Filled Output buffer from DSP to Component */
2972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FilledOutBuf(pComponentPrivate, pComponentBuf);
2973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError,
2977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorUndefined,
2978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
2979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
2980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStoped:
2986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d :: Comp: Inside the LCML_Callback: EMMCodecProcessingStopped\n",__LINE__);
2987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::%d :: VPP: State has been Set to Idle\n",__LINE__);
2988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->toState == OMX_StateIdle) {
2989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->ExeToIdleFlag |= VPP_DSPSTOP;
2990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("LCML_Callback: pComponentPrivate->ExeToIdleFlag  = %x\n", pComponentPrivate->ExeToIdleFlag);
2991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pthread_mutex_lock(&pComponentPrivate->vpp_mutex);
2993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pthread_cond_signal(&pComponentPrivate->stop_cond);
2994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pthread_mutex_unlock(&pComponentPrivate->vpp_mutex);
2995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bDisable = OMX_TRUE;
2998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspError:
3001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  Received EMMCodecDSPError\n");
3002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("EMMCodec Args -> %x, %x, %x\n", (int)args[0], (int)args[4], (int)args[5]);
3003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((int)args[4] != 0x1 || (int)args[5] != 0x500) {
3004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     pComponentPrivate->pHandle->pApplicationPrivate,
3006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_EventError,
3007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_ErrorHardware,
3008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_TI_ErrorCritical,
3009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     NULL);
3010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState  = OMX_StateInvalid;
3012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
3013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
3014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
3015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
3016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorCritical,
3017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   "DSP Hardware Error");
3018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
3019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
3020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
3021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Cheking for MMU_fault */
3022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((args[4] == (void *)NULL) && (args[5] == (void*)NULL)) {
3023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("DSP MMU_Fault");
3024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateInvalid;
3025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
3026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
3027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
3028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
3029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorCritical,
3030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   "DSP MMU FAULT");
3031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInternalError:
3035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecInternalError\n");
3036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
3037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
3039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
3040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorHardware,
3041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorCritical,
3042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
3043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInitError:
3046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecInitError\n");
3047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
3048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
3050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
3051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_ErrorHardware,
3052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_TI_ErrorCritical,
3053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            NULL);
3054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspMessageRecieved:
3057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecDspMessageReceived\n");
3058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStarted:
3060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecProcessingStarted\n");
3061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingPaused:
3063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecProcessingPaused\n");
3064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->toState == OMX_StatePause) {
3065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StatePause;
3066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("%d :: The component %p is paused after get stop from DSP\n",__LINE__, pHandle);
3067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("LCML_Callback: pComponentPrivate->ExeToIdleFlag  = %x\n", pComponentPrivate->ExeToIdleFlag);
3068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
3070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle,
3071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pHandle->pApplicationPrivate,
3072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EventCmdComplete,
3073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_ErrorNone,
3074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponentPrivate->curState,
3075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                "NULL");
3076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingEof:
3079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecProcessingEof\n");
3080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferNotProcessed:
3082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecBufferNotProcessed\n");
3083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecAlgCtrlAck:
3085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecAlgCtrlAck\n");
3086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->CodecAlgCtrlAck = 1;
3087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecStrmCtrlAck:
3089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("VPP::LCML_Callback.  EMMCodecStrmCtrlAck\n");
3090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 1
3091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (1) { /* ((int)args[0] == USN_ERR_NONE) { */
3092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("Callback: EMMCodecStrmCtrlAck\n");
3093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bFlushComplete = OMX_TRUE;
3094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
3095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("callback error %x\n", args[0]);
3096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
3100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT ("VPP::Comp: Inside the LCML_Callback: EVENT UNKNOWN %d\n", event);
3101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
3102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
3105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT ("VPP::%d :: Exiting the LCML_Callback Function\n",__LINE__);
3106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
3107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
3112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  VPP_GetCorresponding_LCMLHeader() function retrun correponding Parameter buffer stored
3114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pBuffer                 This buffer will be returned by the LCML
3116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           eDir
3117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       ppLcmlHdr               pointer where LCML header is returned
3118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
3120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
3121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
3122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_GetCorresponding_LCMLHeader(VPP_COMPONENT_PRIVATE* pComponentPrivate,
3124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_U8 *pBuffer,
3125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_DIRTYPE eDir,
3126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_VPP_COMPONENT_BUFFER** ppCmpBuf,
3127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              OMX_U32 Index)
3128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VPP_COMPONENT_BUFFER* pComponentBuffer = NULL;
3131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0 ;
3132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nBuf = pComponentPrivate->sCompPorts[Index].nBufferCount;
3133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP:: Buffer Count :: %ld\n",nBuf);
3135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP:: Index of  Buffer Type :: %ld\n",Index);
3137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nBuf; i++) {
3139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentBuffer = &pComponentPrivate->sCompPorts[Index].pVPPBufHeader[i];
3140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pBuffer == pComponentBuffer->pBufHeader->pBuffer) {
3141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *ppCmpBuf = pComponentBuffer;
3142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("VPP::%d::Corresponding LCML Header Found\n",__LINE__);
3143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
3144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("VPP: %d, Haven't found the header...\n", __LINE__);
3148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorMax;
3149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
3150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
3151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
3156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetLCMLHandle() function will be called to load LCML component
3158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
3162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorUndefined    The input parameter pointer is null
3163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
3164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE VPP_GetLCMLHandle(VPP_COMPONENT_PRIVATE* pComponentPrivate)
3166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
3168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    void *handle;
3169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE);
3170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
3171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *error = NULL;
3172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError;
3173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    handle = dlopen("libLCML.so", RTLD_LAZY);
3175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!handle) {
3176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(dlerror(), stderr);
3177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle = dlsym (handle, "GetHandle");
3180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((error = dlerror()) != NULL) {
3181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(fpGetHandle){
3182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                dlclose(handle);
3183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                handle = NULL;
3184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
3185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(error, stderr);
3186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = (*fpGetHandle)(&pHandle);
3189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
3190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
3191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("eError != OMX_ErrorNone...\n");
3192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
3193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pDllHandle = handle;
3196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLCML = (void*)pHandle;
3197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLCML->pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pComponentPrivate;
3198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
3200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
3201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
3202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
3204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
3205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError;
3206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LPFNDLLFUNC1 fpGetHandle1;
3207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    g_hLcmlDllHandle = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL, 0);
3209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (g_hLcmlDllHandle == NULL) {
3210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("BML Load Failed!!!\n");
3211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
3212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(g_hLcmlDllHandle,TEXT("GetHandle"));
3215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!fpGetHandle1) {
3216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeLibrary(g_hLcmlDllHandle);
3217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        g_hLcmlDllHandle = NULL;
3218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
3219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = fpGetHandle1(&pHandle);
3222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
3223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeLibrary(g_hLcmlDllHandle);
3224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        g_hLcmlDllHandle = NULL;
3225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
3226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        VPP_DPRINT("eError != OMX_ErrorNone...\n");
3227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
3228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
3229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML = (LCML_DSP_INTERFACE*)pHandle;
3232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLCML->pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pComponentPrivate;
3233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
3234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
3235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE VPP_Initialize_PrivateStruct(VPP_COMPONENT_PRIVATE *pComponentPrivate)
3241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int port;
3243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int buffers;
3244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError=OMX_ErrorNone;
3246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pPortParamTypeVideo, OMX_PORT_PARAM_TYPE);
3248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeVideo->nPorts           = NUM_OF_VPP_PORTS;
3249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeVideo->nStartPortNumber = 0;
3250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pPortParamTypeImage, OMX_PORT_PARAM_TYPE);
3252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeImage->nPorts           = 0;
3253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeImage->nStartPortNumber = -1;
3254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pPortParamTypeAudio, OMX_PORT_PARAM_TYPE);
3256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeAudio->nPorts           = 0;
3257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeAudio->nStartPortNumber = -1;
3258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pPortParamTypeOthers, OMX_PORT_PARAM_TYPE);
3260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeOthers->nPorts           = 0;
3261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortParamTypeOthers->nStartPortNumber = -1;
3262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pCrop, OMX_CONFIG_RECTTYPE);
3263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCrop->nWidth = DEFAULT_WIDTH;
3264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCrop->nHeight = 220;
3265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set component version */
3267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMajor = VPP_MAJOR_VER;
3268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMinor = VPP_MINOR_VER;
3269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nRevision     = VPP_REVISION;
3270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nStep         = VPP_STEP;
3271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set Default values for each port supports qcif size and two streams */
3274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nPortIndex         = OMX_VPP_INPUT_PORT;
3275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.eDir               = OMX_DirInput;
3276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.eDomain            = OMX_PortDomainVideo;
3277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferCountActual = MIN_NUM_OF_VPP_BUFFERS;
3278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferCountMin    = MIN_NUM_OF_VPP_BUFFERS;
3279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.nBufferSize        = DEFAULT_WIDTH * 220*1.5;
3280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.bEnabled           = OMX_TRUE;
3281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.bPopulated         = OMX_FALSE;
3282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.nFrameWidth  = DEFAULT_WIDTH;
3283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.nFrameHeight = 220;
3284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.nStride = 176;
3285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.nSliceHeight = 16;
3286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar;/*OMX_COLOR_FormatCbYCrY;*/
3287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].pPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
3288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].eSupplierSetting            = OMX_BufferSupplyInput;
3289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].hTunnelComponent            = NULL;
3290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].nReturnedBufferCount        = 0;
3291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_PORT].eMirror                           = OMX_MirrorNone;
3292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nPortIndex  = OMX_VPP_INPUT_OVERLAY_PORT;
3294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.eDir        = OMX_DirInput;
3295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.eDomain     = OMX_PortDomainVideo;
3296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nBufferCountActual = MIN_NUM_OF_VPP_BUFFERS;
3297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nBufferCountMin    = MIN_NUM_OF_VPP_BUFFERS;
3298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.nBufferSize =  DEFAULT_HEIGHT *DEFAULT_WIDTH * 3;
3299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.bEnabled    = OMX_TRUE;
3300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.bPopulated  = OMX_FALSE;
3301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.format.video.nFrameWidth  = DEFAULT_WIDTH;
3302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.format.video.nFrameHeight = DEFAULT_HEIGHT;
3303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.format.video.eColorFormat = OMX_COLOR_Format24bitRGB888;
3304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].pPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
3305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].eSupplierSetting            = OMX_BufferSupplyInput;
3306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].hTunnelComponent            = NULL;
3307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].nReturnedBufferCount = 0;
3309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_INPUT_OVERLAY_PORT].eMirror                           = OMX_MirrorNone;
3310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nPortIndex  = OMX_VPP_RGB_OUTPUT_PORT;
3312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.eDir        = OMX_DirOutput;
3313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.eDomain     = OMX_PortDomainVideo;
3314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nBufferCountActual =MIN_NUM_OF_VPP_BUFFERS;
3315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nBufferCountMin =  MIN_NUM_OF_VPP_BUFFERS;
3316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.nBufferSize = DEFAULT_HEIGHT *DEFAULT_WIDTH *2;
3317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.bEnabled    = OMX_TRUE;
3318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.bPopulated  = OMX_FALSE;
3319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.nFrameWidth  = DEFAULT_WIDTH;
3320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.nFrameHeight = DEFAULT_HEIGHT;
3321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.eColorFormat = OMX_COLOR_Format16bitRGB565;
3322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].pPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
3323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].eSupplierSetting     = OMX_BufferSupplyInput;
3324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].hTunnelComponent     = NULL;
3325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].nReturnedBufferCount = 0;
3326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_RGB_OUTPUT_PORT].eMirror                           = OMX_MirrorNone;
3327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nPortIndex  = OMX_VPP_YUV_OUTPUT_PORT;
3329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.eDir        = OMX_DirOutput;
3330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.eDomain     = OMX_PortDomainVideo;
3331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nBufferCountActual = 1;
3332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nBufferCountMin = 1;
3333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.nBufferSize = (DEFAULT_HEIGHT *DEFAULT_WIDTH *2);
3334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.bEnabled    = OMX_TRUE;
3335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.bPopulated  = OMX_FALSE;
3336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.nFrameWidth = DEFAULT_WIDTH;
3337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.nFrameHeight = DEFAULT_HEIGHT;
3338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.eColorFormat = OMX_COLOR_FormatCbYCrY;
3339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].pPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
3340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].eSupplierSetting     = OMX_BufferSupplyInput;
3341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].hTunnelComponent     = NULL;
3342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].nReturnedBufferCount = 0;
3343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sCompPorts[OMX_VPP_YUV_OUTPUT_PORT].eMirror                           = OMX_MirrorNone;
3344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set pInPortFormat defaults */
3347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
3348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortFormat->nPortIndex   = OMX_VPP_INPUT_PORT;
3349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortFormat->nIndex       = 9;
3350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortFormat->eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar;/*OMX_COLOR_FormatCbYCrY; */
3351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
3352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pInPortOverlayFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
3355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortOverlayFormat->nPortIndex   = OMX_VPP_INPUT_OVERLAY_PORT;
3356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortOverlayFormat->nIndex       = 1;
3357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortOverlayFormat->eColorFormat = OMX_COLOR_Format24bitRGB888;
3358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInPortOverlayFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
3359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set pOutPortFormat defaults */
3361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pOutPortRGBFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
3362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortRGBFormat->nPortIndex   = OMX_VPP_RGB_OUTPUT_PORT;
3363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortRGBFormat->nIndex       = 8;
3364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortRGBFormat->eColorFormat = OMX_COLOR_Format16bitRGB565;
3365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortRGBFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
3366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set pOutPortFormat defaults */
3368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pOutPortYUVFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
3369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortYUVFormat->nPortIndex   = OMX_VPP_YUV_OUTPUT_PORT;
3370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortYUVFormat->nIndex       = 2;
3371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortYUVFormat->eColorFormat = OMX_COLOR_FormatCbYCrY;
3372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutPortYUVFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
3373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set sScale defaults*/
3375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.nSize = sizeof(OMX_CONFIG_SCALEFACTORTYPE);
3376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.nVersion.s.nVersionMajor = VPP_MAJOR_VER;
3377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.nVersion.s.nVersionMinor = VPP_MINOR_VER;
3378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.nVersion.s.nRevision = VPP_REVISION;
3379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.nVersion.s.nStep = VPP_STEP;
3380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.xHeight = 0;
3381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sScale.xWidth = 0;
3382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set pPriorityMgmt defaults */
3384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INIT_STRUCT(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE);
3385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupPriority = 0;
3386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupID       = 0;
3387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkData             = NULL;
3389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent  = NULL;
3390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsStopping = 0;
3391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nInputFrame = 0;
3393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOverlayFrame = 0;
3394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nInYUVBufferCount = 0;
3395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nInRGBBufferCount = 0;
3396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOutYUVBufferCount = 0;
3397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOutRGBBufferCount = 0;
3398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFlushPort = OMX_NOPORT;
3400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->vpp_mutex, NULL);
3402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init(&pComponentPrivate->stop_cond, NULL);
3403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->buf_mutex, NULL);
3404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set pInBufSupplier defaults */
3406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(port=0; port<NUM_OF_VPP_PORTS; port++) {
3407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (buffers = 0; buffers < NUM_OF_VPP_BUFFERS; buffers++) {
3408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[port].pVPPBufHeader[buffers].pBufHeader = NULL;
3409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[port].pVPPBufHeader[buffers].pBufferStart = NULL;
3410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[port].nBufferCount                      = 0;
3411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sCompPorts[port].nBufSupplier                      = OMX_FALSE;
3412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->RGBbuffer = NULL;
3415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlHandle = NULL;
3416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
3417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
3419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * IsTIOMXComponent()
3426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * Check if the component is TI component.
3428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hTunneledComp Component Tunnel Pipe
3430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_TRUE   Input is a TI component.
3432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_FALSE  Input is a not a TI component.
3433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
3435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL IsTIOMXComponent(OMX_HANDLETYPE hComp)
3438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STRING pTunnelcComponentName = NULL;
3442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VERSIONTYPE* pTunnelComponentVersion = NULL;
3443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_VERSIONTYPE* pSpecVersion = NULL;
3444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_UUIDTYPE* pComponentUUID = NULL;
3445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pSubstring = NULL;
3446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BOOL bResult = OMX_TRUE;
3447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pTunnelcComponentName, 128);
3449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pTunnelComponentVersion, sizeof(OMX_VERSIONTYPE));
3450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pSpecVersion, sizeof(OMX_VERSIONTYPE));
3451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentUUID, sizeof(OMX_UUIDTYPE));
3452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetComponentVersion (hComp, pTunnelcComponentName, pTunnelComponentVersion, pSpecVersion, pComponentUUID);
3454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Check if tunneled component is a TI component */
3456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pSubstring = strstr(pTunnelcComponentName, "OMX.TI.");
3457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pSubstring == NULL) {
3459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        bResult = OMX_FALSE;
3460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
3463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pTunnelcComponentName);
3464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pTunnelComponentVersion);
3465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pSpecVersion);
3466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pComponentUUID);
3467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return bResult;
3469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} /* End of IsTIOMXComponent */
3470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  VPP_InitBufferDataPropagation()
3476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
3481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
3482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param
3483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
3485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
3486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
3487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
3488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid VPP_InitBufferDataPropagation(
3489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate,
3490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nPortIndex)
3491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_PORT_TYPE *pPortType = NULL;
3493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i;
3494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     pPortType = &(pComponentPrivate->sCompPorts[nPortIndex]);
3496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* assume  pPortType->pPortDef->nBufferCountActual <= NUM_OF_BUFFERSJPEG */
3498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i = 0; i < pPortType->pPortDef.nBufferCountActual; i ++) {
3499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].flag = 0;
3500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].buffer_idYUV = 0xFFFFFFFF;
3501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].buffer_idRGB = 0xFFFFFFFF;
3502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].pMarkData = NULL;
3503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].hMarkTargetComponent = NULL;
3504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].nTickCount = 0;
3505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPortType->sBufferDataProp[i].nTimeStamp = 0;
3506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
3511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
3512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  ResourceManagerCallback() - handle callbacks from Resource Manager
3514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param cbData    Resource Manager Command Data Structure
3515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return: void
3516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
3517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
3518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData)
3520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMMANDTYPE Cmd = OMX_CommandStateSet;
3522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent;
3523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE *pComponentPrivate = NULL;
3524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE RM_Error = *(cbData.RM_Error);
3525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_DPRINT("%s: %d: RM_Error = %x\n", __FUNCTION__, __LINE__, RM_Error);
3527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (VPP_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
3529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (RM_Error == OMX_RmProxyCallback_ResourcesPreempted) {
3531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bPreempted = 1;
3533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState == OMX_StateExecuting ||
3535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause) {
3536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
3539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
3540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorResourcesPreempted,
3541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorMajor,
3542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
3543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->toState = OMX_StateIdle;
3545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bIsStopping = OMX_TRUE;
3546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("Component Preempted. Going to IDLE State.\n");
3547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (pComponentPrivate->curState == OMX_StateIdle){
3549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->toState = OMX_StateLoaded;
3550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("Component Preempted. Going to LOADED State.\n");
3551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
3554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->toState, PERF_ModuleComponent);
3555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        write (pComponentPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
3558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->toState) ,sizeof(OMX_U32));
3559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (RM_Error == OMX_RmProxyCallback_ResourcesAcquired ){
3562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState == OMX_StateWaitForResources) /* Wait for Resource Response */
3564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
3565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
3566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	                        pHandle, pHandle->pApplicationPrivate,
3567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	                        OMX_EventResourcesAcquired, 0,0,
3568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	                        NULL);
3569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->toState = OMX_StateIdle;
3571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bIsStopping = OMX_TRUE;
3572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
3574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->toState, PERF_ModuleComponent);
3575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            write (pComponentPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
3578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->toState) ,sizeof(OMX_U32));
3579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT("OMX_RmProxyCallback_ResourcesAcquired.\n");
3580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Create(LinkedList *LinkedList) {
3588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList->pRoot = NULL;
3589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_AddElement(LinkedList *LinkedList, void *pValue) {
3592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create new node and fill the value */
3593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNewNode = (Node *)malloc(sizeof(Node));
3594b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pNewNode != NULL) {
3595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pNewNode->pValue = (void *)pValue;
3596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /*printf("LinkedList:::: Pointer=%p has been added.\n", pNewNode->pValue); */
3597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* add new node on the root to implement quick FIFO */
3598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* modify new node pointers */
3599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (LinkedList->pRoot == NULL) {
3600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pNewNode->pNextNode = NULL;
3601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
3602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        else {
3603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             pNewNode->pNextNode = LinkedList->pRoot;
3604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
3605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /*modify root */
3606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        LinkedList->pRoot = pNewNode;
3607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeElement(LinkedList *LinkedList, void *pValue) {
3611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNode = LinkedList->pRoot;
3612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pPastNode = NULL;
3613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pNode != NULL) {
3614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pNode->pValue == pValue) {
3615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Node *pTempNode = pNode->pNextNode;
3616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pPastNode == NULL) {
3617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                LinkedList->pRoot = pTempNode;
3618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
3619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
3620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pPastNode->pNextNode = pTempNode;
3621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
3622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*printf("LinkedList:::: Pointer=%p has been freed\n", pNode->pValue); */
3623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pNode->pValue);
3624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pNode);
3625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
3626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPastNode = pNode;
3628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pNode = pNode->pNextNode;
3629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeAll(LinkedList *LinkedList) {
3633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pTempNode;
3634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nodes = 0;
3635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (LinkedList->pRoot != NULL) {
3636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTempNode = LinkedList->pRoot->pNextNode;
3637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*printf("LinkedList:::: Pointer=%p has been freed\n", LinkedList->pRoot->pValue); */
3638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(LinkedList->pRoot->pValue);
3639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(LinkedList->pRoot);
3640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LinkedList->pRoot = pTempNode;
3641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nodes++;
3642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* printf("==================No. of deleted nodes: %d=======================================\n\n", nodes); */
3644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_DisplayAll(LinkedList *LinkedList) {
3647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNode = LinkedList->pRoot;
3648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nodes = 0;
3649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("\n================== Displaying contents of linked list=%p=====================\n", LinkedList);
3650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("root->\n");
3651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pNode != NULL) {
3652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[Value=%p, NextNode=%p]->\n", pNode->pValue, pNode->pNextNode);
3653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pNode = pNode->pNextNode;
3654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nodes++;
3655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     printf("==================No. of existing nodes: %d=======================================\n\n", nodes);
3657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Destroy(LinkedList *LinkedList) {
3660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* do nothing */
3661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3663