1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  you may not use this file except in compliance with the License.
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  You may obtain a copy of the License at
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  See the License for the specific language governing permissions and
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * limitations under the License.
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <linux/vt.h>
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h>
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <time.h>
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Index.h>
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Types.h>
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Core.h>
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Audio.h>
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_VPP.h>
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_IVCommon.h>
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "VPPTest.h"
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* DSP recovery includes */
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <qosregistry.h>
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <qosti.h>
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPManager.h>
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPProcessor.h>
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <DSPProcessor_OEM.h>
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define KHRONOS_1_2
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define sleep Sleep
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define APP_DPRINT printf
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*#define APP_DEBUG*/
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef  APP_DEBUG
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        #define APP_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        #define APP_DPRINT(...)
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif //#ifdef UNDER_CE
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBuf, HANDLE fIn);
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBuf, FILE *fIn);
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define DEFAULT_WIDTH      (176)
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define DEFAULT_HEIGHT     (144)
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef struct _OMX_VPPCustomTYPE
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetZoomFactor;
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetZoomLimit;
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetZoomSpeed;
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetZoomXoffsetFromCenter16;
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetZoomYoffsetFromCenter16;
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetFrostedGlassOvly;
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPPCustomSetColorRange;
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE VPP_CustomRGB4ColorFormat;
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} OMX_VPPCustomTYPE;
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef struct EVENT_PRIVATE {
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_EVENTTYPE eEvent;
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nData1;
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nData2;
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PTR pAppData;
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PTR eInfo;
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} EVENT_PRIVATE;
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetZoom(OMX_HANDLETYPE pHandle, int speed, int factor, int limit, int xoff, int yoff);
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetContrast(OMX_HANDLETYPE pHandle, int Contrast);
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_FrostedGlassEffect(OMX_HANDLETYPE pHandle, int IsOverlay);
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetCrop(OMX_HANDLETYPE pHandle, int XStart, int XSize, int YStart, int YSize);
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetMirroring(OMX_HANDLETYPE pHandle, int IsRGBOutput);
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetRotationAngle(OMX_HANDLETYPE pHandle, int IsRGBOutput,int Angle);
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetDithering(OMX_HANDLETYPE pHandle, int IsRGBOutput);
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetColorRange(OMX_HANDLETYPE pHandle, int nColorRange);
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL VPP_Test_Check_Frames(int YUVRGB, int inFrames, int OvlyFrames,int outRGBFrames,int outYUVFrames);
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint LoadBaseImage();
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_STRING strAmrDecoder = "OMX.TI.IMAGE.VGPOP";
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_STRING strAmrDecoder = "OMX.TI.VPP";
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint IpBuf_Pipe[2];
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint OvlyBuf_Pipe[2];
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint OpRGBBuf_Pipe[2];
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint OpYUVBuf_Pipe[2];
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint Event_Pipe[2];
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint nRGBFillBufferDones=0;
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint nYUVFillBufferDones=0;
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint nInputEmptyBufferDones=0;
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint nOvlyEmptyBufferDones=0;
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* Error flag */
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL bError = OMX_FALSE;
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timeval base;
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timeval newer;
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*struct timezone tz;*/
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif //#ifndef UNDER_CE
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic COMPONENT_PORTINDEX_DEF MyVppPortDef;
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_VPPCustomTYPE MyVPPCustomDef;
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic long int nTotalTime = 0;
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* safe routine to get the maximum of 2 integers */
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint maxint(int a, int b)
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         return (a>b) ? a : b;
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* This method will wait for the component to get to the state
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* specified by the DesiredState input. */
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForState(OMX_HANDLETYPE* pHandle, OMX_STATETYPE DesiredState)
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE CurState = OMX_StateInvalid;
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nCnt = 0;
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pComponent->GetState(pHandle, &CurState);
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while( (eError == OMX_ErrorNone) &&
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (CurState != DesiredState) && (CurState != OMX_StateInvalid)) {
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sched_yield();
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nCnt++ >= 0xFFFFFFFE ) {
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "VPPTEST:: Press CTL-C to continue\n");
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = pComponent->GetState(pHandle, &CurState);
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (CurState == OMX_StateInvalid && DesiredState != OMX_StateInvalid){
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid EventHandler(OMX_HANDLETYPE hComponent,OMX_PTR pAppData, OMX_EVENTTYPE eEvent,
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 nData1,OMX_U32 nData2, OMX_STRING eInfo)
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    EVENT_PRIVATE MyEvent;
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.eEvent = eEvent;
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.nData1 = nData1;
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.nData2 = nData2;
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MyEvent.pAppData = pAppData;
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (eEvent) {
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventCmdComplete:
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT ("%d :: App: Component State Changed To %d\n", __LINE__,state);
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventError:
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nData1 == OMX_ErrorHardware){
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d: App: ErrorNotofication Came: \
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            \nComponent Name : %d : Error Num %lx: String :%s\n",
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                __LINE__,*((int *)(pAppData)), nData1, eInfo);
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_SendCommand(hComponent, OMX_CommandStateSet, OMX_StateInvalid, NULL);
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(eError != OMX_ErrorNone) {
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf ("Error from SendCommand-Invalid State function\n");
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d: App: ErrorNotofication Came: \
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            \nComponent Name : %d : Error Num %lx: String :%s\n",
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            __LINE__,*((int *)(pAppData)), nData1, eInfo);
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventMax:
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_EventMark:
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    write(Event_Pipe[1], &MyEvent, sizeof(EVENT_PRIVATE));
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinlong GetProfiletime()
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    long int nFrameTime = 0;
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*struct timeval older;*/
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nStatus ;
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    base.tv_sec = newer.tv_sec;
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    base.tv_usec = newer.tv_usec;
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nStatus = gettimeofday(&newer, NULL);
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*printf("base.tv_sec = %ld, base.tv_usec %ld\n", base.tv_sec, base.tv_usec);*/
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nFrameTime = (newer.tv_sec-base.tv_sec) * 1000000 + (newer.tv_usec-base.tv_usec);
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nTotalTime = nTotalTime + nFrameTime;
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return nFrameTime;
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif /*#ifndef UNDER_CE*/
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer)
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*PROFILE POINT*/
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    long int pftime = 0;
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pftime = GetProfiletime();
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("total time for frame %d \n", nTotalTime);
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("total time for each frame %d \n",pftime);
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pBuffer->nOutputPortIndex==MyVppPortDef.rgboutput_port){
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          write(OpRGBBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          nRGBFillBufferDones++;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(pBuffer->nOutputPortIndex==MyVppPortDef.yuvoutput_port){
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          write(OpYUVBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          nYUVFillBufferDones++;
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Incorrect Output Port Index\n");
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid EmptyBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer)
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pBuffer->nInputPortIndex == MyVppPortDef.input_port){
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        write(IpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nInputEmptyBufferDones++;
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(pBuffer->nInputPortIndex == MyVppPortDef.overlay_port){
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        write(OvlyBuf_Pipe[1], &pBuffer,sizeof(pBuffer));
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nOvlyEmptyBufferDones++;
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Incorrect Input Port Index\n");
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentPortDef(OMX_HANDLETYPE pHandleVPP, COMPONENT_PORTINDEX_DEF *pVppPortDef)
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PORT_PARAM_TYPE *pTempPortType = NULL;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pTempVidPortDef = NULL;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i;
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BOOL found_input = OMX_FALSE;
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTempPortType = calloc(1, sizeof(OMX_PORT_PARAM_TYPE));
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pTempPortType){
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetParameter(pHandleVPP, OMX_IndexParamVideoInit, pTempPortType);
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Error at %d\n",__LINE__);
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("VPP_JPEG_DISPLAY:: ports of VPP %lu, start port %lu\n", pTempPortType->nPorts, pTempPortType->nStartPortNumber);
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTempVidPortDef = calloc (1,sizeof (OMX_PARAM_PORTDEFINITIONTYPE));
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pTempVidPortDef){
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    found_input = OMX_FALSE;
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i = pTempPortType->nStartPortNumber; i < pTempPortType->nPorts; i ++){
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTempVidPortDef->nPortIndex = i;
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_GetParameter (pHandleVPP, OMX_IndexParamPortDefinition, pTempVidPortDef);
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ( eError != OMX_ErrorNone ){
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: Error at %d\n",__LINE__);
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pTempVidPortDef->eDir == OMX_DirInput) &&(found_input == OMX_FALSE)){
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* found input */
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pVppPortDef->input_port= i;
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            found_input = OMX_TRUE;
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pTempVidPortDef->eDir == OMX_DirInput) && (found_input == OMX_TRUE)){
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* found ovelay port */
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pVppPortDef->overlay_port = i;
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pTempVidPortDef->eDir == OMX_DirOutput) &&
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pTempVidPortDef->format.video.eColorFormat == OMX_COLOR_Format16bitRGB565)){
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* found RGB output */
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pVppPortDef->rgboutput_port = i;
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pTempVidPortDef->eDir == OMX_DirOutput) &&
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ((pTempVidPortDef->format.video.eColorFormat == OMX_COLOR_FormatYCbYCr)||
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pTempVidPortDef->format.video.eColorFormat == OMX_COLOR_FormatCbYCrY))){
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             /* found YUV output */
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pVppPortDef->yuvoutput_port = i;
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("VPPTEST:: input port is %d\n", pVppPortDef->input_port);
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("VPPTEST:: overlay port is %d\n", pVppPortDef->overlay_port);
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("VPPTEST:: RGB output port is %d\n", pVppPortDef->rgboutput_port);
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("VPPTEST:: YUV output port is %d\n", pVppPortDef->yuvoutput_port);
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pTempPortType){
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pTempPortType);
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTempPortType = NULL;
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pTempVidPortDef){
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pTempVidPortDef);
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTempVidPortDef = NULL;
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetVPPCustomDef(OMX_HANDLETYPE pHandleVPP)
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.ZoomFactor", &(MyVPPCustomDef.VPPCustomSetZoomFactor));
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomFactor is %x\n", MyVPPCustomDef.VPPCustomSetZoomFactor);
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.ZoomLimit", &(MyVPPCustomDef.VPPCustomSetZoomLimit));
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomLimit is %x\n", MyVPPCustomDef.VPPCustomSetZoomLimit);
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.ZoomSpeed", &(MyVPPCustomDef.VPPCustomSetZoomSpeed));
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"Error in OMX_GetExtensionIndex function\n");
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomSpeed is %x\n", MyVPPCustomDef.VPPCustomSetZoomSpeed);
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.ZoomXoffsetFromCenter16", &(MyVPPCustomDef.VPPCustomSetZoomXoffsetFromCenter16));
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomXoffsetFromCenter16 is %x\n", MyVPPCustomDef.VPPCustomSetZoomXoffsetFromCenter16);
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.ZoomYoffsetFromCenter16", &(MyVPPCustomDef.VPPCustomSetZoomYoffsetFromCenter16));
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"Error in OMX_GetExtensionIndex function\n");
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomYoffsetFromCenter16 is %x\n", MyVPPCustomDef.VPPCustomSetZoomYoffsetFromCenter16);
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.FrostedGlassOvly", &(MyVPPCustomDef.VPPCustomSetFrostedGlassOvly));
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.FrostedGlassOvly is %x\n", (MyVPPCustomDef.VPPCustomSetFrostedGlassOvly));
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.VideoColorRange", &(MyVPPCustomDef.VPPCustomSetColorRange));
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.FrostedGlassOvly is %x\n", (MyVPPCustomDef.VPPCustomSetColorRange));
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_GetExtensionIndex(pHandleVPP, "OMX.TI.VPP.Param.RGB4ColorFormat", &(MyVPPCustomDef.VPP_CustomRGB4ColorFormat));
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"VPPTEST:: Error in OMX_GetExtensionIndex function\n");
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("OMX.TI.VPP.Param.ZoomFactor is %x\n", MyVPPCustomDef.VPP_CustomRGB4ColorFormat);
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return eError;
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint _tmain(int argc, TCHAR **argv)
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint main(int argc, char* argv[])
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE           error = OMX_ErrorNone;
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CALLBACKTYPE AmrCaBa = {(void *)EventHandler,
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void*) EmptyBufferDone,
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void*)FillBufferDone};
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle;
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 AppData = 100;
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct = NULL;
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* InputBufHeader[MAX_VPP_BUFFERS];
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* OvlyBufHeader[MAX_VPP_BUFFERS];
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* OutRGBBufHeader[MAX_VPP_BUFFERS];
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* OutYUVBufHeader[MAX_VPP_BUFFERS];
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent;
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE state;
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int retval;
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR* szInFile = NULL;
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR* szOutFile = NULL;
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fIn = NULL;
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fOut = NULL;
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fYuvOut = NULL;
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HANDLE fInOvelay = NULL;
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR stringRGB[30];
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR stringYUV[30];
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TCHAR overlaystring[30];
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DWORD dwWritten;
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* szInFile = NULL;
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* szOutFile = NULL;
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fIn = NULL;
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fOut = NULL;
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fYuvOut = NULL;
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fInOvelay = NULL;
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char stringRGB[30];
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char stringYUV[30];
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char overlaystring[30];
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 inputwidth=0;
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 inputheight=0;
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 outputwidth=0;
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 outputheight=0;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 inputcolor;
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 rgboutputcolor;
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 yuvoutputcolor;
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int Isoverlay;
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int IsYUVRGB;
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bitrate=0;
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int iCurrentFrameIn = 0;
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int iCurrentOvlyFrameIn=0;
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int iCurrentRGBFrameOut = 0;
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int iCurrentYUVFrameOut = 0;
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int DEINIT_FLAG = 0;
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nTypeofAllocation;
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int feature_param[4]={0,0,0,0};   /*Initialize array*/
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int feature;  /*Feature selected, only scaling, zoom, contrast, frosted glass effect, cropping, mirror and rotation*/
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COLOR_FORMATTYPE nColor;        /*Used to pass Color Format for input and output ports*/
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fd_set rfds;
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax;
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pInBuffer = NULL;
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pYUVBuffer = NULL;
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pRGBBuffer = NULL;
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRead = 0;
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int done = 0;
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int frmCount = 0;
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nCounter =0;
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int count_stop_restart=0;   /* Executing-->Idle-->Executing*/
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int count_stop_load=0;  /* Loaded-->Idle-->Executing-->Idle-->Loaded */
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int max_count_stop_restart=0;
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int max_count_stop_load=0;
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuffer = NULL;  /*To Hold Input Buffers*/
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuf = NULL;     /*To Hold Output Buffers*/
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *portinput;
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nFillThisBufferYUV=0;
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nFillThisBufferRGB=0;
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nTimeouts =0;
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bPauseResume=OMX_FALSE;
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bStopRestart=OMX_FALSE;
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bStopNotFree=OMX_FALSE;
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int bStopExit=OMX_FALSE;
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int MAX_VPP_BUFFERS_IN_USE = MAX_VPP_BUFFERS;
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sigset_t set;
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* validate command line args */
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(argc < 13) {
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("usage: %S <input.yuv><file_desc><Inp. Width><Inp. Height><Inp. color><0:no overlay/1:overlay><Out. Width><Out Height><yuv color><rgb color><0 :Internal 1 :external allocation><Feature [0-8]>\n",
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                argv[0]);
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("./VPPTest_common patterns/qciftest.yuv qcif_qqcif  176 144 1 0 88 72 1 2 0 0\n");
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("usage: %s <input.yuv><file_desc><Inp. Width><Inp. Height><Inp. color><0:no overlay/1:overlay><Out. Width><Out Height><yuv color><rgb color><0 :Internal 1 :external allocation><Feature [0-8]>\n",
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                argv[0]);
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("./VPPTest_common patterns/qciftest.yuv qcif_qqcif  176 144 1 0 88 72 1 2 0 0\n");
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return -1;
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    szInFile = argv[1];
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    szOutFile = argv[2];
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputwidth=_wtoi(argv[3]);
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputheight=_wtoi(argv[4]);
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputcolor=_wtoi(argv[5]);
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Isoverlay = _wtoi(argv[6]);
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    outputwidth=_wtoi(argv[7]);
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    outputheight=_wtoi(argv[8]);
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    yuvoutputcolor= _wtoi(argv[9]);
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    rgboutputcolor = _wtoi(argv[10]);
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nTypeofAllocation = _wtoi(argv[11]);
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    feature= (_wtoi(argv[12])& (0x00FF);  /*Use only lower byte*/
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bPauseResume = (_wtoi(argv[12]) & (0x0100);  /*Bit 8 is PauseResumeFlag*/
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopRestart = (_wtoi(argv[12]) & (0x0200);  /*Bit 9 is StopRestart Flag*/
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopNotFree = (_wtoi(argv[12]) & (0x0400);  /*Bit 10 is Stop without freeing component Flag*/
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopExit = (_wtoi(argv[12]) & (0x0800);     /*Bit 11 is Stop without finishing the procesed image*/
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputwidth=atoi(argv[3]);
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputheight=atoi(argv[4]);
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    inputcolor=atoi(argv[5]);
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Isoverlay =atoi(argv[6]);
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    outputwidth=atoi(argv[7]);
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    outputheight=atoi(argv[8]);
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    yuvoutputcolor= atoi(argv[9]);
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    rgboutputcolor = atoi(argv[10]);
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nTypeofAllocation = atoi(argv[11]);
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    feature=atoi(argv[12]) & (0x00FF);  /*Use only lower byte*/
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bPauseResume = atoi(argv[12]) & (0x0100);  /*Bit 8 is PauseResumeFlag*/
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopRestart = atoi(argv[12]) & (0x0200);  /*Bit 9 is StopRestart Flag*/
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopNotFree = atoi(argv[12]) & (0x0400);  /*Bit 10 is Stop without freeing component Flag*/
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bStopExit = atoi(argv[12]) & (0x0800);     /*Bit 11 is Stop without finishing the procesed image*/
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* 1600 x 1200 is only a rough guess */
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((inputwidth * inputheight) >= (1600 * 1200))
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        MAX_VPP_BUFFERS_IN_USE = 1;
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(yuvoutputcolor == 0 && rgboutputcolor ==0)
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: At least one output is required\n");
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Selecting YUV420 as default.\n");
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        yuvoutputcolor=1;
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(yuvoutputcolor && rgboutputcolor)  /*Simultaneous output*/
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        IsYUVRGB=2;
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(yuvoutputcolor)  /*Only YUV output*/
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        IsYUVRGB=0;
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        IsYUVRGB=1;     /*Only RGB output*/
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Assign Parameters according to feature selected*/
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (feature)  /*Assign feature selected feature parameters*/
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 0 : /*Only Scaling Needed */
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc>13)
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Only Scaling Selected, ignoring Extra parameters\n");
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 1:     /*On Demand Zoom */
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 2:     /*Dynamic Zoom  */
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc < 15){
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %S <input.yuv> <output desc> <Inp. width> <Inp. Height> <0:no overlay/1:overlay> <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 1= On Demand/2=Dynamic>    <On Demand Zoom/Dynamic Zoom> <Zoom Factor/Zoom Speed> <Zoom Limit>\n",argv[0]);
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %s <input.yuv> <output desc> <Inp. width> <Inp. Height> <0:no overlay/1:overlay> <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 1= On Demand/2=Dynamic>    <On Demand Zoom/Dynamic Zoom> <Zoom Factor/Zoom Speed> <Zoom Limit>\n",argv[0]);
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = _wtoi(argv[13]);  /*Zoom Factor or Zoom Speed*/
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = _wtoi(argv[14]); /*Zoom Limit */
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = atoi(argv[13]);  /*Zoom Factor or Zoom Speed*/
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = atoi(argv[14]);  /*Zoom Limit */
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc>15){
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("On Demand Zoom Selected, Ignoring Extra parameters\n");
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 3:  /*Zoom Offset*/
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc<17){
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %S <input.yuv> <output.rgb> <inputwidth> <inputheight> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 3=Zoom Offset> <Zoom Factor> <Zoom Limit> <X Offset> <Y Offset>\n",argv[0]);
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %s <input.yuv> <output.rgb> <inputwidth> <inputheight> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 3=Zoom Offset> <Zoom Factor> <Zoom Limit> <X Offset> <Y Offset>\n",argv[0]);
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = _wtoi(argv[13]); /*Zoom Factor*/
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = _wtoi(argv[14]); /*Zoom Limit*/
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[2] = _wtoi(argv[15]); /*X Offset*/
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[3] = _wtoi(argv[16]); /*Y Offset*/
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = atoi(argv[13]);  /*Zoom Factor*/
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = atoi(argv[14]);  /*Zoom Limit*/
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[2] = atoi(argv[15]);  /*X Offset*/
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[3] = atoi(argv[16]);  /*Y Offset*/
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc>17){
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Zoom Offset Selected, Ignoring Extra parameters\n");
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 4 : /* Contrast */
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc<14)
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %S <input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 4=Contrast> <Contrast Value [-100 100]>\n",argv[0]);
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %s <input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 4=Contrast> <Contrast Value [-100 100]>\n",argv[0]);
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = _wtoi(argv[13]);
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0]=atoi(argv[13]);
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc>14){
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Contrast Selected, Ignoring extra parameters\n");
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 5 :  /*Frosted Glass effect */
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(Isoverlay ==0){
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Overlay is needed for Frosted Glass effect\n");
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 6 : /*Cropping*/
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc<17){
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %S <input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 6=Cropping> <Left Coord> <Width> <Top coord> <Height>\n",argv[0]);
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %s <input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 6=Cropping> <Left Coord> <Width> <Top Coord> <Height>\n",argv[0]);
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = _wtoi(argv[13]); /*Left Pixel*/
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = _wtoi(argv[14]); /*Width*/
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[2] = _wtoi(argv[15]); /*Top Pixel*/
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[3] = _wtoi(argv[16]); /*Height*/
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0] = atoi(argv[13]);  /*Left Pixel*/
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[1] = atoi(argv[14]);  /*Width*/
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[2] = atoi(argv[15]);  /*Top Pixel*/
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[3] = atoi(argv[16]);  /*Height*/
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc>17){
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Cropping Selected, Ignoring Extra parameters\n");
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 7 : /* Mirroring */
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(!IsYUVRGB){
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Mirrored Image is only possible for RGB output\n");
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 8: /*Rotation*/
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(argc<14){
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("usage: %s <input.yuv> <output descriptor> <Inp. width> <Inp. height> <Inp. Color> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <YUV output format> <RGB format>  <0 :Internal 1 :external allocation>\
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    <Feature 8=Rotation> <Rotation Angle = 0,90,180,270>\n",argv[0]);
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0]=_wtoi(argv[13]);
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0]=atoi(argv[13]);
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 9 : /* Dithering */
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(!IsYUVRGB){
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Dithering is only possible for RGB output\n");
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 10: /*Video Color Range Conversion*/
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0]=_wtoi(argv[13]);
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                feature_param[0]=atoi(argv[13]);
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default :
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Not a Valid Option on Selected Feature\n");
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("usage: %S <Num><input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                <Feature [0:9]> <...>\n",argv[0]);
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Not a Valid Option on Selected Feature\n");
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("usage: %s <Num><input.yuv> <output.rgb> <width> <height> <0:no overlay/1:overlay>  <outputwidth> <outputheight> <0:YUV/1:RGB/2:BOTH>  <0 :Internal 1 :external allocation>\
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                <Feature [0:9]> <...>\n",argv[0]);
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return -1;
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }  /*End switch*/
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("Test Core 1.8 - " __DATE__ ":" __TIME__ "\n");
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("------------------------------------------------\n");
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      /*Buffer flow can happen here*/
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(Isoverlay){
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        wsprintf(overlaystring,L"play_qCIF.raw");
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("Overlay file: %S\n",overlaystring);
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sprintf(overlaystring,"/omx/patterns/play_qCIF.raw");
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("Overlay file: %s\n",overlaystring);
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   /* check to see that the input file exists */
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct stat sb = {0};
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int status = stat(argv[1], &sb);
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( status != 0 ){
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Cannot find file %s. (%u)\n", argv[1], errno);
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Create a pipe used to queue data from the callback. */
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    retval = pipe(IpBuf_Pipe);
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(retval != 0){
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Error:Fill Data Pipe failed to open\n");
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Create a pipe used to queue data from the callback. */
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    retval = pipe(OvlyBuf_Pipe);
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(retval != 0){
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Error:Fill Data Pipe failed to open\n");
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    retval = pipe(OpRGBBuf_Pipe);
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(retval != 0){
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Error:Empty Data Pipe failed to open\n");
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    retval = pipe(OpYUVBuf_Pipe);
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(retval != 0){
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Error:Empty Data Pipe failed to open\n");
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Create a pipe used to handle events from the callback. */
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    retval = pipe(Event_Pipe);
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(retval != 0){
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr, "Error:Fill Data Pipe failed to open\n");
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* save off the "max" of the handles for the selct statement */
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = maxint(IpBuf_Pipe[0], OvlyBuf_Pipe[0]);
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = maxint(fdmax, OpRGBBuf_Pipe[0]);
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = maxint(fdmax, OpYUVBuf_Pipe[0]);
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = maxint(fdmax, Event_Pipe[0]);
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* LOAD BASE IMAGE FIRST TIME */
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LoadBaseImage();
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
871b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = TIOMX_Init();
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone) {
873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        printf("%d :: Error returned by TIOMX_init()\n",__LINE__);
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/********************************************************************************************************/
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Load the VPP Component */
879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = TIOMX_GetHandle(&pHandle,strAmrDecoder,&AppData, &AmrCaBa);
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( (error != OMX_ErrorNone) || (pHandle == NULL) ){
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"Error in Get Handle function\n");
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(bStopNotFree){
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        max_count_stop_load=20;
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        max_count_stop_load=1;
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /********************************Component is loaded here, we can loop after this point****************************************/
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(count_stop_load=0; count_stop_load<max_count_stop_load; count_stop_load++)
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = GetComponentPortDef(pHandle, &MyVppPortDef);
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone){
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fprintf (stderr,"Error in Get Handle function\n");
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = GetVPPCustomDef(pHandle);
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone)
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fprintf (stderr,"Error in Get Handle function\n");
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Input Height: %d, Input Width %d\n",inputheight, inputwidth);
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Select Input Format and Buffer Size accordingly*/
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch(inputcolor)
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 0:     /*YUV 420 Planar*/
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatYUV420PackedPlanar;
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input YUV420\n");
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 1: /*YUV 422 Interleaved (little-endian)*/
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatCbYCrY/*OMX_COLOR_FormatYCbYCr*/;
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input YUV422 Interleaved (little-endian)\n");
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 2: /*YUV 422 Interleaved (big-endian)*/
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatYCbYCr/*OMX_COLOR_FormatYCrYCb*/;
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input YUV422 Interleaved (big-endian)\n");
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 3: /*RGB24 8:8:8*/
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_Format24bitRGB888;
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input RGB24\n");
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 4 : /*RGB16 5:6:5*/
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_Format16bitRGB565;
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input RGB16\n");
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 5 : /*RGB12 5:6:5*/
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_Format12bitRGB444;
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input RGB12\n");
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 6 : /*RGB8 3:3:2*/
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_Format8bitRGB332;
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input RGB8\n");
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 7 : /*RGB4  Look-Up-Table*/
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = MyVPPCustomDef.VPP_CustomRGB4ColorFormat;
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input RGB4\n");
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 8 : /*GRAY8 */
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatL8;
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input GRAY8\n");
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 9 : /* GRAY4 */
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatL4;
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input GRAY4\n");
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 10: /* GRAY2 */
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatL2;
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input GRAY2\n");
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 11 : /* Monochrome */
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor = OMX_COLOR_FormatMonochrome;
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Input Monochrome\n");
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            default:
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Not a valid option for Input Format\n");
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: %d : GetHandle Done..........\n",__LINE__);
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct = malloc (sizeof (OMX_PARAM_PORTDEFINITIONTYPE));
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!pCompPrivateStruct){
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: eError = OMX_ErrorInsufficientResources");
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorInsufficientResources;
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMajor = 0x1;
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMinor = 0x0;
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nRevision = 0x0;
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nStep = 0x0;
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex = MyVppPortDef.input_port;
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDir = OMX_DirInput;
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountMin = 1;
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountActual = MAX_VPP_BUFFERS_IN_USE;
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bEnabled = OMX_TRUE;
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bPopulated = OMX_FALSE;
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDomain = OMX_PortDomainVideo;
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.video.nFrameHeight = inputheight;
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.video.nFrameWidth = inputwidth;
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.video.eColorFormat = nColor;
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.video.nBitrate = bitrate;
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //Send input port config
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_SetParameter (pHandle,OMX_IndexParamPortDefinition,
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pCompPrivateStruct);
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone) {
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(Isoverlay){  /* At the moment, only qcif overlay frame is supported*/
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_GetParameter (pHandle,OMX_IndexParamPortDefinition, pCompPrivateStruct);
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nPortIndex = MyVppPortDef.overlay_port;
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->eDir = OMX_DirInput;
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nBufferCountActual = MAX_VPP_BUFFERS_IN_USE;
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameHeight = DEFAULT_HEIGHT;
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameWidth = DEFAULT_WIDTH;
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.eColorFormat = OMX_COLOR_Format24bitRGB888;//OMX_COLOR_FormatYCbYCr
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SetParameter (pHandle,OMX_IndexParamPortDefinition, pCompPrivateStruct);
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone){
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: Overlay Enabled\n");
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_SendCommand(pHandle, OMX_CommandPortDisable, MyVppPortDef.overlay_port, NULL);
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /**************************** FOR OUTPUT PORTS ***************************/
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Output height: %d, Output Width: %d\n",outputheight, outputwidth);
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(IsYUVRGB){ /*Select output Format and Buffer Size accordingly*/
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch (rgboutputcolor) {
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 1: /*RGB24 8:8:8*/
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_Format24bitRGB888; /* changed from BGR*/
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: %d::Output RGB24\n",__LINE__);
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 2: /*RGB16 5:6:5*/
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor =OMX_COLOR_Format16bitRGB565;
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output RGB16\n");
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 3:/*RGB12 4:4:4*/
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor=OMX_COLOR_Format12bitRGB444;
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output RGB12\n");
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 4:/*RGB8 3:3:2*/
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_Format8bitRGB332;
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output RGB8\n");
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 5: /*RGB4*/
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = MyVPPCustomDef.VPP_CustomRGB4ColorFormat;
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output RGB4\n");
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 6: /*GRAY8 */
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor=OMX_COLOR_FormatL8;
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output GRAY8\n");
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 7:/*GRAY4*/
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_FormatL4;
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output GRAY4\n");
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 8: /*GRAY2*/
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_FormatL2;
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output GRAY2\n");
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 9: /*Monochrome*/
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_FormatMonochrome;
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output Monochrome\n");
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 10: /*RGB32*/
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor = OMX_COLOR_Format32bitARGB8888;
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Output RGB32\n");
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                default:
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nColor =OMX_COLOR_Format16bitRGB565;
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Not a valid option, default to RGB16\n");
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Send output port config for RGB port*/
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(IsYUVRGB){
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: configuring RGB port \n");
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_GetParameter (pHandle,OMX_IndexParamPortDefinition,
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pCompPrivateStruct);
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone) {
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nPortIndex = MyVppPortDef.rgboutput_port;
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->eDir = OMX_DirOutput;
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nBufferCountActual = MAX_VPP_BUFFERS_IN_USE;
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameHeight = outputheight;
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameWidth = outputwidth;
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.eColorFormat = nColor ;/*OMX_COLOR_FormatUnused */
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SetParameter (pHandle,OMX_IndexParamPortDefinition,
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pCompPrivateStruct);
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone) {
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: RGB port has been configured\n");
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_SendCommand(pHandle, OMX_CommandPortDisable, MyVppPortDef.rgboutput_port, NULL);
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Send output port config for YUV port*/
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(IsYUVRGB ==0 || IsYUVRGB ==2){
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch (yuvoutputcolor)
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 1:
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor=OMX_COLOR_FormatYUV420PackedPlanar;
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Output YUV420 Planar\n");
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 2:
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor=OMX_COLOR_FormatYCbYCr;   /*YUV422 (YUYV)*/
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Output YUV422 YUYV\n");
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case 3:
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor=OMX_COLOR_FormatCbYCrY;  /*YUV422 (UYVY)*/
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Output YUV422 UYVY\n");
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            default:
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Not a valid option, default to YUV420 planar\n");
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nColor=OMX_COLOR_FormatYUV420PackedPlanar;
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_GetParameter (pHandle,OMX_IndexParamPortDefinition,
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pCompPrivateStruct);
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone) {
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nPortIndex = MyVppPortDef.yuvoutput_port;
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->eDir = OMX_DirOutput;
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nBufferCountActual = MAX_VPP_BUFFERS_IN_USE;
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameHeight = outputheight;
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.nFrameWidth = outputwidth;
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->format.video.eColorFormat = nColor;
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("VPPTEST:: Configuring YUV output port\n");
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SetParameter (pHandle,OMX_IndexParamPortDefinition,
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pCompPrivateStruct);
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone) {
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: YUV output port has been configured\n");
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_SendCommand(pHandle, OMX_CommandPortDisable, MyVppPortDef.yuvoutput_port, NULL);
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT ("Basic Function:: Sending OMX_StateIdle Command\n");
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Num buffers %d\n", MAX_VPP_BUFFERS_IN_USE);
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Input Buffer Allocation*/
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex = MyVppPortDef.input_port;
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       error = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone) {
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nTypeofAllocation ==0){
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /*MultiBuffer*/
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_AllocateBuffer(pHandle, &InputBufHeader[nCounter], MyVppPortDef.input_port, (void *)NULL, pCompPrivateStruct->nBufferSize);
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: VPPTEST:: OMX_AllocateBuffer failed !!\n");
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInBuffer = malloc(pCompPrivateStruct->nBufferSize +256);
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pInBuffer == NULL){
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorInsufficientResources;
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInBuffer += 128;
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){ /*MultiBuffer*/
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_UseBuffer(pHandle, &InputBufHeader[nCounter],
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            MyVppPortDef.input_port,
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (void *)NULL,
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pCompPrivateStruct->nBufferSize,
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pInBuffer);
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: OMX_UseBuffer failed !!\n");
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Overlay Buffer Allocation*/
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex = MyVppPortDef.overlay_port;
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       error = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone) {
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(Isoverlay){
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /*MultiBuffer*/
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_AllocateBuffer(pHandle, &OvlyBufHeader[nCounter],
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            MyVppPortDef.overlay_port,
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (void *)NULL,
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pCompPrivateStruct->nBufferSize);
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: OMX_AllocateBuffer failed !!\n");
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*RGB Buffer Allocation*/
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex = MyVppPortDef.rgboutput_port;
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       error = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone) {
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(IsYUVRGB){
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nTypeofAllocation == 0){
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /*MultiBuffer*/
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_AllocateBuffer(pHandle, &OutRGBBufHeader[nCounter],
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                MyVppPortDef.rgboutput_port,
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)NULL,
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pCompPrivateStruct->nBufferSize);
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: OMX_AllocateBuffer failed !!\n");
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pRGBBuffer = malloc(pCompPrivateStruct->nBufferSize + 256);
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pRGBBuffer == NULL){
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_ErrorInsufficientResources;
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pRGBBuffer += 128;
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for(nCounter = 0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){ /*MultiBuffer*/
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_UseBuffer(pHandle, &OutRGBBufHeader[nCounter],
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                MyVppPortDef.rgboutput_port,
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)NULL,
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pCompPrivateStruct->nBufferSize,
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pRGBBuffer);
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone){
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: OMX_UseBuffer failed !!\n");
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*YUV Buffer Allocation*/
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex = MyVppPortDef.yuvoutput_port;
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       error = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (error != OMX_ErrorNone) {
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(IsYUVRGB ==0 || IsYUVRGB ==2){
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nTypeofAllocation ==0){
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /*MultiBuffer*/
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_AllocateBuffer(pHandle, &OutYUVBufHeader[nCounter],
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                MyVppPortDef.yuvoutput_port,
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)NULL,
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pCompPrivateStruct->nBufferSize);
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: OMX_AllocateBuffer failed !!\n");
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pYUVBuffer = malloc(pCompPrivateStruct->nBufferSize +256);
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pYUVBuffer == NULL){
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_ErrorInsufficientResources;
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pYUVBuffer += 128;
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /*MultiBuffer*/
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_UseBuffer(pHandle, &OutYUVBufHeader[nCounter],
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                MyVppPortDef.yuvoutput_port,
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (void *)NULL,
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pCompPrivateStruct->nBufferSize,
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pYUVBuffer);
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: OMX_UseBuffer failed !!\n");
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone){
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fprintf (stderr,"VPPTEST:: Error from SendCommand-Idle(Init) State function\n");
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Sending component to Idle State\n");
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Wait for startup to complete */
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = WaitForState(pHandle, OMX_StateIdle);
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone) {
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fprintf(stderr, "VPPTEST:: Error:  VPP->WaitForState reports an error %X\n", error);
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        state = OMX_StateIdle;
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("Component is in Idle State\n");
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*******HERE THE COMPONENT IS ALREADY IN IDLE STATE AND BUFFERS HAVE BEEN ALLOCATED********/
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(bStopRestart) {
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            max_count_stop_restart=20;
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            max_count_stop_restart=1;
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(count_stop_restart=0; count_stop_restart<max_count_stop_restart; count_stop_restart++)  /*Executing-->Idle-->Executing*/
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sched_yield();
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            iCurrentFrameIn = 0;
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            iCurrentOvlyFrameIn=0;
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            iCurrentRGBFrameOut = 0;
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            iCurrentYUVFrameOut = 0;
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nFillThisBufferYUV=0;
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nFillThisBufferRGB=0;
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /***********************************OPEN THE NEEDED FILES****************************************************/
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fIn = CreateFile(argv[1], GENERIC_READ, 0,
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   NULL,OPEN_EXISTING, 0, NULL);
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (INVALID_HANDLE_VALUE == fIn){
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("Error:  failed to open the file %S for readonly" \
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     "access\n", argv[1]);
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB){
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                wsprintf(stringRGB, L"%s.raw",szOutFile);
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fOut = CreateFile(stringRGB, GENERIC_WRITE, 0,
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   NULL,CREATE_ALWAYS, 0, NULL);
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (INVALID_HANDLE_VALUE == fOut){
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("Error:  failed to create the output file %s\n",
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        stringRGB);
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ==0 || IsYUVRGB ==2){
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                wsprintf(stringYUV, L"%s.yuv",szOutFile);
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fYuvOut = CreateFile(stringYUV, GENERIC_WRITE, 0,
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   NULL,CREATE_ALWAYS, 0, NULL);
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if( fYuvOut == INVALID_HANDLE_VALUE ){
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("Error:  failed to create the output file %s\n",
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         stringYUV);
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Open the file of data to be rendered. */
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fIn = fopen(argv[1], "r");
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if( fIn == NULL ){
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf(stderr, "VPPTEST:: %d::Error:  failed to open the file %s for readonly access\n",__LINE__,argv[1]);
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ){
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sprintf(stringRGB, "%s.raw",szOutFile);
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fOut = fopen(stringRGB, "w");
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if( fOut == NULL ){
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr,
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        "Error:  failed to create the output file %s\n",
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        argv[2]);
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ==0 || IsYUVRGB ==2){
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sprintf(stringYUV, "%s.yuv",szOutFile);
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fYuvOut = fopen(stringYUV, "w");
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(fYuvOut == NULL){
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr,
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        "Error:  failed to create the output file %s\n",
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        stringYUV);
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /**** ALL THE Configurables Features of VPP will happen here (Zoom, Contrast, Cropping, etc.*/
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Configurating features...\n");
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(Isoverlay){
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*This should be enable in case of overlay */
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_CONFIG_COLORKEYTYPE *color = malloc(sizeof(OMX_CONFIG_COLORKEYTYPE));
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(color == NULL){
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_ErrorInsufficientResources;
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*OMX_U8  colorKey[]  = {0,250,5,3};   ARGB*/
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_U8  colorKey[]  = {0,3,5,250}; /*ARGB*/
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                color->nARGBMask = (int)colorKey;
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_SetConfig (pHandle,OMX_IndexConfigCommonColorKey,
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   color);
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(color);
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (error != OMX_ErrorNone) {
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_ErrorBadParameter;
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error=OMX_ErrorNone;
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch(feature)
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 0:     /*Only Scaling Selected*/
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;  /*No need to configure any other feature*/
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 1:     /*On Demand Zoom*/
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetZoom(pHandle, 0,feature_param[0], feature_param[1],0,0);
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected On Demand Zoom feature\n");
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 2: /*Dynamic Zoom*/
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetZoom(pHandle,feature_param[0],1024,feature_param[1],0,0);
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Dynamic Zoom Feature\n");
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 3:     /*Zoom Offset*/
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*  error = VPP_SetZoom(pHandle,feature,feature_param);*/
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = VPP_SetZoom(pHandle,0, feature_param[0], feature_param[1],feature_param[2],feature_param[3]);
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: Selected Zoom Offset Feature\n");
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*VPP_SetZoom(OMX_HANDLETYPE pHandle, int speed, int factor, int limit, int xoff, int yoff);*/
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 4:  /*Contrast*/
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetContrast(pHandle, feature_param[0]);
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Contrast (Video Gain) Feature\n");
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 5: /*Frosted Glass Overlay Effect*/
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_FrostedGlassEffect(pHandle, Isoverlay);
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Frosted Glass Overlay Effect\n");
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 6: /*Cropping*/
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetCrop(pHandle, feature_param[0], feature_param[1], feature_param[2], feature_param[3]);
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              printf("VPPTEST:: Selected cropping Feature\n");
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 7: /*Mirroring*/
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetMirroring(pHandle,IsYUVRGB);
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Mirroring Feature\n");
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 8 : /*RotationAngle*/
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetRotationAngle(pHandle, IsYUVRGB,feature_param[0]);
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Rotation Feature\n");
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 9: /*Dithering*/
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = VPP_SetDithering(pHandle,IsYUVRGB);
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Selected Dithering Feature\n");
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 10:  /*Color Range Conversion*/
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    {
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        error=VPP_SetColorRange(pHandle,feature_param[0]);
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: Selected Color Range\n");
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                default:
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {   error = OMX_ErrorBadParameter;
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Not a valid Option on Feature Selection\n");
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (error != OMX_ErrorNone)
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorBadParameter;
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT ("Basic Function:: Sending OMX_StateExecuting Command\n");
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateExecuting, NULL);
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone) {
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf (stderr,"VPPTEST:: Error from SendCommand-Executing State function\n");
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponent = (OMX_COMPONENTTYPE *)pHandle;
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = WaitForState(pHandle, OMX_StateExecuting);
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone) {
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf(stderr, "VPPTEST:: Error:  VPP->WaitForState reports an error %X\n", error);
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: Component is now in Executing state\n");
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            state = OMX_StateExecuting;
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(Isoverlay){
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fInOvelay = fopen(overlaystring, "r");
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!fInOvelay)
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr, "Error:  failed to open the file %s for readonly access\n", overlaystring);
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*PROFILE POINT */
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    gettimeofday(&base, NULL);
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    newer.tv_sec = base.tv_sec;
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    newer.tv_usec = base.tv_usec;
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("sec: %ld, usec: %ld\n", base.tv_sec, base.tv_usec);
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*profiletime = GetProfiletime());*/
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){ /*MultiBuffer*/
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*Send Input Buffers to the Component */
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*Provided that at least one frame will be read*/
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nRead = fill_data (InputBufHeader[nCounter],fIn);
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(nRead == 0){
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("There is no data on input file\n");
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break; /*If there is no data send no more buffers to the component*/
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            /*Exit for loop*/
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else{
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ++iCurrentFrameIn;
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_EmptyThisBuffer(pHandle, InputBufHeader[nCounter]);  /*INPUT port*/
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (error != OMX_ErrorNone) {
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("VPPTEST:: Error from OMX_EmptyThisBuffer function 0x%X\n",error);
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(Isoverlay)   /*OVERLAY PORT*/{
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fInOvelay = CreateFile(overlaystring, GENERIC_READ, 0,
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          NULL,OPEN_EXISTING, 0, NULL);
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(fInOvelay == INVALID_HANDLE_VALUE){
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Error:  failed to open the file %s for readonly\
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                access\n", fInOvelay);
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fseek(fInOvelay, 0L, SEEK_SET);
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nRead = fill_data (OvlyBufHeader[nCounter],fInOvelay);
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (nRead < (DEFAULT_WIDTH * DEFAULT_HEIGHT)* 3){
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: Error in fread for overlay, not enough data\n");
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    ++iCurrentOvlyFrameIn;
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_EmptyThisBuffer(pHandle, OvlyBufHeader[nCounter]);  /*OVERLAY port*/
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (error != OMX_ErrorNone) {
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("VPPTEST:: Error from OMX_EmptyThisBuffer function 0x%X\n",error);
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        #endif
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(IsYUVRGB){  /*Send RGB output buffers to component*/
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OutRGBBufHeader[nCounter]->nFilledLen=0;
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_FillThisBuffer(pHandle,OutRGBBufHeader[nCounter]);
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (error != OMX_ErrorNone){
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("VPPTEST:: Error from OMX_FillThisBuffer function 0x%X\n",error);
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nFillThisBufferRGB++;
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(IsYUVRGB==0 || IsYUVRGB ==2){  /*Send YUV output buffers to component*/
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OutYUVBufHeader[nCounter]->nFilledLen=0;
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_FillThisBuffer(pHandle,OutYUVBufHeader[nCounter]);
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (error != OMX_ErrorNone) {
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("VPPTEST:: Error from OMX_FillThisBuffer function 0x%X\n",error);
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nFillThisBufferYUV++;
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }  /*end of for*/
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /**************************************************************************/
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nRead = 0;
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            done = 0;
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            frmCount = 0;
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_STATETYPE MyState;
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            MyState = OMX_StateExecuting;
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            DEINIT_FLAG = OMX_FALSE;
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            while ((error == OMX_ErrorNone ) && (MyState != OMX_StateIdle)) {
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_ZERO(&rfds);
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(IpBuf_Pipe[0], &rfds);
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(OvlyBuf_Pipe[0],&rfds);
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(OpRGBBuf_Pipe[0], &rfds);
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(OpYUVBuf_Pipe[0],&rfds);
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(Event_Pipe[0],&rfds);
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sigemptyset(&set) ;
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sigaddset(&set, SIGALRM);
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                retval = pselect(fdmax+1, &rfds, NULL, NULL, NULL,&set);
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(retval == -1) {
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    perror("select()");
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf (stderr, "VPPTEST:: : Error \n");
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(retval == 0) {
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("\n\n\n%d ::!!!!!!!     App Timeout !!!!!!!!!!! \n",__LINE__);
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: ---------------------------------------\n\n\n",__LINE__);
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(++nTimeouts>5){
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("VPPTEST:: No more data from Component\n");
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("VPPTEST:: Inputs=%d, Ovlys=%d, OutRGBs=%d,OutYUVs=%d\n",
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    iCurrentFrameIn, iCurrentOvlyFrameIn,
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    iCurrentRGBFrameOut,iCurrentYUVFrameOut);
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(error != OMX_ErrorNone) {
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            fprintf (stderr,"VPPTEST:: Error from SendCommand-Idle(Init) State function\n");
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        error = WaitForState(pHandle, OMX_StateIdle);
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(error != OMX_ErrorNone) {
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("VPPTEST:: Error:  hVPP->WaitForState has timed out %X", error);
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("VPP has been set in Idle State now\n");
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Error on %s-->%s\n",szInFile,szOutFile);
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        MyState = OMX_StateIdle;
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /**
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                * If FD_ISSET then there is data available in the pipe.
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                * Read it and get the buffer data out.
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                * Then re-fill the buffer and send it back.
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                **/
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if ( FD_ISSET(Event_Pipe[0], &rfds)) {
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    EVENT_PRIVATE EventPrivate;
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    read(Event_Pipe[0], &EventPrivate, sizeof(EVENT_PRIVATE));
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    switch(EventPrivate.eEvent) {
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        case OMX_EventError:
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            DEINIT_FLAG = OMX_TRUE;
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            bError = OMX_TRUE;
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("APP:: Waiting for OMX_StateInvalid... \n");
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            WaitForState(pHandle, OMX_StateInvalid);
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("APP:: At Invalid state.\n");
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        case OMX_EventBufferFlag:
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("APP:: Unloading component...\n");
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        default:
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(bPauseResume && !(iCurrentFrameIn%20)){
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Pausing the component at %d Frames\n",iCurrentFrameIn);
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error=OMX_SendCommand(pHandle,OMX_CommandStateSet,OMX_StatePause,NULL);
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error!=OMX_ErrorNone){
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fprintf(stderr,"VPPTEST:: Error from SendCommand-Pause State Function\n");
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = WaitForState(pHandle,OMX_StatePause);
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error !=OMX_ErrorNone){
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: Error: hVPP->WaitForState has timed out %X", error);
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Sleeping the component for 2 seconds in Pause\n");
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sleep(2);
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fprintf (stderr,"Error from SendCommand-Executing State function\n");
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = WaitForState(pHandle, OMX_StateExecuting);
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("VPPTEST:: Error:  hVPP->WaitForState has timed out %X", error);
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Component is Executing again\n");
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(bStopExit && !(iCurrentFrameIn%43)){ /*Stopping to get an output file of 40 frames jesa*/
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: Stopping at output YUV frame %d and exiting\n", iCurrentYUVFrameOut);
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if( FD_ISSET(IpBuf_Pipe[0], &rfds) ) {
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if( FD_ISSET(OvlyBuf_Pipe[0], &rfds) ) {
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OvlyBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if( FD_ISSET(OpRGBBuf_Pipe[0], &rfds) ) {
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OpRGBBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if( FD_ISSET(OpYUVBuf_Pipe[0], &rfds) ) {
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OpYUVBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr, "VPPTEST:: Shutting down ---------- \n");
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("Number of Processed Frames: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                iCurrentFrameIn,iCurrentOvlyFrameIn,iCurrentRGBFrameOut,iCurrentYUVFrameOut);
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("Number of frames received: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nInputEmptyBufferDones, nOvlyEmptyBufferDones, nRGBFillBufferDones, nYUVFillBufferDones);
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("Number of sent Buffers: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                iCurrentFrameIn,iCurrentOvlyFrameIn, nFillThisBufferRGB, nFillThisBufferYUV);
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    DEINIT_FLAG = 1;
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if( FD_ISSET(IpBuf_Pipe[0], &rfds) ) {
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    portinput = pBuffer->pInputPortPrivate;
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d ::App: Read from IpBuf_Pipe InBufHeader %p\n",
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                 __LINE__,pBuffer);
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    frmCount++;
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!done) {
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d ::reading INPUT DATA file \n",
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   __LINE__);
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /*If buffer corresponds to Input Port*/
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nRead = fill_data (pBuffer,fIn);
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT(" ::reading INPUT DATA file pBuffer->nAllocLen %d    read=%d\n",
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                  pBuffer->nAllocLen,nRead);
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if((nRead < pBuffer->nAllocLen) && (done == 0)){
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            fprintf(stderr, "VPPTEST:: Shutting down ---------- \n");
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("Number of Processed Frames: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        iCurrentFrameIn,iCurrentOvlyFrameIn,iCurrentRGBFrameOut,iCurrentYUVFrameOut);
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("Number of frames received: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        nInputEmptyBufferDones, nOvlyEmptyBufferDones, nRGBFillBufferDones, nYUVFillBufferDones);
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("Number of sent Buffers: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    iCurrentFrameIn,iCurrentOvlyFrameIn, nFillThisBufferRGB, nFillThisBufferYUV);
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            done = 1;
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            DEINIT_FLAG = 1;
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         }
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        else{
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            ++iCurrentFrameIn;
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBuffer->nFilledLen = nRead;
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponent->EmptyThisBuffer(pHandle,pBuffer);
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("%d :: App: Sent Filled Input Buffer to Comp\n",__LINE__);
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(FD_ISSET(OvlyBuf_Pipe[0],&rfds) ){
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d ::reading OVERLAY DATA file \n",
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                         __LINE__);
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Read and process Overlay Pipe, only if Input Pipe has been processed already*/
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(iCurrentOvlyFrameIn<iCurrentFrameIn){
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OvlyBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fInOvelay = CreateFile(overlaystring, GENERIC_READ, 0,
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  NULL,OPEN_EXISTING, 0, NULL);
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if( fInOvelay == INVALID_HANDLE_VALUE ){
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("Error:  failed to open the file %s for readonly\
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        access\n", fInOvelay);
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        goto EXIT;
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fseek(fInOvelay, 0L, SEEK_SET);
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nRead = fill_data(pBuffer,fInOvelay);
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (nRead < (DEFAULT_WIDTH * DEFAULT_HEIGHT)* 3){
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("VPPTEST:: Error in fread for overlay, not enough data\n");
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        CloseHandle(fInOvelay);
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ++iCurrentOvlyFrameIn;
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBuffer->nFilledLen = nRead;
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponent->EmptyThisBuffer(pHandle,pBuffer);
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: App: Sent Filled Overlay Buffer to Comp\n",__LINE__);
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }/*end if(iCurrentOvlyFrameIn<iCurrentFrameIn)*/
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } /*end if(FD_ISSET(OvlyBuf_Pipe[0],&rfds) */
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(FD_ISSET(OpRGBBuf_Pipe[0], &rfds) ) {
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*Only read and process RGB Output pipe if Input Pipe
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        has been processed first*/
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(iCurrentRGBFrameOut<iCurrentFrameIn){
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OpRGBBuf_Pipe[0], &pBuf, sizeof(pBuf));
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d ::App: Read from OpBuf_Pipe OutBufHeader %p\n", __LINE__,pBuf);
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ++iCurrentRGBFrameOut;
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (pBuf->nAllocLen != pBuf->nFilledLen ) {
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(pBuf->nFilledLen==0) printf("* WARNING: Frame has been lost (pBuf->nFilledLen is 0)\n");
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           APP_DPRINT("%d : WARNING: Different Size, %ld\n",__LINE__, pBuf->nFilledLen);
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        else{
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            WriteFile(fOut, pBuf->pBuffer, pBuf->nFilledLen, &dwWritten, NULL);
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fwrite(pBuf->pBuffer, 1, pBuf->nFilledLen, fOut);
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            /*Send the same number of Output buffers than Input buffers*/
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(nFillThisBufferRGB<iCurrentFrameIn){
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponent->FillThisBuffer(pHandle,pBuf);
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nFillThisBufferRGB++;
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }/*end if((iCurrentRGBFrameOut<iCurrentFrameIn)*/
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } /*end of FD_ISSET(OpRGBBuf_Pipe[0], &rfds)*/
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(FD_ISSET(OpYUVBuf_Pipe[0], &rfds) ) {
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*Read and Process Output YUV Pipe, only if Input Pipe has
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    been read and processed first */
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(iCurrentYUVFrameOut < iCurrentFrameIn){
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        read(OpYUVBuf_Pipe[0], &pBuf, sizeof(pBuf));
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d ::App: Read from OpYUVBuf_Pipe OutBufHeader %p\n", __LINE__,pBuf);
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ++iCurrentYUVFrameOut;
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (pBuf->nAllocLen != pBuf->nFilledLen ) {
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             if(pBuf->nFilledLen==0) printf("* WARNING: Frame has been lost (pBuf->nFilledLen is 0)\n");
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("%d : WARNING: Different Size, %ld\n",__LINE__, pBuf->nFilledLen);
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        else{
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            WriteFile(fOut, pBuf->pBuffer, pBuf->nFilledLen, &dwWritten, NULL);
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fwrite(pBuf->pBuffer, 1, pBuf->nFilledLen, fYuvOut);
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*Send the same number of output buffers than input buffers
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     to the component*/
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(nFillThisBufferYUV<iCurrentFrameIn){
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pComponent->FillThisBuffer(pHandle,pBuf);
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nFillThisBufferYUV++;
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }/*end if(iCurrentYUVFrameOut < iCurrentFrameIn)*/
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: App: %ld bytes are being written\n",__LINE__,(pBuf->nFilledLen/4));
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }/*end if (FD_ISSET(OpYUVBuf_Pipe[0], &rfds)*/
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (DEINIT_FLAG &&
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        ((iCurrentFrameIn == iCurrentRGBFrameOut) ||
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (iCurrentFrameIn == iCurrentYUVFrameOut) ||
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        (bStopExit)
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        )){
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Read full file!!!\n");
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        done = 1;
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        error = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(error != OMX_ErrorNone) {
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            fprintf (stderr,"Error from SendCommand-Idle(Stop) State function\n");
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Waiting for OMX_StateIdle... \n");
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        error = WaitForState(pHandle, OMX_StateIdle);
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(error != OMX_ErrorNone) {
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            APP_DPRINT("Error:  VPP->WaitForState has timed out %X",
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                error);
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }/*end of if DEINIT_FLAG*/
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(done == 1) {
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    error = pComponent->GetState(pHandle, &state);
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(error != OMX_ErrorNone) {
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        fprintf(stderr, "Warning:  VPP->GetState has returned status %X\n", error);
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_GetState(pHandle, &MyState);
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("VPPTESTDEBUG::Exiting While loop, closing all the file handles\n");
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Number of Processed Frames: Input=%d, Overlay=%d, RGB=%d, YUV=%d\n",
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            iCurrentFrameIn,iCurrentOvlyFrameIn,iCurrentRGBFrameOut,iCurrentYUVFrameOut);
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: Component is now in Idle State\n");
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            CloseHandle(fIn);
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB )
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                CloseHandle(fOut);
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ==0 || IsYUVRGB ==2)
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                CloseHandle(fYuvOut);
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fclose(fIn);
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB)
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fclose(fOut);
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (Isoverlay)
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fclose(fInOvelay);
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ==0 || IsYUVRGB ==2)
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fclose(fYuvOut);
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(MyState == OMX_StateInvalid){
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break; /*to exit the Executing-->Idle-->Executing cicle*/
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } /* Executing-->Idle-->Executing*/
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /***************************************************************************************************/
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("Total processing time = %ld\n", nTotalTime);
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_STATETYPE MyState;
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_GetState(pHandle, &MyState);
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(MyState != OMX_StateInvalid){
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT ("%d :: App: State Of Component Is Idle Now\n",__LINE__);
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Sending the StateLoaded Command\n");
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateLoaded, NULL);
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone) {
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf (stderr,"Error from SendCommand-Idle State function\n");
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*Disable the ports before freeing the buffers*/
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_SendCommand(pHandle,OMX_CommandPortDisable, MyVppPortDef.input_port, NULL);
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("VPPTEST:: %d::Error from SendCommand-->PortDisable\n",__LINE__);
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(Isoverlay){
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_SendCommand(pHandle,OMX_CommandPortDisable, MyVppPortDef.overlay_port, NULL);
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone){
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("VPPTEST:: %d::Error from SendCommand-->PortDisable\n",__LINE__);
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB){
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_SendCommand(pHandle,OMX_CommandPortDisable,MyVppPortDef.rgboutput_port, NULL);
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone){
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("VPPTEST:: %d::Error from SendCommand-->PortDisable\n",__LINE__);
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB==0 || IsYUVRGB==2){
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_SendCommand(pHandle,OMX_CommandPortDisable,MyVppPortDef.yuvoutput_port, NULL);
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone){
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("VPPTEST:: %d::Error from SendCommand-->PortDisable\n",__LINE__);
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nTypeofAllocation == 1){
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pInBuffer){
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free (pInBuffer);
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInBuffer = NULL;
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pYUVBuffer){
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pYUVBuffer);
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pYUVBuffer = NULL;
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pRGBBuffer){
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pRGBBuffer);
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pYUVBuffer = NULL;
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(nCounter=0; nCounter<MAX_VPP_BUFFERS_IN_USE; nCounter++){  /* MultiBuffer*/
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_FreeBuffer(pHandle, MyVppPortDef.input_port, InputBufHeader[nCounter]) ;
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone) {
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTEST:: free buffer failed !!\n");
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(Isoverlay){
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_FreeBuffer(pHandle, MyVppPortDef.overlay_port, OvlyBufHeader[nCounter]);
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: OMX_FreeBuffer failed !!\n");
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB)
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_FreeBuffer(pHandle, MyVppPortDef.rgboutput_port, OutRGBBufHeader[nCounter]);
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: OMX_FreeBuffer failed !!\n");
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(IsYUVRGB ==0 || IsYUVRGB ==2){
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_FreeBuffer(pHandle, MyVppPortDef.yuvoutput_port, OutYUVBufHeader[nCounter]);
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(error != OMX_ErrorNone) {
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    printf("VPPTEST:: OMX_FreeBuffer failed !!\n");
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }//end of for loop
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Wait for startup to complete */
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = WaitForState(pHandle, OMX_StateLoaded);
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((error != OMX_ErrorNone) && (error != OMX_ErrorInvalidState)){
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fprintf(stderr, "Error:  VPP->WaitForState reports an error %X\n", error);
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pCompPrivateStruct);   /*Free all m(allocated) resources to avoid memory leaks*/
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf ("VPPTEST:: App: State Of Component Is Loaded Now\n");
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       if(MyState == OMX_StateInvalid){
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break; /*to exit for (count_stop_load ...) */
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }  /*end for(count_stop_load=0; count_stop_load<2; count_stop_load++)*/
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf ("VPPTEST:: Free the Component handle\n");
2010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = TIOMX_FreeHandle(pHandle);
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( (error != OMX_ErrorNone)) {
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf (stderr,"Error in Free Handle function\n");
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fprintf (stderr,"Free Handle returned Successfully \n");
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(bError) {
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LoadBaseImage();
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* De-Initialize OMX Core */
2025b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = TIOMX_Deinit();
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (error != OMX_ErrorNone) {
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Failed to de-init OMX Core!\n");
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pCompPrivateStruct){
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pCompPrivateStruct);
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct = NULL;
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pInBuffer){
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInBuffer -= 128;
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pInBuffer);
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInBuffer = NULL;
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pRGBBuffer){
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pRGBBuffer -= 128;
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pRGBBuffer);
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pRGBBuffer = NULL;
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pYUVBuffer){
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pYUVBuffer -= 128;
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pYUVBuffer);
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pYUVBuffer = NULL;
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBuf, FILE *fIn)
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fill_data (OMX_BUFFERHEADERTYPE *pBuf, HANDLE fIn)
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRead;
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    static int totalRead = 0;
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pTmp = NULL;
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTmp = pBuf->pBuffer;
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     APP_DPRINT(" :: ------------- before File Read -------------- %p\n",pBuf);
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     APP_DPRINT(" :: ------------- before File Read -------------- %d\n",pBuf->nAllocLen);
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     APP_DPRINT(" :: ------------- before File Read -------------- %p\n",pBuf->pBuffer);
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRead = fread(pBuf->pBuffer, 1, pBuf->nAllocLen, fIn);
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ReadFile(fIn, pBuf->pBuffer, pBuf->nAllocLen, &nRead, NULL);
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("\n%d :: ------------- App File Read --------------\n",__LINE__);
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT ("App: Read %d bytes from file\n", nRead);
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT ("App: pBuf->nAllocLen = %ld\n",pBuf->nAllocLen);
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT("%d :: ------------- App File Read --------------\n\n",__LINE__);
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBuf->nFilledLen = nRead;
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    totalRead += nRead;
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return nRead;
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetZoom(OMX_HANDLETYPE pHandle, int speed, int factor, int limit, int xoff, int yoff)
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nZoomSpeed = speed;
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nZoomFactor = factor<<10;
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nZoomLimit = limit<<10;
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nXoff = xoff<<4;
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nYoff=yoff<<4;
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig (pHandle, MyVPPCustomDef.VPPCustomSetZoomFactor, &nZoomFactor);
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr,"Error configuring Zoom Factor\n");
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig (pHandle,MyVPPCustomDef.VPPCustomSetZoomSpeed,&nZoomSpeed);
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr,"Error configuring Zoom Factor\n");
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig (pHandle,MyVPPCustomDef.VPPCustomSetZoomLimit,&nZoomLimit);
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr,"Error configuring Zoom Limit/n");
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig(pHandle,MyVPPCustomDef.VPPCustomSetZoomXoffsetFromCenter16,&nXoff);
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr,"Error Configuring Horizontal Zoom Offset\n.");
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig(pHandle,MyVPPCustomDef.VPPCustomSetZoomYoffsetFromCenter16,&nYoff);
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fprintf(stderr,"Error Configuring Vertical Zoom Offset");
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetContrast(OMX_HANDLETYPE pHandle, int Contrast)
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_CONTRASTTYPE *pConfigNewContrast = malloc(sizeof(OMX_CONFIG_CONTRASTTYPE));
2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewContrast == NULL){
2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorInsufficientResources;
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(pConfigNewContrast,0,sizeof(OMX_CONFIG_CONTRASTTYPE));
2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pConfigNewContrast->nContrast = Contrast;
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonContrast,pConfigNewContrast);
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: VPPTest Error at %d\n",__LINE__);
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorBadParameter;
2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( error != OMX_ErrorNone){
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pConfigNewContrast){
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pConfigNewContrast);
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pConfigNewContrast = NULL;
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_FrostedGlassEffect(OMX_HANDLETYPE pHandle, int IsOverlay)
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(IsOverlay){
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int FrostedGlassEffect=1;
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_SetConfig(pHandle,MyVPPCustomDef.VPPCustomSetFrostedGlassOvly,&FrostedGlassEffect);
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone){
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTEST:: VPPTest Error at %d\n",__LINE__);
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorBadParameter;
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return error;
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Frosted Glass Effect is only upon overlayed images.\n");
2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_ErrorBadParameter;
2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetCrop(OMX_HANDLETYPE pHandle, int XStart, int XSize, int YStart, int YSize)
2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_RECTTYPE *pConfigNewCropWindow = malloc (sizeof(OMX_CONFIG_RECTTYPE));
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewCropWindow == NULL){
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorInsufficientResources;
2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(pConfigNewCropWindow, 0, sizeof(OMX_CONFIG_RECTTYPE));
2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pConfigNewCropWindow->nLeft   = XStart;
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pConfigNewCropWindow->nTop    = YStart;
2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pConfigNewCropWindow->nWidth  = XSize;
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pConfigNewCropWindow->nHeight = YSize;
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error = OMX_SetConfig (pHandle, OMX_IndexConfigCommonInputCrop, pConfigNewCropWindow);
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (error != OMX_ErrorNone) {
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTest Error at %d\n",__LINE__);
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorBadParameter;
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pConfigNewCropWindow);
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewCropWindow = NULL;
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetMirroring(OMX_HANDLETYPE pHandle, int IsRGBOutput)
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_MIRRORTYPE * pConfigNewMirror = NULL;
2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(IsRGBOutput){
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewMirror = malloc(sizeof(OMX_CONFIG_MIRRORTYPE));
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pConfigNewMirror == NULL){
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorInsufficientResources;
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memset(pConfigNewMirror,0,sizeof(OMX_CONFIG_MIRRORTYPE));
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewMirror->nPortIndex = MyVppPortDef.rgboutput_port;
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewMirror->eMirror = OMX_MirrorHorizontal;
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonMirror,pConfigNewMirror);
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone){
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTest Error at %d\n",__LINE__);
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorBadParameter;
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Need to use RGB as Output, Mirror Setting unchanged.\n");
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_ErrorBadParameter;
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewMirror){
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pConfigNewMirror);
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewMirror = NULL;
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetRotationAngle(OMX_HANDLETYPE pHandle, int IsRGBOutput,int Angle)
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_ROTATIONTYPE *pConfigNewRotation = malloc(sizeof(OMX_CONFIG_ROTATIONTYPE));
2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewRotation == NULL){
2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorInsufficientResources;
2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(pConfigNewRotation,0,sizeof(OMX_CONFIG_ROTATIONTYPE));
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(Angle == 0 || Angle == 90 || Angle ==180 || Angle ==270){
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewRotation->nRotation = Angle;
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Not a valid Rotation Angle, Working with Default Rotation Angle\n");
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(IsRGBOutput){
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 0:  /*YUV output only*/
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pConfigNewRotation->nPortIndex = MyVppPortDef.yuvoutput_port;
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonRotate,pConfigNewRotation);
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTest Error at %d\n",__LINE__);
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorBadParameter;
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 1: /*RGB output only*/
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pConfigNewRotation->nPortIndex = MyVppPortDef.rgboutput_port;
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonRotate,pConfigNewRotation);
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTest Error at %d\n",__LINE__);
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorBadParameter;
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case 2: /*Simultaneous outputs*/
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pConfigNewRotation->nPortIndex = MyVppPortDef.rgboutput_port;
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonRotate,pConfigNewRotation);
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTest Error at %d\n",__LINE__);
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorBadParameter;
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pConfigNewRotation->nPortIndex = MyVppPortDef.yuvoutput_port;
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonRotate,pConfigNewRotation);
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(error != OMX_ErrorNone){
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("VPPTest Error at %d\n",__LINE__);
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                error = OMX_ErrorBadParameter;
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewRotation){
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pConfigNewRotation);
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewRotation = NULL;
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetDithering(OMX_HANDLETYPE pHandle, int IsRGBOutput)
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CONFIG_DITHERTYPE * pConfigNewDither = NULL;
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(IsRGBOutput){
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewDither = malloc(sizeof(OMX_CONFIG_DITHERTYPE));
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pConfigNewDither == NULL){
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorInsufficientResources;
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memset(pConfigNewDither,0,sizeof(OMX_CONFIG_DITHERTYPE));
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewDither->nPortIndex = MyVppPortDef.rgboutput_port;
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewDither->eDither = OMX_DitherErrorDiffusion;
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_SetConfig(pHandle,OMX_IndexConfigCommonDithering,pConfigNewDither);
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(error != OMX_ErrorNone){
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("VPPTest Error at %d\n",__LINE__);
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            error = OMX_ErrorBadParameter;
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Need to use RGB as Output, Dithering not possible.\n");
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error=OMX_ErrorBadParameter;
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pConfigNewDither){
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pConfigNewDither);
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pConfigNewDither = NULL;
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE VPP_SetColorRange(OMX_HANDLETYPE pHandle, int nColorRange)
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nColorRange<0 || nColorRange>3){
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTEST:: Not a valid option in Color Range Conversion\n");
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorBadParameter;
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    error=OMX_SetConfig(pHandle, MyVPPCustomDef.VPPCustomSetColorRange, &nColorRange);
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(error != OMX_ErrorNone){
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("VPPTest Error at %d\n",__LINE__);
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        error = OMX_ErrorBadParameter;
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return error;
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return error;
2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL VPP_Test_Check_Frames(int YUVRGB, int inFrames, int OvlyFrames,int outRGBFrames,int outYUVFrames)
2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(YUVRGB==0){
2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(outYUVFrames < (inFrames-1) || outYUVFrames < (OvlyFrames-1))
2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_TRUE;
2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_FALSE;
2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(YUVRGB==1){
2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(outRGBFrames < (inFrames-1) || outRGBFrames < (OvlyFrames-1)){
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           return OMX_TRUE;
2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             return OMX_FALSE;
2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             }
2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else{
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if( (outRGBFrames < (inFrames-1) || outRGBFrames < (OvlyFrames-1)) ||
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                (outYUVFrames < (inFrames-1) || outYUVFrames < (OvlyFrames-1))){
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           return OMX_TRUE;
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else{
2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            return OMX_FALSE;
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint LoadBaseImage() {
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int uProcId = 0;	/* default proc ID is 0. */
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int index = 0;
2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct DSP_PROCESSORINFO dspInfo;
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DSP_HPROCESSOR hProc;
2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    DSP_STATUS status = DSP_SOK;
2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    unsigned int numProcs;
2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char* argv[2];
2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    argv[0] = "/lib/dsp/baseimage.dof";
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    status = (DBAPI)DspManager_Open(0, NULL);
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (DSP_FAILED(status)) {
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("DSPManager_Open failed \n");
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return -1;
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (DSP_SUCCEEDED(DSPManager_EnumProcessorInfo(index,&dspInfo,
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (unsigned int)sizeof(struct DSP_PROCESSORINFO),&numProcs))) {
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((dspInfo.uProcessorType == DSPTYPE_55) ||
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (dspInfo.uProcessorType == DSPTYPE_64)) {
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            uProcId = index;
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            status = DSP_SOK;
2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        index++;
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    status = DSPProcessor_Attach(uProcId, NULL, &hProc);
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (DSP_SUCCEEDED(status)) {
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = DSPProcessor_Stop(hProc);
2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (DSP_SUCCEEDED(status)) {
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            status = DSPProcessor_Load(hProc,1,(const char **)argv,NULL);
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (DSP_SUCCEEDED(status)) {
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                status = DSPProcessor_Start(hProc);
2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (DSP_SUCCEEDED(status)) {
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			else {
2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            DSPProcessor_Detach(hProc);
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fprintf(stderr,"Baseimage Loaded\n");
2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return 0;
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2451