1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* 3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License as published by the Free Software Foundation; either 8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Lesser General Public License for more details. 15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ============================================================================= 22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Texas Instruments OMAP (TM) Platform Software 23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Use of this software is controlled by the terms and conditions found 26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * in the license agreement under which this software has been supplied. 27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */ 28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @file OMX_G711Dec_Utils.c 30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements OMX Component for G711 decoder that 32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * is fully compliant with the OMX Audio specification. 33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path $(CSLPATH)\ 35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev 0.1 37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------*/ 39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**************************************************************** 42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * INCLUDE FILES 43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/ 44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h> 47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h> 48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h> 49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h> 50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h> 52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h> 53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h> 54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/wait.h> 55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h> 56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h> 57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h> 58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h> 59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h> 60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h> 61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h> 62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h> 64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h> 65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h> 66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G711Dec_Utils.h" 67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "g711decsocket_ti.h" 68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "decode_common_ti.h" 69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h" 70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <ResourceManagerProxyAPI.h> 72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */ 75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def DASF Defines the value for identify DASF ON 77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */ 79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define DASF 1 80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DASF 82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint iAudioFormat = 1; 83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint iSamplingRate = 8000; 84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define HASHINGENABLE 1 88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid sleep(DWORD Duration) 89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(Duration); 91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G711DEC_MEMDEBUG 95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define newmalloc(x) mymalloc(__LINE__,__FILE__,x) 96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define newfree(z) myfree(z,__LINE__,__FILE__) 97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define newmalloc(x) malloc(x) 99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define newfree(z) free(z) 100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711DECFill_LCMLInitParams () This function is used by the component thread to 105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * fill the all of its initialization parameters, buffer deatils etc 106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to LCML structure, 107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param plcml_Init pointer to LCML structure to be filled 110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic G711DEC_COMPONENT_PRIVATE *pComponentPrivate_CC = NULL; 119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECFill_LCMLInitParams(OMX_HANDLETYPE pComponent, 121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *plcml_Init, OMX_U16 arr[]) 122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 size_lcml = 0; 128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_STRMATTR *strmAttr = NULL; 129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pTemp_lcml = NULL; 133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DECFill_LCMLInitParams\n ",__LINE__); 135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pHandle = %p\n",__LINE__,pHandle); 136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pHandle->pComponentPrivate = %p\n",__LINE__,pHandle->pComponentPrivate); 137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = (OMX_U16)pComponentPrivate->pInputBufferList->numBuffers; 141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize; 142b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nRuntimeInputBuffers = nIpBuf; 143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize; 145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Fill Input Buffers Info for LCML */ 147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nBuffers = nIpBuf; 148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nSize = nIpBufSize; 149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD; 150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Fill Output Buffers Info for LCML */ 153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nBuffers = nOpBuf; 154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nSize = nOpBufSize; 155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD; 156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Copy the node information */ 158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.nNumOfDLLs = 3; 159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G711DECSOCKET_TI_UUID; 161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName,G711DEC_DLL_NAME); 162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G711DECSOCKET_TI_UUID; 165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName,G711DEC_DLL_NAME); 166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID; 169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName,G711DEC_USN_DLL_NAME); 170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate->dasfmode = %d\n",pComponentPrivate->dasfmode); 175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(strmAttr, LCML_STRMATTR); 176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = strmAttr; 177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uSegid = 0; 179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uAlignment = 0; 180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uTimeout = G711D_TIMEOUT; 181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uBufsize = nOpBufSize; 182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uNumBufs = NUM_G711DEC_OUTPUT_BUFFERS_DASF; 183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->lMode = STRMMODE_PROCCOPY; 184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice =1; 185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofRender =0; 186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->acdnmode == 1) 188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* DASF/TeeDN mode */ 190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &ACDN_TI_UUID; 191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* ACDN mode */ 195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID; 196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.DspStream = strmAttr; 199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = NULL; 202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*copy the other information */ 205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->SegID = OMX_G711DEC_DEFAULT_SEGMENT; 206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Timeout = OMX_G711DEC_SN_TIMEOUT; 207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Alignment = 0; 208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Priority = OMX_G711DEC_SN_PRIORITY; 209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->ProfileID = -1; 210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[0] = STREAM_COUNT; 212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[1] = G711DEC_INPUT_PORT; 213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[2] = G711DEC_DMM; 214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers) { 216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = (OMX_U16) (pComponentPrivate->pInputBufferList->numBuffers ); 217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = 1; 220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[4] = G711DEC_OUTPUT_PORT; 223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Setting up create phase params for DASF mode\n"); 226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[5] = G711DEC_OUTSTRM; 227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = NUM_G711DEC_OUTPUT_BUFFERS_DASF; 228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Setting up create phase params for FILE mode\n"); 232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[5] = G711DEC_DMM; 234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers) { 236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = (OMX_U16) pComponentPrivate->pOutputBufferList->numBuffers; 237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = 1; 240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* set companding mode (A-Law or Mu-Law) */ 244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[7] = (OMX_U16)pComponentPrivate->g711Params[G711DEC_INPUT_PORT]->ePCMMode; 245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[8] = (OMX_S16)pComponentPrivate->ftype; 246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[9] = pComponentPrivate->nmulevel; 247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[10] = pComponentPrivate->noiselp; 248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[11] = pComponentPrivate->dbmnoise; 249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[12] = pComponentPrivate->packetlostc; 250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[13] = END_OF_CR_PHASE_ARGS; 251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->pCrPhArgs = arr; 253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = (OMX_U16) (nIpBuf * sizeof(LCML_G711DEC_BUFHEADERTYPE)); 257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_G711DEC_BUFHEADERTYPE); 258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT] = pTemp_lcml; 260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G711DEC_MAJOR_VER; 267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G711DEC_MINOR_VER; 268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pTemp_lcml->pIpParam, G711DEC_UAlgInBufParamStruct); 274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usFrameLost = 0; 276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usEndOfFile = 0; 277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pTemp_lcml->pBufferParam,G711DEC_ParamStruct); 279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pTemp_lcml->pDmmBuf,DMM_BUFFER_OBJ); 280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = (OMX_U16) nOpBuf * sizeof(LCML_G711DEC_BUFHEADERTYPE); 291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_G711DEC_BUFHEADERTYPE); 292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G711DEC_OUTPUT_PORT] = pTemp_lcml; 294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G711DEC_MAJOR_VER; 301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G711DEC_MINOR_VER; 302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:::pTemp_lcml = %p\n",__LINE__,pTemp_lcml); 312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:::pTemp_lcml->buffer = %p\n",__LINE__,pTemp_lcml->buffer); 313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Exiting G711DECFill_LCMLInitParams",__LINE__); 321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError == OMX_ErrorInsufficientResources) 327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->strmAttr); 329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT]); 330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_OUTPUT_PORT]); 331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pTemp_lcml != NULL) { 332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pTemp_lcml->pIpParam); 333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711DEC_StartComponentThread() This function is called by the component to create 343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the component thread, command pipe, data pipe and LCML Pipe. 344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DEC_StartComponentThread(OMX_HANDLETYPE pComponent) 356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = 361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G711DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_attr_t attr; 365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY; 368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Inside G711DEC_StartComponentThread\n", __LINE__); 371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Initialize all the variables*/ 373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf = 0; 375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf = 0; 376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf = 0; 377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Op_Issued = 0; 378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Sent_Ip_Buff = 0; 379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff = 0; 380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdDataPipe); 384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->dataPipe); 391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdPipe); 398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Create the Component Thread */ 404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), &attr, 406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ComponentThread, pComponentPrivate); 407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL, 409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ComponentThread, pComponentPrivate); 410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError || !pComponentPrivate->ComponentThread) { 413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC = pComponentPrivate; 418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 1; 419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711Dec_FreeCompResources() This function is called by the component during 427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe. 428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DEC_FreeCompResources(OMX_HANDLETYPE pComponent) 440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = 444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G711DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; 448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0; 449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nOpBuf = 0; 450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: G711DEC_FreeCompResources\n", __LINE__); 452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) { 454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferCountActual; 455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferCountActual; 456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bCompThreadStarted) { 459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[0]); 460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[1]); 466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[0]); 471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[1]); 476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[0]); 481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[1]); 486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) { 487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 492b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 493b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pHoldBuffer); 494b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) { 496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:::[G711DEC_FreeCompResources] \n", __LINE__); 497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]); 498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]); 499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->g711Params[G711DEC_INPUT_PORT]); 500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->g711Params[G711DEC_OUTPUT_PORT]); 501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pCompPort[G711DEC_INPUT_PORT]->pPortFormat); 502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pCompPort[G711DEC_OUTPUT_PORT]->pPortFormat); 503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pCompPort[G711DEC_INPUT_PORT] ); 504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pCompPort[G711DEC_OUTPUT_PORT] ); 505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pInputBufferList); 506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList); 507b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pParams); 508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("\n\n FreeCompResources: Destroying mutexes.\n\n"); 514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex); 515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold); 516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex); 518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InIdle_threshold); 519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex); 521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold); 522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event)); 524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InIdle_event)); 525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event)); 526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*==========================================================================================================*/ 531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** Cleanup init params() */ 532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*===========================================================================================================*/ 533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DEC_CleanupInitParams(OMX_HANDLETYPE pComponent) 534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = (G711DEC_COMPONENT_PRIVATE *) 537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pTemp_lcml = NULL; 540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8 *pBufParmsTemp = NULL; 541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0; 544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i=0; 545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: G711DEC_CleanupInitParams()\n", __LINE__); 547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong nIpBuf = pComponentPrivate->nRuntimeInputBuffers; 549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->strmAttr); 550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT]; 552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pTemp_lcml->pIpParam); 555b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pTemp_lcml->pBufferParam); 556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pTemp_lcml->pDmmBuf); 557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufParmsTemp = (OMX_U8*)pTemp_lcml->pFrameParam; 558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufParmsTemp -= 128; 559b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pBufParmsTemp); 560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 562b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT]); 564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_OUTPUT_PORT]); 565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711DEC_StopComponentThread() This function is called by the component during 572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe. 573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DEC_StopComponentThread(OMX_HANDLETYPE pComponent) 585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = (G711DEC_COMPONENT_PRIVATE *) 588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 pthreadError = 0; 593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Join the component thread */ 595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsStopping = 1; 596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthreadError = pthread_join (pComponentPrivate->ComponentThread, 597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void*)&threadError); 598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != pthreadError) { 600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Check for the errors */ 604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError) { 605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Error while closing Component Thread\n",__LINE__); 607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711DECHandleCommand() This function is called by the component when ever it 616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the command from the application 617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate Component private data 619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G711DECHandleCommand (G711DEC_COMPONENT_PRIVATE *pComponentPrivate) 629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMMANDTYPE command; 633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STATETYPE commandedState = OMX_StateInvalid; 634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 commandData = 0; 635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE rm_error = OMX_ErrorNone; 639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nBuf = 0; 644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 arr[100] = {0}; 645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *p = "hello"; 646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_CALLBACKTYPE cb; 648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *pLcmlDsp = NULL; 649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_AudioCodecParams *pParams = NULL; 650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 ret = 0; 651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pLcmlHdr = NULL; 652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int inputPortFlag=0,outputPortFlag=0; 653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Entering G711DECHandleCommand Function - curState = %d\n",__LINE__,pComponentPrivate->curState); 657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: pComponentPrivate = %p\n", __LINE__, pComponentPrivate); 658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: pHandle = %p\n", __LINE__, pHandle); 659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Reading from the cmdPipe\n",__LINE__); 660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = (OMX_U16) (read (pComponentPrivate->cmdPipe[0], &command, sizeof (command))); 662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret == -1) { 664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Error While reading from the Pipe\n",__LINE__); 665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Reading from the cmdDataPipe\n",__LINE__); 670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = (OMX_U16) (read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData))); 672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret == -1) { 674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Error While reading from the Pipe\n",__LINE__); 675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (command == OMX_CommandStateSet) { 680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin commandedState = (OMX_STATETYPE)commandData; 681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(commandedState) { 682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateIdle: 683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC_HandleCommand :: OMX_StateIdle \n",__LINE__); 685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pComponentPrivate->curState = %d\n",__LINE__,pComponentPrivate->curState); 686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded || 695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState == OMX_StateWaitForResources) { 696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->dasfmode == 1) 698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled= FALSE; 700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated= FALSE; 701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->streamID == 0) 703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("**************************************\n"); 705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT(":: Error = OMX_ErrorInsufficientResources\n"); 706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("**************************************\n"); 707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated && 720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled) 721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputPortFlag = 1; 723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated && 726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled) 727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputPortFlag = 1; 729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated && 732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled) 733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputPortFlag = 1; 735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated && 738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled) 739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputPortFlag = 1; 741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!(inputPortFlag && outputPortFlag)) 744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* From Loaded to Idle. All enable ports are populated. */ 746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 1; 747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, 750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pComponentPrivate->InLoaded_mutex); 751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(0); 754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Inside G711DECHandleCommand\n",__LINE__); 758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cb.LCML_Callback = (void *) G711DECLCML_Callback; 759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (OMX_HANDLETYPE) G711DECGetLCMLHandle(); 760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Inside G711DECHandleCommand\n",__LINE__); 761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pLcmlHandle == NULL) { 763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: LCML Handle is NULL........exiting..\n",__LINE__); 764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECHandleCommand %d\n",__LINE__); 768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pLcmlHandle = %p\n",pLcmlHandle); 769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Got handle of dsp via phandle filling information about DSP specific things */ 771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pLcmlDsp = %p\n",pLcmlDsp); 773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECHandleCommand %d\n",__LINE__); 775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECFill_LCMLInitParams(pHandle, pLcmlDsp, arr); 776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error returned from\ 779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DECFill_LCMLInitParams()\n",__LINE__); 780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle; 785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*filling create phase params */ 787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cb.LCML_Callback = (void *) G711DECLCML_Callback; 788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Calling LCML_InitMMCodec...\n",__LINE__); 789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb,(OMX_STRING)pComponentPrivate->sDeviceString); 792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error returned from\ 795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_Init()\n",__LINE__); 796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* need check the resource with RM */ 801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC: About to call RMProxy_SendCommand\n", __LINE__); 802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->rmproxyCallback.RMPROXY_Callback = 804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void *) G711DEC_ResourceManagerCallback; 805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState != OMX_StateWaitForResources){ 807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, 808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PCM_Decoder_COMPONENT, 809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DEC_CPU, 810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1234, &(pComponentPrivate->rmproxyCallback)); 811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC: Returned from RMProxy_SendCommand\n", __LINE__); 813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC: RMProxy_SendCommand returned %d\n", __LINE__,rm_error); 814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(rm_error == OMX_ErrorNone) { 816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* resource is available */ 817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Setting to OMX_StateIdle - Line %d\n",__LINE__); 818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin RMProxy_StateSet, 829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711_Decoder_COMPONENT, 830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 1234, NULL); 831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(rm_error == OMX_ErrorInsufficientResources) { 834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* resource is not available, need set state to OMX_StateWaitForResources */ 835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC: Error - insufficient resources\n", __LINE__); 843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Setting to OMX_StateIdle - Line %d\n",__LINE__); 846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 pValues[4]; 856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: ---- Comp: DASF Functionality is ON ---\n",__LINE__); 857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pParams, G711DEC_AudioCodecParams); 858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams = pParams; 860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParams->iAudioFormat = iAudioFormat; 861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParams->iSamplingRate = iSamplingRate; 862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParams->iStrmId = pComponentPrivate->streamID; 864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[1] = (OMX_U32)pParams; 867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[2] = sizeof(G711DEC_AudioCodecParams); 868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: Error Occurred in Codec StreamControl..\n",__LINE__); 874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateExecuting) { 879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Error occurred in Codec mapping flush!\n"); 887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Set the bIsStopping bit */ 891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DEC: About to set bIsStopping bit\n", __LINE__); 892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("About to call LCML_ControlCodec(STOP)\n"); 893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: Error Occurred in Codec Stop..\n", __LINE__); 900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bStopSent=1; 904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pHoldBuffer); 905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(pComponentPrivate->curState == OMX_StatePause) { 909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Error occurred in Codec mapping flush!\n"); 915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: Stop Command Received\n",__LINE__); 919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Setting to OMX_StateIdle - Line %d\n",__LINE__); 920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin RMProxy_StateSet, 924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711_Decoder_COMPONENT, 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 1234, NULL); 926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: The component is stopped\n",__LINE__); 928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle,pHandle->pApplicationPrivate, 929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is invalid state from application */ 936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateExecuting: 946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd Executing \n",__LINE__); 947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__); 954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateIdle) { 957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Sending commands to DSP via LCML_ControlCodec third argument is not used for time being */ 959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount = 0; 960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bStopSent=0; 961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)p); 964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: Error Occurred in Codec Start..\n",__LINE__); 967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Send input buffers to application */ 970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("nBuf = %d\n",(int)nBuf); 972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Send output buffers to codec */ 973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause) { 975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)p); 978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("Error While Resuming the codec\n"); 980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]) { 985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DECGetCorresponding_LCMLHeader(pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr); 986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput); 987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G711DEC_UAlgInBufParamStruct), 995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pComponentPrivate->nNumOutputBufPending %d\n", __LINE__,(int)pComponentPrivate->nNumOutputBufPending); 1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufHdrPending[i]) { 1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DECGetCorresponding_LCMLHeader(pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, OMX_DirOutput, &pLcmlHdr); 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],OMX_DirOutput); 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen, 1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen, 1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 0, NULL); 1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: eError LCML_QueueBuffer 0x%x\n",__LINE__,eError); 1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid State Given by \ 1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, 1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711_Decoder_COMPONENT, 1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateExecuting, 1234, NULL); 1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Send state change notificaiton to Application */ 1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateExecuting; 1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, NULL); 1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateLoaded: 1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd Loaded - curState = %d\n",__LINE__,pComponentPrivate->curState); 1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__); 1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: pComponentPrivate->pInputBufferList->numBuffers = %d\n",__LINE__,(int)pComponentPrivate->pInputBufferList->numBuffers); 1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: pComponentPrivate->pOutputBufferList->numBuffers = %d\n",__LINE__,(int)pComponentPrivate->pOutputBufferList->numBuffers); 1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources){ 1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd Loaded\n",__LINE__); 1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState,NULL); 1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: In side OMX_StateLoaded State: \n",__LINE__); 1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateIdle && 1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateWaitForResources) { 1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid State Given by \ 1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate->pInputBufferList->numBuffers = %d\n", 1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (int)pComponentPrivate->pInputBufferList->numBuffers); 1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %d\n", 1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (int)pComponentPrivate->pOutputBufferList->numBuffers); 1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers && 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers) { 1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 1; 1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InIdle_threshold, 1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pComponentPrivate->InIdle_mutex); 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InIdle_event)); 1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Now Deinitialize the component No error should be returned from 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * this function. It should clean the system as much as possible */ 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: In side OMX_StateLoaded State: \n",__LINE__); 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: In side OMX_StateLoaded State: \n",__LINE__); 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d : Error: in Destroying the codec: no. %x\n",__LINE__, eError); 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd Loaded\n",__LINE__); 1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = EXIT_COMPONENT_THRD; 1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending = OMX_FALSE; 1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Send StateChangeNotification to application */ 1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StatePause: 1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd Pause\n",__LINE__); 1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 0, NULL); 1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Same State Given by \ 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateExecuting && 1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateIdle) { 1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid State Given by \ 1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlPause, (void *)p); 1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d : Error: in Pausing the codec\n",__LINE__); 1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateWaitForResources: 1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Same State Given by \ 1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded) { 1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState,NULL); 1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, "NULL"); 1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateInvalid: 1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd OMX_StateInvalid:\n",__LINE__); 1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Same State Given by \ 1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n",__LINE__); 1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Comp: OMX_G711DecUtils.c\n",__LINE__); 1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateWaitForResources && 1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateLoaded) { 1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_CleanupInitParams(pHandle); 1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateMax: 1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: G711DECHandleCommand: Cmd OMX_StateMax::\n",__LINE__); 1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } /* End of Switch */ 1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandMarkBuffer) { 1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__); 1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pMarkBuf){ 1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__); 1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData); 1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandPortDisable) { 1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->bDisableCommandPending) { 1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable port */ 1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled = OMX_FALSE; 1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled = OMX_FALSE; 1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_TRUE; 1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Calling LCML_ControlCodec() Line %d\n",__LINE__); 1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0) { 1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated){ 1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_INPUT_PORT, NULL); 1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Clearing bDisableCommandPending Line %d\n",__LINE__); 1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1) { 1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated){ 1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_OUTPUT_PORT, NULL); 1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Clearing bDisableCommandPending Line %d\n",__LINE__); 1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == -1) { 1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated && 1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated){ 1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_INPUT_PORT, NULL); 1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_OUTPUT_PORT, NULL); 1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Clearing bDisableCommandPending Line %d\n",__LINE__); 1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandPortEnable) { 1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->bEnableCommandPending) { 1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable in port */ 1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("setting input port to enabled\n"); 1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled); 1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Unblock AlloBuf_threshold\n", __LINE__); 1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled = OMX_TRUE; 1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Removing sleep calls. */ 1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled = %d\n", 1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bEnabled); 1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Removing sleep() calls. */ 1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Unblock AlloBuf_threshold", __LINE__); 1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Removing sleep() calls. */ 1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable out port */ 1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) 1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("setting output port to enabled\n"); 1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled = OMX_TRUE; 1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bEnabled); 1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0) 1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated) 1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_INPUT_PORT, 1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == 0x1){ 1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated){ 1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_OUTPUT_PORT, 1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == -1 ){ 1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded || 1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->bPopulated 1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin && pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->bPopulated)){ 1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_INPUT_PORT, 1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_OUTPUT_PORT, 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DECFill_LCMLInitParamsEx(pComponentPrivate->pHandle); 1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bJustReenabled = 1; 1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandFlush) { 1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < MAX_NUM_OF_BUFS; i++) 1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) 1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i] 1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all input buffers */ 1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_INPUT_PORT, NULL); 1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < MAX_NUM_OF_BUFS; i++) 1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all output buffers */ 1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Calling FillBufferDone From Line %d\n",__LINE__); 1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone ( 1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[i] 1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_OUTPUT_PORT, NULL); 1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Exiting G711DECHandleCommand Function\n",__LINE__); 1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Returning %d\n",__LINE__,eError); 1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G711DECHandleDataBuf_FromApp() This function is called by the component when ever it 1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the buffer from the application 1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate Component private data 1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHeader Buffer from the application 1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader, 1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate) 1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir; 1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pLcmlHdr = NULL; 1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *) 1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlHandle; 1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 frameLength = 0; 1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8* pExtraData = NULL; 1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 holdBufferSize = 0; 1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 nFrames = 0; 1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *frameType = NULL; 1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE * phandle = NULL; 1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBufParmsTemp = NULL; 1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Entering G711DECHandleDataBuf_FromApp Function\n",__LINE__); 1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin holdBufferSize = (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize) * 1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pInputBufferList->numBuffers + 1); 1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Find the direction of the received buffer from buffer list */ 1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECGetBufferDirection(pBufHeader, &eDir); 1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: The PBufHeader is not found in the list\n", 1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pBufHeader->nFilledLen > 0 ) { 1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bBypassDSP = 0; 1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->nHoldLength == 0 ) { 1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECHandleDataBuf_FromApp - reading G711DEC\n"); 1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameLength = pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize; 1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pBufHeader->nFilledLen >= frameLength ) { 1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy the aFillBufferPtr from the 2nd frame to iHoldBuffer*/ 1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* The 1st frame will stay in aFillBufferPtr to be passed down.*/ 1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* the length of remaining Frames in aFillBufferPtr.*/ 1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = pBufHeader->nFilledLen - frameLength; 1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->nHoldLength > 0 ) {/* something need to be hold in iHoldBuffer */ 1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pHoldBuffer == NULL) { 1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pComponentPrivate->pHoldBuffer, holdBufferSize, OMX_U8); 1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy the extra data into pHoldBuffer. Size will be nHoldLength. */ 1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pExtraData = pBufHeader->pBuffer + (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize); 1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy (pComponentPrivate->pHoldBuffer, pExtraData, pComponentPrivate->nHoldLength); 1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* received buffer with less than 1 G711 frame. Save the data in iHoldBuffer.*/ 1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = pBufHeader->nFilledLen; 1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* save the data into iHoldBuffer.*/ 1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pHoldBuffer == NULL) { 1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pComponentPrivate->pHoldBuffer, holdBufferSize, OMX_U8); 1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Not enough data to be sent. Copy all received data into iHoldBuffer.*/ 1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Size to be copied will be iHoldLen == mmData->BufferSize() */ 1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy (pComponentPrivate->pHoldBuffer, 1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer, pComponentPrivate->nHoldLength); 1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* since not enough data, we shouldn't send anything to SN, but instead request to EmptyBufferDone again.*/ 1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader); 1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* iHoldBuffer has data. There is no possibility that data in iHoldBuffer is less for 1 frame without*/ 1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* lastBufferFlag being set. Unless it's a corrupt file.*/ 1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy the data in dataPtr to iHoldBuffer. Update the iHoldBuffer size (iHoldLen).*/ 1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pExtraData = pComponentPrivate->pHoldBuffer + pComponentPrivate->nHoldLength; 1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pExtraData,pBufHeader->pBuffer,pBufHeader->nFilledLen); 1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength += pBufHeader->nFilledLen; 1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameLength = (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize); 1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->nHoldLength >= frameLength ) { 1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy the data from pComponentPrivate->pHoldBuffer to pBufHeader->pBuffer*/ 1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer,pComponentPrivate->pHoldBuffer,frameLength); 1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Now the pHoldBuffer has framelength fewer bytes - update nHoldLength*/ 1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = pComponentPrivate->nHoldLength - frameLength; 1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Shift the remaining bytes to the beginning of the pHoldBuffer */ 1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pExtraData = pComponentPrivate->pHoldBuffer + frameLength; 1604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (frameLength >= pComponentPrivate->nHoldLength) 1605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memcpy(pComponentPrivate->pHoldBuffer,pExtraData, pComponentPrivate->nHoldLength); 1606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 1607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memmove(pComponentPrivate->pHoldBuffer,pExtraData, pComponentPrivate->nHoldLength); 1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Clear the rest of the data from the pHoldBuffer */ 1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pExtraData = pComponentPrivate->pHoldBuffer + pComponentPrivate->nHoldLength; 1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(pExtraData,0,holdBufferSize - pComponentPrivate->nHoldLength); 1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader); 1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECGetCorresponding_LCMLHeader(pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr); 1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)( 1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_CODEC_INTERFACE *)pLcmlHandle->pCodecinterfacehandle)->pCodec); 1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFrames = (OMX_U8)(pBufHeader->nFilledLen / RTP_Framesize); 1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameType = pBufHeader->pBuffer; 1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameType += RTP_Framesize - 1; 1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( (pLcmlHdr->pBufferParam->usNbFrames < nFrames) && 1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pLcmlHdr->pFrameParam != NULL)){ 1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DmmUnMap(phandle->dspCodec->hProc, 1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void*)pLcmlHdr->pBufferParam->pParamElem, 1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pDmmBuf->pReserved); 1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = NULL; 1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufParmsTemp = (OMX_U8*)pLcmlHdr->pFrameParam; 1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufParmsTemp -= 128; 1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin newfree(pBufParmsTemp); 1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pFrameParam = NULL; 1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pLcmlHdr->pFrameParam == NULL ){ 1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pBufParmsTemp, 1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((sizeof(G711DEC_FrameStruct)*nFrames) + 256), 1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8); 1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pFrameParam = (G711DEC_FrameStruct*)(pBufParmsTemp + 128); 1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_DmmMap(phandle->dspCodec->hProc, 1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nFrames*sizeof(G711DEC_FrameStruct), 1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void*)pLcmlHdr->pFrameParam, (pLcmlHdr->pDmmBuf)); 1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("OMX_DmmMap ERRROR!!!!\n\n"); 1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufferParam->pParamElem = 1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G711DEC_FrameStruct *)pLcmlHdr->pDmmBuf->pMapped; 1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) { 1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pLcmlHdr->pFrameParam+(nFrames-1))->usLastFrame = OMX_BUFFERFLAG_EOS; 1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPlayCompleteFlag = 1; 1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFlags = 0; 1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufferParam->usNbFrames = nFrames; 1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Store tick count information*/ 1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrBufIndexTick[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store time stamp information */ 1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrBufIndex[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex++; 1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferCountActual; 1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G711DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) { 1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput); 1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin STD_G711DEC_BUF_SIZE*nFrames, 1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin STD_G711DEC_BUF_SIZE*nFrames, 1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pBufferParam, 1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G711DEC_ParamStruct), 1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntIp++; 1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf++; 1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Sent_Ip_Buff++; 1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause){ 1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bBypassDSP = 1; 1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->dasfmode == 0 && pBufHeader->nFlags != OMX_BUFFERFLAG_EOS) { 1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0] 1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) 1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 0 && pBufHeader->nFilledLen == 0) 1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS; 1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 0) { 1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS; 1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventBufferFlag, 1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nOutputPortIndex, 1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags, NULL); 1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]); 1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]); 1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Flags has been propagated from input to output port\n",__LINE__); 1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFlags = 0; 1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->pMarkData){ 1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* copy mark to output buffer header */ 1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData; 1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent; 1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* trigger event handler if we are supposed to */ 1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){ 1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate->pHandle, 1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventMark, 0, 0, pBufHeader->pMarkData); 1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (eDir == OMX_DirOutput) { 1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Make sure that output buffer is issued to output stream only when 1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * there is an outstanding input buffer already issued on input stream 1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(pComponentPrivate->bIsStopping)) { 1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bBypassDSP == 0) { 1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d: Sending Empty OUTPUT BUFFER to Codec = %p\n",__LINE__,pBufHeader->pBuffer); 1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G711DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) { 1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput); 1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize), 1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize), 1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 0, NULL); 1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: LCML_QueueBuffer eError 0x%x\n",__LINE__, eError); 1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: IssuingDSP OP: Error Occurred\n",__LINE__); 1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf++; 1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Op_Issued++; 1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause){ 1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pComponentPrivate->nNumOutputBufPending 0x%x\n",__LINE__,(int)pComponentPrivate->nNumOutputBufPending); 1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]); 1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G711DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) { 1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput); 1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, (OMX_U8 *)pBufHeader->pBuffer, 1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize), 1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize), 1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 0, NULL); 1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: IssuingDSP OP: Error Occurred\n",__LINE__); 1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf++; 1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Op_Issued++; 1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause){ 1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pComponentPrivate->nNumOutputBufPending 0x%x\n",__LINE__,(int)pComponentPrivate->nNumOutputBufPending); 1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d : Exiting from G711DECHandleDataBuf_FromApp \n",__LINE__); 1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Returning error %d\n",eError); 1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G711DECGetBufferDirection () This function is used by the component thread to 1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * request a buffer from the application. Since it was called from 2 places, 1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * it made sense to turn this into a small function. 1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pData pointer to G711 Decoder Context Structure 1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCur pointer to the buffer to be requested to be filled 1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval none 1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, 1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE *eDir) 1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate; 1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nBuf = 0; 1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuf = NULL; 1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 flag = 1; 1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Entering G711DECGetBufferDirection Function\n",__LINE__); 1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Search this buffer in input buffers list */ 1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i]; 1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirInput; 1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Buffer %p is INPUT BUFFER\n",__LINE__, pBufHeader); 1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Search this buffer in input buffers list */ 1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirOutput; 1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Buffer %p is OUTPUT BUFFER\n",__LINE__, pBufHeader); 1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (flag == 1) { 1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Buffer %p is Not Found in the List\n",__LINE__,pBufHeader); 1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Exiting G711DECGetBufferDirection Function\n",__LINE__); 1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G711DECHandleDataBuf_FromLCML () This function is used by the component thread to 1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * request a buffer from the application. Since it was called from 2 places, 1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * it made sense to turn this into a small function. 1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pData pointer to G711 Decoder Context Structure 1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCur pointer to the buffer to be requested to be filled 1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval none 1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECHandleDataBuf_FromLCML(G711DEC_COMPONENT_PRIVATE* pComponentPrivate, 1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE* msgBuffer) 1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 checkBeforeFilling = 0; 1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 inputBufferSize = 0, frameLength = 0; 1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *) 1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlHandle; 1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pLcmlHdr = NULL; 1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle; 1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Entering G711DECHandleDataBuf_FromLCML Function\n",__LINE__); 1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(pComponentPrivate->bIsStopping)) { 1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (msgBuffer->eDir == G711DEC_DIRECTION_INPUT) { 1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: Component Sending Empty Input buffer%p to App\n", 1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,msgBuffer->buffer); 1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputBufferSize = (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize); 1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->pInputBufferList->numBuffers == 1 ) { 1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin checkBeforeFilling = inputBufferSize; 1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin checkBeforeFilling = inputBufferSize * (pComponentPrivate->pInputBufferList->numBuffers - 1); 1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->nHoldLength < checkBeforeFilling) { 1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate->nHoldLength = %d\n",(int)pComponentPrivate->nHoldLength); 1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("checkBeforeFilling = %d\n",(int)checkBeforeFilling); 1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf--; 1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* 1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * We possibly have enough data in iHoldBuffer. 1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * If we don't have enough data to be send, then we need to refill when last buffer is not set 1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * even though FillThisHwBuffer has already been sent. 1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Send QueueBuffer from iHoldBuffer then reflushed the iHoldBuffer. 1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->nHoldLength > 0 ) { 1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameLength = (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize); 1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( pComponentPrivate->nHoldLength >= frameLength ) { 1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copy the data from iHoldBuffer to dataPtr */ 1975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ((msgBuffer->buffer->pBuffer == NULL) || 1976b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (pComponentPrivate->pHoldBuffer == NULL)) { 1977b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorBadParameter; 1978b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1979b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1980b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(msgBuffer->buffer->pBuffer, 1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHoldBuffer, 1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameLength); 1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pComponentPrivate->pHoldBuffer, 1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHoldBuffer + frameLength, 1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength - frameLength); 1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = pComponentPrivate->nHoldLength - frameLength; 1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECGetCorresponding_LCMLHeader(msgBuffer->buffer->pBuffer, OMX_DirInput, &pLcmlHdr); 1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < inputBufferSize; i++) { 1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d::Queueing msgBuffer->buffer->pBuffer[%d] = %x\n",__LINE__,i,msgBuffer->buffer->pBuffer[i]); 1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_SetPending(pComponentPrivate,msgBuffer->buffer,OMX_DirInput); 1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)msgBuffer->buffer->pBuffer, 2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputBufferSize, 2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin frameLength,(OMX_U8 *) pLcmlHdr->pIpParam, 2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G711DEC_UAlgInBufParamStruct), 2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*We need to refill more since iHoldBuffer only has partial data.*/ 2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, 2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = msgBuffer->buffer; 2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (msgBuffer->eDir == G711DEC_DIRECTION_OUTPUT) { 2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff++; 2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsEOFSent) { 2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nFlags |= OMX_BUFFERFLAG_EOS; 2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Copying tick count information to output buffer*/ 2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nTickCount = (OMX_U32)pComponentPrivate->arrBufIndexTick[pComponentPrivate->OpBufindex]; 2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copying time stamp information to output buffer */ 2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->OpBufindex]; 2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex++; 2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual; 2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Calling FillBufferDone From Line %d, buffer %p\n",__LINE__, msgBuffer->buffer); 2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Output buff %p, TimeStamp %lld\n",__LINE__, msgBuffer->buffer, msgBuffer->buffer->nTimeStamp); 2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone ( pHandle, 2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf--; 2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:Incrementing app_nBuf = %d\n",__LINE__,(int)pComponentPrivate->app_nBuf); 2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (msgBuffer->eDir == G711DEC_DIRECTION_INPUT) { 2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf--; 2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("line %d:: Calling EmptyBufferDone\n",__LINE__); 2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (msgBuffer->eDir == G711DEC_DIRECTION_OUTPUT) { 2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf--; 2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff++; 2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d: Component Sending Filled Output buffer%p to App\n",__LINE__,msgBuffer->buffer); 2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("Sending Filled OUTPUT BUFFER to App = %p\n",msgBuffer->buffer->pBuffer); 2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsEOFSent) { 2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nFlags |= OMX_BUFFERFLAG_EOS; 2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Calling FillBufferDone From Line %d\n",__LINE__); 2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pHandle, 2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:Incrementing app_nBuf = %d\n",__LINE__,(int)pComponentPrivate->app_nBuf); 2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Exiting G711DECHandleDataBuf_FromLCML Function\n",__LINE__); 2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Callback() function will be called LCML component to write the msg 2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param msgBuffer This buffer will be returned by the LCML 2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* gLcmlPipeWr = pComponentPrivate->lcml_Pipe[1];*/ 2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECLCML_Callback (TUsnCodecEvent event,void * args [10]) 2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer = args[1]; 2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pLcmlHdr = NULL; 2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 ret = 0; 2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G711DEC_DEBUG 2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *phandle = (LCML_DSP_INTERFACE *)args[6]; 2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Entering the G711DECLCML_Callback Function\n",__LINE__); 2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("args = %d ",(int)args[0]); 2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("event = %d\n",event); 2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(event) { 2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspError: 2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspError\n"); 2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInternalError: 2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInternalError\n"); 2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInitError: 2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInitError\n"); 2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspMessageRecieved: 2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved\n"); 2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferProcessed: 2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferProcessed\n"); 2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStarted: 2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStarted\n"); 2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingPaused: 2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingPaused\n"); 2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStoped: 2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStoped\n"); 2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingEof: 2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingEof\n"); 2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferNotProcessed: 2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed\n"); 2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecAlgCtrlAck: 2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck\n"); 2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecStrmCtrlAck: 2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck\n"); 2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(event == EMMCodecBufferProcessed) 2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( (OMX_U32)args [0] == EMMCodecInputBuffer) { 2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Input: pBufferr = %p\n",__LINE__, pBuffer); 2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECGetCorresponding_LCMLHeader(pBuffer, OMX_DirInput, &pLcmlHdr); 2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_ClearPending(pComponentPrivate_CC,pLcmlHdr->buffer,OMX_DirInput); 2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = (OMX_U16) G711DECHandleDataBuf_FromLCML(pComponentPrivate_CC, pLcmlHdr); 2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret != OMX_ErrorNone) { 2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Error in Writing to the Data pipe\n", __LINE__); 2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("Error writting pipe\n"); 2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if ((OMX_U32)args [0] == EMMCodecOuputBuffer) { 2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Output: pBufferr = %p\n",__LINE__, pBuffer); 2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G711DECGetCorresponding_LCMLHeader(pBuffer, OMX_DirOutput, &pLcmlHdr); 2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate_CC->bStopSent) 2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = (OMX_U32)args[2]; 2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = 0; 2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECLCML_Callback::: pLcmlHdr->buffer->nFilledLen = %d\n",(int)pLcmlHdr->buffer->nFilledLen); 2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->lcml_nCntOpReceived++; 2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_ClearPending(pComponentPrivate_CC,pLcmlHdr->buffer,OMX_DirOutput); 2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = (OMX_U16) G711DECHandleDataBuf_FromLCML(pComponentPrivate_CC, pLcmlHdr); 2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->nOutStandingFillDones++; 2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret != OMX_ErrorNone) { 2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Error in Writing to the Data pipe\n", __LINE__); 2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (event == EMMCodecStrmCtrlAck) { 2223b65f253fdc60f6208a54911bee793d225f23cdf8James Dong G711DEC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n",__LINE__); 2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(event == EMMCodecProcessingStoped) { 2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate_CC->bNoIdleOnStop = %d\n",(int)pComponentPrivate_CC->bNoIdleOnStop); 2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate_CC->bNoIdleOnStop) { 2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StateIdle; 2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = RMProxy_NewSendCommand(pComponentPrivate_CC->pHandle, 2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin RMProxy_StateSet, OMX_G711_Decoder_COMPONENT, 2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 1234, NULL); 2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate_CC->pHandle, 2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState, 2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bDspStoppedWhileExecuting = OMX_TRUE; 2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bNoIdleOnStop= OMX_FALSE; 2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (event == EMMCodecProcessingPaused) { 2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StatePause; 2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler( pComponentPrivate_CC->pHandle, 2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState, 2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(event == EMMCodecDspMessageRecieved) { 2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: commandedState = %d\n",__LINE__,(int)args[0]); 2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: arg1 = %d\n",__LINE__,(int)args[1]); 2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: arg2 = %d\n",__LINE__,(int)args[2]); 2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT ("%d :: Exiting the G711DECLCML_Callback Function\n",__LINE__); 2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G711DEC_GetCorrespondingLCMLHeader() function will be called by LCML_Callback 2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * component to write the msg 2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer, Event which gives to details about USN status 2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param G711DEC_LCML_BUFHEADERTYPE **ppLcmlHdr 2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param OMX_DIRTYPE eDir this gives direction of the buffer 2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECGetCorresponding_LCMLHeader(OMX_U8 *pBuffer, 2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir, 2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE **ppLcmlHdr) 2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pLcmlBufHeader = NULL; 2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 nIpBuf = (OMX_S16) pComponentPrivate_CC->pInputBufferList->numBuffers; 2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 nOpBuf = (OMX_S16) pComponentPrivate_CC->pOutputBufferList->numBuffers; 2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (!pComponentPrivate_CC->bInitParamsInitialized) { 2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Waiting for init to complete\n"); 2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(0); 2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate_CC = %p\n",pComponentPrivate_CC); 2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("eDir = %d\n",eDir); 2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eDir == OMX_DirInput) { 2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pComponentPrivate_CC = %p\n",pComponentPrivate_CC); 2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G711DEC_INPUT_PORT]; 2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pBuffer = %p\n",pBuffer); 2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pLcmlBufHeader->buffer->pBuffer = %p\n",pLcmlBufHeader->buffer->pBuffer); 2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Inside G711DECGetCorresponding_LCMLHeader..\n",__LINE__); 2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__); 2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (eDir == OMX_DirOutput) { 2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G711DEC_OUTPUT_PORT]; 2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nOpBuf; i++) { 2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pBuffer = %p\n",pBuffer); 2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("pLcmlBufHeader->buffer->pBuffer = %p\n",pLcmlBufHeader->buffer->pBuffer); 2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__); 2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:: Invalid Buffer Type :: exiting...\n",__LINE__); 2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("Line %d\n",__LINE__); 2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G711DECGetLCMLHandle() 2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin void *handle = NULL; 2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE); 2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *error = NULL; 2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECGetLCMLHandle %d\n",__LINE__); 2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!handle) { 2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(dlerror(), stderr); 2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle = dlsym (handle, "GetHandle"); 2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((error = dlerror()) != NULL) { 2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(error, stderr); 2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = (*fpGetHandle)(&pHandle); 2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("eError != OMX_ErrorNone...\n"); 2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bLcmlHandleOpened = 1; 2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("G711DECGetLCMLHandle returning %p\n",pHandle); 2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**WINDOWS Explicit dll load procedure */ 2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G711DECGetLCMLHandle() 2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin HINSTANCE hDLL; /* Handle to DLL */ 2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0); 2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (hDLL == NULL) 2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* fputs(dlerror(), stderr); */ 2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("BML Load Failed!!!\n"); 2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!fpGetHandle1) 2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* handle the error */ 2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FreeLibrary(hDLL); 2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* call the function */ 2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = fpGetHandle1(&pHandle); 2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("eError != OMX_ErrorNone...\n"); 2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** FREE HANDLE */ 2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECFreeLCMLHandle() 2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 retValue = 0; 2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate_CC->bLcmlHandleOpened) { 2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin retValue = dlclose(pComponentPrivate_CC->pLcmlHandle); 2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (retValue != 0) { 2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bLcmlHandleOpened = 0; 2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** FREE HANDLE */ 2471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECFreeLCMLHandle() 2474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 retValue = 0; 2477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate_CC->bLcmlHandleOpened) { 2480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin retValue = FreeLibrary(pComponentPrivate_CC->pLcmlHandle); 2482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (retValue == 0) { /* Zero Indicates failure */ 2483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 2484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bLcmlHandleOpened = 0; 2486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** SET PENDING */ 2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G711DEC_SetPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, 2497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 2498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 1; 2504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("*******************INPUT BUFFER %d IS PENDING******************************\n",i); 2505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1; 2512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("*******************OUTPUT BUFFER %d IS PENDING******************************\n",i); 2513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** CLEAR PENDING */ 2519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G711DEC_ClearPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, 2522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 2523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 0; 2530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("*******************INPUT BUFFER %d IS RECLAIMED******************************\n",i); 2531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0; 2538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("*******************OUTPUT BUFFER %d IS RECLAIMED ******************************\n",i); 2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G711DEC_IsPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 2545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pInputBufferList->bBufferPending[i]; 2552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pOutputBufferList->bBufferPending[i]; 2559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return -1; 2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G711DEC_IsValid(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) 2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 found=0; 2570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) { 2574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) { 2581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return found; 2586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** G711DECFill_LCMLInitParamsEx */ 2590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** */ 2591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*=======================================================================*/ 2592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G711DECFill_LCMLInitParamsEx (OMX_HANDLETYPE pComponent ) 2593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 2596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 2598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_S16 size_lcml = 0; 2599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_STRMATTR *strmAttr = NULL; 2600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 2602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 2603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_G711DEC_BUFHEADERTYPE *pTemp_lcml = NULL; 2604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: G711DECFill_LCMLInitParams\n ",__LINE__); 2606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pHandle = %p\n",__LINE__,pHandle); 2607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: pHandle->pComponentPrivate = %p\n",__LINE__,pHandle->pComponentPrivate); 2608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = pHandle->pComponentPrivate; 2609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 2611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = (pComponentPrivate->pPortDef[G711DEC_INPUT_PORT]->nBufferSize); 2613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 2615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = (pComponentPrivate->pPortDef[G711DEC_OUTPUT_PORT]->nBufferSize); 2616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = (OMX_U16) (nIpBuf * sizeof(LCML_G711DEC_BUFHEADERTYPE)); 2619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_G711DEC_BUFHEADERTYPE); 2620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT] = pTemp_lcml; 2621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 2623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 2624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 2626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 2627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G711DEC_MAJOR_VER; 2628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G711DEC_MINOR_VER; 2629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 2631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 2632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 2633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pTemp_lcml->pIpParam, G711DEC_UAlgInBufParamStruct); 2635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usFrameLost = 0; 2637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usEndOfFile = 0; 2638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC(pTemp_lcml->pDmmBuf,DMM_BUFFER_OBJ); 2640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by the application to indicate the last buffer */ 2641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 2642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all output buffer headers. This memory pointer will be sent to LCML */ 2646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = (OMX_U16) (nOpBuf * sizeof(LCML_G711DEC_BUFHEADERTYPE) ); 2647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711D_OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_G711DEC_BUFHEADERTYPE); 2648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G711DEC_OUTPUT_PORT] = pTemp_lcml; 2649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 2651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 2652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 2654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 2655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G711DEC_MAJOR_VER; 2656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G711DEC_MINOR_VER; 2657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 2658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 2660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by the application to indicate the last buffer */ 2662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 2663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 2664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:::pTemp_lcml = %p\n",__LINE__,pTemp_lcml); 2665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d:::pTemp_lcml->buffer = %p\n",__LINE__,pTemp_lcml->buffer); 2666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 2668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 2670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 2673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("%d :: Exiting G711DECFill_LCMLInitParams",__LINE__); 2674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 2676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError == OMX_ErrorInsufficientResources) 2678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_INPUT_PORT]); 2680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(strmAttr); 2681b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pTemp_lcml != NULL) { 2682b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G711DECMEMFREE_STRUCT(pTemp_lcml->pIpParam); 2683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G711DECMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G711DEC_OUTPUT_PORT]); 2685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** ======================================================================== 2690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_DmmMap () method is used to allocate the memory using DMM. 2691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ProcHandle - Component identification number 2693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param size - Buffer header address, that needs to be sent to codec 2694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pArmPtr - Message used to send the buffer to codec 2695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pDmmBuf - buffer id 2696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_ErrorNone - Success 2698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware - Hardware Error 2699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ** ==========================================================================*/ 2700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE OMX_DmmMap(DSP_HPROCESSOR ProcHandle, 2701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int size, 2702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin void* pArmPtr, 2703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin DMM_BUFFER_OBJ* pDmmBuf) 2704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 2706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 2707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nSizeReserved = 0; 2708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("OMX_DmmMap %d\n",__LINE__); 2710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pDmmBuf == NULL) 2711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("pBuf is NULL\n"); 2713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pArmPtr == NULL) 2718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("pBuf is NULL\n"); 2720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate */ 2725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDmmBuf->pAllocated = pArmPtr; 2726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Reserve */ 2727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nSizeReserved = ROUND_TO_PAGESIZE(size) + 2*DMM_PAGE_SIZE ; 2728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = DSPProcessor_ReserveMemory(ProcHandle, nSizeReserved, &(pDmmBuf->pReserved)); 2729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("\nOMX Reserve DSP: %p\n",pDmmBuf->pReserved); 2730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(DSP_FAILED(status)) 2732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("DSPProcessor_ReserveMemory() failed - error 0x%x", (int)status); 2734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 2735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDmmBuf->nSize = size; 2738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT(" DMM MAP Reserved: %p, size 0x%x (%d)\n", pDmmBuf->pReserved,nSizeReserved,nSizeReserved); 2739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Map */ 2741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = DSPProcessor_Map(ProcHandle, 2742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDmmBuf->pAllocated,/* Arm addres of data to Map on DSP*/ 2743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size , /* size to Map on DSP*/ 2744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pDmmBuf->pReserved, /* reserved space */ 2745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &(pDmmBuf->pMapped), /* returned map pointer */ 2746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0); /* final param is reserved. set to zero. */ 2747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(DSP_FAILED(status)) 2749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("DSPProcessor_Map() failed - error 0x%x", (int)status); 2751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 2752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("DMM Mapped: %p, size 0x%x (%d)\n",pDmmBuf->pMapped, size,size); 2755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Issue an initial memory flush to ensure cache coherency */ 2757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = DSPProcessor_FlushMemory(ProcHandle, pDmmBuf->pAllocated, size, 0); 2758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(DSP_FAILED(status)) 2759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("Unable to flush mapped buffer: error 0x%x",(int)status); 2761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 2764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** ======================================================================== 2770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_DmmUnMap () method is used to de-allocate the memory using DMM. 2771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ProcHandle - Component identification number 2773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pMapPtr - Map address 2774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pResPtr - reserve adress 2775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_ErrorNone - Success 2777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware - Hardware Error 2778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ** ==========================================================================*/ 2779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE OMX_DmmUnMap(DSP_HPROCESSOR ProcHandle, void* pMapPtr, void* pResPtr) 2780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("OMX_DmmUnMap %d\n",__LINE__); 2782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 2783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("\nOMX UnReserve DSP: %p\n",pResPtr); 2785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pMapPtr == NULL) 2787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("pMapPtr is NULL\n"); 2789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pResPtr == NULL) 2793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("pResPtr is NULL\n"); 2795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 2796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = DSPProcessor_UnMap(ProcHandle,pMapPtr); 2799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(DSP_FAILED(status)) 2800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("DSPProcessor_UnMap() failed - error 0x%x",(int)status); 2802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_DPRINT("unreserving structure =0x%p\n",pResPtr ); 2805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = DSPProcessor_UnReserveMemory(ProcHandle,pResPtr); 2806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(DSP_FAILED(status)) 2807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_PRINT("DSPProcessor_UnReserveMemory() failed - error 0x%x", (int)status); 2809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*********************************** 2817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Callback to the RM * 2818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ***********************************/ 2819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G711DEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 2820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 2822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STATETYPE state = OMX_StateIdle; 2823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent; 2824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G711DEC_COMPONENT_PRIVATE *pCompPrivate = NULL; 2825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCompPrivate = (G711DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 2827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesPreempted){ 2829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pCompPrivate->curState == OMX_StateExecuting || 2830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCompPrivate->curState == OMX_StatePause) { 2831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 2833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin write (pCompPrivate->cmdDataPipe[1], &state ,sizeof(OMX_U32)); 2834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCompPrivate->bPreempted = 1; 2836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesAcquired){ 2839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pCompPrivate->cbInfo.EventHandler ( pHandle, 2840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventResourcesAcquired, 2842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 0, NULL); 2843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2846