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