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