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