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_G726Enc_Utils.c 30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements G726 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\g726_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*! Gyancarlo Garcia: Initial Verision 43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 05-Oct-2007 44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* =========================================================================== */ 46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**************************************************************** 49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* INCLUDE FILES 50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/ 51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h> 54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h> 55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h> 56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h> 58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h> 59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h> 60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h> 61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h> 62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h> 63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h> 64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h> 65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h> 66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h> 69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h> 70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h> 71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h> 72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------program files ----------------------------------------*/ 73b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 74b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 75b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#include <ResourceManagerProxyAPI.h> 76b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 77b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G726Enc_Utils.h" 79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "g726enc_sn_uuid.h" 80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <encode_common_ti.h> 81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h" 82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define HASHINGENABLE 1 85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G726ENC_DEBUGMEM 88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern void *arr[500] = {NULL}; 89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern int lines[500] = {0}; 90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern int bytes[500] = {0}; 91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern char file[500][50] ={""}; 92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid * DebugMalloc(int line, char *s, int size); 94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint DebugFree(void *dp, int line, char *s); 95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeMalloc(x) DebugMalloc(__LINE__,__FILE__,x) 97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeFree(z) DebugFree(z,__LINE__,__FILE__) 98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid * DebugMalloc(int line, char *s, int size) 100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin void *p = NULL; 102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int e=0; 103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p = calloc(1,size); 104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(p==NULL){ 105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("__ Memory not available\n"); 106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin exit(1); 107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while((lines[e]!=0)&& (e<500) ){ 110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin e++; 111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[e]=p; 113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin lines[e]=line; 114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin bytes[e]=size; 115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy(file[e],s); 116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("__ Allocating %d bytes on address %p, line %d file %s\n", size, p, line, s); 117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return p; 118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint DebugFree(void *dp, int line, char *s){ 122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int q = 0; 123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(dp==NULL){ 124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("__ NULL can't be deleted\n"); 125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return 0; 126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(q=0;q<500;q++){ 128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(arr[q]==dp){ 129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("__ Deleting %d bytes on address %p, line %d file %s\n", bytes[q],dp, line, s); 130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin lines[q]=0; 131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy(file[q],""); 132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(dp); 133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin dp = NULL; 134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(500==q) 138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("\n\n__ Pointer not found. Line:%d File%s!!\n\n",line, s); 139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeMalloc(x) calloc(1,x) 142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeFree(z) free(z) 143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_FillLCMLInitParams () This function is used by the component thread to 148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* fill the all of its initialization parameters, buffer deatils etc 149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* to LCML structure, 150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param plcml_Init pointer to LCML structure to be filled 153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_FillLCMLInitParams(OMX_HANDLETYPE pComponent, 163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *plcml_Init, OMX_U16 arr[]) 164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate; 170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 size_lcml = 0; 173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pstrTemp = NULL; 174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBufferParamTemp = NULL; 175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_FillLCMLInitParams\n",__LINE__); 176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nBufferSize; 179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nBufferSize; 181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers = (OMX_U8)nIpBuf; 183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers = (OMX_U8) nOpBuf; 184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: ------ Buffer Details -----------\n",__LINE__); 186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Input Buffer Count = %ld\n",__LINE__,nIpBuf); 187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Input Buffer Size = %ld\n",__LINE__,nIpBufSize); 188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output Buffer Count = %ld\n",__LINE__,nOpBuf); 189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output Buffer Size = %ld\n",__LINE__,nOpBufSize); 190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: ------ Buffer Details ------------\n",__LINE__); 191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Fill Input Buffers Info for LCML */ 193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nBuffers = nIpBuf; 194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nSize = nIpBufSize; 195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD; 196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Fill Output Buffers Info for LCML */ 198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nBuffers = nOpBuf; 199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nSize = nOpBufSize; 200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD; 201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Copy the node information*/ 203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.nNumOfDLLs = 3; 204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G726ENCSOCKET_TI_UUID; 206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName,G726ENC_DLL_NAME); 207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G726ENCSOCKET_TI_UUID; 210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName,G726ENC_DLL_NAME); 211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID;*/ 214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID; 215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName,G726ENC_USN_DLL_NAME); 216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice = 0; 219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 1) { 221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Codec is configuring to DASF mode\n",__LINE__); 222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pstrTemp = (OMX_U8*)SafeMalloc(sizeof(LCML_STRMATTR) + 256); 223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pstrTemp == NULL){ 224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("***********************************\n"); 225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("%d :: Malloc Failed\n",__LINE__); 226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("***********************************\n"); 227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = (LCML_STRMATTR*)(pstrTemp + 128); 231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->uSegid = G726ENC_DEFAULT_SEGMENT; 232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->uAlignment = 0; 233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->uTimeout = G726ENC_SN_TIMEOUT; 234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->uBufsize = nIpBufSize; 235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->uNumBufs = G726ENC_NUM_INPUT_BUFFERS_DASF; 236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr->lMode = STRMMODE_PROCCOPY; 237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Device is Configuring to DASF Mode */ 238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice = 1; 239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Device is Configuring to Record Mode */ 240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofRender = 1; 241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->acdnMode == 1) { 243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* ACDN mode */ 244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &ACDN_TI_UUID; 245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* DASF/TeeDN mode */ 248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID; 249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.DspStream = pComponentPrivate->strmAttr; 251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*copy the other information*/ 254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->SegID = G726ENC_DEFAULT_SEGMENT; 255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Timeout = G726ENC_SN_TIMEOUT; 256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Alignment = 0; 257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Priority = G726ENC_SN_PRIORITY; 258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->ProfileID = 0; 259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Setting Creat Phase Parameters here */ 261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[0] = G726ENC_STREAM_COUNT; /* Number of communication paths */ 262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[1] = G726ENC_INPUT_PORT; /* Input Path id */ 263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 1) { 265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[2] = G726ENC_INSTRM; /* Streaming on input */ 266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = G726ENC_NUM_INPUT_BUFFERS_DASF; /* Audio Devices are connected */ 267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[2] = G726ENC_DMM; /* DMM buffers will be used */ if (pComponentPrivate->pInputBufferList->numBuffers) { 270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = (OMX_U16) pComponentPrivate->pInputBufferList->numBuffers;/* #Bufs exchanged between SN and GPP */ 271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[4] = G726ENC_OUTPUT_PORT; /* Output Path id */ 275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[5] = G726ENC_DMM; /* DMM buffers will be used */ 276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufferList->numBuffers) { 277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = (OMX_U16) pComponentPrivate->pOutputBufferList->numBuffers; /* #Bufs exchanged between SN and GPP */ 278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = (OMX_U16)1; /* 1 Buf exchanged between SN and GPP */ 281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[7] = pComponentPrivate->G726Params[G726ENC_OUTPUT_PORT]->eG726Mode-1; /* 0 - 16kbps Codec Selection */ 284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* 1 - 24 kbps Codec Selection */ 285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* 2 - 32 kbps Codec Selection */ 286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* 3 - 40 kbps Codec Selection */ 287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[8] = (OMX_U16) pComponentPrivate->rtpMode; /* 0 - Linear Packing Type */ 289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* 1 - RTP Packing Type */ 290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*What's the right value??*/ 291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[9] = END_OF_CR_PHASE_ARGS; 292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->pCrPhArgs = arr; 294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all input buffer headers.. 296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nIpBuf * sizeof(G726ENC_LCML_BUFHEADERTYPE); 298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = (G726ENC_LCML_BUFHEADERTYPE *)SafeMalloc(size_lcml); 299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_MEMPRINT("%d :: ALLOCATING MEMORY = %p\n",__LINE__,pTemp_lcml); 301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) { 302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__); 303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G726ENC_INPUT_PORT] = pTemp_lcml; 307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: INPUT--------- Inside Ip Loop\n",__LINE__); 309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER; 313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G726ENC_MINOR_VER; 314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = G726ENC_NOT_USED; 316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pTemp_lcml->buffer->pBuffer = %p \n",__LINE__,pTemp_lcml->buffer->pBuffer); 318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufferParamTemp = (OMX_U8*)SafeMalloc( sizeof(G726ENC_ParamStruct) + 256); 321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pBufferParamTemp == NULL) { 322b65f253fdc60f6208a54911bee793d225f23cdf8James Dong G726ENC_DPRINT("%d :: Memory Allocation Failed\n", __LINE__); 323b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(pBufferParamTemp, 0x0, sizeof(G726ENC_ParamStruct) + 256); 327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam = (G726ENC_ParamStruct*)(pBufferParamTemp + 128); 328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->bLastBuffer = 0; 330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = G726ENC_NORMAL_BUFFER; 333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nOpBuf * sizeof(G726ENC_LCML_BUFHEADERTYPE); 340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = (G726ENC_LCML_BUFHEADERTYPE *)SafeMalloc(size_lcml); 341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_MEMPRINT("%d :: ALLOCATING MEMORY = %p\n",__LINE__,pTemp_lcml); 342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) { 343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__); 344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G726ENC_OUTPUT_PORT] = pTemp_lcml; 349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: OUTPUT--------- Inside Op Loop\n",__LINE__); 351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER; 355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G726ENC_MINOR_VER; 356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = G726ENC_NOT_USED; 359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pTemp_lcml->buffer->pBuffer = %p \n",__LINE__,pTemp_lcml->buffer->pBuffer); 361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = G726ENC_NORMAL_BUFFER; 366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_FillLCMLInitParams\n",__LINE__); 374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_StartComponentThread() This function is called by the component to create 381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* the component thread, command pipes, data pipes and LCML Pipes. 382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_StartComponentThread(OMX_HANDLETYPE pComponent) 393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = 397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_attr_t attr; 400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_AUDIO_ENCODER_THREAD_PRIORITY; 403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d :: Enetering G726ENC_StartComponentThread\n", __LINE__); 406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Initialize all the variables*/ 407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdDataPipe); 411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error while creating cmdDataPipe\n",__LINE__); 414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->dataPipe); 418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error while creating dataPipe\n",__LINE__); 421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdPipe); 426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError) { 427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error while creating cmdPipe\n",__LINE__); 429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Create the Component Thread */ 433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), &attr, 435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_CompThread, pComponentPrivate); 436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL, 438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_CompThread, pComponentPrivate); 439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError || !pComponentPrivate->ComponentThread) { 441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 1; 446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_StartComponentThread\n", __LINE__); 448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_FreeCompResources() This function is called by the component during 455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* de-init , to free Command pipe, data pipe & LCML pipe. 456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_FreeCompResources(OMX_HANDLETYPE pComponent) 468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; 471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *) 473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_FreeCompResources\n",__LINE__); 475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bCompThreadStarted) { 477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->dataPipe[0],err); 478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->dataPipe[1],err); 479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->cmdPipe[0],err); 480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->cmdPipe[1],err); 481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->cmdDataPipe[0],err); 482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBCLOSE_PIPE(pComponentPrivate->cmdDataPipe[1],err); 483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* if (pComponentPrivate->bPortDefsAllocated) {*/ 486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]); 487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]); 488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->G726Params[G726ENC_INPUT_PORT]); 489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->G726Params[G726ENC_OUTPUT_PORT]); 490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat); 492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat); 493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]); 494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]); 495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->sPortParam); 497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->sPriorityMgmt); 498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pInputBufferList); 499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList); 500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* }*/ 502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_FreeCompResources()\n",__LINE__); 505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_CleanupInitParams() This function is called by the component during 512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* de-init to free structues that are been allocated at intialization stage 513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_CleanupInitParams(OMX_HANDLETYPE pComponent) 525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pTemp = NULL; 529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8* pBufParmsTemp = NULL; 532b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8* pParamsTemp = NULL; 533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *) 534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_CleanupInitParams()\n", __LINE__); 536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 1) { 538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = (OMX_U8*)pComponentPrivate->strmAttr; 539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp!=NULL) 540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp -=128; 541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pTemp); 542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G726ENC_INPUT_PORT]; 545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<pComponentPrivate->nRuntimeInputBuffers; i++) { 547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufParmsTemp = (OMX_U8*)pTemp_lcml->pIpParam; 548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufParmsTemp-=128; 549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin SafeFree(pBufParmsTemp); 550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam = NULL; 551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 554b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pParamsTemp = (OMX_U8*)pComponentPrivate->pParams; 555b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pParamsTemp != NULL) 556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pParamsTemp -= 128; 557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_NBMEMFREE_STRUCT(pParamsTemp); 558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G726ENC_OUTPUT_PORT]; 559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<pComponentPrivate->nRuntimeOutputBuffers; i++) { 561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* OMX_NBMEMFREE_STRUCT(pTemp_lcml->pOpParam);*/ /* according to the SN guide, the params on the */ 562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* output buffer shoul not be needed */ 563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G726ENC_INPUT_PORT]); 567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[G726ENC_OUTPUT_PORT]); 568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_CleanupInitParams()\n",__LINE__); 570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_StopComponentThread() This function is called by the component during 577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* de-init to close component thread. 578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_StopComponentThread(OMX_HANDLETYPE pComponent) 590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int pthreadError = 0; 594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *) 596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_StopComponentThread\n",__LINE__); 598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: About to call pthread_join\n",__LINE__); 599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthreadError = pthread_join (pComponentPrivate->ComponentThread, 600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void*)&threadError); 601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != pthreadError) { 602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error closing ComponentThread - pthreadError = %d\n",__LINE__,pthreadError); 604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError) { 607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error while closing Component Thread\n",__LINE__); 609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_StopComponentThread\n",__LINE__); 613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_HandleCommand() This function is called by the component when ever it 621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the command from the application 622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate Component private data 624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G726ENC_HandleCommand (G726ENC_COMPONENT_PRIVATE *pComponentPrivate) 634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMMANDTYPE command; 637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STATETYPE commandedState = OMX_StateInvalid; 638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle; 639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_CALLBACKTYPE cb; 640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *pLcmlDsp = NULL; 641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 pValues[4] = {0}; 642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 commandData = 0; 643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 arr[100] = {0}; 644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STRING p = "damedesuStr"; 645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 ret = 0; 647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nTimeout = 0; 648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL; 649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 inputPortFlag=0,outputPortFlag=0; 650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8* pParamsTemp = NULL; 651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE rm_error = OMX_ErrorNone; 654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = pComponentPrivate->pLcmlHandle; 658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = read(pComponentPrivate->cmdPipe[0], &command, sizeof (command)); 660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret == -1) { 661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error in Reading from the Data pipe\n", __LINE__); 662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = read(pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData)); 666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret == -1) { 667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error in Reading from the Data pipe\n", __LINE__); 668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (command == OMX_CommandStateSet) { 673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin commandedState = (OMX_STATETYPE)commandData; 674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(commandedState) { 675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateIdle: 676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateIdle \n",__LINE__); 677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pComponentPrivate->curState = %d\n",__LINE__,pComponentPrivate->curState); 678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__); 686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->curState == OMX_StateWaitForResources) { 688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated && pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled){ 690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputPortFlag = 1; 691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated && pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled){ 693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputPortFlag = 1; 694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(( pComponentPrivate->dasfMode && !outputPortFlag) || 696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (!pComponentPrivate->dasfMode && (!inputPortFlag || !outputPortFlag))) 697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Sleep for a while, so the application thread can allocate buffers */ 699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Sleeping...\n",__LINE__); 700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 1; 701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, &pComponentPrivate->InLoaded_mutex); 704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cb.LCML_Callback = (void *) G726ENC_LCMLCallback; 709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (OMX_HANDLETYPE) G726ENC_GetLCMLHandle(pComponentPrivate); 711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pLcmlHandle == NULL) { 713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: LCML Handle is NULL........exiting..\n",__LINE__); 714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Got handle of dsp via phandle filling information about DSP Specific things */ 718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_FillLCMLInitParams(pHandle, pLcmlDsp, arr); 720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error from G726ENCFill_LCMLInitParams()\n",__LINE__); 722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle; 726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cb.LCML_Callback = (void *) G726ENC_LCMLCallback; 727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb, (OMX_STRING)pComponentPrivate->sDeviceString); 731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle, (void *)p, &cb); 735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error returned from LCML_Init()\n",__LINE__); 739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Need check the resource with RM */ 744b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *) G726ENC_ResourceManagerCallback; 745b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState != OMX_StateWaitForResources) { 746b65f253fdc60f6208a54911bee793d225f23cdf8James Dong rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, 747b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_G726_Encoder_COMPONENT, 748b65f253fdc60f6208a54911bee793d225f23cdf8James Dong G726ENC_CPU, 749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3456, 750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong &(pComponentPrivate->rmproxyCallback)); 751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(rm_error == OMX_ErrorNone) { 752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* resource is available */ 753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin RMProxy_StateSet, 756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G726_Encoder_COMPONENT, 757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 3456,NULL); 758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(rm_error == OMX_ErrorInsufficientResources) { 760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* resource is not available, need set state to OMX_StateWaitForResources */ 761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorInsufficientResources\n", __LINE__); 769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_G726_Encoder_COMPONENT, OMX_StateIdle, 3456,NULL); 773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 775b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->curState = OMX_StateIdle; 776b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler( pHandle, 777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 778b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventCmdComplete, 779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_CommandStateSet, 780b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->curState, 781b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateExecuting) { 794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Setting Component to OMX_StateIdle\n",__LINE__); 795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Error occurred in Codec mapping flush!\n"); 802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC: About to Call MMCodecControlStop\n", __LINE__); 806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)p); 808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error from LCML_ControlCodec MMCodecControlStop..\n",__LINE__); 810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 1) { 814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParamsTemp = (OMX_U8*)pComponentPrivate->pParams; 815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pParamsTemp != NULL) 816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParamsTemp -= 128; 817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pParamsTemp); 818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->ptempBuffer!=NULL){ 821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->ptempBuffer); 822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pHoldBuffer!=NULL){ 825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMEMFREE_STRUCT(pComponentPrivate->pHoldBuffer); 826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nHoldLength = 0; 829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lastOutBufArrived=NULL; 830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->LastBufSent = 0; 831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(pComponentPrivate->curState == OMX_StatePause) { 834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* clear out any mappings that might have accumulated */ 839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Error occurred in Codec mapping flush!\n"); 842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_G726_Encoder_COMPONENT, OMX_StateIdle, 3456,NULL); 850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { /* This means, it is invalid state from application */ 858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorIncorrectStateTransition\n",__LINE__); 865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateExecuting: 869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateExecuting \n",__LINE__); 870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorSameState Given by Comp\n",__LINE__); 878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateIdle) 880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 1) { 883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: ---- Comp: DASF Functionality is ON ---\n",__LINE__); 884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pParamsTemp = (OMX_U8*)SafeMalloc(sizeof(G726ENC_AudioCodecParams) + 256); 885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pParamsTemp == NULL){ 886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("***********************************\n"); 887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("%d :: Malloc Failed\n",__LINE__); 888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_EPRINT("***********************************\n"); 889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams = (G726ENC_AudioCodecParams*)(pParamsTemp + 128); 894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat = 1; 895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->iStrmId = pComponentPrivate->streamID; 896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->iSamplingRate = G726ENC_SAMPLING_FREQUENCY; 897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[1] = (OMX_U32)pComponentPrivate->pParams; 899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[2] = sizeof(G726ENC_AudioCodecParams); 900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Sending STRMCTRL MESSAGE to DSP via LCML_ControlCodec*/ 901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error from LCML_ControlCodec EMMCodecControlStrmCtrl = %x\n",__LINE__,eError); 905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Sending START MESSAGE to DSP via LCML_ControlCodec*/ 910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)p); 912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error from LCML_ControlCodec EMMCodecControlStart = %x\n",__LINE__,eError); 914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StatePause) { 918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)p); 920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error While Resuming the codec = %x\n",__LINE__,eError); 922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]) { 927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr); 928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__); 929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G726ENC_ParamStruct), 937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufHdrPending[i]) { 945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, OMX_DirOutput, &pLcmlHdr); 946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],OMX_DirOutput,__LINE__); 947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen, 951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen*/0, 952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*(OMX_U8 *) pLcmlHdr->pIpParam*/NULL, 953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*sizeof(G726ENC_ParamStruct)*/0, 954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorIncorrectStateTransition Given by Comp\n",__LINE__); 966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateExecuting; 970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_G726_Encoder_COMPONENT, OMX_StateExecuting, 3456,NULL); 972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_CommandStateSet Given by Comp\n",__LINE__); 980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateLoaded: 983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateLoaded\n",__LINE__); 984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorSameState Given by Comp\n",__LINE__); 992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources){ 995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateWaitForResources\n",__LINE__); 996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_CommandStateSet Given by Comp\n",__LINE__); 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateIdle && 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateWaitForResources) { 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateIdle && OMX_StateWaitForResources\n",__LINE__); 1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorIncorrectStateTransition Given by Comp\n",__LINE__); 1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers && 1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers) { 1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 1; 1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InIdle_threshold, &pComponentPrivate->InIdle_mutex); 1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Now Deinitialize the component No error should be returned from 1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * this function. It should clean the system as much as possible */ 1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_CleanupInitParams(pHandle); 1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: LCML_ControlCodec EMMCodecControlDestroy = %x\n",__LINE__, eError); 1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_EXIT_COMPONENT_THRD; 1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StatePause: 1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StatePause\n",__LINE__); 1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorSameState Given by Comp\n",__LINE__); 1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateExecuting && 1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateIdle) { 1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorIncorrectStateTransition Given by Comp\n",__LINE__); 1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlPause, (void *)p); 1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: LCML_ControlCodec EMMCodecControlPause = %x\n",__LINE__,eError); 1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StatePause; 1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_CommandStateSet Given by Comp\n",__LINE__); 1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateWaitForResources: 1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState) { 1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorSameState Given by Comp\n",__LINE__); 1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StateLoaded) { 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_CommandStateSet Given by Comp\n",__LINE__); 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorIncorrectStateTransition Given by Comp\n",__LINE__); 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateInvalid: 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: OMX_StateInvalid\n",__LINE__); 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState){ 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( pHandle, 1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: OMX_ErrorSameState Given by Comp\n",__LINE__); 1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else{ 1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Comp: OMX_ErrorInvalidState Given by Comp\n",__LINE__); 1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateMax: 1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_HandleCommand :: Cmd OMX_StateMax\n",__LINE__); 1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } /* End of Switch */ 1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (command == OMX_CommandMarkBuffer) { 1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: command OMX_CommandMarkBuffer received\n",__LINE__); 1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pMarkBuf){ 1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* TODO Need to handle multiple marks */ 1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData); 1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (command == OMX_CommandPortDisable) 1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->bDisableCommandPending) { 1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable port */ 1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled = OMX_FALSE; 1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: command disabled input port\n",__LINE__); 1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable output port */ 1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled = OMX_FALSE; 1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: command disabled output port\n",__LINE__); 1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_TRUE; 1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)p); 1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("commandData = %ld\n",commandData); 1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated); 1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated); 1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0) { 1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated){ 1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_INPUT_PORT, 1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1) { 1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated){ 1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_OUTPUT_PORT, 1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == -1) { 1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated && 1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated){ 1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_INPUT_PORT, 1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_OUTPUT_PORT, 1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (command == OMX_CommandPortEnable) { 1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable in port */ 1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: setting input port to enabled\n",__LINE__); 1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled = OMX_TRUE; 1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled); 1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable out port */ 1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)p); 1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: setting output port to enabled\n",__LINE__); 1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled = OMX_TRUE; 1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled); 1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (1) { 1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->curState = %d\n",pComponentPrivate->curState); 1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated); 1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 && (pComponentPrivate->curState == OMX_StateLoaded || 1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated)){ 1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_INPUT_PORT, 1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: setting Input port to enabled\n",__LINE__); 1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if(commandData == 0x1 && (pComponentPrivate->curState == OMX_StateLoaded || 1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated)){ 1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_OUTPUT_PORT, 1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: setting output port to enabled\n",__LINE__); 1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if(commandData == -1 && (pComponentPrivate->curState == OMX_StateLoaded || 1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated 1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin && pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated))){ 1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_INPUT_PORT, 1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_OUTPUT_PORT, 1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_FillLCMLInitParamsEx(pComponentPrivate->pHandle); 1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: setting Input & Output port to enabled\n",__LINE__); 1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(nTimeout++ > G726ENC_OMX_MAX_TIMEOUTS){ 1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return error as we have waited long enough */ 1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorPortUnresponsiveDuringAllocation, 1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0 , 1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (command == OMX_CommandFlush) { 1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 aParam[3] = {0}; 1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1) { 1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[1] = 0x0; 1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[2] = 0x0; 1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Flushing input port\n"); 1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl, (void*)aParam); 1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[1] = 0x1; 1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin aParam[2] = 0x0; 1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Flushing output port\n"); 1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl, (void*)aParam); 1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_HandleCommand Function\n",__LINE__); 1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_HandleDataBufFromApp() This function is called by the component when ever it 1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* receives the buffer from the application 1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponentPrivate Component private data 1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pBufHeader Buffer from the application 1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_HandleDataBufFromApp(OMX_BUFFERHEADERTYPE* pBufHeader, 1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate) 1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir; 1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pLcmlHdr=NULL; 1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle; 1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d :: Entering G726ENC_HandleDataBufFromApp Function\n",__LINE__); 1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Find the direction of the received buffer from buffer list */ 1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_GetBufferDirection(pBufHeader, &eDir); 1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d :: The pBufHeader is not found in the list\n", __LINE__); 1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 0) { 1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pBufHeader->nFilledLen > 0) || (pBufHeader->nFlags == OMX_BUFFERFLAG_EOS)) { 1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr); 1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) { 1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->LastBufSent = 1; 1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pIpParam->bLastBuffer = 1; 1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pIpParam->bLastBuffer = 0; 1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store time stamp information */ 1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store nTickCount information */ 1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex++; 1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nBufferCountActual; 1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->bDspStoppedWhileExecuting) { 1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G726ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) { 1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput,__LINE__); 1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer( pLcmlHandle->pCodecinterfacehandle, 1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen, 1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G726ENC_ParamStruct), 1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("OMX_ErrorHardware Occurred!!!!!!!!\n"); 1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else{ 1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader 1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Calling EmptyBufferDone\n",__LINE__); 1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone( pComponentPrivate->pHandle, 1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]); 1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) { 1442b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS; 1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->pMarkData){ 1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* copy mark to output buffer header */ 1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData; 1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent; 1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* trigger event handler if we are supposed to */ 1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){ 1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pComponentPrivate->pHandle, 1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventMark, 1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pMarkData); 1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (eDir == OMX_DirOutput) { 1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Make sure that output buffer is issued to output stream only when 1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * there is an outstanding input buffer already issued on input stream 1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr); 1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* pLcmlHdr->pOpParam->usNbFrames =1;*/ /*<<<<<<<<<<---------------- according SN guide this is not needed!!!!!!*/ 1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* The SN should be the one that set this Information */ 1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ 1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(pComponentPrivate->bIsStopping)) { 1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d: Sending Empty OUTPUT BUFFER to Codec = %p\n",__LINE__,pBufHeader->pBuffer); 1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G726ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) { 1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__); 1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer( pLcmlHandle->pCodecinterfacehandle, 1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen, 1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d :: IssuingDSP OP: Error Occurred\n",__LINE__); 1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StatePause) { 1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G726ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) { 1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__); 1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer( pLcmlHandle->pCodecinterfacehandle, 1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen, 1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("%d :: IssuingDSP OP: Error Occurred\n",__LINE__); 1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StatePause) { 1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting from G726ENC_HandleDataBufFromApp \n",__LINE__); 1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning error %d\n",__LINE__,eError); 1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* G726ENC_GetBufferDirection () This function is used by the component 1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* to get the direction of the buffer 1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param eDir pointer will be updated with buffer direction 1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pBufHeader pointer to the buffer to be requested to be filled 1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @retval none 1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin**/ 1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, 1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE *eDir) 1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate; 1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nBuf = 0; 1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuf = NULL; 1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 flag = 1,i = 0; 1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_GetBufferDirection Function\n",__LINE__); 1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Search this buffer in input buffers list */ 1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i]; 1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirInput; 1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pBufHeader = %p is INPUT BUFFER pBuf = %p\n",__LINE__,pBufHeader,pBuf); 1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Search this buffer in output buffers list */ 1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirOutput; 1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pBufHeader = %p is OUTPUT BUFFER pBuf = %p\n",__LINE__,pBufHeader,pBuf); 1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (flag == 1) { 1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Buffer %p is Not Found in the List\n",__LINE__, pBufHeader); 1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_GetBufferDirection Function\n",__LINE__); 1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G726ENC_GetCorrespondingLCMLHeader() function will be called by LCML_Callback 1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * component to write the msg 1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer, Event which gives to details about USN status 1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param G726ENC_LCML_BUFHEADERTYPE **ppLcmlHdr 1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param OMX_DIRTYPE eDir this gives direction of the buffer 1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_GetCorrespondingLCMLHeader(G726ENC_COMPONENT_PRIVATE *pComponentPrivate, 1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer, 1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir, 1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE **ppLcmlHdr) 1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader = NULL; 1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0,nIpBuf = 0,nOpBuf = 0; 1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_GetCorrespondingLCMLHeader..\n",__LINE__); 1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (!pComponentPrivate->bInitParamsInitialized) { 1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Waiting for init to complete........\n",__LINE__); 1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eDir == OMX_DirInput) { 1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_GetCorrespondingLCMLHeader..\n",__LINE__); 1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G726ENC_INPUT_PORT]; 1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i = 0; i < nIpBuf; i++) { 1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer); 1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pLcmlBufHeader->buffer->pBuffer = %p\n",__LINE__,pLcmlBufHeader->buffer->pBuffer); 1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Corresponding Input LCML Header Found = %p\n",__LINE__,pLcmlBufHeader); 1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (eDir == OMX_DirOutput) { 1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_GetCorrespondingLCMLHeader..\n",__LINE__); 1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G726ENC_OUTPUT_PORT]; 1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i = 0; i < nOpBuf; i++) { 1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer); 1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pLcmlBufHeader->buffer->pBuffer = %p\n",__LINE__,pLcmlBufHeader->buffer->pBuffer); 1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) { 1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Corresponding Output LCML Header Found = %p\n",__LINE__,pLcmlBufHeader); 1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorNone; 1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Invalid Buffer Type :: exiting...\n",__LINE__); 1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_GetCorrespondingLCMLHeader..\n",__LINE__); 1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/ 1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G726ENC_LCMLCallback() will be called LCML component to write the msg 1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param event Event which gives to details about USN status 1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param void * args // args [0] //bufType; 1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // args [1] //arm address fpr buffer 1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // args [2] //BufferSize; 1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // args [3] //arm address for param 1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // args [4] //ParamSize; 1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // args [6] //LCML Handle 1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_LCMLCallback (TUsnCodecEvent event,void * args[10]) 1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer = args[1]; 1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL; 1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i=0; 1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = NULL; 1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE rm_error = OMX_ErrorNone; 1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering the G726ENC_LCMLCallback Function\n",__LINE__); 1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = (G726ENC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate; 1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G726ENC_DEBUG 1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(event) { 1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspError: 1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspError\n"); 1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInternalError: 1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInternalError\n"); 1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInitError: 1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInitError\n"); 1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspMessageRecieved: 1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved\n"); 1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferProcessed: 1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferProcessed\n"); 1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStarted: 1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStarted\n"); 1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingPaused: 1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingPaused\n"); 1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStoped: 1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStoped\n"); 1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingEof: 1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingEof\n"); 1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferNotProcessed: 1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed\n"); 1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecAlgCtrlAck: 1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck\n"); 1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecStrmCtrlAck: 1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck\n"); 1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(event == EMMCodecBufferProcessed) 1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((OMX_U32)args[0] == EMMCodecInputBuffer) { 1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: INPUT: pBuffer = %p\n",__LINE__, pBuffer); 1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pBuffer, OMX_DirInput, &pLcmlHdr); 1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_ClearPending(pComponentPrivate,pLcmlHdr->buffer,OMX_DirInput,__LINE__); 1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfMode == 0) { 1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d: Component Sending Empty Input buffer%p to App\n",__LINE__,pLcmlHdr->buffer->pBuffer); 1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, 1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer 1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if((OMX_U32)args[0] == EMMCodecOuputBuffer) { 1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: OUTPUT: pBuffer = %p\n",__LINE__, pBuffer); 1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones++; 1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G726ENC_GetCorrespondingLCMLHeader(pComponentPrivate, pBuffer, OMX_DirOutput, &pLcmlHdr); 1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__); 1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output: pLcmlHdr->buffer->pBuffer = %p\n",__LINE__, pLcmlHdr->buffer->pBuffer); 1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = (OMX_U32)args[8]; 1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output: pBuffer = %ld\n",__LINE__, pLcmlHdr->buffer->nFilledLen); 1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lastOutBufArrived = pLcmlHdr->buffer; 1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_ClearPending(pComponentPrivate,pLcmlHdr->buffer,OMX_DirOutput,__LINE__); 1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copying time stamp information to output buffer */ 1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrTimestamp[pComponentPrivate->OpBufindex]; 1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copying nTickCount information to output buffer */ 1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer->nTickCount = pComponentPrivate->arrTickCount[pComponentPrivate->OpBufindex]; 1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex++; 1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nBufferCountActual; 1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone( pHandle, 1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->buffer); 1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (event == EMMCodecStrmCtrlAck) { 1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_STRMCTRL \n",__LINE__); 1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (args[1] == (void *)USN_STRMCMD_FLUSH) { 1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ( args[2] == (void *)EMMCodecInputBuffer) { 1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) { 1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Flushing input port %d\n",__LINE__); 1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Calling EmptyBufferDone\n", __LINE__); 1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]); 1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Incrementing nEmptyBufferDoneCount = %ld\n",__LINE__,pComponentPrivate->nEmptyBufferDoneCount); 1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending=0; 1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all input buffers */ 1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_INPUT_PORT, 1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("LCML reported error while flushing input port\n"); 1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if ( args[2] == (void *)EMMCodecOuputBuffer) { 1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) { 1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("Flushing output port %d\n",__LINE__); 1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Calling FillBufferDone\n", __LINE__); 1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone ( 1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]); 1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Incrementing nFillBufferDoneCount = %ld\n",__LINE__,pComponentPrivate->nFillBufferDoneCount); 1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending=0; 1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all output buffers */ 1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_OUTPUT_PORT, 1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT ("LCML reported error while flushing output port\n"); 1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(event == EMMCodecProcessingStoped) { 1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_STOP \n",__LINE__); 1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->bNoIdleOnStop) { 1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, 1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin RMProxy_StateSet, 1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_G726_Encoder_COMPONENT, 1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 3456,NULL); 1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bPreempted == 0) { 1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorResourcesPreempted, 1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE; 1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop= OMX_FALSE; 1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(event == EMMCodecDspMessageRecieved) { 1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: commandedState = %ld\n",__LINE__,(OMX_U32)args[0]); 1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: arg1 = %ld\n",__LINE__,(OMX_U32)args[1]); 1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: arg2 = %ld\n",__LINE__,(OMX_U32)args[2]); 1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(0x0500 == (OMX_U32)args[2]) { 1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: EMMCodecDspMessageRecieved\n",__LINE__); 1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(event == EMMCodecAlgCtrlAck) { 1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_ALGCTRL \n",__LINE__); 1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (event == EMMCodecDspError) { 1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(((int)args[4] == USN_ERR_WARNING) && ((int)args[5] == IUALG_WARN_PLAYCOMPLETED)) { 1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: GOT MESSAGE IUALG_WARN_PLAYCOMPLETED\n",__LINE__); 1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->lastOutBufArrived!=NULL && !pComponentPrivate->dasfMode){ 1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lastOutBufArrived->nFlags = OMX_BUFFERFLAG_EOS; 1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->LastBufSent=0; 1901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*TODO: add eventhandler to report eos to application*/ 1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting the G726ENC_LCMLCallback Function\n",__LINE__); 1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G726ENC_GetLCMLHandle() 1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_HANDLETYPE 1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G726ENC_GetLCMLHandle(G726ENC_COMPONENT_PRIVATE *pComponentPrivate) 1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE); 1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin void *handle = NULL; 1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *error = NULL; 1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Entering G726ENC_GetLCMLHandle..\n",__LINE__); 1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!handle) { 1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(dlerror(), stderr); 1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle = dlsym (handle, "GetHandle"); 1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((error = dlerror()) != NULL) { 1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(error, stderr); 1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = (*fpGetHandle)(&pHandle); 1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: OMX_ErrorUndefined...\n",__LINE__); 1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->ptrLibLCML=handle; /* saving LCML lib pointer */ 1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_GetLCMLHandle..\n",__LINE__); 1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*WINDOWS Explicit dll load procedure*/ 1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G726ENC_GetLCMLHandle() 1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin HINSTANCE hDLL; // Handle to DLL 1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0); 1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (hDLL == NULL) { 1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin //fputs(dlerror(), stderr); 1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("BML Load Failed!!!\n"); 1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!fpGetHandle1) { 1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // handle the error 1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FreeLibrary(hDLL); 1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // call the function 1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = fpGetHandle1(&pHandle); 1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("eError != OMX_ErrorNone...\n"); 1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn G726ENC_SetPending() description for G726ENC_SetPending 1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinG726ENC_SetPending(). 1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinThis component is called when a buffer is queued to the LCML 1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return OMX_ERRORTYPE 2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */ 2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G726ENC_SetPending(G726ENC_COMPONENT_PRIVATE *pComponentPrivate, 2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 1; 2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("****INPUT BUFFER %d IS PENDING Line %ld******\n",i,lineNumber); 2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1; 2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("****OUTPUT BUFFER %d IS PENDING Line %ld*****\n",i,lineNumber); 2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn G726ENC_ClearPending() description for G726ENC_ClearPending 2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinG726ENC_ClearPending(). 2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinThis component is called when a buffer is returned from the LCML 2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return OMX_ERRORTYPE 2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */ 2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G726ENC_ClearPending(G726ENC_COMPONENT_PRIVATE *pComponentPrivate, 2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 0; 2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("****INPUT BUFFER %d IS RECLAIMED Line %ld*****\n",i,lineNumber); 2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0; 2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("****OUTPUT BUFFER %d IS RECLAIMED Line %ld*****\n",i,lineNumber); 2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn G726ENC_IsPending() description for G726ENC_IsPending 2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinG726ENC_IsPending(). 2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinThis method returns the pending status to the buffer 2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return OMX_ERRORTYPE 2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */ 2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G726ENC_IsPending(G726ENC_COMPONENT_PRIVATE *pComponentPrivate, 2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pInputBufferList->bBufferPending[i]; 2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pOutputBufferList->bBufferPending[i]; 2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return -1; 2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */ 2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn G726ENC_IsValid() description for G726ENC_IsValid 2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinG726ENC_IsValid(). 2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinThis method checks to see if a buffer returned from the LCML is valid. 2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return OMX_ERRORTYPE 2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */ 2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G726ENC_IsValid(G726ENC_COMPONENT_PRIVATE *pComponentPrivate, 2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer, OMX_DIRTYPE eDir) 2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 found=0; 2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) { 2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) { 2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return found; 2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @G726ENC_FillLCMLInitParamsEx() This function is used by the component thread to 2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* fill the all of its initialization parameters, buffer deatils etc 2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* to LCML structure, 2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent handle for this instance of the component 2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param plcml_Init pointer to LCML structure to be filled 2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre 2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post 2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* 2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none 2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/ 2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G726ENC_FillLCMLInitParamsEx(OMX_HANDLETYPE pComponent) 2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate; 2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 size_lcml = 0; 2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: G726ENC_FillLCMLInitParamsEx\n",__LINE__); 2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nBufferSize; 2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nBufferSize; 2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers = nIpBuf; 2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers = nOpBuf; 2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: ------ Buffer Details -----------\n",__LINE__); 2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Input Buffer Count = %ld\n",__LINE__,nIpBuf); 2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Input Buffer Size = %ld\n",__LINE__,nIpBufSize); 2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output Buffer Count = %ld\n",__LINE__,nOpBuf); 2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Output Buffer Size = %ld\n",__LINE__,nOpBufSize); 2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: ------ Buffer Details ------------\n",__LINE__); 2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all input buffer headers.. 2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nIpBuf * sizeof(G726ENC_LCML_BUFHEADERTYPE); 2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = (G726ENC_LCML_BUFHEADERTYPE *)SafeMalloc(size_lcml); 2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_MEMPRINT("%d :: [ALLOC] %p\n",__LINE__,pTemp_lcml); 2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) { 2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__); 2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G726ENC_INPUT_PORT] = pTemp_lcml; 2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: INPUT--------- Inside Ip Loop\n",__LINE__); 2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER; 2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G726ENC_MINOR_VER; 2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = G726ENC_NOT_USED; 2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pTemp_lcml->buffer->pBuffer = %p \n",__LINE__,pTemp_lcml->buffer->pBuffer); 2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_NBMALLOC_STRUCT(pTemp_lcml->pIpParam, G726ENC_ParamStruct); 2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*pTemp_lcml->pIpParam->usLastFrame = 0;*/ 2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = G726ENC_NORMAL_BUFFER; 2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nOpBuf * sizeof(G726ENC_LCML_BUFHEADERTYPE); 2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = (G726ENC_LCML_BUFHEADERTYPE *)SafeMalloc(size_lcml); 2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_MEMPRINT("%d :: [ALLOC] %p\n",__LINE__,pTemp_lcml); 2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) { 2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__); 2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G726ENC_OUTPUT_PORT] = pTemp_lcml; 2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: OUTPUT--------- Inside Op Loop\n",__LINE__); 2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER; 2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G726ENC_MINOR_VER; 2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = G726ENC_NOT_USED; 2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: pTemp_lcml->buffer->pBuffer = %p \n",__LINE__,pTemp_lcml->buffer->pBuffer); 2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* OMX_NBMALLOC_STRUCT(pTemp_lcml->pOpParam, G726ENC_ParamStruct);*//*According SN guide this variable should be neede*/ 2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* memset(pTemp_lcml->pOpParam,0,sizeof(G726ENC_ParamStruct));*/ 2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = G726ENC_NORMAL_BUFFER; 2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT: 2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Exiting G726ENC_FillLCMLInitParamsEx\n",__LINE__); 2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError); 2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 2253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*********************************** 2254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * Callback to the RM * 2255b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ***********************************/ 2256b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid G726ENC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 2257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 2258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 2259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_STATETYPE state = OMX_StateIdle; 2260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent; 2261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong G726ENC_COMPONENT_PRIVATE *pCompPrivate = NULL; 2262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2263b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate = (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 2264b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2265b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesPreempted){ 2266b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCompPrivate->curState == OMX_StateExecuting || 2267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->curState == OMX_StatePause) { 2268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2269b65f253fdc60f6208a54911bee793d225f23cdf8James Dong write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 2270b65f253fdc60f6208a54911bee793d225f23cdf8James Dong write (pCompPrivate->cmdDataPipe[1], &state ,sizeof(OMX_U32)); 2271b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->bPreempted = 1; 2273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2274b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2275b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesAcquired){ 2276b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->cbInfo.EventHandler ( pHandle, 2277b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 2278b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventResourcesAcquired, 2279b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 0, 0, NULL); 2280b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2281b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 2282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 2283