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_WbAmrDec_Utils.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for WBAMR decoder that 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* is fully compliant with the OMX Audio specification 1.0. 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\ 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.1 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------------------------------------------------------- 39b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 40b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! Revision History 41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! =================================== 42b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 10-Sept-2005 mf: Initial Version. Change required per OMAPSWxxxxxxxxx 43b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! to provide _________________. 44b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 45b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 46b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 10-Sept-2005 mf: 47b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! This is newest file 48b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* =========================================================================== */ 49b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* INCLUDE FILES 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h> 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h> 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h> 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/wait.h> 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/stat.h> 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h> 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <malloc.h> 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <memory.h> 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h> 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h> 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h> 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h> 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDecoder.h" 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDec_Utils.h" 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "wbamrdecsocket_ti.h" 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <decode_common_ti.h> 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDec_ComponentThread.h" 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "usn.h" 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_DspCodec.h" 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_Fill_LCMLInitParams () This function is used by the component thread to 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* fill the all of its initialization parameters, buffer deatils etc 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* to LCML structure, 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param plcml_Init pointer to LCML structure to be filled 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent, 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *plcml_Init, 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 arr[]) 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf,nOpBuf; 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBufSize,nOpBufSize; 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int size_lcml; 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_STRMATTR *strmAttr = NULL; 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pTemp_lcml; 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_Fill_LCMLInitParams\n "); 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pHandle = %p\n",pHandle); 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pHandle->pComponentPrivate = %p\n",pHandle->pComponentPrivate); 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers = nIpBuf; 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->mimemode == 1) 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE_MIME; 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->mimemode == 2) 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE_IF2; 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_AUDIO_AMRDTXasEFR == pComponentPrivate->iAmrMode){ 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = WBAMR_DEC_INPUT_BUFF_SIZE_EFR; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE; 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE; 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers = nOpBuf; 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBufSize = OUTPUT_WBAMRDEC_BUFFER_SIZE; 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Fill Input Buffers Info for LCML */ 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.nBuffers = nIpBuf; 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.nSize = nIpBufSize; 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD; 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Fill Output Buffers Info for LCML */ 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.nBuffers = nOpBuf; 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.nSize = nOpBufSize; 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Copy the node information */ 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.nNumOfDLLs = 3; 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].uuid = &WBAMRDEC_SN_UUID; 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName,WBAMR_DEC_DLL_NAME); 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].uuid = &WBAMRDEC_SN_UUID; 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName,WBAMR_DEC_DLL_NAME); 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID; 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName,WBAMR_DEC_USN_DLL_NAME); 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice = 0; /*Initialisation for F2F mode*/ 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate->dasfmode = %ld\n",pComponentPrivate->dasfmode); 182e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(strmAttr, LCML_STRMATTR); 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->strmAttr = strmAttr; 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uSegid = 0; 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uAlignment = 0; 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uTimeout = WBAMR_DEC_TIMEOUT; 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uBufsize = OUTPUT_WBAMRDEC_BUFFER_SIZE; /*640*/ 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uNumBufs = 2; 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->lMode = STRMMODE_PROCCOPY; 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice =1; 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofRender =0; 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->acdnmode == 1) 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* ACDN mode */ 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &ACDN_TI_UUID; 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* DASF/TeeDN mode */ 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &MMMDN_TI_UUID; 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.DspStream = strmAttr; 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->strmAttr = NULL; 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*copy the other information */ 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->SegID = OMX_WBAMR_DEC_DEFAULT_SEGMENT; 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Timeout = OMX_WBAMR_DEC_SN_TIMEOUT; 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Alignment = 0; 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Priority = OMX_WBAMR_DEC_SN_PRIORITY; 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->ProfileID = -1;/*0;*/ 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TODO: Set this using SetParameter() */ 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iAmrSamplingFrequeny = WBAMR_DEC_SAMPLING_FREQUENCY; 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Accessing these 2 has the problem/creates problem in state transition tests*/ 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iAmrChannels = 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT]->nChannels; 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iAmrMode = 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wbamrParams[WBAMR_DEC_INPUT_PORT]->eAMRDTXMode; 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->mimemode == 1) 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iAmrMimeFlag = WBAMR_DEC_MODE_MIME; 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->iAmrMimeFlag = WBAMR_DEC_MODE_NONMIME; 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[0] = WBAMR_DEC_STREAM_COUNT; 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[1] = WBAMR_DEC_INPUT_PORT; 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[2] = WBAMR_DEC_DMM; 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers) { 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[3] = pComponentPrivate->pInputBufferList->numBuffers; 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[3] = 1; 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[4] = WBAMR_DEC_OUTPUT_PORT; 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Setting up create phase params for DASF mode\n"); 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[5] = WBAMR_DEC_OUTSTRM; 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = NUM_WBAMRDEC_OUTPUT_BUFFERS_DASF; 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Setting up create phase params for FILE mode\n"); 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[5] = WBAMR_DEC_DMM; 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers) { 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = pComponentPrivate->pOutputBufferList->numBuffers; 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = 1; 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->iAmrMode == OMX_AUDIO_AMRDTXasEFR) { 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[7] = WBAMR_EFR; 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[7] = WBAMR; 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[8] = pComponentPrivate->mimemode; /*MIME, IF2 or FORMATCONFORMANCE*/ 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[9] = END_OF_CR_PHASE_ARGS; 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->pCrPhArgs = arr; 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = nIpBuf * sizeof(LCML_WBAMR_DEC_BUFHEADERTYPE); 284e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml,LCML_WBAMR_DEC_BUFHEADERTYPE); 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_INPUT_PORT] = pTemp_lcml; 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = WBAMR_DEC_NOT_USED; 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 299e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pBufferParam, 300b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WBAMRDEC_ParamStruct), 301b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMRDEC_ParamStruct); 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->usNbFrames =0; 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->pParamElem = NULL; 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pFrameParam = NULL; 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 306e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pTemp_lcml->pDmmBuf, DMM_BUFFER_OBJ); 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application to indicate the last buffer */ 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = WBAMR_DEC_NORMAL_BUFFER; 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This memory pointer will be sent to LCML */ 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = nOpBuf * sizeof(LCML_WBAMR_DEC_BUFHEADERTYPE); 318e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml,LCML_WBAMR_DEC_BUFHEADERTYPE); 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_OUTPUT_PORT] = pTemp_lcml; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = WBAMR_DEC_NOT_USED; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application to indicate the last buffer */ 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pFrameParam = NULL; 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 337e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pBufferParam, 338b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WBAMRDEC_ParamStruct), 339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMRDEC_ParamStruct); 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->usNbFrames =0; 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->pParamElem = NULL; 343e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pTemp_lcml->pDmmBuf, DMM_BUFFER_OBJ); 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pTemp_lcml = %p\n",pTemp_lcml); 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pTemp_lcml->buffer = %p\n",pTemp_lcml->buffer); 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = WBAMR_DEC_NORMAL_BUFFER; 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp++; 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nLcml_nCntIp = 0; 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nLcml_nCntOpReceived = 0; 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting WBAMR_DEC_Fill_LCMLInitParams"); 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_StartComponentThread() This function is called by the component to create 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* the component thread, command pipe, data pipe and LCML Pipe. 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_StartComponentThread(OMX_HANDLETYPE pComponent) 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_attr_t attr; 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY; 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside WBAMR_DEC_StartComponentThread\n"); 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Initialize all the variables*/ 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf = 0; 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf = 0; 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf = 0; 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff = 0; 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 404b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* create the pipe used to send buffers to the thread */ 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdDataPipe); 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->dataPipe); 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdPipe); 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Create the Component Thread */ 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->WBAMR_DEC_ComponentThread), &attr, WBAMR_DEC_ComponentThread, pComponentPrivate); 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->WBAMR_DEC_ComponentThread), NULL, WBAMR_DEC_ComponentThread, pComponentPrivate); 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError || !pComponentPrivate->WBAMR_DEC_ComponentThread) { 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 1; 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_FreeCompResources() This function is called by the component during 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* de-init to close component thread, Command pipe, data pipe & LCML pipe. 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_FreeCompResources(OMX_HANDLETYPE pComponent) 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate; 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf = 0; 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOpBuf = 0; 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_FreeCompResources\n"); 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) { 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nBufferCountActual; 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nBufferCountActual; 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bCompThreadStarted) { 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[0]); 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[1]); 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[0]); 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[1]); 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[0]); 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[1]); 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 508b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT (pComponentPrivate->pPriorityMgmt); 509b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT (pComponentPrivate->pHoldBuffer); 510b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]); 511b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT (pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]); 512b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->wbamrParams[WBAMR_DEC_INPUT_PORT]); 513b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT (pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT]); 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "\n\n FreeCompResources: Destroying mutexes.\n\n"); 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex); 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold); 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex); 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InIdle_threshold); 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex); 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold); 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event)); 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InIdle_event)); 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event)); 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_CleanupInitParams(OMX_HANDLETYPE pComponent) 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate; 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pTemp_lcml; 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf = 0; 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i=0; 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle; 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandleAux; 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_CleanupInitParams()\n"); 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 551b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->strmAttr); 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pParams, WBAMR_DEC_AudioCodecParams); 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->nRuntimeInputBuffers; 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_INPUT_PORT]; 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTemp_lcml->pFrameParam!=NULL){ 560b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pFrameParam, WAMRDEC_FrameStruct); 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandleAux = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)pLcmlHandle->pCodecinterfacehandle)->pCodec); 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DmmUnMap(pLcmlHandleAux->dspCodec->hProc, 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)pTemp_lcml->pBufferParam->pParamElem, 56500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong pTemp_lcml->pDmmBuf->pReserved, pComponentPrivate->dbg); 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 568b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pBufferParam, WBAMRDEC_ParamStruct); 569b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pTemp_lcml->pDmmBuf); 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Output*/ 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_OUTPUT_PORT]; 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<pComponentPrivate->nRuntimeOutputBuffers; i++){ 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTemp_lcml->pFrameParam!=NULL){ 578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pFrameParam, WAMRDEC_FrameStruct); 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandleAux = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)pLcmlHandle->pCodecinterfacehandle)->pCodec); 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DmmUnMap(pLcmlHandleAux->dspCodec->hProc, 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)pTemp_lcml->pBufferParam->pParamElem, 58300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong pTemp_lcml->pDmmBuf->pReserved, pComponentPrivate->dbg); 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pBufferParam, WBAMRDEC_ParamStruct); 587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pTemp_lcml->pDmmBuf); 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 591e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_INPUT_PORT]); 592e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_OUTPUT_PORT]); 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_StopComponentThread() This function is called by the component during 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* de-init to close component thread, Command pipe, data pipe & LCML pipe. 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_StopComponentThread(OMX_HANDLETYPE pComponent) 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *) 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pComponentPrivate; 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int pthreadError = 0; 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Join the component thread */ 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 1; 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->cmdPipe[1], &pComponentPrivate->bIsStopping, sizeof(OMX_U16)); 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join (pComponentPrivate->WBAMR_DEC_ComponentThread, 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)&threadError); 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) { 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Check for the errors */ 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError) { 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error while closing Component Thread\n"); 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_HandleCommand() This function is called by the component when ever it 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* receives the command from the application 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponentPrivate Component private data 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WBAMR_DEC_HandleCommand (WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle; 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE command; 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STATETYPE commandedState; 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 commandData; 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBuf; 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 arr[100]; 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "damedesuStr"; 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *pLcmlDsp; 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_AudioCodecParams *pParams; 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret; 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pLcmlHdr = NULL; 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int inputPortFlag=0,outputPortFlag=0; 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE rm_error; 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering WBAMR_DEC_HandleCommand Function - curState = %d\n",pComponentPrivate->curState); 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate = %p\n",pComponentPrivate); 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pHandle = %p\n",pHandle); 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read (pComponentPrivate->cmdPipe[0], &command, sizeof (command)); 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error While reading from the Pipe\n"); 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData)); 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) { 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error While reading from the Pipe\n"); 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedCommand(pComponentPrivate->pPERFcomp, 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin command, 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin commandData, 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (command == OMX_CommandStateSet) { 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin commandedState = (OMX_STATETYPE)commandData; 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(commandedState) { 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateIdle: 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->curState == OMX_StateWaitForResources) { 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if (pComponentPrivate->dasfmode == 1) { 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->streamID == 0) 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_EPRINT("**************************************\n"); 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_EPRINT(":: Error = OMX_ErrorInsufficientResources\n"); 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_EPRINT("**************************************\n"); 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,OMX_TI_ErrorMajor, 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "AM: No Stream ID Available"); 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } */ 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundarySetup); 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated && pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) { 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inputPortFlag = 1; 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated && !pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) { 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inputPortFlag = 1; 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated && pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled) { 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin outputPortFlag = 1; 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated && !pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled) { 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin outputPortFlag = 1; 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(inputPortFlag && outputPortFlag)) { 768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "\n\n HandleCommand: In Loaded state. It does not go to sleep.\n\n"); 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 1; 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, &pComponentPrivate->InLoaded_mutex); 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event)); 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside WBAMR_DEC_HandleCommand\n"); 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) WBAMR_DEC_LCML_Callback; 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (OMX_HANDLETYPE) WBAMR_DEC_GetLCMLHandle(pComponentPrivate); 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside WBAMR_DEC_HandleCommand\n"); 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pLcmlHandle == NULL) { 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "LCML Handle is NULL........exiting..\n"); 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Lcml Handle NULL"); 795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand\n"); 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pLcmlHandle = %p\n",pLcmlHandle); 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Got handle of dsp via phandle filling information about DSP 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin specific things */ 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pLcmlDsp = %p\n",pLcmlDsp); 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand\n"); 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_Fill_LCMLInitParams(pHandle, pLcmlDsp, arr); 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error returned from\ 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_Fill_LCMLInitParams()\n"); 810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle; 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Calling LCML_InitMMCodec...\n"); 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TeeDN will be default for decoder component */ 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "WBAMR decoder support TeeDN\n"); 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb, (OMX_STRING)pComponentPrivate->sDeviceString); 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb); 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error returned from\ 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_Init()\n"); 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* need check the resource with RM */ 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *) WBAMRDEC_ResourceManagerCallback; 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateWaitForResources) { 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "AMRDEC: About to call RMProxy_SendCommand\n"); 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin RMProxy_RequestResource, 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WBAMR_Decoder_COMPONENT, 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_CPU_LOAD, 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3456, 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(pComponentPrivate->rmproxyCallback)); 857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "AMRDEC: RMProxy_SendCommand returned %d\n",rm_error); 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(rm_error == OMX_ErrorNone) { 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* resource is available */ 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin RMProxy_StateSet, 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WBAMR_Decoder_COMPONENT, 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateIdle, 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3456, 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else if(rm_error == OMX_ErrorInsufficientResources) { 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* resource is not available, need set state to OMX_StateWaitForResources */ 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "AMRDEC: Error - insufficient resources\n"); 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin RMProxy_StateSet, 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WBAMR_Decoder_COMPONENT, 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateIdle, 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3456, 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySetup); 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "AMRDEC: State has been Set to Idle\n"); 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 pValues[4]; 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "---- Comp: DASF Functionality is ON ---\n"); 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->streamID == 0) 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n"); 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, ":: Error = OMX_ErrorInsufficientResources\n"); 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n"); 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "AM: No Stream ID Available"); 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 932e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->pParams, sizeof(WBAMR_DEC_AudioCodecParams),WBAMR_DEC_AudioCodecParams); 933e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong pParams = pComponentPrivate->pParams; 934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iAudioFormat = 1; 936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iSamplingRate = 16000; 937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iStrmId = pComponentPrivate->streamID; 939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[1] = (OMX_U32)pParams; 942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[2] = sizeof(WBAMR_DEC_AudioCodecParams); 943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec StreamControl..\n"); 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateExecuting) { 960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState); 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set the bIsStopping bit */ 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "AMRDEC: About to set bIsStopping bit\n"); 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "About to call LCML_ControlCodec(STOP)\n"); 968b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Stop..\n"); 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bStopSent=1; 992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pHoldBuffer); 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->curState == OMX_StatePause) { 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Stop..\n"); 1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState); 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Comp: Stop Command Received\n"); 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_WBAMR_Decoder_COMPONENT, OMX_StateIdle, 3456, NULL); 1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1029b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2(pComponentPrivate->dbg, "OMX_AmrDec_Utils.c :: The component is stopped\n"); 1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle,pHandle->pApplicationPrivate, 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete,OMX_CommandStateSet,pComponentPrivate->curState, 1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is invalid state from application */ 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid State"); 1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateExecuting: 1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd Executing \n"); 1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Invalid State"); 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Same State Given by \ 1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateIdle) { 1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1064b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nFillThisBufferCount = 0; 1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount = 0; 1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bStopSent=0; 1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount = 0; 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyThisBufferCount = 0; 1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Sending commands to DSP via LCML_ControlCodec third argument 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin is not used for time being */ 1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStart, (void *)p); 1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Start..\n"); 1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send input buffers to application */ 1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "nBuf = %ld\n",nBuf); 1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send output buffers to codec */ 1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause) { 1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStart, (void *)p); 1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error While Resuming the codec\n"); 1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]) { 1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr); 1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__); 1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecInputBuffer, 1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pBufferParam, 1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if (pComponentPrivate->nNumOutputBufPending < pComponentPrivate->pOutputBufferList->numBuffers) { 1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = pComponentPrivate->pOutputBufferList->numBuffers; 1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufHdrPending[i]) { 1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, OMX_DirOutput, &pLcmlHdr); 1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],OMX_DirOutput,__LINE__); 1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecOuputBuffer, 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen, 1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen, 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pBufferParam, 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid State Given by \ 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_WBAMR_Decoder_COMPONENT, OMX_StateExecuting, 3456, NULL); 1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateExecuting; 1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundarySteadyState); 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Send state change notificaiton to Application */ 1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateLoaded: 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd Loaded - curState = %d\n",pComponentPrivate->curState); 1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR2(pComponentPrivate->dbg, "Error: Same State Given by \ 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers); 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers); 1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources){ 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd Loaded\n"); 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup); 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup); 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( 1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet,pComponentPrivate->curState, 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "In side OMX_StateLoaded State: \n"); 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateIdle && 1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState != OMX_StateWaitForResources) { 1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition,\ 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid State Given by \ 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers); 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers); 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup); 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers || 1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers) { 1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR2(pComponentPrivate->dbg, "Wait for InIdle_mutex\n"); 1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 1; 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InIdle_threshold, &pComponentPrivate->InIdle_mutex); 1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InIdle_event)); 1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Now Deinitialize the component No error should be returned from 1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * this function. It should clean the system as much as possible */ 1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "In side OMX_StateLoaded State: \n"); 1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_CleanupInitParams(pComponentPrivate->pHandle); 1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Closing LCML Lib*/ 1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->ptrLibLCML != NULL) 1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "OMX_WbAmrDecoder.c Closing LCML library\n"); 1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose( pComponentPrivate->ptrLibLCML ); 1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ptrLibLCML = NULL; 1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pComponentPrivate->pPERF, -1, 0, PERF_ModuleComponent); 1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "In side OMX_StateLoaded State: \n"); 1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: in Destroying the codec: no. %x\n", eError); 1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd Loaded\n"); 1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_EXIT_COMPONENT_THRD; 1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending = OMX_FALSE; 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send StateChangeNotification to application */ 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StatePause: 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd Pause\n"); 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Same State Given by \ 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateExecuting && 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState != OMX_StateIdle) { 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid State Given by \ 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState); 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlPause, (void *)p); 1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: in Pausing the codec\n"); 1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1317b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 1318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong rm_error = RMProxy_NewSendCommand(pHandle, 1319b65f253fdc60f6208a54911bee793d225f23cdf8James Dong RMProxy_StateSet, 1320b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_WBAMR_Decoder_COMPONENT, 1321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_StatePause, 1322b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3456, 1323b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 1324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateWaitForResources: 1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Same State Given by \ 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded) { 1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin RMProxy_StateSet, 1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WBAMR_Decoder_COMPONENT, 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateWaitForResources, 1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3456, 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet,pComponentPrivate->curState,NULL); 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateInvalid: 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd OMX_StateInvalid:\n"); 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Same State"); 1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Same State Given by \ 1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Application\n"); 1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Comp: OMX_AmrDecUtils.c\n"); 1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateWaitForResources && 1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState != OMX_StateLoaded) { 1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_CleanupInitParams(pHandle); 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Incorrect State Transition"); 1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateMax: 1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "WBAMR_DEC_HandleCommand: Cmd OMX_StateMax::\n"); 1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin default: 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* End of Switch */ 1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandMarkBuffer) { 1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received\n"); 1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->pMarkBuf){ 1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received\n"); 1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TODO Need to handle multiple marks */ 1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData); 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandPortDisable) { 1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->bDisableCommandPending) { 1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* disable port */ 1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled = OMX_FALSE; 1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (WBAMR_DEC_IsPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i],OMX_DirInput)) { 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Real solution is flush buffers from DSP. Until we have the ability to do that 1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin we just call EmptyBufferDone() on any pending buffers */ 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pComponentPrivate->pInputBufferList->pBufHdr[i], pBuffer), 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_ClearPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i],OMX_DirInput,__LINE__); 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle, 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i] 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ); 1440b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = OMX_FALSE; 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_TRUE; 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_WBAmrDec_Utils.c :: Calling LCML_ControlCodec()\n"); 1450b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "commandData = %ld\n",commandData); 1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated); 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated); 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0) { 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated){ 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_INPUT_PORT, 1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "OMX_WBAmrDec_Utils.c :: Clearing bDisableCommandPending\n"); 1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1) { 1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated){ 1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_OUTPUT_PORT, 1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "OMX_WBAmrDec_Utils.c :: Clearing bDisableCommandPending\n"); 1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == -1) { 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated && 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated){ 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_INPUT_PORT, 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortDisable, 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_OUTPUT_PORT, 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "OMX_WBAmrDec_Utils.c :: Clearing bDisableCommandPending\n"); 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandPortEnable) { 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->bEnableCommandPending) { 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable in port */ 1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "setting input port to enabled\n"); 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled = OMX_TRUE; 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled = %d\n", 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled); 1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable out port */ 1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "setting output port to enabled\n"); 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = OMX_TRUE; 1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled); 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0){ 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated){ 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_INPUT_PORT, 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(commandData == 0x1){ 1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated){ 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_OUTPUT_PORT, 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(commandData == -1){ 1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated 1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin && pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated)){ 1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_INPUT_PORT, 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_OUTPUT_PORT, 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_Fill_LCMLInitParamsEx(pComponentPrivate->pHandle); 1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandFlush) { 1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 aParam[3] = {0}; 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing input port %d\n",pComponentPrivate->nUnhandledEmptyThisBuffers); 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0 || commandData == -1) { 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->nUnhandledEmptyThisBuffers == 0) { 1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE; 1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0x0; 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0x0; 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing input port\n"); 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl, 1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)aParam); 1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushInputPortCommandPending = OMX_TRUE; 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing out port %d\n",pComponentPrivate->nUnhandledFillThisBuffers); 1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nUnhandledFillThisBuffers == 0) { 1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE; 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0x1; 1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0x0; 1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing output port\n"); 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl, 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)aParam); 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOutputPortCommandPending = OMX_TRUE; 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting WBAMR_DEC_HandleCommand Function\n"); 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Returning %d\n",eError); 1691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone && eError != WBAMR_DEC_EXIT_COMPONENT_THRD ) { 1692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 1695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 1696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 1697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 1698b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @WBAMR_DEC_HandleDataBuf_FromApp() This function is called by the component when ever it 1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* receives the buffer from the application 1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponentPrivate Component private data 1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pBufHeader WBAMR_DEC_Buffer from the application 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader, 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir; 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pLcmlHdr; 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *) 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlHandle; 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 index; 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 frameType; 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 frameLength; 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pExtraData; 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 holdBufferSize; 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nFrames =0; 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL; 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nFilledLenLocal; 1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 TOCentry, hh=0, *TOCframetype=0; 1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 offset = 0; 1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_AudioCodecParams *pParams; 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING p = "damedesuStr"; 1741e972d06c10872e553c829a77e28fac4ea412e70dMasaki Sato DSP_STATUS status; 1742e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_BOOL isFrameParamChanged=OMX_FALSE; 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE * phandle; 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering WBAMR_DEC_HandleDataBuf_FromApp Function\n"); 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin holdBufferSize = INPUT_WBAMRDEC_BUFFER_SIZE * (pComponentPrivate->pInputBufferList->numBuffers + 1); 1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Find the direction of the received buffer from buffer list */ 1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_GetBufferDirection(pBufHeader, &eDir); 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "The PBufHeader is not found in the list\n"); 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1756b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if( pBufHeader->pBuffer == NULL) { 1757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorBadParameter; 1758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 17599f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato } 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) { 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledEmptyThisBuffers--; 1762b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState == OMX_StateIdle){ 1763b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1764b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1765b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader); 1766b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nEmptyBufferDoneCount++; 1767b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 1768b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return input buffers\n", __LINE__, __FUNCTION__); 1769b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1770b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn = pComponentPrivate->pPortDef[OMX_DirInput]; 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( pBufHeader->nFilledLen > 0) 1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( pComponentPrivate->nHoldLength == 0 ) 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { /*There is no holding data*/ 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->mimemode == WBAMRDEC_MIMEMODE) 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "WBAMR_DEC_HandleDataBuf_FromApp - reading WBAMR_DEC_MIMEMODE\n"); 1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->using_rtsp==1){ /* formating data */ 1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFilledLenLocal=pBufHeader->nFilledLen; 1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while(TRUE) 1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin TOCframetype = (OMX_U8*)realloc(TOCframetype, ((hh + 1) * sizeof(OMX_U8))); 1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (TOCframetype == NULL) 1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :WBAMR_DEC_HandleDataBuf_FromApp ERROR: Couldn't realloc memory!",__LINE__); 1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin TOCentry = pBufHeader->pBuffer[0]; 1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin TOCframetype[hh]= TOCentry & 0x7C; 1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin hh++; 1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(TOCentry & 0x80)) 1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memmove(pBufHeader->pBuffer, 1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer + 1, 1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFilledLenLocal); 1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while(nFilledLenLocal> 0 ){ 1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin index = (TOCframetype[nFrames] >> 3) & 0x0F; 1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* adding TOC to each frame */ 1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (offset > pBufHeader->nAllocLen){ 1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: WBAMR_DEC_HandleDataBuf_FromApp :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + offset, 1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &TOCframetype[nFrames], 1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(OMX_U8)); 1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin offset+=pComponentPrivate->wbamrMimeBytes[index]; 1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( offset + 1 + nFilledLenLocal > pBufHeader->nAllocLen){ 1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: WBAMR_DEC_HandleDataBuf_FromApp :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memmove(pBufHeader->pBuffer + offset + 1, 1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer + offset, 1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFilledLenLocal); 1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->wbamrMimeBytes[index] > nFilledLenLocal){ 1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFilledLenLocal = 0; 1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }else{ 1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFilledLenLocal -= pComponentPrivate->wbamrMimeBytes[index]; 1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFrames++; 1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(TOCframetype); 1827b65f253fdc60f6208a54911bee793d225f23cdf8James Dong TOCframetype = NULL; 1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameType = 0; 1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames = 0; 1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i=0; 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while( pBufHeader->nFilledLen > 0 ) 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { /*Reorder the Mime buffer in case that comes*/ 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameType = pBufHeader->pBuffer[i]; /*with more than 1 frame */ 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin index = (frameType >> 3) & 0x0F; 1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nFrames) 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { /*The first frame has no need to be moved*/ 1838b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (((nFrames*INPUT_WBAMRDEC_BUFFER_SIZE_MIME) + pBufHeader->nFilledLen) 1839b65f253fdc60f6208a54911bee793d225f23cdf8James Dong > pBufHeader->nAllocLen) { 1840b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1841b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1842b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memmove(pBufHeader->pBuffer + (nFrames*INPUT_WBAMRDEC_BUFFER_SIZE_MIME), 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pBuffer + i, 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen); 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((index >= NUM_MIME_BYTES_ARRAY) || 1848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((index < NUM_MIME_BYTES_ARRAY) && 1849b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (pComponentPrivate->wbamrMimeBytes[index] == 0))) { 1850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: no more frames index=%d", __LINE__, (int)index); 1851b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (index < NUM_MIME_BYTES_ARRAY) 1852b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: no more frames mimebytes=%d", __LINE__, (int) pComponentPrivate->wbamrMimeBytes[index]); 1853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 1854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen -= pComponentPrivate->wbamrMimeBytes[index]; 1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = (nFrames*INPUT_WBAMRDEC_BUFFER_SIZE_MIME) + (OMX_U16)pComponentPrivate->wbamrMimeBytes[index]; 1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames++; 1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen=nFrames*INPUT_WBAMRDEC_BUFFER_SIZE_MIME; 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->mimemode == WBAMRDEC_IF2) 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "WBAMR_DEC_HandleDataBuf_FromApp - reading WBAMRDEC_IF2\n"); 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames = 0; 1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = 0; 1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (pBufHeader->nFilledLen > 0) 1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Reorder the IF2 buffer in case that has more than 1 frame */ 1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameType = pBufHeader->pBuffer[i]; 1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin index = (frameType >> 4) & 0x0F; 1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nFrames) 1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (((nFrames*INPUT_WBAMRDEC_BUFFER_SIZE_IF2) + pBufHeader->nFilledLen) 1874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong > pBufHeader->nAllocLen) { 1875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memmove(pBufHeader->pBuffer + (nFrames *INPUT_WBAMRDEC_BUFFER_SIZE_IF2), 1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pBuffer + i, 1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen); 1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1882b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((index >= NUM_IF2_BYTES_ARRAY) || 1883b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((index < NUM_IF2_BYTES_ARRAY) && 1884b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (pComponentPrivate->wbamrIf2Bytes[index] == 0))) { 1885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: no more frames index=%d", __LINE__, (int)index); 1886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (index < NUM_IF2_BYTES_ARRAY) 1887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: no more frames mimebytes=%d", __LINE__, (int)pComponentPrivate->wbamrIf2Bytes[index]); 1888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 1889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen -= pComponentPrivate->wbamrIf2Bytes[index]; 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = (nFrames *INPUT_WBAMRDEC_BUFFER_SIZE_IF2) + (OMX_U16)pComponentPrivate->wbamrIf2Bytes[index]; 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames++; 1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen = nFrames * INPUT_WBAMRDEC_BUFFER_SIZE_IF2; 1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "WBAMR_DEC_HandleDataBuf_FromApp - reading WBAMR_DEC_NONMIMEMODE\n"); 1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameLength = INPUT_WBAMRDEC_BUFFER_SIZE; /*/ non Mime mode*/ 1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames = (OMX_U8)(pBufHeader->nFilledLen / frameLength); 1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nFrames>=1 && (WBAMRDEC_FORMATCONFORMANCE == pComponentPrivate->mimemode)) 1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* At least there is 1 frame in the buffer */ 1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = pBufHeader->nFilledLen - frameLength*nFrames; 1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( pComponentPrivate->nHoldLength > 0 ) {/* something need to be hold in iHoldBuffer */ 1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pHoldBuffer == NULL) { 1910e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pComponentPrivate->pHoldBuffer, (INPUT_WBAMRDEC_BUFFER_SIZE * (pComponentPrivate->pInputBufferList->numBuffers + 3)),void); 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copy the extra data into pHoldBuffer. Size will be nHoldLength. */ 1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pExtraData = pBufHeader->pBuffer + INPUT_WBAMRDEC_BUFFER_SIZE*nFrames; 1914b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* check the pHoldBuffer boundary before copying */ 1915b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->nHoldLength > 1916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (INPUT_WBAMRDEC_BUFFER_SIZE * (pComponentPrivate->pInputBufferList->numBuffers + 3))) 1917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (pComponentPrivate->pHoldBuffer, pExtraData, pComponentPrivate->nHoldLength); 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->mimemode == WBAMRDEC_FORMATCONFORMANCE) 1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* received buffer with less than 1 AMR frame. Save the data in iHoldBuffer.*/ 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = pBufHeader->nFilledLen; 1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* save the data into iHoldBuffer.*/ 1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pHoldBuffer == NULL) { 1932e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pComponentPrivate->pHoldBuffer, (INPUT_WBAMRDEC_BUFFER_SIZE * (pComponentPrivate->pInputBufferList->numBuffers + 3)),void); 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Not enough data to be sent. Copy all received data into iHoldBuffer.*/ 1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Size to be copied will be iHoldLen == mmData->BufferSize() */ 1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset (pComponentPrivate->pHoldBuffer, 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE * (pComponentPrivate->pInputBufferList->numBuffers + 1)); 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy (pComponentPrivate->pHoldBuffer, pBufHeader->pBuffer, pComponentPrivate->nHoldLength); 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* since not enough data, we shouldn't send anything to SN, but instead request to EmptyBufferDone again.*/ 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Calling EmptyBufferDone\n"); 1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBufHeader, pBuffer), 1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader); 1953b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* iHoldBuffer has data. There is no possibility that data in iHoldBuffer is less for 1 frame without*/ 1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* lastBufferFlag being set. Unless it's a corrupt file.*/ 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copy the data in dataPtr to iHoldBuffer. Update the iHoldBuffer size (iHoldLen).*/ 1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pExtraData = pComponentPrivate->pHoldBuffer + pComponentPrivate->nHoldLength; 1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pExtraData,pBufHeader->pBuffer,pBufHeader->nFilledLen); 1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength += pBufHeader->nFilledLen; 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Check if it is mime mode or non-mime mode to decide the frame length to be sent down*/ 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* to DSP/ALG.*/ 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->mimemode == WBAMRDEC_MIMEMODE) 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameType = pComponentPrivate->pHoldBuffer[0]; 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin index = ( frameType >> 3 ) & 0x0F; 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameLength = pComponentPrivate->wbamrMimeBytes[index]; 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->mimemode == WBAMRDEC_IF2) 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameType = pComponentPrivate->pHoldBuffer[0]; 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin index = ( frameType >> 4 ) & 0x0F; 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameLength = pComponentPrivate->wbamrIf2Bytes[index]; 1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frameLength = INPUT_WBAMRDEC_BUFFER_SIZE; 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames = (OMX_U8)(pComponentPrivate->nHoldLength / frameLength); 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nFrames >= 1 ) { 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copy the data from pComponentPrivate->pHoldBuffer to pBufHeader->pBuffer*/ 1990b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* check the pBufHeader boundery before copying */ 1991b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((nFrames*frameLength) > pBufHeader->nAllocLen) 1992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_WbAmrDec_Utils.c :: ERROR: Trying to write beyond buffer boundaries!",__LINE__); 1994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memcpy(pBufHeader->pBuffer,pComponentPrivate->pHoldBuffer,nFrames*frameLength); 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen = nFrames*frameLength; 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Now the pHoldBuffer has pBufHeader->nFilledLen fewer bytes, update nHoldLength*/ 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = pComponentPrivate->nHoldLength - pBufHeader->nFilledLen; 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Shift the remaining bytes to the beginning of the pHoldBuffer */ 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pExtraData = pComponentPrivate->pHoldBuffer + pBufHeader->nFilledLen; 2002b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->nHoldLength < pBufHeader->nFilledLen) 2003b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memcpy(pComponentPrivate->pHoldBuffer,pExtraData,pComponentPrivate->nHoldLength); 2004b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 2005b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memmove(pComponentPrivate->pHoldBuffer,pExtraData,pComponentPrivate->nHoldLength); 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Clear the rest of the data from the pHoldBuffer */ 2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pExtraData = pComponentPrivate->pHoldBuffer + pComponentPrivate->nHoldLength;*/ 2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*mset(pExtraData,0,holdBufferSize - pComponentPrivate->nHoldLength);*/ 2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Calling EmptyBufferDone\n"); 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBufHeader, pBuffer), 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle, 2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader); 2024b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pBufHeader->nFlags & OMX_BUFFERFLAG_EOS) != OMX_BUFFERFLAG_EOS){ 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]->pBuffer,0,PERF_ModuleHLMM); 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone( pComponentPrivate->pHandle, 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]); 2042b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2043b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames=1; 2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nFrames >= 1){ 2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr); 2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid WBAMR_DEC_Buffer Came ...\n"); 2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*For Steady State Instumentation*/ 2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->nLcml_nCntIp == 1)) { 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBufHeader,pBuffer), 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nBufferSize, 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)pLcmlHandle->pCodecinterfacehandle)->pCodec); 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (pLcmlHdr->pBufferParam->usNbFrames < nFrames) && (pLcmlHdr->pFrameParam!=NULL) ){ 2074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pLcmlHdr->pFrameParam, WAMRDEC_FrameStruct); /*This means that more memory need to be used*/ 2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DmmUnMap(phandle->dspCodec->hProc, /*Unmap DSP memory used*/ 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)pLcmlHdr->pBufferParam->pParamElem, 207700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong pLcmlHdr->pDmmBuf->pReserved, pComponentPrivate->dbg); 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = NULL; 2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2080eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong 2081b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pLcmlHdr->pFrameParam==NULL ){ 2082b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pLcmlHdr->pFrameParam, (sizeof(WAMRDEC_FrameStruct)*nFrames),WAMRDEC_FrameStruct); 2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_DmmMap(phandle->dspCodec->hProc, 2084e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong nFrames*sizeof(WAMRDEC_FrameStruct), 2085e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong (void*)pLcmlHdr->pFrameParam, 208600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong (pLcmlHdr->pDmmBuf), pComponentPrivate->dbg); 2087e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong 2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_DmmMap ERRROR!!!!\n\n"); 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = (WAMRDEC_FrameStruct *)pLcmlHdr->pDmmBuf->pMapped;/*DSP Address*/ 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0;i<nFrames;i++){ 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+i)->usLastFrame = 0; 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+i)->usFrameLost = 0; 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* We only support frame lost error concealment if there is one frame per buffer */ 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nFrames == 1) 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if the bFrameLost flag is set it means that the client has 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin indicated that the next frame is corrupt so set the frame lost 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frame parameter */ 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFrameLost == 1) 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pFrameParam->usFrameLost = 1; 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* clear the internal frame lost flag */ 2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFrameLost = OMX_FALSE; 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2112e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong isFrameParamChanged = OMX_TRUE; 2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /** ring tone**/ 2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->SendAfterEOS == 1){ 2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "reconfiguring SN\n"); 2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 pValues[4]; 2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "---- Comp: DASF Functionality is ON ---\n"); 2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->streamID == 0) 2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n"); 2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, ":: Error = OMX_ErrorInsufficientResources\n"); 2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n"); 2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "AM: No Stream ID Available"); 2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2135b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->pParams, sizeof(WBAMR_DEC_AudioCodecParams),WBAMR_DEC_AudioCodecParams); 2136b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pParams = pComponentPrivate->pParams; 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iAudioFormat = 1; 2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iSamplingRate = 16000; 2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pParams->iStrmId = pComponentPrivate->streamID; 2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[1] = (OMX_U32)pParams; 2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[2] = sizeof(WBAMR_DEC_AudioCodecParams); 2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec StreamControl..\n"); 2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStart, (void *)p); 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Start..\n"); 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 0; 2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pBufHeader->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) { 2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+(nFrames-1))->usLastFrame |= OMX_BUFFERFLAG_EOS; 2181e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong isFrameParamChanged = OMX_TRUE; 2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFlags = 0; 2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->dasfmode){ 2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pBufHeader->nFilledLen){ 2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS; 2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pComponentPrivate->pHandle, 2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventBufferFlag, 2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nOutputPortIndex, 2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags, NULL); 2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 1; 2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "OMX_WbAmrDec_Utils.c : pComponentPrivate->SendAfterEOS %d\n",pComponentPrivate->SendAfterEOS); 2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2197e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong if (isFrameParamChanged == OMX_TRUE) { 2198e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong isFrameParamChanged = OMX_FALSE; 2199e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong //Issue an initial memory flush to ensure cache coherency */ 2200e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_PRINT1(pComponentPrivate->dbg, "OMX_WbAmrDec_Utils.c : flushing pFrameParam\n"); 2201e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong status = DSPProcessor_FlushMemory(phandle->dspCodec->hProc, pLcmlHdr->pFrameParam, nFrames*sizeof(WAMRDEC_FrameStruct), 0); 2202e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong if(DSP_FAILED(status)) 2203e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong { 2204e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMXDBG_PRINT(stderr, ERROR, 4, 0, "Unable to flush mapped buffer: error 0x%x",(int)status); 2205e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong goto EXIT; 2206e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong } 2207e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong } 2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->usNbFrames = nFrames; 2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*---------------------------------------------------------------*/ 2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Store time stamp information */ 2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndex[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Store nTickCount information */ 2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex++; 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex %= pPortDefIn->nBufferCountActual; 2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < INPUT_WBAMRDEC_BUFFER_SIZE_MIME; i++) 2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Queueing pBufHeader->pBuffer[%d] = %x\n",i,pBufHeader->pBuffer[i]); 2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) 2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WBAMR_DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) 2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput,__LINE__); 2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->mimemode == WBAMRDEC_MIMEMODE) 2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecInputBuffer, 2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pBufHeader->pBuffer, 2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE_MIME*nFrames, 2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE_MIME*nFrames, 2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pLcmlHdr->pBufferParam, 2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->mimemode == WBAMRDEC_IF2) 2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecInputBuffer, 2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pBufHeader->pBuffer, 2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE_IF2*nFrames, 2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE_IF2*nFrames, 2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pLcmlHdr->pBufferParam, 2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else /*Standard*/ 2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecInputBuffer, 2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pBufHeader->pBuffer, 2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE*nFrames, 2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin INPUT_WBAMRDEC_BUFFER_SIZE*nFrames, 2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pLcmlHdr->pBufferParam, 2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf++; 2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else if(pComponentPrivate->curState == OMX_StatePause){ 2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader->pMarkData){ 2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pOutputBufferList->pBufHdr[0]!=NULL){ 2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* copy mark to output buffer header */ 2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData; 2267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent; 2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* trigger event handler if we are supposed to */ 2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){ 2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventMark, 2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pMarkData); 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2280b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 2281b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "line %d:: No Frames in Buffer, calling EmptyBufferDone\n",__LINE__); 2283b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nEmptyBufferDoneCount++; 2284b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __PERF_INSTRUMENTATION__ 2285b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2286b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader->pBuffer, 2287b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 0, 2288b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleHLMM); 2289b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 2290b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EmptyBufferDone( pComponentPrivate->pHandle, 2291b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 2292b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader); 2293b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2294b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFlushInputPortCommandPending) { 2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SendCommand(pComponentPrivate->pHandle,OMX_CommandFlush,0,NULL); 2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (eDir == OMX_DirOutput) { 2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Make sure that output buffer is issued to output stream only when 2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * there is an outstanding input buffer already issued on input stream 2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*******/ 2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledFillThisBuffers--; 2308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState == OMX_StateIdle){ 2309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 2310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 2311b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader); 2312b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nFillBufferDoneCount++; 2313b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2314b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return output buffers\n", __LINE__, __FUNCTION__); 2315b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 2316b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr); 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)pLcmlHandle->pCodecinterfacehandle)->pCodec); 2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBufHeader,pBuffer), 2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames = (OMX_U8)(pBufHeader->nAllocLen/OUTPUT_WBAMRDEC_BUFFER_SIZE); 2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (pLcmlHdr->pBufferParam->usNbFrames < nFrames) && (pLcmlHdr->pFrameParam!=NULL) ){ 2332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pLcmlHdr->pFrameParam, WAMRDEC_FrameStruct); 2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DmmUnMap(phandle->dspCodec->hProc, /*Unmap DSP memory used*/ 2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)pLcmlHdr->pBufferParam->pParamElem, 233500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong pLcmlHdr->pDmmBuf->pReserved, pComponentPrivate->dbg); 2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = NULL; 2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pLcmlHdr->pFrameParam==NULL ){ 2340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pLcmlHdr->pFrameParam, (sizeof(WAMRDEC_FrameStruct)*nFrames),WAMRDEC_FrameStruct); 2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_DmmMap(phandle->dspCodec->hProc, 2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrames*sizeof(WAMRDEC_FrameStruct), 2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)pLcmlHdr->pFrameParam, 234400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong (pLcmlHdr->pDmmBuf), 234500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong pComponentPrivate->dbg); 2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "OMX_DmmMap ERRROR!!!!\n"); 2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = (WAMRDEC_FrameStruct *)pLcmlHdr->pDmmBuf->pMapped;/*DSP Address*/ 2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pBufferParam->usNbFrames = nFrames; 2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0;i<pLcmlHdr->pBufferParam->usNbFrames;i++){ 2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+i)->usLastFrame = 0; 2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+i)->usFrameLost = 0; 2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2362e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong 2363e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong //Issue an initial memory flush to ensure cache coherency */ 2364e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_PRINT1(pComponentPrivate->dbg, "OMX_WbAmrDec_Utils.c : flushing pFrameParam output\n"); 2365e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong status = DSPProcessor_FlushMemory(phandle->dspCodec->hProc, pLcmlHdr->pFrameParam, nFrames*sizeof(WAMRDEC_FrameStruct), 0); 2366e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong if(DSP_FAILED(status)) 2367e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong { 2368e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMXDBG_PRINT(stderr, ERROR, 4, 0, "Unable to flush mapped buffer: error 0x%x",(int)status); 2369e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong goto EXIT; 2370e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong } 2371e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong 2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WBAMR_DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) { 2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__); 2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecOuputBuffer, 2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OUTPUT_WBAMRDEC_BUFFER_SIZE*nFrames, 2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OUTPUT_WBAMRDEC_BUFFER_SIZE*nFrames, 2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pBufferParam, 2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(WBAMRDEC_ParamStruct), 2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "IssuingDSP OP: Error Occurred\n"); 2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf++; 2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause) { 2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFlushOutputPortCommandPending) { 2397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SendCommand( pComponentPrivate->pHandle, 2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1,NULL); 2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 2407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (TOCframetype != NULL) { 2408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong free(TOCframetype); 2409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting from WBAMR_DEC_HandleDataBuf_FromApp \n"); 2411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Returning error %d\n",eError); 2412b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 2413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 2415b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 2416b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 2417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 2418b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 2419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* WBAMR_DEC_GetBufferDirection () This function is used by the component thread to 2428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* request a buffer from the application. Since it was called from 2 places, 2429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* it made sense to turn this into a small function. 2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 2431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pData pointer to AMR Decoder Context Structure 2432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pCur pointer to the buffer to be requested to be filled 2433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 2434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval none 2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin**/ 2436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir) 2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate; 2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBuf; 2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuf = NULL; 2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 flag = 1,i; 2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering WBAMR_DEC_GetBufferDirection Function\n"); 2447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Search this buffer in input buffers list */ 2449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 2450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nBuf; i++) 2451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i]; 2453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader == pBuf) 2454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *eDir = OMX_DirInput; 2456b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "WBAMR_DEC_Buffer %p is INPUT BUFFER\n", pBufHeader); 2457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin flag = 0; 2458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Search this buffer in input buffers list */ 2463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuf = pComponentPrivate->pOutputBufferList->numBuffers; 2464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nBuf; i++) 2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 2468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader == pBuf) 2469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *eDir = OMX_DirOutput; 2471b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "WBAMR_DEC_Buffer %p is OUTPUT BUFFER\n", pBufHeader); 2472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin flag = 0; 2473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (flag == 1) 2478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "WBAMR_DEC_Buffer %p is Not Found in the List\n",pBufHeader); 2480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 2481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 2484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting WBAMR_DEC_GetBufferDirection Function\n"); 2485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Callback() function will be called LCML component to write the msg 2491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param msgBuffer This buffer will be returned by the LCML 2493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_LCML_Callback (TUsnCodecEvent event,void * args [10]) 2499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *pBuffer = args[1]; 2502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pLcmlHdr; 2503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE rm_error = OMX_ErrorNone; 2505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* ssize_t ret; */ 2507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle; 2508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 i; 2509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMRDEC_BUFDATA *OutputFrames; 2510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef WBAMR_DEC_DEBUG 2511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *phandle = (LCML_DSP_INTERFACE *)args[6]; 2512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 2514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 2516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2517e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong DSP_STATUS status; 2518e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong LCML_DSP_INTERFACE *dspphandle = (LCML_DSP_INTERFACE *)args[6]; 2519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE* pComponentPrivate = NULL; 2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate; 2522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Entering the WBAMR_DEC_LCML_Callback Function\n"); 2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "args = %p ",args[0]); 2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "event = %d\n",event); 2528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(event) { 2530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecDspError: 2532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecDspError\n"); 2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecInternalError: 2536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecInternalError\n"); 2537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecInitError: 2540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecInitError\n"); 2541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecDspMessageRecieved: 2544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved\n"); 2545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecBufferProcessed: 2548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferProcessed\n"); 2549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingStarted: 2552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStarted\n"); 2553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingPaused: 2556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingPaused\n"); 2557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingStoped: 2560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStoped\n"); 2561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecProcessingEof: 2564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingEof\n"); 2565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecBufferNotProcessed: 2568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed\n"); 2569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecAlgCtrlAck: 2572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck\n"); 2573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecStrmCtrlAck: 2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck\n"); 2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == EMMCodecBufferProcessed) 2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( ((OMX_U32)args [0] == EMMCodecInputBuffer) && 2584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled)) { 2585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Input: pBuffer = %p\n", pBuffer); 2586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirInput, &pLcmlHdr); 2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 2590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid WBAMR_DEC_Buffer Came ...\n"); 2596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_ClearPending(pComponentPrivate,pLcmlHdr->buffer,OMX_DirInput,__LINE__); 2599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Calling EmptyBufferDone\n"); 2601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->nHoldLength = %ld\n",pComponentPrivate->nHoldLength); 2602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 2603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 2605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 2606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 2610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer); 2612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf--; 2614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf++; 2615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if ((OMX_U32)args [0] == EMMCodecOuputBuffer) { 2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Output: pBufferr = %p\n", pBuffer); 2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WBAMR_DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirOutput, &pLcmlHdr); 2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "Error: Invalid WBAMR_DEC_Buffer Came ...\n"); 2622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->bStopSent) 2625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = (OMX_U32)args[8]; 2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = 0; 2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "WBAMR_DEC_LCML_Callback::: pLcmlHdr->buffer->nFilledLen = %ld\n",pLcmlHdr->buffer->nFilledLen); 2632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OutputFrames = (pLcmlHdr->buffer)->pOutputPortPrivate; 2633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OutputFrames->nFrames = (OMX_U8) ((OMX_U32)args[8] / OUTPUT_WBAMRDEC_BUFFER_SIZE); 2634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 2637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 2638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,nFilledLen), 2639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nLcml_nCntOpReceived++; 2641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->nLcml_nCntIp >= 1) && (pComponentPrivate->nLcml_nCntOpReceived == 1)) { 2642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 2643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 2644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_ClearPending(pComponentPrivate,pLcmlHdr->buffer,OMX_DirOutput,__LINE__); 2648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones++; 2649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Incremented pComponentPrivate->nOutStandingFillDones = %ld\n",pComponentPrivate->nOutStandingFillDones); 2650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0;i<pLcmlHdr->pBufferParam->usNbFrames;i++){ 2651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((((pLcmlHdr->pFrameParam+i)->usLastFrame) & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS){ 2652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pLcmlHdr->pFrameParam+i)->usLastFrame = 0; 2653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nFlags |= OMX_BUFFERFLAG_EOS; 2654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "On Component receiving OMX_BUFFERFLAG_EOS on output\n"); 2655e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong //Issue an initial memory flush to ensure cache coherency */ 2656e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_PRINT1(pComponentPrivate->dbg, "OMX_WbAmrDec_Utils.c : flushing pFrameParam2\n"); 2657e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong status = DSPProcessor_FlushMemory(dspphandle->dspCodec->hProc, pLcmlHdr->pFrameParam, pLcmlHdr->pBufferParam->usNbFrames*sizeof(WAMRDEC_FrameStruct), 0); 2658e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong if(DSP_FAILED(status)) 2659e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong { 2660e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMXDBG_PRINT(stderr, ERROR, 4, 0, "Unable to flush mapped buffer: error 0x%x",(int)status); 2661e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong goto EXIT; 2662e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong } 2663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copying time stamp information to output buffer */ 2667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->OpBufindex]; 2668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copying nTickCount information to output buffer */ 2669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nTickCount = pComponentPrivate->arrTickCount[pComponentPrivate->OpBufindex]; 2670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->OpBufindex++; 2671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual; 2672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->LastOutbuf = pLcmlHdr->buffer; 2674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff++; 2675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Calling FillBufferDone From Line\n"); 2676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERFcomp, 2678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 2679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,nFilledLen), 2680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pHandle, 2683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer); 2685b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf--; 2687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->app_nBuf++; 2688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 2689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 2690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Incrementing app_nBuf = %ld\n",pComponentPrivate->app_nBuf); 2691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (event == EMMCodecStrmCtrlAck) { 2693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "GOT MESSAGE USN_DSPACK_STRMCTRL ----\n"); 2694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[1] == (void *)USN_STRMCMD_FLUSH) { 2695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 2696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( args[2] == (void *)EMMCodecInputBuffer) { 2697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) { 2698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing input port\n"); 2699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 2700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 2701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]); 2703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 2704b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumInputBufPending=0; 2707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 2711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_INPUT_PORT, 2712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 2714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "LCML reported error while flushing input port\n"); 2715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( args[2] == (void *)EMMCodecOuputBuffer) { 2719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) { 2720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM1(pComponentPrivate->dbg, "Flushing output port\n"); 2721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 2722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pHandle, 2723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]); 2725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 2726b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nFillBufferDoneCount++; 2727b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending=0; 2730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 2734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_OUTPUT_PORT, 2735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 2737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "LCML reported error while flushing output port\n"); 2738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(event == EMMCodecProcessingStoped) { 2744b65f253fdc60f6208a54911bee793d225f23cdf8James Dong for (i = 0; i < pComponentPrivate->nNumInputBufPending; i++) { 27459f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 27469f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->pHandle->pApplicationPrivate, 27479f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->pInputBufHdrPending[i]); 27489f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->pInputBufHdrPending[i] = NULL; 2749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nEmptyBufferDoneCount++; 2750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 27519f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato } 27529f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->nNumInputBufPending = 0; 27539f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 27549f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 27559f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->pHandle->pApplicationPrivate, 27569f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->pOutputBufHdrPending[i]); 2757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nFillBufferDoneCount++; 2758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong SignalIfAllBuffersAreReturned(pComponentPrivate); 2759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nOutStandingFillDones--; 2760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufHdrPending[i] = NULL; 27619f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato } 27629f5a830905605f5156ad0fab60473d19f8044d0aMasaki Sato pComponentPrivate->nNumOutputBufPending=0; 2763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 2764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->codecStop_waitingsignal == 0){ 2765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 1; 2766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->codecStop_threshold); 2767b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2(pComponentPrivate->dbg, "stop ack. received. stop waiting for sending disable command completed\n"); 2768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 2770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "pComponentPrivate->bNoIdleOnStop = %ld\n",pComponentPrivate->bNoIdleOnStop); 2772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->bNoIdleOnStop) { 2773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending=0; 2774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* pComponentPrivate->ProcessingInputBuf=0; 2775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ProcessingOutputBuf=0; */ 2776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 2777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* pComponentPrivate->InBuf_Eos_alreadysent =0; */ 2778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* OMX_NBMEMFREE_STRUCT(pComponentPrivate->pHoldBuffer); */ 2779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* OMX_NBMEMFREE_STRUCT(pComponentPrivate->iMMFDataLastBuffer); */ 2780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 2781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pHandle, 2783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin RMProxy_StateSet, 2784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WBAMR_Decoder_COMPONENT, 2785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateIdle, 2786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3456, 2787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2789b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if((pComponentPrivate->nEmptyThisBufferCount != pComponentPrivate->nEmptyBufferDoneCount) || (pComponentPrivate->nFillThisBufferCount != pComponentPrivate->nFillBufferDoneCount)) { 2790b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_lock(&bufferReturned_mutex) != 0) 2791b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2792b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: bufferReturned_mutex mutex lock error\n",__LINE__); 2793b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2794b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2(pComponentPrivate->dbg, ":: pthread_cond_waiting for OMX to return all input and outbut buffers\n"); 2795b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_cond_wait(&bufferReturned_condition, &bufferReturned_mutex); 2796b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2(pComponentPrivate->dbg, ":: OMX has returned all input and output buffers\n"); 2797b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_unlock(&bufferReturned_mutex) != 0) 2798b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2799b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: bufferReturned_mutex mutex unlock error\n",__LINE__); 2800b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2801b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2802b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 2803b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2804b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 1, 0, "OMX has returned all input and output buffers"); 2805b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bPreempted == 0) { 2808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 2813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorResourcesPreempted, 2820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0); 2822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 2825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_FALSE; 2826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE; 2827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event == EMMCodecProcessingPaused) { 2830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StatePause; 2831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send StateChangeNotification to application */ 2832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 2837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event == EMMCodecDspError) { 2841b65f253fdc60f6208a54911bee793d225f23cdf8James Dong switch ( (OMX_U32) args [4]) 2842b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2843b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* USN_ERR_NONE,: Indicates that no error encountered during execution of the command and the command execution completed succesfully. 2844b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_WARNING,: Indicates that process function returned a warning. The exact warning is returned in Arg2 of this message. 2845b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_PROCESS,: Indicates that process function returned a error type. The exact error type is returnd in Arg2 of this message. 2846b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_PAUSE,: Indicates that execution of pause resulted in error. 2847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_STOP,: Indicates that execution of stop resulted in error. 2848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_ALGCTRL,: Indicates that execution of alg control resulted in error. 2849b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_STRMCTRL,: Indiactes the execution of STRM control command, resulted in error. 2850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_UNKNOWN_MSG,: Indicates that USN received an unknown command. */ 2851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2852b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__ 2853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_PAUSE: 2854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_STOP: 2855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_ALGCTRL: 2856b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_STRMCTRL: 2857b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_UNKNOWN_MSG: 2858eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong 2859b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2860b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->bIsInvalidState=OMX_TRUE; 2861b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->curState = OMX_StateInvalid; 2862b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle = pComponentPrivate->pHandle; 2863b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pHandle, 2864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 2865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 2866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ErrorInvalidState, 2867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 2868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 2869eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong } 2870b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2871eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#endif 2872eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong 2873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_WARNING: 2874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_PROCESS: 2875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMRDEC_HandleUSNError (pComponentPrivate, (OMX_U32)args[5]); 2876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 2878b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /***********************************************************/ 2883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == EMMCodecDspMessageRecieved) { 2884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "commandedState = %p\n",args[0]); 2885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "arg1 = %p\n",args[1]); 2886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "arg2 = %p\n",args[2]); 2887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 2890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event ==EMMCodecInitError){ 2892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Cheking for MMU_fault */ 2893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((int)args[4] == USN_ERR_UNKNOWN_MSG) && (args[5] == (void*) NULL)) { 2894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsInvalidState=OMX_TRUE; 2895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 2897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 2901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event ==EMMCodecInternalError){ 2906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Cheking for MMU_fault */ 2907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(((int)args[4] == USN_ERR_UNKNOWN_MSG) && (args[5] == (void*)NULL)) { 2908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsInvalidState=OMX_TRUE; 2909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 2911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 2915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 2922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting the WBAMR_DEC_LCML_Callback Function\n"); 2923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * WBAMR_DEC_GetCorresponding_LCMLHeader() function will be called by WMADEC_LCML_Callback 2929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * component to write the msg 2930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pBuffer, Event which gives to details about USN status 2931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param LCML_WBAMR_DEC_BUFHEADERTYPE **ppLcmlHdr 2932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_GetCorresponding_LCMLHeader(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, 2939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *pBuffer, 2940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir, 2941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE **ppLcmlHdr) 2942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pLcmlBufHeader; 2945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 nIpBuf; 2946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 nOpBuf; 2947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S16 i; 2948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE*) pComponentPrivate; 2950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 2951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 2952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (!pComponentPrivate->bInitParamsInitialized) { 2954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Waiting for init to complete\n"); 2955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 2957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Sleep(1); 2959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "eDir = %d\n",eDir); 2963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eDir == OMX_DirInput) { 2964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_INPUT_PORT]; 2965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 2966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 2967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 2968b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2(pComponentPrivate->dbg, "Corresponding LCML Header Found\n"); 2969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader++; 2972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (eDir == OMX_DirOutput) { 2974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_OUTPUT_PORT]; 2975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nOpBuf; i++) { 2977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 2979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 2980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Corresponding LCML Header Found\n"); 2981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader++; 2984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 2986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, " Invalid WBAMR_DEC_Buffer Type :: exiting...\n"); 2987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 2990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * WMADEC_GetLCMLHandle() 2998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_HANDLETYPE 3000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -------------------------------------------------------------------*/ 3002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE WBAMR_DEC_GetLCMLHandle(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 3003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *handle; 3005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE); 3006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 3007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *error; 3008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError; 3009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_GetLCMLHandle\n"); 3011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 3012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!handle) { 3013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(dlerror(), stderr); 3014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle = dlsym (handle, "GetHandle"); 3018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((error = dlerror()) != NULL) { 3019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(error, stderr); 3020e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong dlclose(handle); 3021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = (*fpGetHandle)(&pHandle); 3024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 3025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 3026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "eError != OMX_ErrorNone...\n"); 3027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = NULL; 3028e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong dlclose(handle); 3029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLcmlHandleOpened = 1; 3033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 3034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ptrLibLCML=handle; /* saving LCML lib pointer */ 3036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 3037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "WBAMR_DEC_GetLCMLHandle returning %p\n",pHandle); 3038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 3040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin//WINDOWS Explicit dll load procedure 3045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE WBAMR_DEC_GetLCMLHandle(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 3046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 3048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 3049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError; 3050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HINSTANCE hDLL; // Handle to DLL 3051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 3052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0); 3054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDLL == NULL) 3055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //fputs(dlerror(), stderr); 3057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "BML Load Failed!!!\n"); 3058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 3059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 3062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!fpGetHandle1) 3063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // handle the error 3065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(hDLL); 3066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 3068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // call the function 3071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = fpGetHandle1(&pHandle); 3072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 3073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 3074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "eError != OMX_ErrorNone...\n"); 3075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = NULL; 3078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 3079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 3082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 3084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 3089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_FreeLCMLHandle(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 3091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int retValue; 3094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bLcmlHandleOpened) { 3097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retValue = dlclose(pComponentPrivate->pLcmlHandle); 3098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (retValue != 0) { 3100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 3101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLcmlHandleOpened = 0; 3103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_FreeLCMLHandle(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 3111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int retValue; 3114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bLcmlHandleOpened) { 3117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retValue = FreeLibrary(pComponentPrivate->pLcmlHandle); 3119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (retValue == 0) { /* Zero Indicates failure */ 3120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 3121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLcmlHandleOpened = 0; 3123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn WBAMR_DEC_SetPending() description for WMADEC_SetPending 3134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinWMADEC_SetPending(). 3135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinThis component is called when a buffer is queued to the LCML 3136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 3137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 3139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 3141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 3143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 3144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid WBAMR_DEC_SetPending(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 3147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) { 3151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 3152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 3153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 1; 3154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************INPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber); 3155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 3160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 3161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1; 3162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************OUTPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber); 3163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn WBAMR_DEC_ClearPending() description for WBAMR_DEC_ClearPending 3170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_ClearPending(). 3171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin This component is called when a buffer is returned from the LCML 3172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 3173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre 3175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post 3177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return OMX_ERRORTYPE 3179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 3180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid WBAMR_DEC_ClearPending(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 3183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) { 3187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 3188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 3189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 0; 3190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************INPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber); 3191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 3196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 3197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0; 3198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************OUTPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber); 3199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn WBAMR_DEC_IsPending() description for WBAMR_DEC_IsPending 3206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_IsPending(). 3207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin This method returns the pending status to the buffer 3208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 3209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre 3211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post 3213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return OMX_ERRORTYPE 3215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 3216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WBAMR_DEC_IsPending(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 3219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) { 3223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 3224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 3225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pComponentPrivate->pInputBufferList->bBufferPending[i]; 3226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 3231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 3232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pComponentPrivate->pOutputBufferList->bBufferPending[i]; 3233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return -1; 3237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn WBAMR_DEC_IsValid() description for WBAMR_DEC_IsValid 3242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_IsValid(). 3243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin This method checks to see if a buffer returned from the LCML is valid. 3244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of the component 3245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre 3247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post 3249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return OMX_ERRORTYPE 3251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 3252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WBAMR_DEC_IsValid(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) 3255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int found=0; 3258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) { 3260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 3261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) { 3262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin found = 1; 3263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 3268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) { 3269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin found = 1; 3270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return found; 3274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn WBAMR_DEC_Fill_LCMLInitParamsEx() description for WBAMR_DEC_Fill_LCMLInitParamsEx 3279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinWBAMR_DEC_Fill_LCMLInitParamsEx(). 3280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinThis method fills the LCML init parameters. 3281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent handle for this instance of the component 3282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre 3284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post 3286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 3288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 3289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WBAMR_DEC_Fill_LCMLInitParamsEx (OMX_HANDLETYPE pComponent ) 3292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize; 3295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp; 3297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int size_lcml; 3298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 3300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate; 3301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WBAMR_DEC_BUFHEADERTYPE *pTemp_lcml; 3302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "WBAMR_DEC_Fill_LCMLInitParams\n "); 3304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, DSP, 1, 0, "pHandle = %p\n",pHandle); 3305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, DSP, 1, 0, "pHandle->pComponentPrivate = %p\n",pHandle->pComponentPrivate); 3306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 3307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 3309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->mimemode == 1) 3311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE_MIME; 3312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->mimemode == 2) 3313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE_IF2; 3315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 3317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WBAMRDEC_BUFFER_SIZE; 3318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 3321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBufSize = OUTPUT_WBAMRDEC_BUFFER_SIZE; 3322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = nIpBuf * sizeof(LCML_WBAMR_DEC_BUFHEADERTYPE); 3325e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml,LCML_WBAMR_DEC_BUFHEADERTYPE); 3326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_INPUT_PORT] = pTemp_lcml; 3327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 3329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 3330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 3331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 3332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 3333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 3334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 3335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = WBAMR_DEC_NOT_USED; 3336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 3337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 3338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3339e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pBufferParam, 3340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WBAMRDEC_ParamStruct), 3341b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMRDEC_ParamStruct); 3342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3343e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pTemp_lcml->pDmmBuf, DMM_BUFFER_OBJ); 3344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pFrameParam = NULL; 3346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->usNbFrames =0; 3347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->pParamElem = NULL; 3348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 3350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application to indicate the last buffer */ 3351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = WBAMR_DEC_NORMAL_BUFFER; 3352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 3354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 3357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This memory pointer will be sent to LCML */ 3358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = nOpBuf * sizeof(LCML_WBAMR_DEC_BUFHEADERTYPE); 3359e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml,LCML_WBAMR_DEC_BUFHEADERTYPE); 3360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[WBAMR_DEC_OUTPUT_PORT] = pTemp_lcml; 3361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 3363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 3364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 3365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 3366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER; 3367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER; 3368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 3369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 3370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = WBAMR_DEC_NOT_USED; 3371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pFrameParam = NULL; 3372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3373e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pBufferParam, 3374b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WBAMRDEC_ParamStruct), 3375b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WBAMRDEC_ParamStruct); 3376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->usNbFrames =0; 3378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pBufferParam->pParamElem = NULL; 3379e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong OMX_MALLOC_GENERIC(pTemp_lcml->pDmmBuf ,DMM_BUFFER_OBJ); 3380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 3382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 3383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "pTemp_lcml = %p\n",pTemp_lcml); 3384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "pTemp_lcml->buffer = %p\n",pTemp_lcml->buffer); 3385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = WBAMR_DEC_NORMAL_BUFFER; 3387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp++; 3389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 3390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 3392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting WBAMR_DEC_Fill_LCMLInitParams"); 3395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 3397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 3398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 3401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_DmmMap () method is used to allocate the memory using DMM. 3402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param ProcHandle - Component identification number 3404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param size - Buffer header address, that needs to be sent to codec 3405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pArmPtr - Message used to send the buffer to codec 3406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pDmmBuf - buffer id 3407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone - Success 3409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware - Hardware Error 3410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 3411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_DmmMap(DSP_HPROCESSOR ProcHandle, 3412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int size, 3413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* pArmPtr, 341400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong DMM_BUFFER_OBJ* pDmmBuf, struct OMX_TI_Debug dbg) 3415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 3417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 3418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nSizeReserved = 0; 3419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pDmmBuf == NULL) 3421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 342200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "pBuf is NULL\n"); 3423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 3424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pArmPtr == NULL) 3428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 342900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "pBuf is NULL\n"); 3430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 3431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Allocate */ 3435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pAllocated = pArmPtr; 3436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Reserve */ 3438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nSizeReserved = ROUND_TO_PAGESIZE(size) + 2*DMM_PAGE_SIZE ; 3439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_ReserveMemory(ProcHandle, nSizeReserved, &(pDmmBuf->pReserved)); 3440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 344100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(dbg, "OMX Reserve DSP: %p\n",pDmmBuf->pReserved); 3442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 3444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 344500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "DSPProcessor_ReserveMemory() failed - error 0x%x", (int)status); 3446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->nSize = size; 345000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "DMM MAP Reserved: %p, size 0x%x (%d)\n", pDmmBuf->pReserved,nSizeReserved,nSizeReserved); 3451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Map */ 3453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_Map(ProcHandle, 3454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pAllocated,/* Arm addres of data to Map on DSP*/ 3455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size , /* size to Map on DSP*/ 3456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pReserved, /* reserved space */ 3457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(pDmmBuf->pMapped), /* returned map pointer */ 3458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0); /* final param is reserved. set to zero. */ 3459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 3460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 346100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2 (dbg, "DSPProcessor_Map() failed - error 0x%x", (int)status); 3462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 3463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 346500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "DMM Mapped: %p, size 0x%x (%d)\n",pDmmBuf->pMapped, size,size); 3466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Issue an initial memory flush to ensure cache coherency */ 3468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_FlushMemory(ProcHandle, pDmmBuf->pAllocated, size, 0); 3469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 3470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 347100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "Unable to flush mapped buffer: error 0x%x",(int)status); 3472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 3475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 3477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 3481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_DmmUnMap () method is used to de-allocate the memory using DMM. 3482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param ProcHandle - Component identification number 3484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pMapPtr - Map address 3485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pResPtr - reserve adress 3486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 3487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone - Success 3488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware - Hardware Error 3489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 349000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny WongOMX_ERRORTYPE OMX_DmmUnMap(DSP_HPROCESSOR ProcHandle, void* pMapPtr, void* pResPtr, struct OMX_TI_Debug dbg) 3491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 3493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 349400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1 (dbg, "OMX UnReserve DSP: %p\n",pResPtr); 3495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pMapPtr == NULL) 3497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 349800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "pMapPtr is NULL\n"); 3499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 3500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pResPtr == NULL) 3503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 350400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "pResPtr is NULL\n"); 3505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 3506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_UnMap(ProcHandle,pMapPtr); 3509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 3510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 351100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "DSPProcessor_UnMap() failed - error 0x%x",(int)status); 3512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 351400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "unreserving structure =0x%p\n",pResPtr); 3515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_UnReserveMemory(ProcHandle,pResPtr); 3516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 3517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 351800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4 (dbg, "DSPProcessor_UnReserveMemory() failed - error 0x%x", (int)status); 3519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT: 3522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 3526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fns Sleep replace for WIN CE 3529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 3530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_CreateEvent(OMX_Event *event){ 3532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 3533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HANDLE createdEvent = NULL; 3534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 3535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 3536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event->event = CreateEvent(NULL, TRUE, FALSE, NULL); 3539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event->event == NULL) 3540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 3541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 3543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_SignalEvent(OMX_Event *event){ 3546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 3547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 3548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 3549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin SetEvent(event->event); 3552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 3553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 3555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_WaitForEvent(OMX_Event *event) { 3558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 3559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 3560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 3561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WaitForSingleObject(event->event, INFINITE); 3564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = (int)GetLastError(); 3565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 3567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_DestroyEvent(OMX_Event *event) { 3570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = OMX_ErrorNone; 3571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == NULL){ 3572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ret = OMX_ErrorBadParameter; 3573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin CloseHandle(event->event); 3576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 3577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return ret; 3578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* ========================================================================== */ 3582b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/** 3583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @SignalIfAllBuffersAreReturned() This function send signals if OMX returned all buffers to app 3584b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* 3585b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @param WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate 3586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* 3587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @pre None 3588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* 3589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @post None 3590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* 3591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @return None 3592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*/ 3593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* ========================================================================== */ 3594b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid SignalIfAllBuffersAreReturned(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate) 3595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 3596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if((pComponentPrivate->nEmptyThisBufferCount == pComponentPrivate->nEmptyBufferDoneCount) && (pComponentPrivate->nFillThisBufferCount == pComponentPrivate->nFillBufferDoneCount)) 3597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_lock(&bufferReturned_mutex) != 0) 3599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: bufferReturned_mutex mutex lock error\n",__LINE__); 3601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_cond_broadcast(&bufferReturned_condition); 3603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "Sending pthread signal that OMX has returned all buffers to app"); 3604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pthread_mutex_unlock(&bufferReturned_mutex) != 0) 3605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "%d :: bufferReturned_mutex mutex unlock error\n",__LINE__); 3607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return; 3609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3610b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 3611b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 3613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid WBAMRDEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 3614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 3616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STATETYPE state = OMX_StateIdle; 3617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent; 3618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WBAMR_DEC_COMPONENT_PRIVATE *pCompPrivate = NULL; 3619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 3621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesPreempted) { 3623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pCompPrivate->curState == OMX_StateExecuting || 3624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->curState == OMX_StatePause) { 3625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 3626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pCompPrivate->cmdDataPipe[1], &state ,sizeof(OMX_U32)); 3627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->bPreempted = 1; 3629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesAcquired){ 3632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( 3633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 3634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventResourcesAcquired, 0,0, 3635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3641b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 3642b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3643b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid WBAMRDEC_HandleUSNError (WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg) 3644b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 3645b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMPONENTTYPE *pHandle = NULL; 3646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8 pending_buffers = OMX_FALSE; 3647b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 i; 3648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong switch (arg) 3649b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3650b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_CONCEALED: 3651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_UNDERFLOW: 3652b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_OVERFLOW: 3653b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_ENDOFDATA: 3654b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* all of these are informative messages, Algo can recover, no need to notify the 3655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * IL Client at this stage of the implementation */ 3656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_PLAYCOMPLETED: 3659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle = pComponentPrivate->pHandle; 3661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1(pComponentPrivate->dbg, "%d :: GOT MESSAGE IUALG_WARN_PLAYCOMPLETED\n",__LINE__); 3662b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate->LastOutbuf!=NULL && !pComponentPrivate->dasfmode){ 3663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->LastOutbuf->nFlags |= OMX_BUFFERFLAG_EOS; 3664b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3665b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3666b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* add callback to application to indicate SN/USN has completed playing of current set of date */ 3667b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3668b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 3669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventBufferFlag, 3670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_U32)NULL, 3671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_BUFFERFLAG_EOS, 3672b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3673b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3676b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__ 3677b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_BAD_HANDLE: 3678b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_DATA_CORRUPT: 3679b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_NOT_SUPPORTED: 3680b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_ARGUMENT: 3681b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_NOT_READY: 3682b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_GENERAL: 3683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3684b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* all of these are fatal messages, Algo can not recover 3685b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * hence return an error */ 3686b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->bIsInvalidState=OMX_TRUE; 3687b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->curState = OMX_StateInvalid; 3688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle = pComponentPrivate->pHandle; 3689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pHandle, 3690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 3691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 3692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ErrorInvalidState, 3693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 3694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 3698b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 3699b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3700b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3701b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 3702b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3703b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3704