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