1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================== 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Texas Instruments OMAP (TM) Platform Software 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Use of this software is controlled by the terms and conditions found 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * in the license agreement under which this software has been supplied. 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * ============================================================================ */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @file OMX_WbAmrDecoder.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This file implements OMX Component for WbAMR decoder that 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * is fully compliant with the OMX Audio specification 1.5. 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @path $(CSLPATH)\ 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @rev 0.1 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------------------------------------------------------- 39b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! 40b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! Revision History 41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! =================================== 42b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! 12-Sept-2005 mf: Initial Version. Change required per OMAPSWxxxxxxxxx 43b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! to provide _________________. 44b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! 45b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * ============================================================================= */ 46b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * INCLUDE FILES 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/ 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h> 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h> 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h> 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h> 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h> 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h> 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h> 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h> 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h> 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <AudioManagerAPI.h> 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <ResourceManagerProxyAPI.h> 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------program files ----------------------------------------*/ 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h> 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <TIDspOmx.h> 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDecoder.h" 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDec_Utils.h" 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define AMRWB_DEC_ROLE "audio_decoder.amrwb" 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * EXTERNAL REFERENCES NOTE : only use if not found in header file 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/ 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * PUBLIC DECLARATIONS Defined here, used elsewhere 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/ 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * PRIVATE DECLARATIONS Defined here, used only here 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/ 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp, 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData); 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp, 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING pComponentName, 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pComponentVersion, 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pSpecVersion, 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_UUIDTYPE* pComponentUUID); 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand, 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam, OMX_PTR pCmdData); 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex, 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentParamStruct); 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp, 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentParamStruct); 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp, 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pComponentConfigStructure); 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp, 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pComponentConfigStructure); 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer); 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer); 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState); 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp, 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp, 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTunneledPort, 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TUNNELSETUPTYPE* pTunnelSetup); 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle); 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent, 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer, 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes); 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer( 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer ( 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes, 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U8* pBuffer); 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex( 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING cParameterName, 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_INDEXTYPE* pIndexType); 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum( 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_U8 *cRole, 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nIndex); 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1" 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2" 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERMS 0666 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data; 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentInit() Set the all the function pointers of component 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update the component function pointer to the handle 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources If the newmalloc fails 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp) 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip, *pPortDef_op; 197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_AMRTYPE *amr_ip; 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PCMMODETYPE *amr_op; 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE error = OMX_ErrorNone; 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp; 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 i; 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Entering\n"); 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set the all component function pointer to the handle */ 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetCallbacks = SetCallbacks; 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetComponentVersion = GetComponentVersion; 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SendCommand = SendCommand; 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetParameter = GetParameter; 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetParameter = SetParameter; 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetConfig = GetConfig; 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetConfig = SetConfig; 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetState = GetState; 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->EmptyThisBuffer = EmptyThisBuffer; 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->FillThisBuffer = FillThisBuffer; 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentTunnelRequest = ComponentTunnelRequest; 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentDeInit = ComponentDeInit; 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->AllocateBuffer = AllocateBuffer; 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->FreeBuffer = FreeBuffer; 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->UseBuffer = UseBuffer; 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetExtensionIndex= GetExtensionIndex; 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentRoleEnum = ComponentRoleEnum; 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Allocate the memory for Component private data area */ 227e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pHandle->pComponentPrivate, WBAMR_DEC_COMPONENT_PRIVATE); 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE *) 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->pHandle = pHandle; 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Initialize component data structures to default values */ 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE *) 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->sPortParam.nPorts = 0x2; 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE *) 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->sPortParam.nStartPortNumber = 0x0; 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 239e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(amr_ip , OMX_AUDIO_PARAM_AMRTYPE); 240e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(amr_op , OMX_AUDIO_PARAM_PCMMODETYPE); 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE *) 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_INPUT_PORT] = amr_ip; 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE *) 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_OUTPUT_PORT] = (OMX_AUDIO_PARAM_AMRTYPE*)amr_op; 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_WBAMRDEC"); 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('W','B','D','_'), 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM | 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleAudioDecode); 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef ANDROID /* currently using default values until more is understood */ 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; /* this should be true always for TI components */ 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE; 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE; 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; /* experiment with this */ 263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; /* experiment with this */ 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE; /* used only for H.264, leave this as false */ 265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_FALSE; /* experiment with this */ 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 268e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pComponentPrivate->pInputBufferList, WBAMR_DEC_BUFFERLIST); 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers = 0; /* initialize number of buffers */ 270e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pComponentPrivate->pOutputBufferList, WBAMR_DEC_BUFFERLIST); 271e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE); 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers = 0; /* initialize number of buffers */ 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) { 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL; 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL; 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrTickCount[i] = 0; 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndex[i] = 0; 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex = 0; 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->OpBufindex = 0; 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Setting dasfmode and mimemode to 0\n"); 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfmode = 0; 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->mimemode = 0; 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 0; 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHoldBuffer = NULL; 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[0] = WBAMR_DEC_FRAME_SIZE_18; 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[1] = WBAMR_DEC_FRAME_SIZE_24; 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[2] = WBAMR_DEC_FRAME_SIZE_33; 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[3] = WBAMR_DEC_FRAME_SIZE_37; 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[4] = WBAMR_DEC_FRAME_SIZE_41; 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[5] = WBAMR_DEC_FRAME_SIZE_47; 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[6] = WBAMR_DEC_FRAME_SIZE_51; 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[7] = WBAMR_DEC_FRAME_SIZE_59; 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[8] = WBAMR_DEC_FRAME_SIZE_61; 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[9] = WBAMR_DEC_FRAME_SIZE_6; 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[10] = WBAMR_DEC_FRAME_SIZE_0; 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[11] = WBAMR_DEC_FRAME_SIZE_0; 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[12] = WBAMR_DEC_FRAME_SIZE_0; 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[13] = WBAMR_DEC_FRAME_SIZE_0; 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[14] = WBAMR_DEC_FRAME_SIZE_1; 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrMimeBytes[15] = WBAMR_DEC_FRAME_SIZE_1; 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[0] = WBAMR_DEC_FRAME_SIZE_18; 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[1] = WBAMR_DEC_FRAME_SIZE_23; 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[2] = WBAMR_DEC_FRAME_SIZE_33; 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[3] = WBAMR_DEC_FRAME_SIZE_37; 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[4] = WBAMR_DEC_FRAME_SIZE_41; 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[5] = WBAMR_DEC_FRAME_SIZE_47; 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[6] = WBAMR_DEC_FRAME_SIZE_51; 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[7] = WBAMR_DEC_FRAME_SIZE_59; 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[8] = WBAMR_DEC_FRAME_SIZE_61; 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[9] = WBAMR_DEC_FRAME_SIZE_6; 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[10] = WBAMR_DEC_FRAME_SIZE_0; 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[11] = WBAMR_DEC_FRAME_SIZE_0; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[12] = WBAMR_DEC_FRAME_SIZE_0; 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[13] = WBAMR_DEC_FRAME_SIZE_0; 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[14] = WBAMR_DEC_FRAME_SIZE_1; 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrIf2Bytes[15] = WBAMR_DEC_FRAME_SIZE_1; 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkBuf = NULL; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkData = NULL; 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount = 0; 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyThisBufferCount = 0; 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount = 0; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nFillThisBufferCount = 0; 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->strmAttr = NULL; 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* pComponentPrivate->bIdleCommandPending = 0; */ 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = 0; 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 0; 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->PendingPausedBufs = 0; 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) { 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones = 0; 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bStopSent=0; 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_FALSE; 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams = NULL; /* Without this initialization repetition cases failed. */ 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->LastOutbuf=NULL; 348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->using_rtsp = 0; 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->componentRole.cRole, AMRWB_DEC_ROLE); 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set input port format defaults */ 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInPortFormat.nPortIndex = WBAMR_DEC_INPUT_PORT; 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInPortFormat.nIndex = OMX_IndexParamAudioAmr; 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInPortFormat.eEncoding = OMX_AUDIO_CodingAMR; 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set output port format defaults */ 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutPortFormat.nPortIndex = WBAMR_DEC_OUTPUT_PORT; 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutPortFormat.nIndex = OMX_IndexParamAudioPcm; 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sOutPortFormat.eEncoding = OMX_AUDIO_CodingPCM; 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPreempted = OMX_FALSE; 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nPortIndex = OMX_DirInput; 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nChannels = 1; 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nBitRate = 8000; 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->eAMRBandMode = OMX_AUDIO_AMRBandModeWB0; 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->eAMRDTXMode = OMX_AUDIO_AMRDTXModeOff; 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatConformance; 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nSize = sizeof (OMX_AUDIO_PARAM_AMRTYPE); 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* PCM format defaults - These values are required to pass StdAudioDecoderTest*/ 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nPortIndex = OMX_DirOutput; 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nChannels = 1; 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->eNumData= OMX_NumericalDataSigned; 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nSamplingRate = 16000; 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nBitPerSample = 16; 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->ePCMMode = OMX_AUDIO_PCMModeLinear; 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 382e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString, (100*sizeof(char)),OMX_STRING); 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex = 0; 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->OpBufindex = 0; 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ptrLibLCML = NULL; 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,"/eteedn:i0:o0/codec\0"); 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL); 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL); 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->codecStop_mutex, NULL); 394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->codecStop_threshold, NULL); 395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL); 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL); 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL); 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL); 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->AlloBuf_event)); 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->InLoaded_event)); 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->InIdle_event)); 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 414e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE); 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 416e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE); 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "[ALLOC] %p\n",pPortDef_op); 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pPortDef_ip = %p\n",pPortDef_ip); 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pPortDef_op = %p\n",pPortDef_op); 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[WBAMR_DEC_INPUT_PORT] 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin = pPortDef_ip; 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((WBAMR_DEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[WBAMR_DEC_OUTPUT_PORT] 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin = pPortDef_op; 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nPortIndex = 0x0; 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nBufferCountActual = NUM_WBAMRDEC_INPUT_BUFFERS; 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nBufferCountMin = NUM_WBAMRDEC_INPUT_BUFFERS; 431b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pPortDef_ip->nBufferAlignment = DSP_CACHE_ALIGNMENT; 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->eDir = OMX_DirInput; 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->bEnabled = OMX_TRUE; 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Use bigger IN buffer size for PV-Android */ 435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->nBufferSize = IP_WBAMRDEC_BUFFERSIZE; 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->bPopulated = 0; 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->format.audio.eEncoding = OMX_AUDIO_CodingAMR; 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nPortIndex = 0x1; 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferCountActual = NUM_WBAMRDEC_OUTPUT_BUFFERS; 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferCountMin = NUM_WBAMRDEC_OUTPUT_BUFFERS; 443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pPortDef_op->nBufferAlignment = DSP_CACHE_ALIGNMENT; 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->eDir = OMX_DirOutput; 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->bEnabled = OMX_TRUE; 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferSize = OUTPUT_WBAMRDEC_BUFFER_SIZE; 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->bPopulated = 0; 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->format.audio.eEncoding = OMX_AUDIO_CodingPCM; 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsInvalidState = OMX_FALSE; 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin error = RMProxy_NewInitalize(); 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (error != OMX_ErrorNone) { 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error returned from loading ResourceManagerProxy thread\n"); 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin error = WBAMR_DEC_StartComponentThread(pHandle); 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (error != OMX_ErrorNone) { 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error returned from the Component\n"); 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n"); 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n"); 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->fdwrite=open(FIFO1,O_WRONLY))<0) { 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR Dec Component] - failure to open WRITE pipe\n"); 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n"); 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->fdread=open(FIFO2,O_RDONLY))<0) { 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR Dec Component] - failure to open READ pipe\n"); 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(pComponentPrivate->pPERF, pComponentPrivate->WBAMR_DEC_ComponentThread, 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURCC('W','B','D','T')); 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate != NULL) { 486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "Exiting - returning %d\n", error); 487b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return error; 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetCallbacks() Sets application callbacks to the component 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * to the component. So that component can make use of those call back 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * while sending buffers to the application. And also it will copy the 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * application private data to component memory 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppData Application private data 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent, 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CALLBACKTYPE* pCallBacks, 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pAppData) 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent; 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCallBacks == NULL) { 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n"); 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Received the empty callbacks from the \ 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin application\n"); 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Copy the callbacks of the application to the component private */ 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE)); 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*copy the application private data to component memory */ 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate = pAppData; 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup); 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetComponentVersion() This will return the component version 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will retrun the component version 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentName Name of the component 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentVersion handle for this instance of the component 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pSpecVersion application callbacks 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentUUID 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp, 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING pComponentName, 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pComponentVersion, 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pSpecVersion, 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_UUIDTYPE* pComponentUUID) 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNotImplemented; 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Inside the GetComponentVersion\n"); 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SendCommand() used to send the commands to the component 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will be used by the application. 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param phandle handle for this instance of the component 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param Cmd Command to be sent to the component 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam indicates commmad is sent using this method 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle, 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE Cmd, 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam,OMX_PTR pCmdData) 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle; 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pCompPrivate = 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pCompPrivate->dbg, "phandle = %p\n",phandle); 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pCompPrivate->dbg, "pCompPrivate = %p\n",pCompPrivate); 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->pHandle = phandle; 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCompPrivate->curState == OMX_StateInvalid){ 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompPrivate->curState == OMX_StateInvalid){ 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "Error NotIfication \ 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Sent to App\n"); 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler (pHandle, 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid State"); 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pCompPrivate->pPERF, Cmd, 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (Cmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam, 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleComponent); 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(Cmd) { 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandStateSet: 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE1(pCompPrivate->dbg, "pCompPrivate->curState = %d\n",pCompPrivate->curState); 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam == OMX_StateLoaded) { 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->bLoadedCommandPending = OMX_TRUE; 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompPrivate->curState == OMX_StateLoaded) { 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) { 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nParam == OMX_StateInvalid) { 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->curState = OMX_StateInvalid; 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandFlush: 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nParam > 1 && nParam != -1) { 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandPortDisable: 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandPortEnable: 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandMarkBuffer: 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam > 0) { 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR2(pCompPrivate->dbg, "Command Received Default \ 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin error\n"); 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler (pHandle, 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUndefined, 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid Command"); 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (Cmd == OMX_CommandMarkBuffer) { 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData, 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PTR)); 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pCompPrivate->cmdDataPipe[1], &nParam, 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_U32)); 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pCompPrivate->dbg, "nRet = %d\n",nRet); 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n"); 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(Cmd == OMX_CommandStateSet && nParam == OMX_StateExecuting) { 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable Tee device command*/ 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.hComponent = pHandle; 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandTDNDownlinkMode; 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param1 = 0; 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param2 = 0; 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.streamID = 0; 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((write(pCompPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) { 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetParameter() Gets the current configurations of the component 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentParameterStructure 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp, 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentParameterStructure) 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure; 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate); 76800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1 (pComponentPrivate->dbg, "Entering with index:: %x\n",nParamIndex); 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure; 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pParameterStructure == NULL) { 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "pParameterStructure = %p\n",pParameterStructure); 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->curState == OMX_StateInvalid) { 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hComp, 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_COMPONENTTYPE *)hComp)->pApplicationPrivate, 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateOperation, 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(nParamIndex){ 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioInit: 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "OMX_IndexParamAudioInit\n"); 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, &pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE)); 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPortDefinition: 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "pParameterStructure->nPortIndex = %ld\n",pParameterStructure->nPortIndex); 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex = %ld\n",pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex); 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) { 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT], 810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PARAM_PORTDEFINITIONTYPE) 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ); 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) { 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT], 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PARAM_PORTDEFINITIONTYPE) 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ); 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPortFormat: 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "nPortIndex = %ld\n",((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex); 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->sInPortFormat.nPortIndex= %ld\n",pComponentPrivate->sInPortFormat.nPortIndex); 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->sOutPortFormat.nPortIndex= %ld\n",pComponentPrivate->sOutPortFormat.nPortIndex); 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) { 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->sInPortFormat.nPortIndex) { 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, &pComponentPrivate->sInPortFormat, 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex){ 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > pComponentPrivate->sOutPortFormat.nPortIndex) { 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, &pComponentPrivate->sOutPortFormat, 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioAmr: 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) { 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside the GetParameter\n"); 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure,pComponentPrivate->wbamrParams[WBAMR_DEC_INPUT_PORT], 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) { 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside the GetParameter\n"); 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT], 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPcm: 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->nPortIndex == WBAMR_DEC_OUTPUT_PORT){ 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT], sizeof(OMX_AUDIO_PARAM_PCMMODETYPE)); 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPriorityMgmt: 887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->pPriorityMgmt == NULL) { 888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorBadPortIndex; 889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE)); 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamCompBufferSupplier: 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) { 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "OMX_IndexParamCompBufferSupplier \n"); 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */ 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) { 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_IndexParamCompBufferSupplier \n"); 901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */ 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR2(pComponentPrivate->dbg, "OMX_ErrorBadPortIndex from GetParameter"); 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamVideoInit: 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamImageInit: 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamOtherInit: 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX: 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Entering PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n"); 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PV_OMXComponentCapabilityFlagsType* pCap_flags = (PV_OMXComponentCapabilityFlagsType *) ComponentParameterStructure; 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (NULL == pCap_flags) 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "ERROR PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n"); 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Copying PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n"); 928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pCap_flags, &(pComponentPrivate->iPVCapabilityFlags), sizeof(PV_OMXComponentCapabilityFlagsType)); 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedIndex; 935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting - %x\n",nParamIndex); 939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetParameter() Sets configuration paramets to the component 945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompParam 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp, 956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pCompParam) 958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL temp_bEnabled,temp_bPopulated; 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_COMPONENTROLETYPE *pRole; 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PCMMODETYPE *amr_op; 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier; 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp; 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate); 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCompParam == NULL) { 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(nParamIndex) { 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPortFormat: 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pComponentParam = 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam; 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentParam->nPortIndex = %ld\n",pComponentParam->nPortIndex); 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentParam->nBufferCountActual= %ld\n",pComponentParam->nBufferCountActual); 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentParam->nBufferSize= %ld\n",pComponentParam->nBufferSize); 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 0 means Input port */ 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentParam->nPortIndex == 0) { 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(&pComponentPrivate->sInPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (pComponentParam->nPortIndex == 1) { 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 1 means Output port */ 998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(&pComponentPrivate->sOutPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else { 1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Wrong Port Index Parameter\n"); 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n"); 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioAmr: 1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_AMRTYPE *pCompAmrParam = 1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_AUDIO_PARAM_AMRTYPE *)pCompParam; 1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_AUDIO_AMRFrameFormatConformance == pCompAmrParam->eAMRFrameFormat) 1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->mimemode = 0; 1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (OMX_AUDIO_AMRFrameFormatIF2 == pCompAmrParam->eAMRFrameFormat) 1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->mimemode = 2; 1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (OMX_AUDIO_AMRFrameFormatRTPPayload == pCompAmrParam->eAMRFrameFormat){ 1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->mimemode = 1; 1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->using_rtsp = 1; 1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->mimemode = 1; /*MIME Format*/ 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 0 means Input port */ 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompAmrParam->nPortIndex == 0) { 1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(((WBAMR_DEC_COMPONENT_PRIVATE*) 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_INPUT_PORT], 1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (pCompAmrParam->nPortIndex == 1) { 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 1 means Output port */ 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(((WBAMR_DEC_COMPONENT_PRIVATE *) 1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_OUTPUT_PORT], 1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPortDefinition: 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) { 1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temp_bEnabled = pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled; 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temp_bPopulated = pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated; 1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT], 1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompParam, 1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PARAM_PORTDEFINITIONTYPE) 1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ); 1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled = temp_bEnabled; 1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated = temp_bPopulated; 1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) { 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temp_bEnabled = pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled; 1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temp_bPopulated = pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated; 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT], 1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompParam, 1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PARAM_PORTDEFINITIONTYPE) 1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ); 1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = temp_bEnabled; 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated = temp_bPopulated; 1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPriorityMgmt: 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateLoaded) { 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->pPriorityMgmt == NULL) { 1075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorBadParameter; 1076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 1077b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->pPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE)); 1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamStandardComponentRole: 1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCompParam) { 1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam; 1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); 1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPcm: 1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompParam){ 1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam; 1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT], amr_op, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE)); 1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamCompBufferSupplier: 1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) { 1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n"); 1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput; 1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); 1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) { 1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n"); 1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput; 1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); 1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR2(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from SetParameter"); 1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetConfig() Gets the current configuration of to the component 1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex 1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure 1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp, 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentConfigStructure) 1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp; 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TI_OMX_STREAM_INFO *streamInfo; 1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1150e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(streamInfo, TI_OMX_STREAM_INFO); 1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nConfigIndex == OMX_IndexCustomWbAmrDecStreamIDConfig){ 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin streamInfo->streamId = pComponentPrivate->streamID; 1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO)); 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(nConfigIndex == OMX_IndexCustomDebug){ 1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure); 1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1165eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong EXIT: 1166b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(streamInfo); 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting GetConfig. Returning = 0x%x\n",eError); 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetConfig() Sets the configraiton to the component 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp, 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentConfigStructure) 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp; 1189b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 *customFlag = NULL; 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TI_OMX_DSP_DEFINITION *configData; 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TI_OMX_DATAPATH dataPath; 1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_CONFIG_MUTETYPE *pMuteStructure = NULL; 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_CONFIG_VOLUMETYPE *pVolumeStructure = NULL; 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering SetConfig\n"); 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pHandle == NULL) { 1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Invalid HANDLE OMX_ErrorBadParameter \n"); 1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1204b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (nConfigIndex) { 1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomWbAmrDecHeaderInfoConfig: 1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomWbAmrDecHeaderInfoConfig \n"); 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin configData = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure; 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (configData == NULL) { 1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n"); 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->acdnmode = configData->acousticMode; 1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfmode = configData->dasfMode; 1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( 2 == pComponentPrivate->dasfmode ){ 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfmode--; 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->dasfmode ){ 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = 0; 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->streamID = configData->streamId; 1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomWbAmrDecDataPath: 1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin customFlag = (OMX_S16*)ComponentConfigStructure; 1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (customFlag == NULL) { 1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(dataPath) { 1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_APPLICATION: 1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_DECODER, pComponentPrivate->streamID); 1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_APPLICATION_RTMIXER: 1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING); 1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_ACDN: 1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING); 1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomModeDasfConfig_WBAMRDEC: 1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomModeDasfConfig \n"); 1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin customFlag = (OMX_S16*)ComponentConfigStructure; 1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (customFlag == NULL) { 1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n"); 1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfmode = *customFlag; 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( 2 == pComponentPrivate->dasfmode ){ 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfmode--; 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->dasfmode){ 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = 0; 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomModeMimeConfig_WBAMRDEC: 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomModeMimeConfig \n"); 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin customFlag = (OMX_S16*)ComponentConfigStructure; 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (customFlag == NULL) 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n"); 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->mimemode = *customFlag; 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomWbAmrDecNextFrameLost: 1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFrameLost=OMX_TRUE; 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexConfigAudioMute: 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pMuteStructure = (OMX_AUDIO_CONFIG_MUTETYPE *)ComponentConfigStructure; 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Set Mute/Unmute for playback stream\n"); 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.hComponent = hComp; 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pMuteStructure->bMute == OMX_TRUE) 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Mute the playback stream\n"); 1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandStreamMute; 1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "unMute the playback stream\n"); 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandStreamUnMute; 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param1 = 0; 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param2 = 0; 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.streamID = pComponentPrivate->streamID; 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) 1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR decoder] - fail to send Mute command to audio manager\n"); 1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexConfigAudioVolume: 1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pVolumeStructure = (OMX_AUDIO_CONFIG_VOLUMETYPE *)ComponentConfigStructure; 1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Set volume for playback stream\n"); 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.hComponent = hComp; 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandSWGain; 1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param1 = pVolumeStructure->sVolume.nValue; 1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param2 = 0; 1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.streamID = pComponentPrivate->streamID; 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR decoder] - fail to send Volume command to audio manager\n"); 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomDebug: 1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure); 1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedIndex; 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting SetConfig\n"); 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Returning = 0x%x\n",eError); 1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetState() Gets the current state of the component 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompomponent handle for this instance of the component 1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pState 1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState) 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE error = OMX_ErrorUndefined; 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pState) { 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin error = OMX_ErrorBadParameter; 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 4, 0, "About to return OMX_ErrorBadParameter on line\n"); 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pHandle && pHandle->pComponentPrivate) { 1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pState = ((WBAMR_DEC_COMPONENT_PRIVATE*) 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->curState; 1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pState = OMX_StateLoaded; 1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin error = OMX_ErrorNone; 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return error; 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * EmptyThisBuffer() This callback is used to send the input buffer to 1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * component 1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex input port index 1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer buffer to be sent to codec 1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent, 1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffer) 1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret; 1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*) 1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate)->pPortDef[WBAMR_DEC_INPUT_PORT]; 1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERF, 1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pBuffer, 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->nFilledLen, 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pPortDef->bEnabled) { 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == NULL) { 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n"); 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) { 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) { 1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorVersionMismatch; 1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nInputPortIndex != WBAMR_DEC_INPUT_PORT) { 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) { 1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "\n------------------------------------------\n\n"); 1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Component Sending Filled ip buff %p \ 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin to Component Thread\n",pBuffer); 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "\n------------------------------------------\n\n"); 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf--; 1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkData = pBuffer->pMarkData; 1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent; 1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledEmptyThisBuffers++; 1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = write (pComponentPrivate->dataPipe[1], &pBuffer, 1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_BUFFERHEADERTYPE*)); 1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error in Writing to the Data pipe\n"); 1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyThisBufferCount++; 1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * FillThisBuffer() This callback is used to send the output buffer to 1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the component 1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex output port number 1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer buffer to be sent to codec 1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent, 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffer) 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*) 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate)->pPortDef[WBAMR_DEC_OUTPUT_PORT]; 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERF, 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pBuffer, 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pPortDef->bEnabled) { 1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == NULL) { 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n"); 1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) { 1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) { 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorVersionMismatch; 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer->nOutputPortIndex != WBAMR_DEC_OUTPUT_PORT) { 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) { 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf--; 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Decrementing app_nBuf = %ld\n",pComponentPrivate->app_nBuf); 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkBuf = %p\n",pComponentPrivate->pMarkBuf); 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkData = %p\n",pComponentPrivate->pMarkData); 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pMarkBuf){ 1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent; 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData; 1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkBuf = NULL; 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pMarkData) { 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent; 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pMarkData = pComponentPrivate->pMarkData; 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkData = NULL; 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n"); 1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "Component Sending Emptied op buff %p \ 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin to Component Thread\n",pBuffer); 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n"); 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledFillThisBuffers++; 1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->dataPipe[1], &pBuffer, 1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof (OMX_BUFFERHEADERTYPE*)); 1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nFillThisBufferCount++; 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentDeinit() this methold will de init the component 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle) 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* inform audio manager to remove the streamID*/ 1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* compose the data */ 1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle; 1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate; 1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct OMX_TI_Debug dbg; 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dbg = pComponentPrivate->dbg; 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(dbg, "ComponentDeInit\n"); 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin close(pComponentPrivate->fdwrite); 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin close(pComponentPrivate->fdread); 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*RM*/ 1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_WBAMR_Decoder_COMPONENT, 0, 3456, NULL); 1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(dbg, "Error returned from destroy ResourceManagerProxy thread\n"); 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_Deinitalize(); 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(dbg, "Error from RMProxy_Deinitalize\n"); 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*RM END*/ 1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(dbg, "ComponentDeInit\n"); 1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 1; 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_StopComponentThread(pHandle); 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Wait for thread to exit so we can get the status into "error" */ 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList); 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList); 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* close the pipe handles */ 1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_FreeCompResources(pHandle); 1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundaryCleanup); 1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(pComponentPrivate->pPERF); 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->sDeviceString); 1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(dbg, "After WBAMR_DEC_FreeCompResources\n"); 1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1661e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate); 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_CLOSE(dbg); 1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * ComponentTunnelRequest() this method is not implemented in 1.5 1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application. 1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp, 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp, 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTunneledPort, 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TUNNELSETUPTYPE* pTunnelSetup) 1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Inside the ComponentTunnelRequest\n"); 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNotImplemented; 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * AllocateBuffer() 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent, 1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer, 1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes) 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufferHeader; 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*) 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate)->pPortDef[nPortIndex]; 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef = %p\n",pPortDef); 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef->bEnabled = %d\n",pPortDef->bEnabled); 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pPortDef->bEnabled = %d\n", pPortDef->bEnabled); 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (!pPortDef->bEnabled) { 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 1; 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex); 1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event)); 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1744e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE); 1745b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pBufferHeader->pBuffer, nSizeBytes,OMX_U8); 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nPortIndex == WBAMR_DEC_INPUT_PORT) { 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = nPortIndex; 1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nOutputPortIndex = -1; 1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader; 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0; 1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pInputBufferList->numBuffers,pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers]); 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1; 1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Allocate WBAMR_DEC_Buffer Line\n"); 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers); 1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pPortDef->nBufferCountMin = %ld\n",pPortDef->nBufferCountMin); 1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) { 1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Setting pPortDef->bPopulated = OMX_TRUE for input port\n"); 1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nPortIndex == WBAMR_DEC_OUTPUT_PORT) { 1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = -1; 1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nOutputPortIndex = nPortIndex; 1765e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pBufferHeader->pOutputPortPrivate, WBAMRDEC_BUFDATA); 1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader; 1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0; 1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pOutputBufferList->numBuffers,pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers]); 1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1; 1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) { 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Setting pPortDef->bPopulated = OMX_TRUE for input port\n"); 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled)&& 1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) && 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle)) 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InLoaded_threshold); 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); 1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pAppPrivate = pAppPrivate; 1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pPlatformPrivate = pComponentPrivate; 1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nAllocLen = nSizeBytes; 1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion; 1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE); 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pBuffer = pBufferHeader; 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) { 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SendCommand (pComponentPrivate->pHandle, 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam,NULL); 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedBuffer(pComponentPrivate->pPERF, 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*pBuffer)->pBuffer, nSizeBytes, 1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory); 1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "AllocateBuffer returning %d\n",eError); 1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn FreeBuffer() description for FreeBuffer 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeBuffer(). 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Called by the OMX IL client to newfree a buffer. 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @see OMX_Core.h 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(OMX_IN OMX_HANDLETYPE hComponent, 1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE * pComponentPrivate = NULL; 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* buff; 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int inputIndex = -1; 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int outputIndex = -1; 1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle; 1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) { 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin buff = pComponentPrivate->pInputBufferList->pBufHdr[i]; 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (buff == pBuffer) { 1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching input buffer\n"); 1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff); 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer); 1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inputIndex = i; 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n"); 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff); 1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer); 1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) { 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin buff = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (buff == pBuffer) { 1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching output buffer\n"); 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff); 1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer); 1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin outputIndex = i; 1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n"); 1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff); 1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer); 1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (inputIndex != -1) { 1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERF, 1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer, 1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->nAllocLen, 1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory); 1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) { 1885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer, OMX_U8); 1886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1887e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]); 1888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pInputBufferList->numBuffers--; 1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers < 1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nBufferCountMin) { 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated = OMX_FALSE; 1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled && 1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending == OMX_FALSE && 1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->curState == OMX_StateIdle || 1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState == OMX_StateExecuting || 1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState == OMX_StatePause)) { 1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorPortUnpopulated,OMX_TI_ErrorMinor, "Input Port Unpopulated"); 1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (outputIndex != -1) { 1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERF, 1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer, 1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->nAllocLen, 1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory); 1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) { 1912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer, OMX_U8); 1913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1914e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pOutputPortPrivate); 1915e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]); 1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers--; 1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers < 1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nBufferCountMin) { 1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated = OMX_FALSE; 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled && 1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending == OMX_FALSE && 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->curState == OMX_StateIdle || 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState == OMX_StateExecuting || 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState == OMX_StatePause)) { 1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorPortUnpopulated,OMX_TI_ErrorMinor, "Output Port Unpopulated"); 1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Returning OMX_ErrorBadParameter\n"); 1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((!pComponentPrivate->pInputBufferList->numBuffers && 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pOutputBufferList->numBuffers) && 1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded) 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InIdle_threshold); 1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InIdle_event)); 1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bDisableCommandPending && (pComponentPrivate->pInputBufferList->numBuffers + pComponentPrivate->pOutputBufferList->numBuffers == 0)) { 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,pComponentPrivate->bDisableCommandParam,NULL); 1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting FreeBuffer\n"); 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn UseBuffer() description for UseBuffer 1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin UseBuffer(). 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Called by the OMX IL client to pass a buffer to be used. 1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @see OMX_Core.h 1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (OMX_IN OMX_HANDLETYPE hComponent, 1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes, 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U8* pBuffer) 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufferHeader; 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*) 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate)->pPortDef[nPortIndex]; 1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef->bPopulated = %d\n",pPortDef->bPopulated); 1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pPortDef->bEnabled) { 1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "In UseBuffer\n"); 1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*if(nSizeBytes != pPortDef->nBufferSize || pPortDef->bPopulated) { 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "In UseBuffer\n"); 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }*/ 2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2004e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE); 2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nPortIndex == WBAMR_DEC_OUTPUT_PORT) { 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = -1; 2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nOutputPortIndex = nPortIndex; 2008e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pBufferHeader->pOutputPortPrivate, WBAMRDEC_BUFDATA); 2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader; 2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0; 2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0; 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) { 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = nPortIndex; 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nOutputPortIndex = -1; 2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader; 2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0; 2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0; 2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) { 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled)&& 2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) && 2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle)) 2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InLoaded_threshold); 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pAppPrivate = pAppPrivate; 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pPlatformPrivate = pComponentPrivate; 2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nAllocLen = nSizeBytes; 2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion; 2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pBuffer = pBuffer; 2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppBufferHdr = pBufferHeader; 2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pBufferHeader = %p\n",pBufferHeader); 2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedBuffer(pComponentPrivate->pPERF, 2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, nSizeBytes, 2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetExtensionIndex() description for GetExtensionIndex 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin GetExtensionIndex(). 2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Returns index for vendor specific settings. 2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @see OMX_Core.h 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING cParameterName, 2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_INDEXTYPE* pIndexType) 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamrheaderinfo"))) { 2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pIndexType = OMX_IndexCustomWbAmrDecHeaderInfoConfig; 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamrstreamIDinfo"))) { 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pIndexType = OMX_IndexCustomWbAmrDecStreamIDConfig; 2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamr.datapath"))) 2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pIndexType = OMX_IndexCustomWbAmrDecDataPath; 2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamr.framelost"))) 2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pIndexType = OMX_IndexCustomWbAmrDecNextFrameLost; 2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.WBAMR.Decode.Debug"))) 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pIndexType = OMX_IndexCustomDebug; 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn ComponentRoleEnum() description for ComponentRoleEnum() 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Returns the role at the given index 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @see OMX_Core.h 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(OMX_IN OMX_HANDLETYPE hComponent, 2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_U8 *cRole, 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nIndex) 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nIndex == 0){ 2117b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (cRole == NULL) { 2118b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorBadParameter; 2119b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2120b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 2121b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE); 2122b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "In ComponenetRoleEnum: cRole is set to %s\n",cRole); 2123b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef WBAMRDEC_DEBUGMEM 2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid * mymalloc(int line, char *s, int size) 2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *p; 2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int e=0; 2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = malloc(size); 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(p==NULL){ 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 4, 0, "Memory not available\n"); 2139b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* exit(1); */ 2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while((lines[e]!=0)&& (e<500) ){ 2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin e++; 2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[e]=p; 2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lines[e]=line; 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bytes[e]=size; 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(file[e],s); 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Allocating %d bytes on address %p, line %d file %s\n", size, p, line, s); 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2151c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong return p; 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint myfree(void *dp, int line, char *s){ 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int q; 2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dp==NULL){ 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 4, 0, "Null Memory can not be deleted line: %d file: %s\n", line, s); 2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return 0; 2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(q=0;q<500;q++){ 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(arr[q]==dp){ 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Deleting %d bytes on address %p, line %d file %s\n", bytes[q],dp, line, s); 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(dp); 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dp = NULL; 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lines[q]=0; 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(file[q],""); 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(500==q) 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n\nPointer not found. Line:%d File%s!!\n\n",line, s); 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2175