OMX_AmrEncoder.c revision 1b969242aa51f71fb39a9855b1ba20f6b7c0f3a9
1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =============================================================================
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             Texas Instruments OMAP (TM) Platform Software
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  Use of this software is controlled by the terms and conditions found
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_AmrEncoder.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OpenMAX (TM) 1.0 Specific APIs and its functionality
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* that is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\nbamr_enc\src
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev  1.0
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----------------------------------------------------------------------------
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ===================================
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 21-sept-2006 bk: updated review findings for alpha release
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 21-Jun-2006 bk: Khronos OpenMAX (TM) 1.0 migration done
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 22-May-2006 bk: DASF recording quality improved
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 19-Apr-2006 bk: DASF recording speed issue resloved
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 23-Feb-2006 bk: DASF functionality added
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 18-Jan-2006 bk: Repated recording issue fixed and LCML changes taken care
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 14-Dec-2005 bk: Initial Version
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 16-Nov-2005 bk: Initial Version
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 23-Sept-2005 bk: Initial Version
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 10-Sept-2005 bk: Initial Version
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 10-Sept-2005 bk:
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! This is newest file
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  INCLUDE FILES
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h>
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h>
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    #include <AudioManagerAPI.h>
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    #include <ResourceManagerProxyAPI.h>
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include "perf.h"
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------program files ----------------------------------------*/
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h>
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_AmrEnc_Utils.h"
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  EXTERNAL REFERENCES NOTE : only use if not found in header file
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  PUBLIC DECLARATIONS Defined here, used elsewhere
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  PRIVATE DECLARATIONS Defined here, used only here
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define AMRNB_DEC_ROLE "audio_encoder.amrnb"
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef NBAMRENC_DEBUGMEM
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void * mymalloc(int line, char *s, int size);
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern int myfree(void *dp, int line, char *s);
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) mymalloc(__LINE__,__FILE__,x)
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) myfree(z,__LINE__,__FILE__)
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) malloc(x)
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) free(z)
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp,
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData);
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_STRING pComponentName,
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID);
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand,
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_U32 nParam,OMX_PTR pCmdData);
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex,
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PTR ComponentParamStruct);
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR ComponentParamStruct);
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup);
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle);
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_U32 nPortIndex,
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_PTR pAppPrivate,
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_U32 nSizeBytes);
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_U32 nPortIndex,
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_HANDLETYPE hComponent,
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nPortIndex,
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_PTR pAppPrivate,
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nSizeBytes,
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U8* pBuffer);
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_STRING cParameterName,
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_OUT OMX_INDEXTYPE* pIndexType);
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IN OMX_HANDLETYPE hComponent,
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_OUT OMX_U8 *cRole,
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_IN OMX_U32 nIndex);
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data;
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* interface with audio manager*/
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERMS 0666
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * OMX_ComponentInit() Set the all the function pointers of component
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update the component function pointer to the handle
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_ErrorInsufficientResources If the newmalloc fails
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip, *pPortDef_op;
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate;
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *amr_ip;
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_AMRTYPE  *amr_op;
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_PORT_TYPE *pCompPort = NULL;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE *pPortFormat = NULL;
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
22700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Entering OMX_ComponentInit\n");
22800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set the all component function pointer to the handle */
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetCallbacks = SetCallbacks;
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetComponentVersion = GetComponentVersion;
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SendCommand = SendCommand;
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetParameter = GetParameter;
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetParameter = SetParameter;
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetConfig = GetConfig;
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetConfig = SetConfig;
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetState = GetState;
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->EmptyThisBuffer = EmptyThisBuffer;
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FillThisBuffer = FillThisBuffer;
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentTunnelRequest = ComponentTunnelRequest;
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentDeInit = ComponentDeInit;
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->AllocateBuffer = AllocateBuffer;
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FreeBuffer = FreeBuffer;
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->UseBuffer = UseBuffer;
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetExtensionIndex = GetExtensionIndex;
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentRoleEnum = ComponentRoleEnum;
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Allocate the memory for Component private data area */
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pHandle->pComponentPrivate, AMRENC_COMPONENT_PRIVATE);
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = pHandle->pComponentPrivate;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_NBAMRENC");
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID /* leave this now, we may need them later. */
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE;
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE;
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE;
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE;
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE;
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('N','B','E','_'),
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           PERF_ModuleLLMM | PERF_ModuleAudioDecode);
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pCompPort, NBAMRENC_PORT_TYPE);
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT] = pCompPort;
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pCompPort, NBAMRENC_PORT_TYPE);
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT] = pCompPort;
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Initialize sPortParam data structures to default values */
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPortParam->nPorts = 0x2;
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPortParam->nStartPortNumber = 0x0;
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Malloc and Set pPriorityMgmt defaults */
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize sPriorityMgmt data structures to default values */
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPriorityMgmt->nGroupPriority = -1;
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPriorityMgmt->nGroupID = -1;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(amr_ip, OMX_AUDIO_PARAM_PCMMODETYPE);
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(amr_ip, OMX_AUDIO_PARAM_PCMMODETYPE);
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pcmParams = amr_ip;
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(amr_op, OMX_AUDIO_PARAM_AMRTYPE);
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(amr_op, OMX_AUDIO_PARAM_AMRTYPE);
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->amrParams = amr_op;
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* newmalloc and initialize number of input buffers */
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->pInputBufferList, NBAMRENC_BUFFERLIST);
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInputBufferList->numBuffers = 0;
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* newmalloc and initialize number of output buffers */
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->pOutputBufferList, NBAMRENC_BUFFERLIST);
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutputBufferList->numBuffers = 0;
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) {
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL;
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL;
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set input port defaults */
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT] = pPortDef_ip;
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Let's set defaults for IF2 conditions on Android and see what happens */
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nPortIndex                         = NBAMRENC_INPUT_PORT;
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->eDir                               = OMX_DirInput;
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountActual                 = 5; //NBAMRENC_NUM_INPUT_BUFFERS;
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountMin                    = 5; //NBAMRENC_NUM_INPUT_BUFFERS;
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferSize                        = NBAMRENC_INPUT_FRAME_SIZE;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferAlignment                   = EXTRA_BYTES;
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bEnabled                           = OMX_TRUE;
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bPopulated                         = OMX_FALSE;
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->eDomain                            = OMX_PortDomainAudio;
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.eEncoding             = OMX_AUDIO_CodingPCM;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.cMIMEType             = NULL;
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.pNativeRender         = NULL;
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.bFlagErrorConcealment = OMX_FALSE;
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set output port defaults */
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT] = pPortDef_op;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nPortIndex                         = NBAMRENC_OUTPUT_PORT;
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->eDir                               = OMX_DirOutput;
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountMin                    = 9; //NBAMRENC_NUM_OUTPUT_BUFFERS;
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountActual                 = 9; //NBAMRENC_NUM_OUTPUT_BUFFERS;
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferSize                        = 320; //NBAMRENC_OUTPUT_FRAME_SIZE;
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferAlignment                   = EXTRA_BYTES;
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bEnabled                           = OMX_TRUE;
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bPopulated                         = OMX_FALSE;
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->eDomain                            = OMX_PortDomainAudio;
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.eEncoding             = OMX_AUDIO_CodingAMR;
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.cMIMEType             = NULL;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.pNativeRender         = NULL;
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.bFlagErrorConcealment = OMX_FALSE;
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set input port format defaults */
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat = pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat;
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat->nPortIndex         = NBAMRENC_INPUT_PORT;
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat->nIndex             = OMX_IndexParamAudioAmr;
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->eEncoding          = OMX_AUDIO_CodingPCM;  /*Data Expected on Input Port*/
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nPortIndex = NBAMRENC_INPUT_PORT;
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*ck*/    amr_ip->nChannels = 1;  //was 2
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->eNumData= OMX_NumericalDataSigned;
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nBitPerSample = 16;
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*ck*/    amr_ip->nSamplingRate = 8000; //44100;
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->ePCMMode = OMX_AUDIO_PCMModeLinear;
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->bInterleaved = OMX_TRUE; /*For Encoders Only*/
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char *)pComponentPrivate->componentRole.cRole, "audio_encoder.amrnb");
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nPortIndex = NBAMRENC_OUTPUT_PORT;
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nChannels = 1;
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->eAMRBandMode = OMX_AUDIO_AMRBandModeNB0;
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->eAMRDTXMode= OMX_AUDIO_AMRDTXModeOff;
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->eAMRFrameFormat =OMX_AUDIO_AMRFrameFormatConformance;
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set output port format defaults */
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat = pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat;
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat->nPortIndex         = NBAMRENC_OUTPUT_PORT;
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortFormat->nIndex             = OMX_IndexParamAudioAmr;
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->eEncoding          = OMX_AUDIO_CodingAMR;
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "%d :: Setting dasf & mime & efr & acdn & amr and MultiFrame modes to 0\n",__LINE__);
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->dasfMode = 0;
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->teeMode = 0;
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->frameMode = 0;
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->acdnMode = 0;
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->efrMode  = 0;
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMode  = 0;
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nMultiFrameMode = 0;
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pParams = NULL;
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pAlgParam = NULL;
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 0;
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[0]  = NBAMRENC_FRAME_SIZE_13;
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[1]  = NBAMRENC_FRAME_SIZE_14;
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[2]  = NBAMRENC_FRAME_SIZE_16;
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[3]  = NBAMRENC_FRAME_SIZE_18;
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[4]  = NBAMRENC_FRAME_SIZE_20;
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[5]  = NBAMRENC_FRAME_SIZE_21;
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[6]  = NBAMRENC_FRAME_SIZE_27;
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[7]  = NBAMRENC_FRAME_SIZE_32;
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[8]  = NBAMRENC_FRAME_SIZE_6;
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[9]  = NBAMRENC_FRAME_SIZE_0;
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[10] = NBAMRENC_FRAME_SIZE_0;
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[11] = NBAMRENC_FRAME_SIZE_0;
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[12] = NBAMRENC_FRAME_SIZE_0;
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[13] = NBAMRENC_FRAME_SIZE_0;
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[14] = NBAMRENC_FRAME_SIZE_0;
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrMimeBytes[15] = NBAMRENC_FRAME_SIZE_1;
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[0]  = NBAMRENC_FRAME_SIZE_13;
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[1]  = NBAMRENC_FRAME_SIZE_14;
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[2]  = NBAMRENC_FRAME_SIZE_16;
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[3]  = NBAMRENC_FRAME_SIZE_18;
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[4]  = NBAMRENC_FRAME_SIZE_19;
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[5]  = NBAMRENC_FRAME_SIZE_21;
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[6]  = NBAMRENC_FRAME_SIZE_26;
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[7]  = NBAMRENC_FRAME_SIZE_31;
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[8]  = NBAMRENC_FRAME_SIZE_6;
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[9]  = NBAMRENC_FRAME_SIZE_0;
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[10] = NBAMRENC_FRAME_SIZE_0;
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[11] = NBAMRENC_FRAME_SIZE_0;
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[12] = NBAMRENC_FRAME_SIZE_0;
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[13] = NBAMRENC_FRAME_SIZE_0;
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[14] = NBAMRENC_FRAME_SIZE_0;
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->amrIf2Bytes[15] = NBAMRENC_FRAME_SIZE_1;
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkBuf = NULL;
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkData = NULL;
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nEmptyBufferDoneCount = 0;
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount = 0;
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillBufferDoneCount = 0;
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount = 0;
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDisableCommandParam = 0;
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bEnableCommandParam = 0;
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iHoldLen = 0;
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iHoldBuffer = NULL;
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pHoldBuffer = NULL;
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nHoldLength = 0;
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bFirstInputBufReceived = OMX_FALSE;
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->TimeStamp = 0;
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers=0;
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers = 0;
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE;
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE;
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) {
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufHdrPending[i] = NULL;
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->arrTickCount[i] = 0;
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->arrBufIndex[i] = 0;
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nNumInputBufPending = 0;
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nNumOutputBufPending = 0;
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDisableCommandPending = 0;
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bEnableCommandPending = 0;
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bNoIdleOnStop= OMX_FALSE;
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDspStoppedWhileExecuting    = OMX_FALSE;
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutStandingFillDones = 0;
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeInputBuffers=0;
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeOutputBuffers=0;
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nNumOfFramesSent=0;
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ptrLibLCML = NULL;
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->IpBufindex = 0;
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->OpBufindex = 0;
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOutStandingEmptyDones = 0;
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bLoadedWaitingFreeBuffers    = OMX_FALSE;
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ProcessingInputBuf = 0;
485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ProcessingOutputBuf = 0;
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString, 100*sizeof(OMX_STRING),OMX_STRING);
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Initialize device string to the default value */
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char*)pComponentPrivate->sDeviceString,":srcul/codec\0");
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL);
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL);
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->codecStop_mutex, NULL);
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->codecStop_threshold, NULL);
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->codecStop_waitingsignal = 0;
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL);
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL);
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL);
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL);
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->ToLoaded_mutex, NULL);
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->AlloBuf_event));
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InLoaded_event));
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InIdle_event));
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsInvalidState = OMX_FALSE;
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewInitalize();
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: OMX_ComponentInit\n", __LINE__);
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from loading ResourceManagerProxy thread\n",__LINE__);
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = NBAMRENC_StartComponentThread(pHandle);
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: OMX_ComponentInit\n", __LINE__);
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from the Component\n",__LINE__);
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      goto EXIT;
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ThreadCreated(pComponentPrivate->pPERF, pComponentPrivate->ComponentThread,
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_FOURCC('N','B','E','T'));
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* start Audio Manager to get streamId */
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->fdwrite=open(FIFO1,O_WRONLY))<0) {
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: [NBAMRE Encoder Component] - failure to open WRITE pipe\n",__LINE__);
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->fdread=open(FIFO2,O_RDONLY))<0) {
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: [NBAMRE Encoder Component] - failure to open READ pipe\n",__LINE__);
5531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    }
5541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
5571b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong   if(pthread_mutex_init(&pComponentPrivate->mutexStateChangeRequest, NULL)) {
5581b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong       return OMX_ErrorUndefined;
5591b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong   }
5601b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
5611b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong   if(pthread_cond_init (&pComponentPrivate->StateChangeCondition, NULL)) {
5621b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong       return OMX_ErrorUndefined;
5631b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong   }
5641b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
5651b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong   pComponentPrivate->nPendingStateChangeRequests = 0;
5661b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting OMX_ComponentInit\n", __LINE__);
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  SetCallbacks() Sets application callbacks to the component
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * to the component. So that component can make use of those call back
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * while sending buffers to the application. And also it will copy the
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * application private data to component memory
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pAppData      Application private data
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent,
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pAppData)
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering SetCallbacks\n", __LINE__);
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCallBacks == NULL) {
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Received the empty callbacks from the application\n",__LINE__);
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Copy the callbacks of the application to the component private*/
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*copy the application private data to component memory */
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetCallbacks\n", __LINE__);
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  GetComponentVersion() This will return the component version
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will retrun the component version
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp               handle for this instance of the component
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCompnentName       Name of the component
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCompnentVersion    handle for this instance of the component
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pSpecVersion        application callbacks
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCompnentUUID
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_STRING pComponentName,
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering GetComponentVersion\n", __LINE__);
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Copy component version structure */
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentVersion != NULL && pComponentName != NULL) {
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strcpy(pComponentName, pComponentPrivate->cComponentName);
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from GetComponentVersion",__LINE__);
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetComponentVersion\n", __LINE__);
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  SendCommand() used to send the commands to the component
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will be used by the application.
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param phandle         handle for this instance of the component
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param Cmd             Command to be sent to the component
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParam          indicates commmad is sent using this method
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle,
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam,
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_PTR pCmdData)
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pCompPrivate =
695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet = 0;
697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pCompPrivate->curState == OMX_StateInvalid){
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d :: Entering SendCommand()\n", __LINE__);
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pCompPrivate->curState == OMX_StateInvalid) {
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pCompPrivate->dbg, "%d :: Error OMX_ErrorInvalidState Sent to App\n",__LINE__);
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler (pHandle,
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pHandle->pApplicationPrivate,
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_EventError,
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_ErrorInvalidState,
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_TI_ErrorMinor,
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            "Invalid State");
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(pCompPrivate->pPERF,
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        Cmd,
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (Cmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam,
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleComponent);
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(Cmd) {
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_CommandStateSet:
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nParam == OMX_StateLoaded) {
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->bLoadedCommandPending = OMX_TRUE;
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pCompPrivate->curState == OMX_StateLoaded) {
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) {
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pCompPrivate->cbInfo.EventHandler ( pHandle,
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        pHandle->pApplicationPrivate,
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_EventError,
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_ErrorIncorrectStateTransition,
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_TI_ErrorMinor,
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        NULL);
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(nParam == OMX_StateInvalid) {
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pCompPrivate->curState = OMX_StateInvalid;
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pCompPrivate->cbInfo.EventHandler ( pHandle,
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        pHandle->pApplicationPrivate,
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_EventError,
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_ErrorInvalidState,
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_TI_ErrorMinor,
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        NULL);
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
7521b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
7531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong            /* Add a pending transition */
7541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong            if(AddStateTransition(pCompPrivate) != OMX_ErrorNone) {
7551b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong               return OMX_ErrorUndefined;
7561b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong            }
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
7581b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_CommandFlush:
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandFlush SendCommand\n",__LINE__);
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nParam > 1 && nParam != -1) {
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_CommandPortDisable:
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandPortDisable SendCommand\n",__LINE__);
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_CommandPortEnable:
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandPortEnable SendCommand\n",__LINE__);
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_CommandMarkBuffer:
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT1(pCompPrivate->dbg, "%d :: OMX_CommandMarkBuffer SendCommand\n",__LINE__);
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (nParam > 0) {
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR4(pCompPrivate->dbg, "%d :: Command Received Default eError\n",__LINE__);
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->cbInfo.EventHandler ( pHandle,
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle->pApplicationPrivate,
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError,
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_ErrorUndefined,
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_TI_ErrorMinor,
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                "Invalid Command");
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       eError = OMX_ErrorInsufficientResources;
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       goto EXIT;
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (Cmd == OMX_CommandMarkBuffer) {
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData,
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            sizeof(OMX_PTR));
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &nParam,
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            sizeof(OMX_U32));
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pCompPrivate->dbg, "%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
8091b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        if(Cmd == OMX_CommandStateSet) {
8101b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           if(RemoveStateTransition(pCompPrivate, OMX_FALSE) != OMX_ErrorNone) {
8111b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              return OMX_ErrorUndefined;
8121b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           }
8131b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        }
8141b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        return OMX_ErrorInsufficientResources;
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* add for Tee device control*/
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(Cmd == OMX_CommandStateSet && nParam == OMX_StateExecuting) {
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pCompPrivate->teeMode != TEEMODE_NONE) {
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* enable acoustic supporting*/
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT2(pCompPrivate->dbg, "[NBAMR encoder] --- supporting TeeDN\n");
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT2(pCompPrivate->dbg, "[NBAMR encoder] --- Send Tee commnad\n");
825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* enable Tee device command*/
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.hComponent = pHandle;
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            AM_CommandTDNPlayMode           --- play mode only
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            AM_CommandTDNLoopBackMode       --- loopback mode pnly
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            AM_CommandTDNPlayLoopBackMode   --- loopback + playback mode
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            */
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pCompPrivate->teeMode == TEEMODE_PLAYBACK) {
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                cmd_data.AM_Cmd = AM_CommandTDNPlayMode ;
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if (pCompPrivate->teeMode == TEEMODE_LOOPBACK) {
837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                cmd_data.AM_Cmd = AM_CommandTDNLoopBackMode ;
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if (pCompPrivate->teeMode == TEEMODE_PLAYLOOPBACK) {
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                cmd_data.AM_Cmd = AM_CommandTDNPlayLoopBackMode ;
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param1 = 0;
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param2 = 0;
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.streamID = 0;
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if((write(pCompPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) {
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_TRACE4(pCompPrivate->dbg, "[NBAMR encoder] - fail to send Tee command to audio manager\n");
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorHardware;
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP2(pCompPrivate->dbg, "[NBAMR encoder] --- Normal DASF Mode\n");
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d :: Exiting SendCommand()\n", __LINE__);
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  GetParameter() Gets the current configurations of the component
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParamIndex
870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentParameterStructure
871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp,
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure)
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE  *pComponentPrivate;
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure;
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure;
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering the GetParameter\n",__LINE__);
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pParameterStructure == NULL) {
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter",__LINE__);
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState == OMX_StateInvalid) {
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorIncorrectStateOperation from GetParameter",__LINE__);
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex){
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioInit:
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamAudioInit \n",__LINE__);
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamPortDefinition:
914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamPortDefinition \n",__LINE__);
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) {
918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) {
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioPortFormat:
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) {
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat->nPortIndex) {
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = OMX_ErrorNoMore;
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex){
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                 pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat->nPortIndex) {
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorNoMore;
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioAmr:
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->amrParams, sizeof(OMX_AUDIO_PARAM_AMRTYPE));
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            switch (((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode)
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR122:
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB7;
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR102:
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB6;
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR795:
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB5;
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR74:
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB4;
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR67:
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB3;
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR59:
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB2;
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_BR515:
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB1;
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 case SN_AUDIO_475:
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode =   OMX_AUDIO_AMRBandModeNB0;
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 default:
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      ((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->eAMRBandMode = OMX_AUDIO_AMRBandModeNB0;
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      break;
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      case OMX_IndexParamPriorityMgmt:
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->sPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      case OMX_IndexParamAudioPcm:
999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          memcpy(ComponentParameterStructure, pComponentPrivate->pcmParams, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          break;
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       case OMX_IndexParamCompBufferSupplier:
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) {
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n");
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*  memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) {
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRBUFFER1(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n");
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR1(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from GetParameter");
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID
1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX:
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX::%d\n", __LINE__);
1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PV_OMXComponentCapabilityFlagsType* pCap_flags = (PV_OMXComponentCapabilityFlagsType *) ComponentParameterStructure;
1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (NULL == pCap_flags)
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, "%d :: ERROR PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__);
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError =  OMX_ErrorBadParameter;
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT2(pComponentPrivate->dbg, "%d :: Copying PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__);
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pCap_flags, &(pComponentPrivate->iPVCapabilityFlags), sizeof(PV_OMXComponentCapabilityFlagsType));
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNone;
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamVideoInit:
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         case OMX_IndexParamImageInit:
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         case OMX_IndexParamOtherInit:
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorUnsupportedIndex GetParameter \n",__LINE__);
1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorUnsupportedIndex;
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetParameter\n",__LINE__);
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  SetParameter() Sets configuration paramets to the component
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParamIndex
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCompParam
1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pCompParam)
1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE  *pComponentPrivate;
1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE* pComponentParam = NULL;
1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pComponentParamPort = NULL;
1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_AMRTYPE *pCompAmrParam = NULL;
1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole;
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *amr_ip;
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering the SetParameter\n",__LINE__);
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pCompParam == NULL) {
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from SetParameter",__LINE__);
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateLoaded) {
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorIncorrectStateOperation from SetParameter",__LINE__);
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex) {
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioPortFormat:
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentParam = (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pCompParam;
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat->nPortIndex ) {
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(pComponentPrivate->pCompPort[NBAMRENC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(pComponentPrivate->pCompPort[NBAMRENC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else {
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioAmr:
1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr \n",__LINE__);
1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pCompAmrParam = (OMX_AUDIO_PARAM_AMRTYPE *)pCompParam;
1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pCompAmrParam->nPortIndex == 0) {         /* 0 means Input port */
1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    memcpy(((AMRENC_COMPONENT_PRIVATE*)
1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pHandle->pComponentPrivate)->pcmParams, pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE));
1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else if (pCompAmrParam->nPortIndex == 1) { /* 1 means Output port */
1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    switch (pCompAmrParam->eAMRBandMode)
1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB7:
1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122;
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122 \n",__LINE__);
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB6:
1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR102;
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR102 \n",__LINE__);
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB5:
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR795;
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR795 \n",__LINE__);
1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB4:
1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR74;
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR74 \n",__LINE__);
1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB3:
1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR67;
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR67 \n",__LINE__);
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB2:
1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR59;
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR59 \n",__LINE__);
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB1:
1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR515;
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR515 \n",__LINE__);
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             case OMX_AUDIO_AMRBandModeNB0:
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_475;
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode = SN_AUDIO_BR475 \n",__LINE__);
1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             default:
1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pCompAmrParam->eAMRBandMode = SN_AUDIO_BR122;
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRBandMode =DEFAULT!! SN_AUDIO_BR122 \n",__LINE__);
1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  break;
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    memcpy(((AMRENC_COMPONENT_PRIVATE *)
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pHandle->pComponentPrivate)->amrParams, pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE));
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatConformance) {
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->frameMode = NBAMRENC_FORMATCONFORMANCE;
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else if((pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatFSF) ||
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            (pCompAmrParam->eAMRFrameFormat == OMX_AUDIO_AMRFrameFormatRTPPayload)){
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->frameMode = NBAMRENC_MIMEMODE;
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRFrameFormate = FSF \n",__LINE__);
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else {
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->frameMode = NBAMRENC_IF2;
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRFrameFormate = IF2 \n",__LINE__);
1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pCompAmrParam->eAMRDTXMode == OMX_AUDIO_AMRDTXasEFR) {
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_PRDSP1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioAmr:: pCompAmrParam->eAMRDTXMode = XasEFR\n",__LINE__);
1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        /*     pComponentPrivate->efrMode = 1; */
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                else {
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamPortDefinition:
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentParamPort = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) {
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRINT1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) {
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRINT1(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamPriorityMgmt:
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(pComponentPrivate->sPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioInit:
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "%d :: SetParameter OMX_IndexParamAudioInit \n",__LINE__);
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(pComponentPrivate->sPortParam, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE));
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamStandardComponentRole: /*-----------------------------*/
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           if (pCompParam) {
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           } else {
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               eError = OMX_ErrorBadParameter;
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           }
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioPcm:
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pCompParam){
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 amr_ip = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam;
1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 memcpy(pComponentPrivate->pcmParams, amr_ip, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                  eError = OMX_ErrorBadParameter;
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamCompBufferSupplier:
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nPortIndex) {
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput;
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nPortIndex) {
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_PRBUFFER1(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput;
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR1(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from SetParameter");
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorBadPortIndex;
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "%d :: SetParameter OMX_ErrorUnsupportedIndex \n",__LINE__);
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorUnsupportedIndex;
1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetParameter\n",__LINE__);
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  GetConfig() Gets the current configuration of to the component
1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nConfigIndex
1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentConfigStructure
1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_STREAM_INFO *streamInfo;
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(streamInfo, TI_OMX_STREAM_INFO);
1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(streamInfo == NULL){
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nConfigIndex == OMX_IndexCustomNBAMRENCStreamIDConfig){
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        streamInfo->streamId = pComponentPrivate->streamID;
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO));
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(nConfigIndex == OMX_IndexCustomDebug){
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMEMFREE_STRUCT(streamInfo);
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetConfig. Returning = 0x%x\n",__LINE__,eError);
1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  SetConfig() Sets the configraiton to the component
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nConfigIndex
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentConfigStructure
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DSP_DEFINITION *pTiDspDefinition;
1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16 *customFlag = NULL;
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_CONFIG_VOLUMETYPE *pGainStructure = NULL;
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AM_COMMANDDATATYPE cmd_data;
1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering SetConfig\n", __LINE__);
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pHandle == NULL) {
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Invalid HANDLE OMX_ErrorBadParameter \n",__LINE__);
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (nConfigIndex) {
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexCustomNBAMRENCModeConfig:
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTiDspDefinition = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure;
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pTiDspDefinition == NULL) {
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "%d :: OMX_ErrorBadParameter from SetConfig\n",__LINE__);
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             }
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->acdnMode = pTiDspDefinition->acousticMode;
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->dasfMode = pTiDspDefinition->dasfMode;
1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->teeMode = pTiDspDefinition->teeMode;
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             if( 2 == pComponentPrivate->dasfMode ){
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   pComponentPrivate->dasfMode--;
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             }
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             pComponentPrivate->streamID = pTiDspDefinition->streamId;
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**-------------------**/
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case  OMX_IndexCustomNBAMRENCDataPath:
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            customFlag = (OMX_S16*)ComponentConfigStructure;
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*            dataPath = *customFlag;             */
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            switch(dataPath) {
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                case DATAPATH_APPLICATION:
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_ENCODER, pComponentPrivate->streamID);
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                case DATAPATH_APPLICATION_TEE:
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    strcpy((char*)pComponentPrivate->sDeviceString, ":i0:o1\0");
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                case DATAPATH_APPLICATION_RTMIXER:
1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING_ENCODER);
1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                case DATAPATH_ACDN:
1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING_ENCODER);
1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     break;
1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                default:
1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**-------------------**/
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexConfigAudioVolume:
1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pGainStructure = (OMX_AUDIO_CONFIG_VOLUMETYPE *)ComponentConfigStructure;
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cmd_data.hComponent = hComp;
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cmd_data.AM_Cmd = AM_CommandSWGain;
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cmd_data.param1 = pGainStructure->sVolume.nValue;
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cmd_data.param2 = 0;
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cmd_data.streamID = pComponentPrivate->streamID;
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0)
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRMGR4(pComponentPrivate->dbg, "[NBAMRENC encoder] - fail to send command to audio manager\n");
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRMGR2(pComponentPrivate->dbg, "[NBAMRENC encoder] - ok to send command to audio manager\n");
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomDebug:
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetConfig\n", __LINE__);
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  GetState() Gets the current state of the component
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCompomponent handle for this instance of the component
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pState
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
14471b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    OMX_ERRORTYPE eError                        = OMX_ErrorNone;
14481b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    OMX_COMPONENTTYPE* pHandle = NULL;
14491b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    AMRENC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
14501b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    struct timespec abs_time = {0,0};
14511b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    int nPendingStateChangeRequests = 0;
14521b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    int ret = 0;
14531b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    /* Set to sufficiently high value */
14541b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    int mutex_timeout = 3;
14551b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
14561b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    if(pComponent == NULL || pState == NULL) {
14571b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        return OMX_ErrorBadParameter;
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
14601b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    pHandle = (OMX_COMPONENTTYPE*)pComponent;
14611b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
14621b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
14631b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    /* Retrieve current state */
14641b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    if (pHandle && pHandle->pComponentPrivate) {
14651b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        /* Check for any pending state transition requests */
14661b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) {
14671b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong            return OMX_ErrorUndefined;
14681b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        }
14691b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        nPendingStateChangeRequests = pComponentPrivate->nPendingStateChangeRequests;
14701b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        if(!nPendingStateChangeRequests) {
14711b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
14721b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong               return OMX_ErrorUndefined;
14731b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           }
14741b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
14751b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           /* No pending state transitions */
14761b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong	   *pState = ((AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->curState;
14771b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong            eError = OMX_ErrorNone;
14781b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        }
14791b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        else {
14801b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           /* Wait for component to complete state transition */
14811b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           clock_gettime(CLOCK_REALTIME, &abs_time);
14821b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           abs_time.tv_sec += mutex_timeout;
14831b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           abs_time.tv_nsec = 0;
14841b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           ret = pthread_cond_timedwait(&(pComponentPrivate->StateChangeCondition), &(pComponentPrivate->mutexStateChangeRequest), &abs_time);
14851b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           if (!ret) {
14861b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              /* Component has completed state transitions*/
14871b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              *pState = ((AMRENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->curState;
14881b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
14891b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong                 return OMX_ErrorUndefined;
14901b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              }
14911b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              eError = OMX_ErrorNone;
14921b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           }
14931b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           else if(ret == ETIMEDOUT) {
14941b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              /* Unlock mutex in case of timeout */
14951b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest);
14961b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong              return OMX_ErrorTimeout;
14971b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong           }
14981b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        }
14991b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong     }
15001b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong     else {
15011b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        eError = OMX_ErrorInvalidComponent;
15021b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong        *pState = OMX_StateInvalid;
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
15041b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
15051b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    return eError;
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
15081b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    OMX_PRINT1 (pComponentPrivate->dbg, "%d :: AACENC: Exiting GetState\n", __LINE__);
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
15101b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  EmptyThisBuffer() This callback is used to send the input buffer to
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  component
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent       handle for this instance of the component
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nPortIndex       input port index
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pBuffer          buffer to be sent to codec
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer)
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret = 0;
1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[NBAMRENC_INPUT_PORT];
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->nFilledLen,
1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering EmptyThisBuffer\n", __LINE__);
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pPortDef->bEnabled) {
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorIncorrectStateOperation;
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nInputPortIndex != NBAMRENC_INPUT_PORT) {
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "----------------------------------------------------------------\n");
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Comp Sending Filled ip buff = %p to CompThread\n",__LINE__,pBuffer);
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "----------------------------------------------------------------\n");
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ProcessingInputBuf++;
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = pBuffer->pMarkData;
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent;
1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers++;
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof(OMX_BUFFERHEADERTYPE*));
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (ret == -1) {
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__);
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting EmptyThisBuffer\n", __LINE__);
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  FillThisBuffer() This callback is used to send the output buffer to
1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  the component
1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nPortIndex    output port number
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pBuffer       buffer to be sent to codec
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent,
1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer)
1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret = 0;
1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         (AMRENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[NBAMRENC_OUTPUT_PORT];
1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       0,
1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Entering FillThisBuffer\n", __LINE__);
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "------------------------------------------------------------------\n");
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Comp Sending Emptied op buff = %p to CompThread\n",__LINE__,pBuffer);
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "------------------------------------------------------------------\n");
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pPortDef->bEnabled) {
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorIncorrectStateOperation;
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nOutputPortIndex != NBAMRENC_OUTPUT_PORT) {
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d ::OMX_ErrorIncorrectStateOperation because state it is no more OMX_StatePause nor OMX_StateExecuting\n",__LINE__);
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->pMarkBuf != NULL){
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent;
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData;
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkBuf = NULL;
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pMarkData != NULL) {
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkData;
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ProcessingOutputBuf++;
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers++;
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof (OMX_BUFFERHEADERTYPE*));
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (ret == -1) {
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__);
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount++;
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting FillThisBuffer\n", __LINE__);
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * OMX_ComponentDeinit() this methold will de init the component
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle)
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate =
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         (AMRENC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate;
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct OMX_TI_Debug dbg;
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    dbg = pComponentPrivate->dbg;
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d :: Entering ComponentDeInit\n", __LINE__);
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryStart | PERF_BoundaryCleanup);
1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(pComponentPrivate->fdwrite);
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(pComponentPrivate->fdread);
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* eError = RMProxy_SendCommand(pHandle, RMProxy_FreeResource, OMX_NBAMR_Encoder_COMPONENT, 0, NULL); */
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_NBAMR_Encoder_COMPONENT, 0, 3456, NULL);
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_ERROR4(dbg, "%d ::Error returned from destroy ResourceManagerProxy thread\n",
1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        __LINE__);
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_Deinitalize();
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_ERROR4(dbg, "%d :: Error from RMProxy_Deinitalize\n",__LINE__);
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         goto EXIT;
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsThreadstop = 1;
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = NBAMRENC_StopComponentThread(pHandle);
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_ERROR4(dbg, "%d :: Error from NBAMRENC_StopComponentThread\n",__LINE__);
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         goto EXIT;
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Wait for thread to exit so we can get the status into "eError" */
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* close the pipe handles */
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = NBAMRENC_FreeCompResources(pHandle);
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_ERROR4(dbg, "%d :: Error from NBAMRENC_FreeCompResources\n",__LINE__);
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         goto EXIT;
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event));
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InIdle_event));
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event));
1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
17931b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    pthread_mutex_destroy(&pComponentPrivate->mutexStateChangeRequest);
17941b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong    pthread_cond_destroy(&pComponentPrivate->StateChangeCondition);
17951b969242aa51f71fb39a9855b1ba20f6b7c0f3a9Benny Wong
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryComplete | PERF_BoundaryCleanup);
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERF);
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->sDeviceString != NULL) {
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        newfree(pComponentPrivate->sDeviceString);
1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMEMFREE_STRUCT(pComponentPrivate);
1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
180900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Exiting ComponentDeInit Returning 0x%x\n", __LINE__, eError);
1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  ComponentTunnelRequest() this method is not implemented in 1.5
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * the application.
1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup)
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Entering ComponentTunnelRequest\n", __LINE__);
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Exiting ComponentTunnelRequest\n", __LINE__);
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Returning = 0x%x\n",__LINE__,eError);
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  AllocateBuffer()
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_U32 nPortIndex,
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_PTR pAppPrivate,
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   OMX_IN OMX_U32 nSizeBytes)
1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate;
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)
1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering AllocateBuffer\n", __LINE__);
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef = %p\n", __LINE__,pPortDef);
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled);
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (1) {
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pPortDef->bEnabled) {
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->AlloBuf_waitingsignal = 1;
1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex);
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event));
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pBufferHeader, OMX_BUFFERHEADERTYPE);
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC_SIZE(pBufferHeader->pBuffer, nSizeBytes + 256,OMX_U8);
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBufferHeader->pBuffer == NULL) {
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pBufferHeader) {
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            newfree(pBufferHeader);
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufferHeader = NULL;
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pBuffer += 128;
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == NBAMRENC_INPUT_PORT) {
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1;
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (nPortIndex == NBAMRENC_OUTPUT_PORT) {
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1;
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        NBAMRENC_OMX_MALLOC(pBufferHeader->pOutputPortPrivate, NBAMRENC_BUFDATA);
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, " %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (((!pComponentPrivate->dasfMode) &&
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&&
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled) &&
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle)))/*File Mode*/
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ||
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->dasfMode) &&
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&&
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))))/*Dasf Mode*/
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = NBAMRENC_MAJOR_VER;
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = NBAMRENC_MINOR_VER;
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *pBuffer = pBufferHeader;
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) {
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     OMX_CommandPortEnable,
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->bEnableCommandParam,NULL);
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (*pBuffer)->pBuffer, nSizeBytes,
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleMemory);
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting AllocateBuffer\n",__LINE__);
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  FreeBuffer()
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComponent   handle for this instance of the component
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks   application callbacks
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_U32 nPortIndex,
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* buff;
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* tempBuff;
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int inputIndex = -1;
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int outputIndex = -1;
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle;
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering FreeBuffer\n", __LINE__);
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) {
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pInputBufferList->pBufHdr[i];
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Found matching input buffer\n",__LINE__);
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff);
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer);
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            inputIndex = i;
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: This is not a match\n",__LINE__);
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff);
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer);
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < NBAMRENC_MAX_NUM_OF_BUFS; i++) {
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pOutputBufferList->pBufHdr[i];
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Found matching output buffer\n",__LINE__);
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff);
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer);
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            outputIndex = i;
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: This is not a match\n",__LINE__);
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: buff = %p\n",__LINE__,buff);
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pBuffer = %p\n",__LINE__,pBuffer);
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (inputIndex != -1) {
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) {
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tempBuff = pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer;
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (tempBuff != 0)
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               tempBuff -= 128;
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_NBMEMFREE_STRUCT(tempBuff);
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingBuffer(pComponentPrivate->pPERF,
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer,
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->nAllocLen,
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleMemory );
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_NBMEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pInputBufferList->numBuffers--;
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers <
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->nBufferCountMin) {
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated = OMX_FALSE;
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled &&
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                (pComponentPrivate->curState == OMX_StateIdle ||
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState == OMX_StateExecuting ||
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState == OMX_StatePause)) {
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler( pHandle,
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorPortUnpopulated,
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_TI_ErrorMinor,
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    "Input Port Unpopulated");
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (outputIndex != -1) {
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) {
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tempBuff = pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer;
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (tempBuff != 0)
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               tempBuff -= 128;
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_NBMEMFREE_STRUCT(tempBuff);
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingBuffer(pComponentPrivate->pPERF,
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer,
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->nAllocLen,
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleMemory );
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pOutputPortPrivate);
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->numBuffers--;
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers <
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->nBufferCountMin) {
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated = OMX_FALSE;
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled &&
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (pComponentPrivate->curState == OMX_StateIdle ||
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler( pHandle,
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorPortUnpopulated,
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_TI_ErrorMinor,
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    "Output Port Unpopulated");
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Returning OMX_ErrorBadParameter\n",__LINE__);
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_lock(&pComponentPrivate->ToLoaded_mutex);
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "num input buffers es %d, \n num output buffers es %d,\n InIdle_goingtoloaded es %d \n",
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pInputBufferList->numBuffers, pComponentPrivate->pOutputBufferList->numBuffers, pComponentPrivate->InIdle_goingtoloaded);
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       if ((!pComponentPrivate->pInputBufferList->numBuffers &&
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->pOutputBufferList->numBuffers) &&
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->InIdle_goingtoloaded)
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       {
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->InIdle_goingtoloaded = 0;
2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pthread_cond_signal(&pComponentPrivate->InIdle_threshold);
2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           OMX_SignalEvent(&(pComponentPrivate->InIdle_event));
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       }
2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pthread_mutex_unlock(&pComponentPrivate->ToLoaded_mutex);
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       if ((pComponentPrivate->bLoadedWaitingFreeBuffers &&(!pComponentPrivate->pInputBufferList->numBuffers &&
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            !pComponentPrivate->pOutputBufferList->numBuffers))) {
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRCOMM1(pComponentPrivate->dbg, "reissuing loaded command\n");
2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand(pComponentPrivate->pHandle,OMX_CommandStateSet,OMX_StateLoaded,NULL);
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       }
2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinif (pComponentPrivate->bDisableCommandPending && (pComponentPrivate->pInputBufferList->numBuffers + pComponentPrivate->pOutputBufferList->numBuffers == 0)) {
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,pComponentPrivate->bDisableCommandParam,NULL);
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting FreeBuffer\n", __LINE__);
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  UseBuffer()
2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComp         handle for this instance of the component
2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_HANDLETYPE hComponent,
2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nPortIndex,
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_PTR pAppPrivate,
2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nSizeBytes,
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U8* pBuffer)
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate;
2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffer, nSizeBytes,
2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM);
2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((AMRENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: Entering UseBuffer\n", __LINE__);
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bPopulated = %d \n",__LINE__,pPortDef->bPopulated);
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    NBAMRENC_OMX_MALLOC(pBufferHeader, OMX_BUFFERHEADERTYPE);
2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == NBAMRENC_OUTPUT_PORT) {
2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0;
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        NBAMRENC_OMX_MALLOC(pBufferHeader->pOutputPortPrivate, NBAMRENC_BUFDATA);
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0;
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (((!pComponentPrivate->dasfMode) &&
2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&&
2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_INPUT_PORT]->bEnabled) &&
2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle)))/*File Mode*/
2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ||
2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->dasfMode) &&
2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       ((pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[NBAMRENC_OUTPUT_PORT]->bEnabled)&&
2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))))/*Dasf Mode*/
2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = NBAMRENC_MAJOR_VER;
2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = NBAMRENC_MINOR_VER;
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pBuffer = pBuffer;
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *ppBufferHdr = pBufferHeader;
2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending){
2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     OMX_CommandPortEnable,
2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->bEnableCommandParam,NULL);
2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting UseBuffer\n", __LINE__);
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn GetExtensionIndex() description for GetExtensionIndex
2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinGetExtensionIndex().
2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinReturns index for vendor specific settings.
2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @see         OMX_Core.h
2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN  OMX_STRING cParameterName,
2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_OUT OMX_INDEXTYPE* pIndexType)
2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "GetExtensionIndex\n");
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!(strcmp(cParameterName,"OMX.TI.index.config.tispecific"))) {
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomNBAMRENCModeConfig;
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMXDBG_PRINT(stderr, PRINT, 2, 0, "OMX_IndexCustomNBAMRENCModeConfig\n");
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.nbamrstreamIDinfo"))) {
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomNBAMRENCStreamIDConfig;
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.nbamr.datapath")))
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomNBAMRENCDataPath;
2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.AMR.Encode.Debug")))
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomDebug;
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Exiting GetExtensionIndex\n");
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fns Sleep replace for WIN CE
2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_CreateEvent(OMX_Event *event){
2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret = OMX_ErrorNone;
2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    HANDLE createdEvent = NULL;
2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(event == NULL){
2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    event->event  = CreateEvent(NULL, TRUE, FALSE, NULL);
2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(event->event == NULL)
2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = (int)GetLastError();
2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return ret;
2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_SignalEvent(OMX_Event *event){
2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     int ret = OMX_ErrorNone;
2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if(event == NULL){
2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     SetEvent(event->event);
2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     ret = (int)GetLastError();
2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return ret;
2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_WaitForEvent(OMX_Event *event) {
2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     int ret = OMX_ErrorNone;
2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if(event == NULL){
2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     WaitForSingleObject(event->event, INFINITE);
2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     ret = (int)GetLastError();
2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     return ret;
2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_DestroyEvent(OMX_Event *event) {
2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     int ret = OMX_ErrorNone;
2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if(event == NULL){
2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     CloseHandle(event->event);
2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     return ret;
2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @fn ComponentRoleEnum() description for ComponentRoleEnum()
2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinReturns the role at the given index
2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @see         OMX_Core.h
2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         OMX_IN OMX_HANDLETYPE hComponent,
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      OMX_OUT OMX_U8 *cRole,
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      OMX_IN OMX_U32 nIndex)
2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    AMRENC_COMPONENT_PRIVATE *pComponentPrivate;
2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (AMRENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nIndex == 0){
2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE);
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      OMX_PRINT1(pComponentPrivate->dbg, "::::In ComponenetRoleEnum: cRole is set to %s\n",cRole);
2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      eError = OMX_ErrorNoMore;
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2404