OMX_AmrEncoder.c revision 1b969242aa51f71fb39a9855b1ba20f6b7c0f3a9
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_AmrEncoder.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OpenMAX (TM) 1.0 Specific APIs and its functionality 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* that is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\nbamr_enc\src 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 1.0 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------------------------------------------------------- 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! =================================== 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 21-sept-2006 bk: updated review findings for alpha release 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 21-Jun-2006 bk: Khronos OpenMAX (TM) 1.0 migration done 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 22-May-2006 bk: DASF recording quality improved 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 19-Apr-2006 bk: DASF recording speed issue resloved 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 23-Feb-2006 bk: DASF functionality added 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 18-Jan-2006 bk: Repated recording issue fixed and LCML changes taken care 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 14-Dec-2005 bk: Initial Version 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 16-Nov-2005 bk: Initial Version 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 23-Sept-2005 bk: Initial Version 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 10-Sept-2005 bk: Initial Version 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 10-Sept-2005 bk: 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! This is newest file 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */ 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* INCLUDE FILES 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h> 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h> 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h> 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h> 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h> 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h> 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h> 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h> 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h> 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h> 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin #include <AudioManagerAPI.h> 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin #include <ResourceManagerProxyAPI.h> 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include "perf.h" 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------program files ----------------------------------------*/ 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h> 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_AmrEnc_Utils.h" 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* EXTERNAL REFERENCES NOTE : only use if not found in header file 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* PUBLIC DECLARATIONS Defined here, used elsewhere 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* PRIVATE DECLARATIONS Defined here, used only here 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/ 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/ 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define AMRNB_DEC_ROLE "audio_encoder.amrnb" 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef NBAMRENC_DEBUGMEM 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void * mymalloc(int line, char *s, int size); 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern int myfree(void *dp, int line, char *s); 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) mymalloc(__LINE__,__FILE__,x) 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) myfree(z,__LINE__,__FILE__) 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) malloc(x) 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) free(z) 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp, 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData); 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp, 136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STRING pComponentName, 137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_VERSIONTYPE* pComponentVersion, 138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_VERSIONTYPE* pSpecVersion, 139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_UUIDTYPE* pComponentUUID); 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand, 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam,OMX_PTR pCmdData); 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex, 143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PTR ComponentParamStruct); 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp, 145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PTR ComponentParamStruct); 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp, 148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PTR pComponentConfigStructure); 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp, 151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PTR pComponentConfigStructure); 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer); 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer); 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState); 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp, 159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp, 160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nTunneledPort, 161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TUNNELSETUPTYPE* pTunnelSetup); 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle); 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent, 164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer, 165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes); 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer( 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer ( 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes, 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U8* pBuffer); 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex( 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING cParameterName, 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_INDEXTYPE* pIndexType); 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum( 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_OUT OMX_U8 *cRole, 190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nIndex); 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data; 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* interface with audio manager*/ 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1" 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2" 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERMS 0666 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentInit() Set the all the function pointers of component 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update the component function pointer to the handle 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources If the newmalloc fails 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp) 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip, *pPortDef_op; 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PCMMODETYPE *amr_ip; 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_AMRTYPE *amr_op; 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp; 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_PORT_TYPE *pCompPort = NULL; 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PORTFORMATTYPE *pPortFormat = NULL; 225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int i = 0; 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 22700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMXDBG_PRINT(stderr, PRINT, 1, 0, "Entering OMX_ComponentInit\n"); 22800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong 229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Set the all component function pointer to the handle */ 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetCallbacks = SetCallbacks; 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetComponentVersion = GetComponentVersion; 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SendCommand = SendCommand; 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetParameter = GetParameter; 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetParameter = SetParameter; 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetConfig = GetConfig; 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->SetConfig = SetConfig; 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->GetState = GetState; 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->EmptyThisBuffer = EmptyThisBuffer; 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->FillThisBuffer = FillThisBuffer; 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentTunnelRequest = ComponentTunnelRequest; 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentDeInit = ComponentDeInit; 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->AllocateBuffer = AllocateBuffer; 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->FreeBuffer = FreeBuffer; 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->UseBuffer = UseBuffer; 245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->GetExtensionIndex = GetExtensionIndex; 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->ComponentRoleEnum = ComponentRoleEnum; 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Allocate the memory for Component private data area */ 250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pHandle->pComponentPrivate, AMRENC_COMPONENT_PRIVATE); 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle; 254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_NBAMRENC"); 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID /* leave this now, we may need them later. */ 259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; 260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE; 261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE; 262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE; 263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; 264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; 265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE; 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('N','B','E','_'), 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM | PERF_ModuleAudioDecode); 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pCompPort, NBAMRENC_PORT_TYPE); 274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT] = pCompPort; 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pCompPort, NBAMRENC_PORT_TYPE); 277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT] = pCompPort; 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE); 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE); 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Initialize sPortParam data structures to default values */ 283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->sPortParam->nPorts = 0x2; 284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->sPortParam->nStartPortNumber = 0x0; 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Malloc and Set pPriorityMgmt defaults */ 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE); 288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE); 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Initialize sPriorityMgmt data structures to default values */ 291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->sPriorityMgmt->nGroupPriority = -1; 292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->sPriorityMgmt->nGroupID = -1; 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(amr_ip, OMX_AUDIO_PARAM_PCMMODETYPE); 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(amr_ip, OMX_AUDIO_PARAM_PCMMODETYPE); 296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pcmParams = amr_ip; 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(amr_op, OMX_AUDIO_PARAM_AMRTYPE); 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(amr_op, OMX_AUDIO_PARAM_AMRTYPE); 301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->amrParams = amr_op; 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* newmalloc and initialize number of input buffers */ 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->pInputBufferList, NBAMRENC_BUFFERLIST); 305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers = 0; 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* newmalloc and initialize number of output buffers */ 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->pOutputBufferList, NBAMRENC_BUFFERLIST); 309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers = 0; 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) { 312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL; 313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL; 314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set input port defaults */ 317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE); 318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE); 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT] = pPortDef_ip; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Let's set defaults for IF2 conditions on Android and see what happens */ 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nPortIndex = NBAMRENC_INPUT_PORT; 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->eDir = OMX_DirInput; 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nBufferCountActual = 5; //NBAMRENC_NUM_INPUT_BUFFERS; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nBufferCountMin = 5; //NBAMRENC_NUM_INPUT_BUFFERS; 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->nBufferSize = NBAMRENC_INPUT_FRAME_SIZE; 328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->nBufferAlignment = EXTRA_BYTES; 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->bEnabled = OMX_TRUE; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->bPopulated = OMX_FALSE; 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_ip->eDomain = OMX_PortDomainAudio; 332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->format.audio.eEncoding = OMX_AUDIO_CodingPCM; 333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->format.audio.cMIMEType = NULL; 334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->format.audio.pNativeRender = NULL; 335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->format.audio.bFlagErrorConcealment = OMX_FALSE; 336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Set output port defaults */ 338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE); 339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE); 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT] = pPortDef_op; 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nPortIndex = NBAMRENC_OUTPUT_PORT; 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->eDir = OMX_DirOutput; 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferCountMin = 9; //NBAMRENC_NUM_OUTPUT_BUFFERS; 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferCountActual = 9; //NBAMRENC_NUM_OUTPUT_BUFFERS; 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->nBufferSize = 320; //NBAMRENC_OUTPUT_FRAME_SIZE; 347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_ip->nBufferAlignment = EXTRA_BYTES; 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->bEnabled = OMX_TRUE; 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->bPopulated = OMX_FALSE; 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef_op->eDomain = OMX_PortDomainAudio; 351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_op->format.audio.eEncoding = OMX_AUDIO_CodingAMR; 352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_op->format.audio.cMIMEType = NULL; 353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_op->format.audio.pNativeRender = NULL; 354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef_op->format.audio.bFlagErrorConcealment = OMX_FALSE; 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set input port format defaults */ 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat = pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat; 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat->nPortIndex = NBAMRENC_INPUT_PORT; 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat->nIndex = OMX_IndexParamAudioAmr; 363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortFormat->eEncoding = OMX_AUDIO_CodingPCM; /*Data Expected on Input Port*/ 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPreempted = OMX_FALSE; 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nPortIndex = NBAMRENC_INPUT_PORT; 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*ck*/ amr_ip->nChannels = 1; //was 2 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->eNumData= OMX_NumericalDataSigned; 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->nBitPerSample = 16; 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*ck*/ amr_ip->nSamplingRate = 8000; //44100; 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->ePCMMode = OMX_AUDIO_PCMModeLinear; 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip->bInterleaved = OMX_TRUE; /*For Encoders Only*/ 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char *)pComponentPrivate->componentRole.cRole, "audio_encoder.amrnb"); 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nPortIndex = NBAMRENC_OUTPUT_PORT; 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->nChannels = 1; 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->eAMRBandMode = OMX_AUDIO_AMRBandModeNB0; 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->eAMRDTXMode= OMX_AUDIO_AMRDTXModeOff; 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_op->eAMRFrameFormat =OMX_AUDIO_AMRFrameFormatConformance; 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Set output port format defaults */ 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat = pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat; 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE); 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat->nPortIndex = NBAMRENC_OUTPUT_PORT; 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortFormat->nIndex = OMX_IndexParamAudioAmr; 390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortFormat->eEncoding = OMX_AUDIO_CodingAMR; 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: Setting dasf & mime & efr & acdn & amr and MultiFrame modes to 0\n",__LINE__); 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfMode = 0; 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->teeMode = 0; 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameMode = 0; 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->acdnMode = 0; 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->efrMode = 0; 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMode = 0; 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nMultiFrameMode = 0; 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 0; 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams = NULL; 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pAlgParam = NULL; 403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[0] = NBAMRENC_FRAME_SIZE_13; 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[1] = NBAMRENC_FRAME_SIZE_14; 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[2] = NBAMRENC_FRAME_SIZE_16; 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[3] = NBAMRENC_FRAME_SIZE_18; 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[4] = NBAMRENC_FRAME_SIZE_20; 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[5] = NBAMRENC_FRAME_SIZE_21; 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[6] = NBAMRENC_FRAME_SIZE_27; 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[7] = NBAMRENC_FRAME_SIZE_32; 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[8] = NBAMRENC_FRAME_SIZE_6; 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[9] = NBAMRENC_FRAME_SIZE_0; 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[10] = NBAMRENC_FRAME_SIZE_0; 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[11] = NBAMRENC_FRAME_SIZE_0; 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[12] = NBAMRENC_FRAME_SIZE_0; 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[13] = NBAMRENC_FRAME_SIZE_0; 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[14] = NBAMRENC_FRAME_SIZE_0; 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrMimeBytes[15] = NBAMRENC_FRAME_SIZE_1; 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[0] = NBAMRENC_FRAME_SIZE_13; 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[1] = NBAMRENC_FRAME_SIZE_14; 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[2] = NBAMRENC_FRAME_SIZE_16; 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[3] = NBAMRENC_FRAME_SIZE_18; 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[4] = NBAMRENC_FRAME_SIZE_19; 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[5] = NBAMRENC_FRAME_SIZE_21; 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[6] = NBAMRENC_FRAME_SIZE_26; 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[7] = NBAMRENC_FRAME_SIZE_31; 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[8] = NBAMRENC_FRAME_SIZE_6; 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[9] = NBAMRENC_FRAME_SIZE_0; 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[10] = NBAMRENC_FRAME_SIZE_0; 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[11] = NBAMRENC_FRAME_SIZE_0; 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[12] = NBAMRENC_FRAME_SIZE_0; 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[13] = NBAMRENC_FRAME_SIZE_0; 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[14] = NBAMRENC_FRAME_SIZE_0; 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->amrIf2Bytes[15] = NBAMRENC_FRAME_SIZE_1; 437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkBuf = NULL; 439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkData = NULL; 440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount = 0; 441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyThisBufferCount = 0; 442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount = 0; 443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillThisBufferCount = 0; 444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = NULL; 445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = 0; 446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = 0; 447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iHoldLen = 0; 448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->iHoldBuffer = NULL; 449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHoldBuffer = NULL; 450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFirstInputBufReceived = OMX_FALSE; 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->TimeStamp = 0; 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nUnhandledFillThisBuffers=0; 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledEmptyThisBuffers = 0; 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE; 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE; 459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) { 461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTickCount[i] = 0; 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndex[i] = 0; 465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop= OMX_FALSE; 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones = 0; 475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers=0; 476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers=0; 477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOfFramesSent=0; 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ptrLibLCML = NULL; 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex = 0; 480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex = 0; 481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingEmptyDones = 0; 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLoadedWaitingFreeBuffers = OMX_FALSE; 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessingInputBuf = 0; 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessingOutputBuf = 0; 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString, 100*sizeof(OMX_STRING),OMX_STRING); 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Initialize device string to the default value */ 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,":srcul/codec\0"); 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL); 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL); 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->codecStop_mutex, NULL); 498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->codecStop_threshold, NULL); 499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL); 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL); 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL); 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL); 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_init(&pComponentPrivate->ToLoaded_mutex, NULL); 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->AlloBuf_event)); 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->InLoaded_event)); 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CreateEvent(&(pComponentPrivate->InIdle_event)); 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsInvalidState = OMX_FALSE; 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = RMProxy_NewInitalize(); 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: OMX_ComponentInit\n", __LINE__); 526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from loading ResourceManagerProxy thread\n",__LINE__); 528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = NBAMRENC_StartComponentThread(pHandle); 533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: OMX_ComponentInit\n", __LINE__); 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from the Component\n",__LINE__); 536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(pComponentPrivate->pPERF, pComponentPrivate->ComponentThread, 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURCC('N','B','E','T')); 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* start Audio Manager to get streamId */ 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->fdwrite=open(FIFO1,O_WRONLY))<0) { 548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: [NBAMRE Encoder Component] - failure to open WRITE pipe\n",__LINE__); 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pComponentPrivate->fdread=open(FIFO2,O_RDONLY))<0) { 552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: [NBAMRE Encoder Component] - failure to open READ pipe\n",__LINE__); 5531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 5541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5571b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pthread_mutex_init(&pComponentPrivate->mutexStateChangeRequest, NULL)) { 5581b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 5591b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 5601b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 5611b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pthread_cond_init (&pComponentPrivate->StateChangeCondition, NULL)) { 5621b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 5631b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 5641b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 5651b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pComponentPrivate->nPendingStateChangeRequests = 0; 5661b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting OMX_ComponentInit\n", __LINE__); 569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetCallbacks() Sets application callbacks to the component 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * to the component. So that component can make use of those call back 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * while sending buffers to the application. And also it will copy the 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * application private data to component memory 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppData Application private data 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent, 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CALLBACKTYPE* pCallBacks, 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pAppData) 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent; 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering SetCallbacks\n", __LINE__); 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCallBacks == NULL) { 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Received the empty callbacks from the application\n",__LINE__); 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Copy the callbacks of the application to the component private*/ 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE)); 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*copy the application private data to component memory */ 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate = pAppData; 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetCallbacks\n", __LINE__); 617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetComponentVersion() This will return the component version 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will retrun the component version 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentName Name of the component 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentVersion handle for this instance of the component 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pSpecVersion application callbacks 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentUUID 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp, 639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STRING pComponentName, 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pComponentVersion, 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_VERSIONTYPE* pSpecVersion, 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_UUIDTYPE* pComponentUUID) 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp; 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering GetComponentVersion\n", __LINE__); 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy component version structure */ 658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentVersion != NULL && pComponentName != NULL) { 659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy(pComponentName, pComponentPrivate->cComponentName); 660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s)); 661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from GetComponentVersion",__LINE__); 664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetComponentVersion\n", __LINE__); 669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SendCommand() used to send the commands to the component 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will be used by the application. 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param phandle handle for this instance of the component 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param Cmd Command to be sent to the component 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam indicates commmad is sent using this method 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle, 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE Cmd, 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam, 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pCmdData) 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle; 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pCompPrivate = 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet = 0; 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pCompPrivate->curState == OMX_StateInvalid){ 700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: Entering SendCommand()\n", __LINE__); 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompPrivate->curState == OMX_StateInvalid) { 706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: Error OMX_ErrorInvalidState Sent to App\n",__LINE__); 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler (pHandle, 709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid State"); 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pCompPrivate->pPERF, 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Cmd, 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (Cmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam, 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleComponent); 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(Cmd) { 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandStateSet: 725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandStateSet SendCommand\n",__LINE__); 726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nParam == OMX_StateLoaded) { 727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCompPrivate->bLoadedCommandPending = OMX_TRUE; 728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompPrivate->curState == OMX_StateLoaded) { 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) { 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( pHandle, 732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nParam == OMX_StateInvalid) { 741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandStateSet SendCommand\n",__LINE__); 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->curState = OMX_StateInvalid; 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( pHandle, 744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 7521b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 7531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Add a pending transition */ 7541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(AddStateTransition(pCompPrivate) != OMX_ErrorNone) { 7551b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 7561b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 7581b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandFlush: 760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandFlush SendCommand\n",__LINE__); 761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(nParam > 1 && nParam != -1) { 762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__); 764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandPortDisable: 768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandPortDisable SendCommand\n",__LINE__); 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandPortEnable: 771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandPortEnable SendCommand\n",__LINE__); 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_CommandMarkBuffer: 774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandMarkBuffer SendCommand\n",__LINE__); 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nParam > 0) { 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__); 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: Command Received Default eError\n",__LINE__); 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( pHandle, 784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorUndefined, 787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid Command"); 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nRet == -1) { 795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__); 797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (Cmd == OMX_CommandMarkBuffer) { 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData, 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_PTR)); 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pCompPrivate->cmdDataPipe[1], &nParam, 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(OMX_U32)); 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__); 8091b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(Cmd == OMX_CommandStateSet) { 8101b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(RemoveStateTransition(pCompPrivate, OMX_FALSE) != OMX_ErrorNone) { 8111b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 8121b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 8131b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 8141b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorInsufficientResources; 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* add for Tee device control*/ 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(Cmd == OMX_CommandStateSet && nParam == OMX_StateExecuting) { 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompPrivate->teeMode != TEEMODE_NONE) { 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable acoustic supporting*/ 823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pCompPrivate->dbg, "[NBAMR encoder] --- supporting TeeDN\n"); 824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pCompPrivate->dbg, "[NBAMR encoder] --- Send Tee commnad\n"); 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable Tee device command*/ 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.hComponent = pHandle; 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AM_CommandTDNPlayMode --- play mode only 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AM_CommandTDNLoopBackMode --- loopback mode pnly 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AM_CommandTDNPlayLoopBackMode --- loopback + playback mode 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCompPrivate->teeMode == TEEMODE_PLAYBACK) { 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandTDNPlayMode ; 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pCompPrivate->teeMode == TEEMODE_LOOPBACK) { 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandTDNLoopBackMode ; 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pCompPrivate->teeMode == TEEMODE_PLAYLOOPBACK) { 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandTDNPlayLoopBackMode ; 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param1 = 0; 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.param2 = 0; 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd_data.streamID = 0; 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((write(pCompPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) { 847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TRACE4(pCompPrivate->dbg, "[NBAMR encoder] - fail to send Tee command to audio manager\n"); 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pCompPrivate->dbg, "[NBAMR encoder] --- Normal DASF Mode\n"); 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: Exiting SendCommand()\n", __LINE__); 861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pCompPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetParameter() Gets the current configurations of the component 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentParameterStructure 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp, 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentParameterStructure) 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure; 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate); 886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure; 887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering the GetParameter\n",__LINE__); 888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pParameterStructure == NULL) { 889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter",__LINE__); 891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->curState == OMX_StateInvalid) { 901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorIncorrectStateOperation from GetParameter",__LINE__); 903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(nParamIndex){ 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioInit: 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamAudioInit \n",__LINE__); 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE)); 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPortDefinition: 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamPortDefinition \n",__LINE__); 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) { 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == 921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) { 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__); 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPortFormat: 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamAudioPortFormat \n",__LINE__); 933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == 934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) { 935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > 936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat->nPortIndex) { 937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == 944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex){ 945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > 946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat->nPortIndex) { 947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNoMore; 948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__); 955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexParamAudioAmr: 960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->amrParams, sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode) 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR122: 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB7; 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR102: 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB6; 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR795: 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB5; 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR74: 973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB4; 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR67: 976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB3; 977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR59: 979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB2; 980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_BR515: 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB1; 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case SN_AUDIO_475: 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB0; 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB0; 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPriorityMgmt: 994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamPriorityMgmt \n",__LINE__); 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->sPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE)); 996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPcm: 999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(ComponentParameterStructure, pComponentPrivate->pcmParams, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE)); 1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamCompBufferSupplier: 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) { 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n"); 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */ 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) { 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n"); 1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */ 1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR1(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from GetParameter"); 1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX: 1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX::%d\n", __LINE__); 1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PV_OMXComponentCapabilityFlagsType* pCap_flags = (PV_OMXComponentCapabilityFlagsType *) ComponentParameterStructure; 1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (NULL == pCap_flags) 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: ERROR PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__); 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "%d :: Copying PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__); 1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pCap_flags, &(pComponentPrivate->iPVCapabilityFlags), sizeof(PV_OMXComponentCapabilityFlagsType)); 1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexParamVideoInit: 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamImageInit: 1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamOtherInit: 1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin default: 1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorUnsupportedIndex GetParameter \n",__LINE__); 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUnsupportedIndex; 1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetParameter\n",__LINE__); 1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetParameter() Sets configuration paramets to the component 1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex 1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompParam 1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp, 1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nParamIndex, 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR pCompParam) 1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp; 1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PORTFORMATTYPE* pComponentParam = NULL; 1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pComponentParamPort = NULL; 1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_AMRTYPE *pCompAmrParam = NULL; 1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_COMPONENTROLETYPE *pRole; 1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_PARAM_PCMMODETYPE *amr_ip; 1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier; 1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate); 1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering the SetParameter\n",__LINE__); 1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pCompParam == NULL) { 1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from SetParameter",__LINE__); 1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateLoaded) { 1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorIncorrectStateOperation from SetParameter",__LINE__); 1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(nParamIndex) { 1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPortFormat: 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioPortFormat \n",__LINE__); 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentParam = (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pCompParam; 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat->nPortIndex ) { 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat->nPortIndex ) { 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE)); 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__); 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioAmr: 1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr \n",__LINE__); 1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam = (OMX_AUDIO_PARAM_AMRTYPE *)pCompParam; 1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompAmrParam->nPortIndex == 0) { /* 0 means Input port */ 1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(((AMRENC_COMPONENT_PRIVATE*) 1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->pcmParams, pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (pCompAmrParam->nPortIndex == 1) { /* 1 means Output port */ 1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (pCompAmrParam->eAMRBandMode) 1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB7: 1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122; 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122 \n",__LINE__); 1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB6: 1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR102; 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR102 \n",__LINE__); 1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB5: 1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR795; 1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR795 \n",__LINE__); 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB4: 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR74; 1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR74 \n",__LINE__); 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB3: 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR67; 1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR67 \n",__LINE__); 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB2: 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR59; 1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR59 \n",__LINE__); 1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB1: 1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR515; 1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR515 \n",__LINE__); 1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_AUDIO_AMRBandModeNB0: 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_475; 1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR475 \n",__LINE__); 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122; 1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode =DEFAULT!! SN_AUDIO_BR122 \n",__LINE__); 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(((AMRENC_COMPONENT_PRIVATE *) 1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate)->amrParams, pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE)); 1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatConformance) { 1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->frameMode = NBAMRENC_FORMATCONFORMANCE; 1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if((pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatFSF) || 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatRTPPayload)){ 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameMode = NBAMRENC_MIMEMODE; 1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRFrameFormate = FSF \n",__LINE__); 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->frameMode = NBAMRENC_IF2; 1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRFrameFormate = IF2 \n",__LINE__); 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCompAmrParam->eAMRDTXMode == OMX_AUDIO_AMRDTXasEFR) { 1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRDTXMode = XasEFR\n",__LINE__); 1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* pComponentPrivate->efrMode = 1; */ 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__); 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamPortDefinition: 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentParamPort = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam; 1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__); 1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) { 1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__); 1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) { 1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__); 1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__); 1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexParamPriorityMgmt: 1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPriorityMgmt \n",__LINE__); 1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->sPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE)); 1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexParamAudioInit: 1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioInit \n",__LINE__); 1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->sPortParam, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE)); 1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamStandardComponentRole: /*-----------------------------*/ 1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pCompParam) { 1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam; 1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE)); 1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamAudioPcm: 1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pCompParam){ 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin amr_ip = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam; 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pComponentPrivate->pcmParams, amr_ip, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE)); 1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexParamCompBufferSupplier: 1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) { 1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n"); 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput; 1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); 1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == 1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) { 1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n"); 1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput; 1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); 1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR1(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from SetParameter"); 1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: SetParameter OMX_ErrorUnsupportedIndex \n",__LINE__); 1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUnsupportedIndex; 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetParameter\n",__LINE__); 1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetConfig() Gets the current configuration of to the component 1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp, 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentConfigStructure) 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp; 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin TI_OMX_STREAM_INFO *streamInfo; 1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(streamInfo, TI_OMX_STREAM_INFO); 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(streamInfo == NULL){ 1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nConfigIndex == OMX_IndexCustomNBAMRENCStreamIDConfig){ 1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin streamInfo->streamId = pComponentPrivate->streamID; 1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO)); 1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(nConfigIndex == OMX_IndexCustomDebug){ 1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure); 1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(streamInfo); 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetConfig. Returning = 0x%x\n",__LINE__,eError); 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * SetConfig() Sets the configraiton to the component 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp handle for this instance of the component 1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex 1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure 1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp, 1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INDEXTYPE nConfigIndex, 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PTR ComponentConfigStructure) 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp; 1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin TI_OMX_DSP_DEFINITION *pTiDspDefinition; 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 *customFlag = NULL; 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TI_OMX_DATAPATH dataPath; 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_AUDIO_CONFIG_VOLUMETYPE *pGainStructure = NULL; 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AM_COMMANDDATATYPE cmd_data; 1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering SetConfig\n", __LINE__); 1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pHandle == NULL) { 1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Invalid HANDLE OMX_ErrorBadParameter \n",__LINE__); 1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch (nConfigIndex) { 1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexCustomNBAMRENCModeConfig: 1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTiDspDefinition = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure; 1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pTiDspDefinition == NULL) { 1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from SetConfig\n",__LINE__); 1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->acdnMode = pTiDspDefinition->acousticMode; 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfMode = pTiDspDefinition->dasfMode; 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->teeMode = pTiDspDefinition->teeMode; 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( 2 == pComponentPrivate->dasfMode ){ 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->dasfMode--; 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->streamID = pTiDspDefinition->streamId; 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**-------------------**/ 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_IndexCustomNBAMRENCDataPath: 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin customFlag = (OMX_S16*)ComponentConfigStructure; 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* dataPath = *customFlag; */ 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(dataPath) { 1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_APPLICATION: 1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_ENCODER, pComponentPrivate->streamID); 1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_APPLICATION_TEE: 1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString, ":i0:o1\0"); 1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_APPLICATION_RTMIXER: 1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING_ENCODER); 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case DATAPATH_ACDN: 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING_ENCODER); 1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**-------------------**/ 1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexConfigAudioVolume: 1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pGainStructure = (OMX_AUDIO_CONFIG_VOLUMETYPE *)ComponentConfigStructure; 1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cmd_data.hComponent = hComp; 1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cmd_data.AM_Cmd = AM_CommandSWGain; 1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cmd_data.param1 = pGainStructure->sVolume.nValue; 1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cmd_data.param2 = 0; 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cmd_data.streamID = pComponentPrivate->streamID; 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) 1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "[NBAMRENC encoder] - fail to send command to audio manager\n"); 1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "[NBAMRENC encoder] - ok to send command to audio manager\n"); 1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_IndexCustomDebug: 1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure); 1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin default: 1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUnsupportedIndex; 1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetConfig\n", __LINE__); 1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GetState() Gets the current state of the component 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompomponent handle for this instance of the component 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pState 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState) 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 14471b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong OMX_ERRORTYPE eError = OMX_ErrorNone; 14481b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong OMX_COMPONENTTYPE* pHandle = NULL; 14491b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong AMRENC_COMPONENT_PRIVATE* pComponentPrivate = NULL; 14501b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong struct timespec abs_time = {0,0}; 14511b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong int nPendingStateChangeRequests = 0; 14521b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong int ret = 0; 14531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Set to sufficiently high value */ 14541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong int mutex_timeout = 3; 14551b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 14561b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pComponent == NULL || pState == NULL) { 14571b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorBadParameter; 1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 14601b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pHandle = (OMX_COMPONENTTYPE*)pComponent; 14611b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pComponentPrivate = (AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate; 14621b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 14631b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Retrieve current state */ 14641b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if (pHandle && pHandle->pComponentPrivate) { 14651b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Check for any pending state transition requests */ 14661b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) { 14671b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 14681b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14691b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong nPendingStateChangeRequests = pComponentPrivate->nPendingStateChangeRequests; 14701b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(!nPendingStateChangeRequests) { 14711b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) { 14721b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 14731b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14741b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 14751b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* No pending state transitions */ 14761b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong *pState = ((AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->curState; 14771b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong eError = OMX_ErrorNone; 14781b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14791b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong else { 14801b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Wait for component to complete state transition */ 14811b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong clock_gettime(CLOCK_REALTIME, &abs_time); 14821b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong abs_time.tv_sec += mutex_timeout; 14831b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong abs_time.tv_nsec = 0; 14841b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong ret = pthread_cond_timedwait(&(pComponentPrivate->StateChangeCondition), &(pComponentPrivate->mutexStateChangeRequest), &abs_time); 14851b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if (!ret) { 14861b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Component has completed state transitions*/ 14871b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong *pState = ((AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->curState; 14881b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) { 14891b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorUndefined; 14901b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14911b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong eError = OMX_ErrorNone; 14921b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14931b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong else if(ret == ETIMEDOUT) { 14941b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong /* Unlock mutex in case of timeout */ 14951b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest); 14961b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return OMX_ErrorTimeout; 14971b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14981b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 14991b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong } 15001b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong else { 15011b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong eError = OMX_ErrorInvalidComponent; 15021b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong *pState = OMX_StateInvalid; 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 15041b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 15051b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong return eError; 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 15081b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong OMX_PRINT1 (pComponentPrivate->dbg, "%d :: AACENC: Exiting GetState\n", __LINE__); 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 15101b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * EmptyThisBuffer() This callback is used to send the input buffer to 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * component 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex input port index 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer buffer to be sent to codec 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent, 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffer) 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = 0; 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[NBAMRENC_INPUT_PORT]; 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERF, 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pBuffer, 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->nFilledLen, 1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering EmptyThisBuffer\n", __LINE__); 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == NULL) { 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadParameter\n",__LINE__); 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) { 1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadParameter\n",__LINE__); 1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pPortDef->bEnabled) { 1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__); 1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) { 1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorVersionMismatch; 1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorVersionMismatch\n",__LINE__); 1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nInputPortIndex != NBAMRENC_INPUT_PORT) { 1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadPortIndex\n",__LINE__); 1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) { 1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError= OMX_ErrorIncorrectStateOperation; 1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__); 1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "----------------------------------------------------------------\n"); 1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Comp Sending Filled ip buff = %p to CompThread\n",__LINE__,pBuffer); 1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "----------------------------------------------------------------\n"); 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf--; 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessingInputBuf++; 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkData = pBuffer->pMarkData; 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent; 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledEmptyThisBuffers++; 1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof(OMX_BUFFERHEADERTYPE*)); 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__); 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting EmptyThisBuffer\n", __LINE__); 1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * FillThisBuffer() This callback is used to send the output buffer to 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the component 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex output port number 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer buffer to be sent to codec 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent, 1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffer) 1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = 0; 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[NBAMRENC_OUTPUT_PORT]; 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERF, 1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pBuffer, 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Entering FillThisBuffer\n", __LINE__); 1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "------------------------------------------------------------------\n"); 1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Comp Sending Emptied op buff = %p to CompThread\n",__LINE__,pBuffer); 1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "------------------------------------------------------------------\n"); 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == NULL) { 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadParameter\n",__LINE__); 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) { 1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadParameter\n",__LINE__); 1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pPortDef->bEnabled) { 1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__); 1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) { 1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorVersionMismatch; 1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorVersionMismatch\n",__LINE__); 1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer->nOutputPortIndex != NBAMRENC_OUTPUT_PORT) { 1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__); 1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) { 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d ::OMX_ErrorIncorrectStateOperation because state it is no more OMX_StatePause nor OMX_StateExecuting\n",__LINE__); 1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf--; 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pMarkBuf != NULL){ 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent; 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData; 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkBuf = NULL; 1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pMarkData != NULL) { 1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent; 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer->pMarkData = pComponentPrivate->pMarkData; 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkData = NULL; 1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessingOutputBuf++; 1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledFillThisBuffers++; 1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof (OMX_BUFFERHEADERTYPE*)); 1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__); 1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillThisBufferCount++; 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting FillThisBuffer\n", __LINE__); 1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentDeinit() this methold will de init the component 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle) 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle; 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate = 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (AMRENC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate; 1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin struct OMX_TI_Debug dbg; 1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin dbg = pComponentPrivate->dbg; 1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(dbg, "%d :: Entering ComponentDeInit\n", __LINE__); 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin close(pComponentPrivate->fdwrite); 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin close(pComponentPrivate->fdread); 1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* eError = RMProxy_SendCommand(pHandle, RMProxy_FreeResource, OMX_NBAMR_Encoder_COMPONENT, 0, NULL); */ 1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_NBAMR_Encoder_COMPONENT, 0, 3456, NULL); 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(dbg, "%d ::Error returned from destroy ResourceManagerProxy thread\n", 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = RMProxy_Deinitalize(); 1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(dbg, "%d :: Error from RMProxy_Deinitalize\n",__LINE__); 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsThreadstop = 1; 1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = NBAMRENC_StopComponentThread(pHandle); 1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(dbg, "%d :: Error from NBAMRENC_StopComponentThread\n",__LINE__); 1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Wait for thread to exit so we can get the status into "eError" */ 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* close the pipe handles */ 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = NBAMRENC_FreeCompResources(pHandle); 1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(dbg, "%d :: Error from NBAMRENC_FreeCompResources\n",__LINE__); 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex); 1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold); 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex); 1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InIdle_threshold); 1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex); 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold); 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event)); 1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InIdle_event)); 1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event)); 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 17931b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pthread_mutex_destroy(&pComponentPrivate->mutexStateChangeRequest); 17941b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong pthread_cond_destroy(&pComponentPrivate->StateChangeCondition); 17951b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong 1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundaryCleanup); 1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(pComponentPrivate->pPERF); 1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->sDeviceString != NULL) { 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin newfree(pComponentPrivate->sDeviceString); 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate); 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 180900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Exiting ComponentDeInit Returning 0x%x\n", __LINE__, eError); 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * ComponentTunnelRequest() this method is not implemented in 1.5 1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks 1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application. 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp, 1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp, 1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nTunneledPort, 1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TUNNELSETUPTYPE* pTunnelSetup) 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNotImplemented; 1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Entering ComponentTunnelRequest\n", __LINE__); 1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Exiting ComponentTunnelRequest\n", __LINE__); 1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Returning = 0x%x\n",__LINE__,eError); 1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * AllocateBuffer() 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent, 1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer, 1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes) 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufferHeader; 1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *) 1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex]; 1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering AllocateBuffer\n", __LINE__); 1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef = %p\n", __LINE__,pPortDef); 1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled); 1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (1) { 1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pPortDef->bEnabled) { 1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 1; 1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex); 1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event)); 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pBufferHeader, OMX_BUFFERHEADERTYPE); 1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC_SIZE(pBufferHeader->pBuffer, nSizeBytes + 256,OMX_U8); 1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufferHeader->pBuffer == NULL) { 1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Free previously allocated memory before bailing */ 1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufferHeader) { 1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin newfree(pBufferHeader); 1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader = NULL; 1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pBuffer += 128; 1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nPortIndex == NBAMRENC_INPUT_PORT) { 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = nPortIndex; 1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nOutputPortIndex = -1; 1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader; 1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0; 1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1; 1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) { 1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated); 1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (nPortIndex == NBAMRENC_OUTPUT_PORT) { 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = -1; 1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nOutputPortIndex = nPortIndex; 1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader; 1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0; 1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1; 1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pBufferHeader->pOutputPortPrivate, NBAMRENC_BUFDATA); 1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) { 1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated); 1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadPortIndex; 1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__); 1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (((!pComponentPrivate->dasfMode) && 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&& 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled) && 1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle)))/*File Mode*/ 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin || 1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->dasfMode) && 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&& 1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle))))/*Dasf Mode*/ 1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InLoaded_threshold); 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pAppPrivate = pAppPrivate; 1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pPlatformPrivate = pComponentPrivate; 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nAllocLen = nSizeBytes; 1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMajor = NBAMRENC_MAJOR_VER; 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMinor = NBAMRENC_MINOR_VER; 1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion; 1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE); 1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *pBuffer = pBufferHeader; 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) { 1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SendCommand (pComponentPrivate->pHandle, 1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam,NULL); 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedBuffer(pComponentPrivate->pPERF, 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (*pBuffer)->pBuffer, nSizeBytes, 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory); 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting AllocateBuffer\n",__LINE__); 1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * FreeBuffer() 1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent handle for this instance of the component 1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer( 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE * pComponentPrivate = NULL; 2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* buff; 2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8* tempBuff; 2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int i = 0; 2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int inputIndex = -1; 2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int outputIndex = -1; 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle; 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *) 2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering FreeBuffer\n", __LINE__); 2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) { 2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin buff = pComponentPrivate->pInputBufferList->pBufHdr[i]; 2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (buff == pBuffer) { 2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Found matching input buffer\n",__LINE__); 2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff); 2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer); 2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputIndex = i; 2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: This is not a match\n",__LINE__); 2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff); 2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer); 2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) { 2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin buff = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (buff == pBuffer) { 2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Found matching output buffer\n",__LINE__); 2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff); 2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer); 2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputIndex = i; 2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: This is not a match\n",__LINE__); 2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff); 2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer); 2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (inputIndex != -1) { 2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) { 2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin tempBuff = pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer; 2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (tempBuff != 0) 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tempBuff -= 128; 2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(tempBuff); 2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERF, 2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer, 2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->nAllocLen, 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory ); 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]); 2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers--; 2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers < 2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nBufferCountMin) { 2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated = OMX_FALSE; 2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled && 2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending == OMX_FALSE && 2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->curState == OMX_StateIdle || 2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState == OMX_StateExecuting || 2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState == OMX_StatePause)) { 2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorPortUnpopulated, 2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Input Port Unpopulated"); 2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (outputIndex != -1) { 2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) { 2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin tempBuff = pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer; 2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (tempBuff != 0) 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tempBuff -= 128; 2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(tempBuff); 2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERF, 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer, 2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->nAllocLen, 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleMemory ); 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pOutputPortPrivate); 2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]); 2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers--; 2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers < 2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nBufferCountMin) { 2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated = OMX_FALSE; 2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled && 2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending == OMX_FALSE && 2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->curState == OMX_StateIdle || 2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState == OMX_StateExecuting || 2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState == OMX_StatePause)) { 2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorPortUnpopulated, 2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Output Port Unpopulated"); 2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: Returning OMX_ErrorBadParameter\n",__LINE__); 2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->ToLoaded_mutex); 2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "num input buffers es %d, \n num output buffers es %d,\n InIdle_goingtoloaded es %d \n", 2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers, pComponentPrivate->pOutputBufferList->numBuffers, pComponentPrivate->InIdle_goingtoloaded); 2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((!pComponentPrivate->pInputBufferList->numBuffers && 2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pOutputBufferList->numBuffers) && 2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded) 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 0; 2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InIdle_threshold); 2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InIdle_event)); 2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->ToLoaded_mutex); 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->bLoadedWaitingFreeBuffers &&(!pComponentPrivate->pInputBufferList->numBuffers && 2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pOutputBufferList->numBuffers))) { 2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "reissuing loaded command\n"); 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SendCommand(pComponentPrivate->pHandle,OMX_CommandStateSet,OMX_StateLoaded,NULL); 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinif (pComponentPrivate->bDisableCommandPending && (pComponentPrivate->pInputBufferList->numBuffers + pComponentPrivate->pOutputBufferList->numBuffers == 0)) { 2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,pComponentPrivate->bDisableCommandParam,NULL); 2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting FreeBuffer\n", __LINE__); 2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * UseBuffer() 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp handle for this instance of the component 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks application callbacks 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer ( 2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nPortIndex, 2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_PTR pAppPrivate, 2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U32 nSizeBytes, 2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_U8* pBuffer) 2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE *pPortDef; 2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufferHeader; 2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *) 2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateInvalid){ 2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInvalidState; 2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedBuffer(pComponentPrivate->pPERF, 2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, nSizeBytes, 2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex]; 2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: Entering UseBuffer\n", __LINE__); 2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d \n",__LINE__,pPortDef->bPopulated); 2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pPortDef->bEnabled) { 2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__); 2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateOperation; 2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pBufferHeader, OMX_BUFFERHEADERTYPE); 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nPortIndex == NBAMRENC_OUTPUT_PORT) { 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = -1; 2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nOutputPortIndex = nPortIndex; 2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader; 2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0; 2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0; 2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NBAMRENC_OMX_MALLOC(pBufferHeader->pOutputPortPrivate, NBAMRENC_BUFDATA); 2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) { 2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nInputPortIndex = nPortIndex; 2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nOutputPortIndex = -1; 2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader; 2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0; 2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0; 2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) { 2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPortDef->bPopulated = OMX_TRUE; 2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (((!pComponentPrivate->dasfMode) && 2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&& 2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled) && 2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle)))/*File Mode*/ 2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin || 2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->dasfMode) && 2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&& 2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->InLoaded_readytoidle))))/*Dasf Mode*/ 2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 0; 2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->InLoaded_threshold); 2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->InLoaded_event)); 2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pAppPrivate = pAppPrivate; 2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->pPlatformPrivate = pComponentPrivate; 2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nAllocLen = nSizeBytes; 2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMajor = NBAMRENC_MAJOR_VER; 2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufferHeader->nVersion.s.nVersionMinor = NBAMRENC_MINOR_VER; 2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion; 2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->pBuffer = pBuffer; 2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppBufferHdr = pBufferHeader; 2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bEnableCommandPending){ 2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SendCommand (pComponentPrivate->pHandle, 2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam,NULL); 2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting UseBuffer\n", __LINE__); 2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError); 2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn GetExtensionIndex() description for GetExtensionIndex 2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinGetExtensionIndex(). 2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinReturns index for vendor specific settings. 2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @see OMX_Core.h 2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex( 2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_STRING cParameterName, 2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_OUT OMX_INDEXTYPE* pIndexType) 2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "GetExtensionIndex\n"); 2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(strcmp(cParameterName,"OMX.TI.index.config.tispecific"))) { 2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *pIndexType = OMX_IndexCustomNBAMRENCModeConfig; 2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 2, 0, "OMX_IndexCustomNBAMRENCModeConfig\n"); 2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.index.config.nbamrstreamIDinfo"))) { 2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *pIndexType = OMX_IndexCustomNBAMRENCStreamIDConfig; 2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.index.config.nbamr.datapath"))) 2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *pIndexType = OMX_IndexCustomNBAMRENCDataPath; 2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(!(strcmp(cParameterName,"OMX.TI.AMR.Encode.Debug"))) 2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *pIndexType = OMX_IndexCustomDebug; 2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "Exiting GetExtensionIndex\n"); 2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fns Sleep replace for WIN CE 2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_CreateEvent(OMX_Event *event){ 2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HANDLE createdEvent = NULL; 2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event->event = CreateEvent(NULL, TRUE, FALSE, NULL); 2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event->event == NULL) 2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_SignalEvent(OMX_Event *event){ 2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SetEvent(event->event); 2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_WaitForEvent(OMX_Event *event) { 2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WaitForSingleObject(event->event, INFINITE); 2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_DestroyEvent(OMX_Event *event) { 2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin CloseHandle(event->event); 2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn ComponentRoleEnum() description for ComponentRoleEnum() 2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinReturns the role at the given index 2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @see OMX_Core.h 2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum( 2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_IN OMX_HANDLETYPE hComponent, 2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_OUT OMX_U8 *cRole, 2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_IN OMX_U32 nIndex) 2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin AMRENC_COMPONENT_PRIVATE *pComponentPrivate; 2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate); 2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nIndex == 0){ 2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE); 2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "::::In ComponenetRoleEnum: cRole is set to %s\n",cRole); 2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNoMore; 2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2404