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