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_G722Dec_Utils.c 30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements various utilitiy functions for various activities 32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * like handling command from application, callback from LCML etc. 33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g722_dec\src 35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev 1.0 37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ---------------------------------------------------------------------------- 39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History 41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! =================================== 42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 21-sept-2006 bk: updated some review findings for alpha release 43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more 44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases 45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! This is newest file 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 53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h> 55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h> 56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h> 57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h> 58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h> 60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h> 61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h> 62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h> 63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h> 64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h> 65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h> 66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h> 67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h> 68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h> 71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h> 72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h> 73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h> 74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*------- Program Header Files -----------------------------------------------*/ 76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "LCML_DspCodec.h" 77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G722Dec_Utils.h" 78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "g722decsocket_ti.h" 79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <decode_common_ti.h> 81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h" 82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define HASHINGENABLE 1 86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid sleep(DWORD Duration) 87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(Duration); 89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G722DEC_DPRINT_ON(...) fprintf(stdout, "%s %d:: ",__FUNCTION__, __LINE__); \ 95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fprintf(stdout, __VA_ARGS__); \ 96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fprintf(stdout, "\n"); 97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_ComponentThread() This is component thread that keeps listening for 102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * commands or event/messages/buffers from application or from LCML. 103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pThreadData This is thread argument. 105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Always 111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid* G722DEC_ComponentThread (void* pThreadData) 116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int status = 0; 118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin struct timespec tv; 119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int fdmax = 0; 120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fd_set rfds; 121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nRet = 0; 122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE* pComponentPrivate = (G722DEC_COMPONENT_PRIVATE*)pThreadData; 124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = pComponentPrivate->pHandle; 125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Entering ComponentThread \n"); 127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fdmax = pComponentPrivate->cmdPipe[0]; 129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->dataPipe[0] > fdmax) { 131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fdmax = pComponentPrivate->dataPipe[0]; 132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (1) { 135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FD_ZERO (&rfds); 136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FD_SET (pComponentPrivate->cmdPipe[0], &rfds); 137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FD_SET (pComponentPrivate->dataPipe[0], &rfds); 138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin tv.tv_sec = 1; 139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin tv.tv_nsec = 0; 140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sigset_t set; 142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sigemptyset (&set); 143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sigaddset (&set, SIGALRM); 144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin status = pselect (fdmax+1, &rfds, NULL, NULL, &tv, &set); 145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 == status) { 147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("\n\n\n!!!!! Component Time Out !!!!!!!!!!!! \n"); 148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bExitCompThrd == 1) { 149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Comp Thrd Exiting here...\n"); 150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (-1 == status) { 154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Error in Select\n"); 155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( 156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle,pHandle->pApplicationPrivate, 157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError,OMX_ErrorInsufficientResources, 0, 158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Error from COmponent Thread in select"); 159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if ((FD_ISSET (pComponentPrivate->dataPipe[0], &rfds))) { 162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* && (pComponentPrivate->curState != OMX_StatePause)) { */ 163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHeader = NULL; 164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: DATA pipe is set in Component Thread\n"); 166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int ret = read(pComponentPrivate->dataPipe[0], &pBufHeader, sizeof(pBufHeader)); 167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (ret == -1) { 168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Error while reading from the pipe\n"); 169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_HandleDataBuf_FromApp (pBufHeader,pComponentPrivate); 172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Error From HandleDataBuf_FromApp\n"); 174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (FD_ISSET (pComponentPrivate->cmdPipe[0], &rfds)) { 177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: CMD pipe is set in Component Thread\n"); 178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = G722DEC_HandleCommand (pComponentPrivate); 180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (nRet == EXIT_COMPONENT_THRD) { 181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Exiting from Component thread\n"); 182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_CleanupInitParams(pHandle); 183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("****************** Component State Set to Loaded\n\n"); 184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorNone,pComponentPrivate->curState, NULL); 190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 0; 196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting ComponentThread \n"); 198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return (void*)eError; 199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_Fill_LCMLInitParams() fills the LCML initialization structure. 203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core. 205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param plcml_Init This structure is filled and sent to LCML. 207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful Inirialization of the LCML struct. 213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorInsufficientResources = Not enough memory 214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent, 219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *plcml_Init, OMX_U16 arr[]) 220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = 227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 size_lcml = 0; 230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*int inputPortFlag=0,outputPortFlag=0;*/ 231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_STRMATTR *strmAttr = NULL; 232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *ptemp = NULL; 233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Entered Fill_LCMLInitParams"); 235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bPopulated %d \n", 237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated); 238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bEnabled %d \n", 239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled); 240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bPopulated %d \n", 241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated); 242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bEnabled %d \n", 243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled); 244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = NULL; 246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers = nIpBuf; 249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers = nOpBuf; 251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferSize; 252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->nBufferSize; 253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Input Buffer Count = %ld\n",nIpBuf); 255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Input Buffer Size = %ld\n",nIpBufSize); 256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Output Buffer Count = %ld\n",nOpBuf); 257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Output Buffer Size = %ld\n",nOpBufSize); 258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nBuffers = nIpBuf; 260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.nSize = nIpBufSize; 261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD; 262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nBuffers = nOpBuf; 263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.nSize = nOpBufSize; 264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD; 265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.nNumOfDLLs = 3; 268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0, 270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(plcml_Init->NodeInfo.AllUUIDs[0].DllName)); 271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(plcml_Init->NodeInfo.AllUUIDs[1].DllName,0, 272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName)); 273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(plcml_Init->NodeInfo.AllUUIDs[2].DllName,0, 274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName)); 275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0, 276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(plcml_Init->DeviceInfo.AllUUIDs[1].DllName)); 277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G722DECSOCKET_TI_UUID; 279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName, G722DEC_DLL_NAME); 280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G722DECSOCKET_TI_UUID; 283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName, G722DEC_DLL_NAME); 284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID; 287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName, USN_DLL_NAME); 288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->SegID = OMX_G722DEC_DEFAULT_SEGMENT; 291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Timeout = OMX_G722DEC_SN_TIMEOUT; 292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Alignment = 0; 293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->Priority = OMX_G722DEC_SN_PRIORITY; 294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->ProfileID = 0; 296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("DLL name0 = %s\n",plcml_Init->NodeInfo.AllUUIDs[0].DllName); 298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("DLL name1 = %s\n",plcml_Init->NodeInfo.AllUUIDs[1].DllName); 299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("DLL name2 = %s\n",plcml_Init->NodeInfo.AllUUIDs[2].DllName); 300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef DSP_RENDERING_ON 303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Flag DSP_RENDERING_ON Must Be Defined To Use Rendering"); 305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC(strmAttr,LCML_STRMATTR); 307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->strmAttr = strmAttr; 308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: G722 DECODER IS RUNNING UNDER DASF MODE \n"); 309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uSegid = OMX_G722DEC_DEFAULT_SEGMENT; 311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uAlignment = 0; 312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uTimeout = OMX_G722DEC_SN_TIMEOUT; 313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uBufsize = nOpBufSize; 314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->uNumBufs = G722D_NUM_OUTPUT_BUFFERS; 315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin strmAttr->lMode = STRMMODE_PROCCOPY; 316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice = 1; 317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofRender = 0; 318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID; 319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.DspStream = strmAttr; 320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice = 0; 323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->dasfmode == 0){ 326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: FILE MODE CREATE PHASE PARAMETERS\n"); 327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[0] = 2; 328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[1] = 0; 329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[2] = 0; 330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pInputBufferList->numBuffers == 0) { 332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = G722D_NUM_INPUT_BUFFERS; 333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = (OMX_U16) nIpBuf; 335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[4] = 1; 338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[5] = 0; 339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pOutputBufferList->numBuffers == 0) { 340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = G722D_NUM_OUTPUT_BUFFERS; 341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = (OMX_U16) nOpBuf; 343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: DASF MODE CREATE PHASE PARAMETERS\n"); 347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[0] = 2; 348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[1] = 0; 349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[2] = 0; 350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->pInputBufferList->numBuffers == 0) { 352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = G722D_NUM_INPUT_BUFFERS; 353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[3] = (OMX_U16) nIpBuf; 355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[4] = 1; 358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[5] = 2; 359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[6] = G722D_NUM_OUTPUT_BUFFERS; 360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* set codec selection (64kbps <-> 0 / 56kbps <-> 1 / 48kbps <-> 2) */ 363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 64000) { 364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[7] = 0; 365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 56000) { 366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[7] = 1; 367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 48000) { 368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[7] = 2; 369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Free previously allocated memory before bailing */ 371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*G722D_OMX_FREE(strmAttr); 372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(arr);*/ 373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorBadParameter, 374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Input bit rate not supported"); 375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin arr[8] = END_OF_CR_PHASE_ARGS; 377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin plcml_Init->pCrPhArgs = arr; 378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: bufAlloced = %d\n",pComponentPrivate->bufAlloced); 380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nIpBuf * sizeof(G722D_LCML_BUFHEADERTYPE); 381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE); 382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = pTemp_lcml; 384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("IP: pTemp->nSize = %ld\n",pTemp->nSize); 390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*pTemp->nAllocLen = nIpBufSize;*/ 392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER; 394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER; 395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = DONT_CARE; 398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pBufHdr = pTemp; 400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pOtherParams[i] = NULL; 402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC(pTemp_lcml->pIpParam,G722DEC_ParamStruct); 404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usLastFrame = 0; 405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((G722DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle; 408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: InBuffHeader[%ld] = %p\n", i, pTemp); 410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>> InputBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer); 411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: Ip : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml); 412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nOpBuf * sizeof(G722D_LCML_BUFHEADERTYPE); 417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE); 418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = pTemp_lcml; 419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER; 427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER; 428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = DONT_CARE; 432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pBufHdr = pTemp; 434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pOtherParams[i] = NULL; 436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((G722DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle; 439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>>>>>>>>>>> OutBuffHeader[%ld] = %p\n", i, pTemp); 440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>> OutBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer); 441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: Op : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml); 442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pComponentPrivate->pParams,(sizeof(G722D_USN_AudioCodecParams) + 256), 446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_USN_AudioCodecParams); 447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ptemp = (OMX_U8*)pComponentPrivate->pParams; 448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ptemp += 128; 449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams = (G722D_USN_AudioCodecParams*)ptemp; 450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError == OMX_ErrorInsufficientResources || eError == OMX_ErrorBadParameter){ 456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(strmAttr); 457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(arr); 458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pTemp_lcml); 459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Exiting G722DEC_Fill_LCMLInitParams\n"); 461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722Dec_StartCompThread() starts the component thread. This is internal 467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * function of the component. 468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core. 470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful Inirialization of the component\n 476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorInsufficientResources = Not enough memory 477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722Dec_StartCompThread(OMX_HANDLETYPE pComponent) 482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = 486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nRet = 0; 488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_attr_t attr; 490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY; 493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Enetering G722Dec_StartCompThread()\n"); 496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf = 0; 498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf = 0; 499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf = 0; 500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Op_Issued = 0; 501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Sent_Ip_Buff = 0; 502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff = 0; 503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pipe (pComponentPrivate->dataPipe); 506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet) { 507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Pipe Creation Failed"); 509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pipe (pComponentPrivate->cmdPipe); 512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet) { 513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Pipe Creation Failed"); 515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pipe (pComponentPrivate->cmdDataPipe); 518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet) { 519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Pipe Creation Failed"); 521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pipe (pComponentPrivate->lcml_Pipe); 524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet) { 525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Pipe Creation Failed"); 527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE 530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pthread_create (&(pComponentPrivate->ComponentThread), &attr, 531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_ComponentThread, pComponentPrivate); 532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = pthread_create (&(pComponentPrivate->ComponentThread), NULL, 534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_ComponentThread, pComponentPrivate); 535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((0 != nRet) || (!pComponentPrivate->ComponentThread)) { 537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources, 538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Thread Creation Failed"); 539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 1; 542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting from G722Dec_StartCompThread()\n"); 543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_FreeCompResources() function frees the component resources. 552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent This is the component handle. 554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful Inirialization of the component\n 560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware = Hardware error has occured. 561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_FreeCompResources(OMX_HANDLETYPE pComponent) 566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = (G722DEC_COMPONENT_PRIVATE *) 569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf=0, nOpBuf=0; 572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nRet=0; 573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: G722Dec_FreeCompResources\n"); 575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":::pComponentPrivate->bPortDefsAllocated = %ld\n", 577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated); 578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) { 579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Closing pipess.....\n"); 583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->dataPipe[0]); 585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->dataPipe[1]); 590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->cmdPipe[0]); 595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->cmdPipe[1]); 600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->cmdDataPipe[0]); 605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->cmdDataPipe[1]); 610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->lcml_Pipe[0]); 615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nRet = close (pComponentPrivate->lcml_Pipe[1]); 620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (0 != nRet && OMX_ErrorNone == eError) { 621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) { 625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pPortDef[G722D_INPUT_PORT]); 626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]); 627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->G722Params[G722D_INPUT_PORT]); 628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->G722Params[G722D_OUTPUT_PORT]); 629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_INPUT_PORT]->pPortFormat); 630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_OUTPUT_PORT]->pPortFormat); 631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_INPUT_PORT]); 632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_OUTPUT_PORT]); 633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->sPortParam); 634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pPriorityMgmt); 635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pInputBufferList); 636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pOutputBufferList); 637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->componentRole); 638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("\n\n FreeCompResources: Destroying mutexes.\n\n"); 644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex); 645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold); 646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex); 648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InIdle_threshold); 649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex); 651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold); 652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event)); 654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InIdle_event)); 655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event)); 656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_HandleCommand() function handles the command sent by the application. 664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * All the state transitions, except from nothing to loaded state, of the 665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * component are done by this function. 666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date structure. 668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful processing. 674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorInsufficientResources = Not enough memory 675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware = Hardware error has occured lile LCML failed 676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to do any said operartion. 677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_HandleCommand (G722DEC_COMPONENT_PRIVATE *pComponentPrivate) 682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0,ret = 0; 684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = 687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMMANDTYPE command; 689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STATETYPE commandedState = OMX_StateInvalid; 690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 commandData = 0; 691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* L89FLUSH */ 694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int numCalls = 0; 695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 arr[10] = {0}; 696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: >>> Entering HandleCommand Function\n"); 698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = read (pComponentPrivate->cmdPipe[0], &command, sizeof (command)); 700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(ret == -1){ 701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("%d :: Error in Reading from the Data pipe\n", __LINE__); 702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ret = read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData)); 706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(ret == -1){ 707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("%d :: Error in Reading from the Data pipe\n", __LINE__); 708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("---------------------------------------------\n"); 712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: command = %d\n",command); 713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: commandData = %ld\n",commandData); 714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("---------------------------------------------\n"); 715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (command == OMX_CommandStateSet) { 717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin commandedState = (OMX_STATETYPE)commandData; 718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState) { 719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorSameState,0, 721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Same State Given by Application\n"); 723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(commandedState) { 725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateIdle: 726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd Idle \n"); 727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded) { 728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_CALLBACKTYPE cb; 729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *pLcmlDsp = NULL; 730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *p = "damedesuStr"; 731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int inputPortFlag=0,outputPortFlag=0; 732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->dasfmode == 1) { 734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled= FALSE; 735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated= FALSE; 736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->streamID == 0) { 737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("**************************************\n"); 738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error = OMX_ErrorInsufficientResources\n"); 739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("**************************************\n"); 740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState, 745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bPopulated %d \n", 752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated); 753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bEnabled %d \n", 754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled); 755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bPopulated %d \n", 756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated); 757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bEnabled %d \n", 758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled); 759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated && 761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled) { 762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputPortFlag = 1; 763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated && 765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled) { 766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin inputPortFlag = 1; 767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated && 769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled) { 770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputPortFlag = 1; 771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated && 773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled) { 774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin outputPortFlag = 1; 775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!(inputPortFlag && outputPortFlag)) { 777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 1; 778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, 781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pComponentPrivate->InLoaded_mutex); 782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event)); 785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (OMX_HANDLETYPE) G722DEC_GetLCMLHandle(pComponentPrivate); 789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pLcmlHandle == NULL) { 790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: LCML Handle is NULL........exiting..\n"); 791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState, 794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_Fill_LCMLInitParams(pHandle, pLcmlDsp, arr); 800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error returned from Fill_LCMLInitParams()\n"); 802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState, 805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, NULL); 806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle; 810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin cb.LCML_Callback = (void *) G722DEC_LCML_Callback; 811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p, 815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &cb,(OMX_STRING)pComponentPrivate->sDeviceString); 816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__); 818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb); 823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone){ 824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__); 825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Enable the Hashing Code */ 831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TRUE); 833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Failed to set Mapping State\n"); 835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Control Came Here\n"); 841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("****************** Component State Set to Idle\n\n"); 842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("G722DEC: State has been Set to Idle\n"); 851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StateExecuting) { 853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* clear out any mappings that might have accumulated */ 857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Error occurred in Codec mapping flush!\n"); 860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE; 864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: In HandleCommand: Stopping the codec\n"); 865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Error Occurred in Codec Stop..\n"); 869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if(pComponentPrivate->curState == OMX_StatePause) { 875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Hashing Change*/ 878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* clear out any mappings that might have accumulated */ 880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Error occurred in Codec mapping flush!\n"); 883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Comp: Stop Command Received\n"); 887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n"); 888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Error Occurred in Codec Stop..\n"); 892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("****************** Component State Set to Idle\n\n"); 898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("%d :: The component is stopped\n",__LINE__); 901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet, 903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, NULL); 904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Comp: Sending ErrorNotification: Invalid State\n"); 906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 0, 910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid State Error"); 911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateExecuting: 915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd Executing \n"); 916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateIdle) { 917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) { 919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 pValues[4]; 920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->unUUID = pComponentPrivate->streamID; 921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->ulSamplingFreq = 922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->G722Params[G722D_OUTPUT_PORT]->nSamplingRate; 923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->unAudioFormat = 1; /*MONO stream */ 924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::pComponentPrivate->pParams->unAudioFormat = %d\n", 926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->unAudioFormat); 927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::pComponentPrivate->pParams->ulSamplingFreq = %ld\n", 928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->ulSamplingFreq); 929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::pComponentPrivate->pParams->unUUID = %ld\n", 930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams->unUUID); 931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[1] = (OMX_U32)pComponentPrivate->pParams; 934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pValues[2] = sizeof(G722D_USN_AudioCodecParams); 935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Error Occurred in Codec StreamControl..\n"); 940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Error Occurred in Codec Start..\n"); 952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StatePause) { 958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Comp: Resume Command Came from App\n"); 960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n"); 961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Error While Resuming the codec\n"); 965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i< pComponentPrivate->nPendingOutPausedBufs; i++){ 972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone( pHandle, 973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutBufHdrWhilePaused[i]); 975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf--; 977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nPendingOutPausedBufs = 0; 982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->nNumInputBufPending < pComponentPrivate->pInputBufferList->numBuffers) { 984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = pComponentPrivate->pInputBufferList->numBuffers; 985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) { 987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]) { 988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlHdr; 989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate, 990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput, &pLcmlHdr); 992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput, 993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G722DEC_ParamStruct), 1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->nNumOutputBufPending < pComponentPrivate->pOutputBufferList->numBuffers) { 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = pComponentPrivate->pOutputBufferList->numBuffers; 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) { 1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pOutputBufHdrPending[i]) { 1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlHdr; 1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate, 1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirOutput, &pLcmlHdr); 1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G722DEC_IsPending(pComponentPrivate, pComponentPrivate->pOutputBufHdrPending[i], 1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirOutput)) { 1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i], 1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirOutput,__LINE__); 1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen, 1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen, 1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G722DEC_ParamStruct), 1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin }else { 1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorIncorrectStateTransition, 0, 1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid State"); 1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid State Given by \ 1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n"); 1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("****************** Component State Set to Executing\n\n"); 1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateExecuting; 1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, pComponentPrivate->curState, NULL); 1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateLoaded: 1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd Loaded\n"); 1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources ){ 1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("***************** Component State Set to Loaded\n\n"); 1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet, 1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Tansitioning from WaitFor to Loaded\n"); 1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateIdle) { 1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorIncorrectStateTransition, 0, 1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid State"); 1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid State Given by \ 1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n"); 1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Current State = %d\n",pComponentPrivate->curState); 1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pInputBufferList->numBuffers = %ld\n", 1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers); 1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %ld\n", 1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers); 1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Loaded State - in while(1) loop: ip : %ld : op: %ld\n", 1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers, 1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers); 1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufferList->numBuffers || 1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers) { 1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 1; 1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InIdle_threshold, 1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pComponentPrivate->InIdle_mutex); 1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InIdle_event)); 1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending = OMX_FALSE; 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Now Deinitialize the component No error should be returned from 1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * this function. It should clean the system as much as possible */ 1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy,(void *)pArgs); 1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = EXIT_COMPONENT_THRD; 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StatePause: 1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Cmd Pause: Cur State = %d\n", pComponentPrivate->curState); 1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((pComponentPrivate->curState != OMX_StateExecuting) && 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->curState != OMX_StateIdle)) { 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorIncorrectStateTransition, 0, 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Invalid State"); 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid State Given by \ 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Application\n"); 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n"); 1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlPause,(void *)pArgs); 1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Error: in Pausing the codec\n"); 1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Component: Codec Is Paused\n"); 1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_STATEPRINT("****************** Component State Set to Pause\n\n"); 1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StatePause; 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet, 1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, NULL); 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateWaitForResources: 1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd : OMX_StateWaitForResources\n"); 1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded) { 1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Transitioning from Loaded to OMX_StateWaitForResources\n"); 1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet,pComponentPrivate->curState, NULL); 1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorIncorrectStateTransition,0, NULL); 1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateInvalid: 1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd OMX_StateInvalid:\n"); 1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, OMX_ErrorInvalidState,0, NULL); 1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateMax: 1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": HandleCommand: Cmd OMX_StateMax::\n"); 1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } /* End of Switch */ 1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandMarkBuffer) { 1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("command OMX_CommandMarkBuffer received\n"); 1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pMarkBuf){ 1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("command OMX_CommandMarkBuffer received \n"); 1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData); 1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandPortDisable) { 1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->bDisableCommandPending) { 1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0){ 1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable port */ 1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (G722DEC_IsPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i], 1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput)) { 1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Real solution is flush buffers from DSP. Until we have the ability to do that 1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin we just call EmptyBufferDone() on any pending buffers */ 1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i]); 1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_FALSE; 1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == -1){ 1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_FALSE; 1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = OMX_FALSE; 1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_TRUE; 1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("commandData = %ld\n",commandData); 1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated = %d\n", 1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated); 1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated = %d\n", 1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated); 1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0) { 1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated){ 1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortDisable, 1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_INPUT_PORT, NULL); 1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else{ 1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1) { 1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated){ 1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortDisable, 1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OUTPUT_PORT, NULL); 1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == -1) { 1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated && 1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin !pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated){ 1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortDisable, 1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_INPUT_PORT, NULL); 1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortDisable, 1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OUTPUT_PORT, NULL); 1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(0); 1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandPortEnable) { 1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1){ 1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable in port */ 1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("setting input port to enabled\n"); 1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_TRUE; 1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = %d\n", 1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled); 1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal){ 1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* enable out port */ 1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("setting output port to enabled\n"); 1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = OMX_TRUE; 1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal){ 1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event)); 1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->curState == OMX_StateExecuting){ 1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = %d\n", 1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled); 1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (1) { 1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("commandData = %ld\n",commandData); 1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->curState = %d\n",pComponentPrivate->curState); 1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated = %d\n", 1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated); 1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 && (pComponentPrivate->curState == OMX_StateLoaded || 1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated)){ 1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable,G722D_INPUT_PORT, 1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == 0x1 && (pComponentPrivate->curState == OMX_StateLoaded || 1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated)){ 1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable,G722D_OUTPUT_PORT, 1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == -1 && (pComponentPrivate->curState == OMX_StateLoaded || 1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated && 1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated))) { 1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortEnable, 1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_INPUT_PORT, 1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandPortEnable, 1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OUTPUT_PORT, 1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DECFill_LCMLInitParamsEx(pComponentPrivate->pHandle); 1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(0); 1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (command == OMX_CommandFlush) { 1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int j=0; 1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Inside OMX_CommandFlush Command\n"); 1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 || commandData == -1) { 1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < MAX_NUM_OF_BUFS; i++) { 1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i] = NULL; 1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending=0; 1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin numCalls = pComponentPrivate->nEmptyThisBufferCount - pComponentPrivate->nEmptyBufferDoneCount; 1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (numCalls > 0) { 1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (j=0; j < numCalls; j++) { 1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i] 1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all input buffers */ 1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandFlush,G722D_INPUT_PORT, NULL); 1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1){ 1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Flusing output queue\n"); 1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < MAX_NUM_OF_BUFS; i++) { 1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i] = NULL; 1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending=0; 1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* return all output buffers */ 1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[i]); 1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandFlush,G722D_OUTPUT_PORT, NULL); 1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting HandleCommand Function\n"); 1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_HandleDataBuf_FromApp() function handles the input and output buffers 1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * that come from the application. It is not direct function wich gets called by 1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application rather, it gets called eventually. 1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed. 1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pComponentPrivate This is component's private date structure. 1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful processing. 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorInsufficientResources = Not enough memory 1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware = Hardware error has occured lile LCML failed 1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to do any said operartion. 1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader, 1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate) 1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir; 1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Entering HandleDataBuf_FromApp Function\n"); 1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: pBufHeader->pMarkData = %p\n",pBufHeader->pMarkData); 1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pPlatformPrivate = pComponentPrivate; 1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_GetBufferDirection(pBufHeader, &eDir); 1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: HandleDataBuf_FromApp Function\n"); 1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: The pBufHeader is not found in the list\n"); 1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlHdr; 1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate, 1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr); 1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n"); 1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store time stamp information */ 1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store nTickCount information */ 1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex++; 1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual; 1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHeader->nFilledLen > 0 || pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) { 1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bBypassDSP = 0; 1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: HandleDataBuf_FromApp Function\n"); 1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":::Calling LCML_QueueBuffer\n"); 1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pIpParam->usLastFrame = 0; 1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) { 1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: usLastFrame Is Set Here....\n"); 1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pIpParam->usLastFrame = 1; 1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 1; 1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFlags = 0; 1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: Sending Filled Input buffer = %p, %p to LCML\n",pBufHeader,pBufHeader->pBuffer); 1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Store time stamp information */ 1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex++; 1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferCountActual; 1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G722DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) { 1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->bDspStoppedWhileExecuting) { 1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput,__LINE__); 1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer, 1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen, 1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G722DEC_ParamStruct), 1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer); 1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("::Comp: SetBuff: IP: Error Occurred\n"); 1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntIp++; 1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf++; 1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Sent_Ip_Buff++; 1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Sending Input buffer to Codec\n"); 1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Calling EmptyBufferDone from line %d\n",__LINE__); 1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader ); 1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (pComponentPrivate->curState == OMX_StatePause) { 1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bBypassDSP = 1; 1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Forcing EmptyBufferDone\n"); 1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->dasfmode == 0) { 1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]); 1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->pMarkData){ 1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":Detected pBufHeader->pMarkData\n"); 1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pMarkData = pBufHeader->pMarkData; 1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->hMarkTargetComponent = pBufHeader->hMarkTargetComponent; 1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData; 1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent; 1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){ 1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventMark, 1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pMarkData); 1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (eDir == OMX_DirOutput) { 1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlHdr = NULL; 1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": pComponentPrivate->lcml_nOpBuf = %ld\n", 1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf); 1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": pComponentPrivate->lcml_nIpBuf = %ld\n", 1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf); 1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr); 1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n"); 1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":::Calling LCML_QueueBuffer\n"); 1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bBypassDSP == 0) { 1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: Sending Emptied Output buffer=%p to LCML\n",pBufHeader); 1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) { 1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: in G722DEC UTILS pLcmlHandle->pCodecinterfacehandle= %p\n", 1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle->pCodecinterfacehandle); 1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: in G722DEC UTILS EMMCodecOuputBuffer = %d\n",EMMCodecOuputBuffer); 1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: in G722DEC UTILS pBufHeader->pBuffer = %p\n",pBufHeader->pBuffer); 1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: in G722DEC UTILS pBufHeader->nAllocLen = %ld\n",pBufHeader->nAllocLen); 1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G722DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput) && 1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->numPendingBuffers < pComponentPrivate->pOutputBufferList->numBuffers)) { 1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__); 1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(!pComponentPrivate->bDspStoppedWhileExecuting){ 1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer, 1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(G722DEC_ParamStruct), 1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->pBuffer); 1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Comp:: SetBuff OP: Error Occurred\n"); 1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntOp++; 1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf++; 1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Op_Issued++; 1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Comp:: in G722DEC UTILS \n"); 1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } /* end of OMX_DirOutput if struct */ 1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": BufferHeader %p, Buffer %p Unknown ..........\n",pBufHeader, pBufHeader->pBuffer); 1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Exiting from HandleDataBuf_FromApp: %x \n",eError); 1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError == OMX_ErrorBadParameter) { 1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Error = OMX_ErrorBadParameter\n"); 1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetBufferDirection() function determines whether it is input buffer or 1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * output buffer. 1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is pointer to buffer header whose direction needs to 1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * be determined. 1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *eDir This is output argument which stores the direction of buffer. 1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful processing. 1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorBadParameter = In case of invalid buffer 1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, 1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE *eDir) 1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate; 1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nBuf = pComponentPrivate->pInputBufferList->numBuffers; 1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuf = NULL; 1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int flag = 1; 1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i=0; 1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Entering GetBufferDirection Function\n"); 1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i]; 1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirInput; 1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Buffer %p is INPUT BUFFER\n", pBufHeader); 1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nBuf; i++) { 1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBufHeader == pBuf) { 1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *eDir = OMX_DirOutput; 1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Buffer %p is OUTPUT BUFFER\n", pBufHeader); 1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin flag = 0; 1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (flag == 1) { 1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_ERROR_EXIT(eError, OMX_ErrorBadParameter, 1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "Buffer Not Found in List : OMX_ErrorBadParameter"); 1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting GetBufferDirection Function\n"); 1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_LCML_Callback() function is callback which is called by LCML whenever 1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * there is an even generated for the component. 1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param event This is event that was generated. 1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param arg This has other needed arguments supplied by LCML like handles 1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * etc. 1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful processing. 1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorInsufficientResources = Not enough memory 1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_LCML_Callback (TUsnCodecEvent event,void * args [10]) 1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer = args[1]; 1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlHdr = NULL; 1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle = NULL; 1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE* pComponentPrivate = NULL; 1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate = (G722DEC_COMPONENT_PRIVATE*) 1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate; 1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Component private handle: pComponentPrivate = %p\n",pComponentPrivate); 1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Entering the LCML_Callback() : event = %d\n",event); 1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G722DEC_DEBUG 1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printEmmEvent (event); 1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(event == EMMCodecBufferProcessed){ 1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: --------- EMMCodecBufferProcessed Here\n"); 1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( args[0] == (void *)EMMCodecInputBuffer) { 1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (" :: Inside the LCML_Callback EMMCodecInputBuffer\n"); 1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Input: pBufferr = %p\n", pBuffer); 1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirInput, &pLcmlHdr); 1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: pLcmlHeader = %p\n", pLcmlHdr); 1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir); 1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: *pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir); 1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen); 1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n"); 1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Input: pLcmlHeader = %p\n", pLcmlHdr); 1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntIpRes++; 1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirInput,__LINE__); 1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* >>>>>>>>>>>>>>>>>>>>> */ 1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Component Sending Empty Input buffer%p to App\n", pLcmlHdr->pBufHdr->pBuffer); 1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr ); 1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nIpBuf--; 1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* <<<<<<<<<<<<<<<<<<<<< */ 1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (args[0] == (void *)EMMCodecOuputBuffer) { 1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (" :: Inside the LCML_Callback EMMCodecOuputBuffer\n"); 1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: pBuffer = %p\n", pBuffer); 1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!G722DEC_IsValid(pComponentPrivate,pBuffer,OMX_DirOutput)) { 1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* If the buffer we get back from the DSP is not valid call FillBufferDone 1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin on a valid buffer */ 1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->nInvalidFrameCount++]); 1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->numPendingBuffers--; 1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones++; 1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirOutput, &pLcmlHdr); 1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n"); 1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nFilledLen = (int)args[8]; 1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: pLcmlHeader = %p\n", pLcmlHdr); 1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir); 1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Output: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen); 1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntOpReceived++; 1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirOutput,__LINE__); 1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* >>>>>>>>>>>>>>>>>>>>> */ 1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Sending Output buffer to Applcation\n"); 1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bIsEOFSent){ 1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Adding EOS flag to the output buffer\n"); 1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nFlags |= OMX_BUFFERFLAG_EOS; 1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventBufferFlag, 1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nOutputPortIndex, 1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nFlags, NULL); 1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pMarkData) { 1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("pComponentPrivate->pMarkData set\n"); 1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->pMarkData = pComponentPrivate->pMarkData; 1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent; 1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->num_Reclaimed_Op_Buff++; 1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(": Component Sending Filled Output buffer%p to App\n", pLcmlHdr->pBufHdr); 1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pLcmlHdr->pBufHdr = 0x%p\n", pLcmlHdr->pBufHdr); 1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StatePause) { 1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copying time stamp information to output buffer */ 1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrTimestamp[pComponentPrivate->OpBufindex]; 1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Copying nTickCount information to output buffer */ 1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr->nTickCount = pComponentPrivate->arrTickCount[pComponentPrivate->OpBufindex]; 1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex++; 1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual; 1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, /* pHandle, */ 1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, /* pHandle->pApplicationPrivate, */ 1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHdr->pBufHdr); 1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nOpBuf--; 1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->app_nBuf++; 1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nFillBufferDoneCount++; 1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* <<<<<<<<<<<<<<<<<<<<< */ 1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if(event == EMMCodecProcessingStoped) { 1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!pComponentPrivate->bNoIdleOnStop) { 1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bIdleCommandPending = OMX_FALSE; 1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop= OMX_FALSE; 1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if(event == EMMCodecAlgCtrlAck) { 1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("GOT MESSAGE USN_DSPACK_ALGCTRL \n"); 1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (event == EMMCodecDspError) { 1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: commandedState = %p\n",args[0]); 1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: arg4 = %p\n",args[4]); 1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: arg5 = %p\n",args[5]); 1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: --------- EMMCodecDspError Here\n"); 1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(((int)args[4] == USN_ERR_WARNING) && ((int)args[5] == IUALG_WARN_PLAYCOMPLETED)) { 1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* add callback to application to indicate SN/USN has completed playing of current set of date */ 1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventBufferFlag, 1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U32)NULL, 1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERFLAG_EOS, 1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((int)args[5] == IUALG_WARN_CONCEALED) { 1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT( "Algorithm issued a warning. But can continue" ); 1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]); 1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((int)args[5] == IUALG_ERR_GENERAL) { 1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT( "Algorithm error. Cannot continue" ); 1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]); 1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: LCML_Callback: IUALG_ERR_GENERAL\n",__LINE__); 1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( (int)args[5] == IUALG_ERR_DATA_CORRUPT ){ 1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pArgs = "damedesuStr"; 1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]); 1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: LCML_Callback: IUALG_ERR_DATA_CORRUPT\n",__LINE__); 1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d: Error Occurred in Codec Stop..\n", 1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d :: G722DEC: Codec has been Stopped here\n",__LINE__); 1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( 1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, OMX_ErrorNone,0, NULL); 1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( (int)args[5] == IUALG_WARN_OVERFLOW ){ 1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT( "Algorithm error. Overflow" ); 1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if( (int)args[5] == IUALG_WARN_UNDERFLOW ){ 1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT( "Algorithm error. Underflow" ); 1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (event == EMMCodecStrmCtrlAck) { 1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n"); 1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting the LCML_Callback() \n"); 1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetCorresponding_LCMLHeader() function gets the corresponding LCML 1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * header from the actual data buffer for required processing. 1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer This is the data buffer pointer. 1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer. Input/Output. 1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *G722D_LCML_BUFHEADERTYPE This is pointer to LCML Buffer Header. 1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ErrorNone = Successful Inirialization of the component\n 1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware = Hardware error has occured. 1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_GetCorresponding_LCMLHeader(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, 1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer, 1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DIRTYPE eDir, 1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE **ppLcmlHdr) 1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pLcmlBufHeader = NULL; 1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nIpBuf=0, nOpBuf=0, i=0; 1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Entering the G722DEC_GetCorresponding_LCMLHeader()\n"); 1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: eDir = %d\n",eDir); 1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (!pComponentPrivate->bInitParamsInitialized) { 1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sched_yield(); 1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Sleep(0); 1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eDir == OMX_DirInput) { 1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: In GetCorresponding_LCMLHeader()\n"); 1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]; 1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pBuffer = %p\n",pBuffer); 1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer); 1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) { 1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Corresponding LCML Header Found\n"); 1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else if (eDir == OMX_DirOutput) { 1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin i = 0; 1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]; 1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: nOpBuf = %d\n",nOpBuf); 1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nOpBuf; i++) { 1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pBuffer = %p\n",pBuffer); 1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer); 1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) { 1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Corresponding LCML Header Found\n"); 1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader++; 1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Invalid Buffer Type :: exiting...\n"); 1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: Exiting the GetCorresponding_LCMLHeader() \n"); 1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */ 1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetLCMLHandle() function gets the LCML handle and interacts with LCML 1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * by using this LCML Handle. 1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed. 1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pComponentPrivate This is component's private date structure. 1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_HANDLETYPE = Successful loading of LCML library. 1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ErrorHardware = Hardware error has occured. 1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @see None 1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */ 1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE 1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722DEC_GetLCMLHandle(G722DEC_COMPONENT_PRIVATE *pComponentPrivate) 1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This must be taken care by WinCE */ 1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin void *handle = NULL; 1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE); 1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *error = NULL; 1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!handle) { 1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(dlerror(), stderr); 1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle = dlsym (handle, "GetHandle"); 1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if ((error = dlerror()) != NULL) { 1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fputs(error, stderr); 1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = (*fpGetHandle)(&pHandle); 1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("eError != OMX_ErrorNone...\n"); 1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else 2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* WINDOWS Explicit dll load procedure */ 2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722DEC_GetLCMLHandle(G722DEC_COMPONENT_PRIVATE *pComponentPrivate) 2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin HINSTANCE hDLL; /* Handle to DLL */ 2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0); 2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (hDLL == NULL) 2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*fputs(dlerror(), stderr); */ 2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("BML Load Failed!!!\n"); 2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!fpGetHandle1) 2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* handle the error */ 2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FreeLibrary(hDLL); 2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* call the function */ 2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = fpGetHandle1(&pHandle); 2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorUndefined; 2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("eError != OMX_ErrorNone...\n"); 2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = NULL; 2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_CleanupInitParams(OMX_HANDLETYPE pComponent) 2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = (G722DEC_COMPONENT_PRIVATE *) 2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = pComponentPrivate->nRuntimeInputBuffers; 2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nOpBuf = pComponentPrivate->nRuntimeOutputBuffers; 2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i=0; 2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *ptemp = NULL; 2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT (":: G722DEC_CleanupInitParams()\n"); 2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing: pComponentPrivate->strmAttr = %p\n", pComponentPrivate->strmAttr); 2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->strmAttr); 2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*pComponentPrivate->strmAttr = NULL;*/ 2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*if (pComponentPrivate->dasfmode == 1) {*/ 2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing: pComponentPrivate->pParams = %p\n",pComponentPrivate->pParams); 2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ptemp = (OMX_U8*)pComponentPrivate->pParams; 2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(ptemp != NULL){ 2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ptemp -= 128; 2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pParams = (G722D_USN_AudioCodecParams *)ptemp; 2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pParams); 2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*}*/ 2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]; 2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nIpBuf; i++) { 2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing: pTemp_lcml->pIpParam = %p\n",pTemp_lcml->pIpParam); 2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pTemp_lcml->pIpParam); 2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = %p\n", 2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]); 2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]); 2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]; 2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for(i=0; i<nOpBuf; i++) { 2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing: pTemp_lcml->pIpParam = %p\n",pTemp_lcml->pOpParam); 2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pTemp_lcml->pOpParam); 2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_MEMPRINT(":: Freeing: pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = %p\n", 2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]); 2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_FREE(pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]); 2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT ("Exiting Successfully G722DEC_CleanupInitParams()\n"); 2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_SetPending() This function marks the buffer as pending when it is sent 2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to DSP/ 2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area. 2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header whose buffer is sent to DSP 2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output. 2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_SetPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("Called G722DEC_SetPending\n"); 2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("eDir = %d\n",eDir); 2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 1; 2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("*******************INPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber); 2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1; 2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("*******************OUTPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber); 2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_ClearPending() This function clears the buffer status from pending 2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * when it is received back from DSP. 2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area. 2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header that is received from 2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * DSP/LCML. 2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output. 2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_ClearPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) 2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 0; 2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("*******************INPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber); 2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0; 2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("*******************OUTPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber); 2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_IsPending() This function checks whether or not a buffer is pending. 2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area. 2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest. 2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output. 2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_IsPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) 2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) { 2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pInputBufferList->bBufferPending[i]; 2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) { 2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pComponentPrivate->pOutputBufferList->bBufferPending[i]; 2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return -1; 2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_IsValid() This function identifies whether or not buffer recieved from 2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * LCML is valid. It searches in the list of input/output buffers to do this. 2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area. 2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest. 2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output. 2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return status of the buffer. 2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_IsValid(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) 2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U16 i = 0; 2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 found=0; 2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eDir == OMX_DirInput) { 2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) { 2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) { 2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) { 2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin found = 1; 2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return found; 2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DECFill_LCMLInitParamsEx() This function initializes the init parameter of 2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the LCML structure when a port is enabled and component is in idle state. 2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent This is component handle. 2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None 2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None 2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return appropriate OMX Error. 2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */ 2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent) 2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0; 2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 i = 0; 2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp = NULL; 2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_COMPONENT_PRIVATE *pComponentPrivate = 2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL; 2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 size_lcml = 0; 2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *ptr = NULL; 2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Entered Fill_LCMLInitParams"); 2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nIpBufSize = pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferSize; 2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->nBufferSize; 2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Input Buffer Count = %ld\n",nIpBuf); 2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Input Buffer Size = %ld\n",nIpBufSize); 2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Output Buffer Count = %ld\n",nOpBuf); 2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_BUFPRINT("Output Buffer Size = %ld\n",nOpBufSize); 2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: bufAlloced = %d\n",pComponentPrivate->bufAlloced); 2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nIpBuf * sizeof(G722D_LCML_BUFHEADERTYPE); 2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(ptr,size_lcml,OMX_U8); 2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml = (G722D_LCML_BUFHEADERTYPE *)ptr; 2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = pTemp_lcml; 2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) { 2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->bufAlloced == 0) { 2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC(pTemp, OMX_BUFFERHEADERTYPE); 2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: IpBufferHeader %p is already there\n", 2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i]); 2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER; 2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER; 2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = DONT_CARE; 2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bufAlloced == 0) { 2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pTemp->pBuffer,(nIpBufSize+256),OMX_U8); 2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pBuffer = pTemp->pBuffer + 128; 2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: IpBuffer %p is already there\n",pTemp->pBuffer); 2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pTemp->pBuffer == NULL) { 2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Malloc Failed...\n"); 2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pBufHdr = pTemp; 2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pOtherParams[i] = NULL; 2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC(pTemp_lcml->pIpParam, G722DEC_ParamStruct); 2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->usLastFrame = 0; 2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((G722DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle; 2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: InBuffHeader[%ld] = %p\n", i, pTemp); 2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>> InputBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer); 2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: Ip : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml); 2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nOpBuf * sizeof(G722D_LCML_BUFHEADERTYPE); 2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE); 2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = pTemp_lcml; 2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) { 2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->bufAlloced == 0) { 2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC(pTemp, OMX_BUFFERHEADERTYPE); 2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: OpBufferHeader %p is already there\n", 2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[i]); 2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER; 2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER; 2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = 0; 2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTimeStamp = 0; 2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->bufAlloced == 0) { 2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722D_OMX_MALLOC_SIZE(pTemp->pBuffer,(nOpBufSize+256),OMX_U8); 2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pBuffer += 128; 2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("%d:: OpBuffer %p is already there\n",__LINE__,pTemp->pBuffer); 2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } else { 2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: OpBuffer %p is already there\n",pTemp->pBuffer); 2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pBufHdr = pTemp; 2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pOtherParams[i] = NULL; 2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((G722DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle; 2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>>>>>>>>>>> OutBuffHeader[%ld] = %p\n", i, pTemp); 2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: >>>> OutBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer); 2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("::Comp: Op : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml); 2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT(":: Exiting Fill_LCMLInitParams"); 2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** 2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid printEmmEvent (TUsnCodecEvent event) 2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin switch(event) { 2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspError: 2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspError >>>>>>>>>>\n"); 2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInternalError: 2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInternalError >>>>>>>>>> \n"); 2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInitError: 2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecInitError>>>>>>>>>> \n"); 2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspMessageRecieved: 2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved>>>>>>>>>> \n"); 2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferProcessed: 2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferProcessed>>>>>>>>>> \n"); 2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStarted: 2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStarted>>>>>>>>>> \n"); 2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingPaused: 2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingPaused>>>>>>>>>> \n"); 2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStoped: 2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingStoped>>>>>>>>>> \n"); 2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingEof: 2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecProcessingEof>>>>>>>>>> \n"); 2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferNotProcessed: 2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed>>>>>>>>>> \n"); 2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecAlgCtrlAck: 2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck>>>>>>>>>> \n"); 2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecStrmCtrlAck: 2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722DEC_DPRINT("[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck>>>>>>>>>> \n"); 2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return; 2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2470