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