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_WbAmrDecoder.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This file implements OMX Component for WbAMR decoder that
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * is fully compliant with the OMX Audio specification 1.5.
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @path  $(CSLPATH)\
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @rev  0.1
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *!
40b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! Revision History
41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! ===================================
42b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! 12-Sept-2005 mf:  Initial Version. Change required per OMAPSWxxxxxxxxx
43b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! to provide _________________.
44b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *!
45b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * ============================================================================= */
46b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  INCLUDE FILES
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h>
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h>
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <AudioManagerAPI.h>
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <ResourceManagerProxyAPI.h>
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------program files ----------------------------------------*/
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h>
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <TIDspOmx.h>
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDecoder.h"
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WbAmrDec_Utils.h"
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define AMRWB_DEC_ROLE "audio_decoder.amrwb"
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  EXTERNAL REFERENCES NOTE : only use if not found in header file
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  PUBLIC DECLARATIONS Defined here, used elsewhere
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  PRIVATE DECLARATIONS Defined here, used only here
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp,
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData);
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING pComponentName,
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID);
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand,
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam, OMX_PTR pCmdData);
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex,
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_PTR ComponentParamStruct);
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParamStruct);
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup);
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle);
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes);
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_HANDLETYPE hComponent,
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_HANDLETYPE hComponent,
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer);
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN  OMX_HANDLETYPE hComponent,
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN  OMX_STRING cParameterName,
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_INDEXTYPE* pIndexType);
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN OMX_HANDLETYPE hComponent,
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex);
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERMS 0666
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data;
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentInit() Set the all the function pointers of component
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update the component function pointer to the handle
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp         handle for this instance of the component
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_ErrorInsufficientResources If the newmalloc fails
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip, *pPortDef_op;
197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_AMRTYPE *amr_ip;
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *amr_op;
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16 i;
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Entering\n");
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Set the all component function pointer to the handle */
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetCallbacks = SetCallbacks;
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetComponentVersion = GetComponentVersion;
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SendCommand = SendCommand;
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetParameter = GetParameter;
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetParameter = SetParameter;
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetConfig = GetConfig;
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetConfig = SetConfig;
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetState = GetState;
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->EmptyThisBuffer = EmptyThisBuffer;
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FillThisBuffer = FillThisBuffer;
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentTunnelRequest = ComponentTunnelRequest;
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentDeInit = ComponentDeInit;
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->AllocateBuffer = AllocateBuffer;
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FreeBuffer = FreeBuffer;
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->UseBuffer = UseBuffer;
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetExtensionIndex= GetExtensionIndex;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentRoleEnum = ComponentRoleEnum;
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Allocate the memory for Component private data area */
227e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pHandle->pComponentPrivate, WBAMR_DEC_COMPONENT_PRIVATE);
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE *)
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pHandle->pComponentPrivate)->pHandle = pHandle;
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Initialize component data structures to default values */
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE *)
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pHandle->pComponentPrivate)->sPortParam.nPorts = 0x2;
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE *)
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pHandle->pComponentPrivate)->sPortParam.nStartPortNumber = 0x0;
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
239e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(amr_ip , OMX_AUDIO_PARAM_AMRTYPE);
240e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(amr_op , OMX_AUDIO_PARAM_PCMMODETYPE);
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE *)
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_INPUT_PORT] = amr_ip;
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE *)
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_OUTPUT_PORT] = (OMX_AUDIO_PARAM_AMRTYPE*)amr_op;
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = pHandle->pComponentPrivate;
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_WBAMRDEC");
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('W','B','D','_'),
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           PERF_ModuleLLMM |
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           PERF_ModuleAudioDecode);
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef ANDROID /* currently using default values until more is understood */
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE; /* this should be true always for TI components */
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE;
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE;
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; /* experiment with this */
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE; /* experiment with this */
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE; /* used only for H.264, leave this as false */
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_FALSE; /* experiment with this */
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
268e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pComponentPrivate->pInputBufferList, WBAMR_DEC_BUFFERLIST);
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pInputBufferList->numBuffers = 0; /* initialize number of buffers */
270e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pComponentPrivate->pOutputBufferList, WBAMR_DEC_BUFFERLIST);
271e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE);
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pOutputBufferList->numBuffers = 0; /* initialize number of buffers */
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) {
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL;
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL;
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->arrTickCount[i] = 0;
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->arrBufIndex[i] = 0;
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->IpBufindex = 0;
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->OpBufindex = 0;
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Setting dasfmode and mimemode to 0\n");
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->dasfmode = 0;
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->mimemode = 0;
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nHoldLength = 0;
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHoldBuffer = NULL;
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 0;
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[0] =  WBAMR_DEC_FRAME_SIZE_18;
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[1] =  WBAMR_DEC_FRAME_SIZE_24;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[2] =  WBAMR_DEC_FRAME_SIZE_33;
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[3] =  WBAMR_DEC_FRAME_SIZE_37;
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[4] =  WBAMR_DEC_FRAME_SIZE_41;
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[5] =  WBAMR_DEC_FRAME_SIZE_47;
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[6] =  WBAMR_DEC_FRAME_SIZE_51;
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[7] =  WBAMR_DEC_FRAME_SIZE_59;
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[8] =  WBAMR_DEC_FRAME_SIZE_61;
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[9] =  WBAMR_DEC_FRAME_SIZE_6;
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[10] = WBAMR_DEC_FRAME_SIZE_0;
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[11] = WBAMR_DEC_FRAME_SIZE_0;
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[12] = WBAMR_DEC_FRAME_SIZE_0;
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[13] = WBAMR_DEC_FRAME_SIZE_0;
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[14] = WBAMR_DEC_FRAME_SIZE_1;
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrMimeBytes[15] = WBAMR_DEC_FRAME_SIZE_1;
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[0] = WBAMR_DEC_FRAME_SIZE_18;
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[1] = WBAMR_DEC_FRAME_SIZE_23;
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[2] = WBAMR_DEC_FRAME_SIZE_33;
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[3] = WBAMR_DEC_FRAME_SIZE_37;
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[4] = WBAMR_DEC_FRAME_SIZE_41;
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[5] = WBAMR_DEC_FRAME_SIZE_47;
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[6] = WBAMR_DEC_FRAME_SIZE_51;
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[7] = WBAMR_DEC_FRAME_SIZE_59;
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[8] = WBAMR_DEC_FRAME_SIZE_61;
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[9] = WBAMR_DEC_FRAME_SIZE_6;
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[10] = WBAMR_DEC_FRAME_SIZE_0;
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[11] = WBAMR_DEC_FRAME_SIZE_0;
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[12] = WBAMR_DEC_FRAME_SIZE_0;
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[13] = WBAMR_DEC_FRAME_SIZE_0;
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[14] = WBAMR_DEC_FRAME_SIZE_1;
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->wbamrIf2Bytes[15] = WBAMR_DEC_FRAME_SIZE_1;
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkBuf = NULL;
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = NULL;
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyBufferDoneCount = 0;
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount = 0;
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nFillBufferDoneCount = 0;
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount = 0;
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*  pComponentPrivate->bIdleCommandPending = 0; */
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bDisableCommandParam = 0;
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->SendAfterEOS = 0;
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->PendingPausedBufs = 0;
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) {
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufHdrPending[i] = NULL;
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nNumInputBufPending = 0;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nNumOutputBufPending = 0;
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bDisableCommandPending = 0;
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutStandingFillDones = 0;
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bStopSent=0;
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bNoIdleOnStop = OMX_FALSE;
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pParams = NULL; /* Without this initialization repetition cases failed. */
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->LastOutbuf=NULL;
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->using_rtsp = 0;
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char*)pComponentPrivate->componentRole.cRole, AMRWB_DEC_ROLE);
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set input port format defaults */
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.nPortIndex         = WBAMR_DEC_INPUT_PORT;
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.nIndex             = OMX_IndexParamAudioAmr;
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.eEncoding          = OMX_AUDIO_CodingAMR;
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set output port format defaults */
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.nPortIndex         = WBAMR_DEC_OUTPUT_PORT;
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.nIndex             = OMX_IndexParamAudioPcm;
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.eEncoding          = OMX_AUDIO_CodingPCM;
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nPortIndex = OMX_DirInput;
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nChannels = 1;
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nBitRate = 8000;
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->eAMRBandMode = OMX_AUDIO_AMRBandModeWB0;
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->eAMRDTXMode = OMX_AUDIO_AMRDTXModeOff;
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatConformance;
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_ip->nSize = sizeof (OMX_AUDIO_PARAM_AMRTYPE);
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* PCM format defaults - These values are required to pass StdAudioDecoderTest*/
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nPortIndex = OMX_DirOutput;
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nChannels = 1;
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->eNumData= OMX_NumericalDataSigned;
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nSamplingRate = 16000;
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->nBitPerSample = 16;
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    amr_op->ePCMMode = OMX_AUDIO_PCMModeLinear;
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
382e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString, (100*sizeof(char)),OMX_STRING);
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->IpBufindex = 0;
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->OpBufindex = 0;
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ptrLibLCML = NULL;
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char*)pComponentPrivate->sDeviceString,"/eteedn:i0:o0/codec\0");
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL);
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL);
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->codecStop_mutex, NULL);
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->codecStop_threshold, NULL);
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->codecStop_waitingsignal = 0;
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL);
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL);
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL);
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL);
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->AlloBuf_event));
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InLoaded_event));
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InIdle_event));
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
414e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
416e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "[ALLOC] %p\n",pPortDef_op);
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "pPortDef_ip = %p\n",pPortDef_ip);
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "pPortDef_op = %p\n",pPortDef_op);
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[WBAMR_DEC_INPUT_PORT]
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        = pPortDef_ip;
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WBAMR_DEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[WBAMR_DEC_OUTPUT_PORT]
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        = pPortDef_op;
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nPortIndex = 0x0;
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountActual = NUM_WBAMRDEC_INPUT_BUFFERS;
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountMin = NUM_WBAMRDEC_INPUT_BUFFERS;
431b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pPortDef_ip->nBufferAlignment = DSP_CACHE_ALIGNMENT;
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->eDir = OMX_DirInput;
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bEnabled = OMX_TRUE;
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Use bigger IN buffer size for PV-Android */
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferSize = IP_WBAMRDEC_BUFFERSIZE;
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bPopulated = 0;
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->format.audio.eEncoding = OMX_AUDIO_CodingAMR;
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nPortIndex = 0x1;
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountActual = NUM_WBAMRDEC_OUTPUT_BUFFERS;
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountMin = NUM_WBAMRDEC_OUTPUT_BUFFERS;
443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pPortDef_op->nBufferAlignment = DSP_CACHE_ALIGNMENT;
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->eDir = OMX_DirOutput;
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bEnabled = OMX_TRUE;
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferSize = OUTPUT_WBAMRDEC_BUFFER_SIZE;
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bPopulated = 0;
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->format.audio.eEncoding = OMX_AUDIO_CodingPCM;
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsInvalidState = OMX_FALSE;
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    error = RMProxy_NewInitalize();
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (error != OMX_ErrorNone) {
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Error returned from loading ResourceManagerProxy thread\n");
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    error = WBAMR_DEC_StartComponentThread(pHandle);
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (error != OMX_ErrorNone) {
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Error returned from the Component\n");
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n");
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n");
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->fdwrite=open(FIFO1,O_WRONLY))<0) {
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR Dec Component] - failure to open WRITE pipe\n");
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "OMX_ComponentInit\n");
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->fdread=open(FIFO2,O_RDONLY))<0) {
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR Dec Component] - failure to open READ pipe\n");
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ThreadCreated(pComponentPrivate->pPERF, pComponentPrivate->WBAMR_DEC_ComponentThread,
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_FOURCC('W','B','D','T'));
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pComponentPrivate != NULL) {
486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	 OMX_PRINT1(pComponentPrivate->dbg, "Exiting - returning %d\n", error);
487b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  SetCallbacks() Sets application callbacks to the component
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * to the component. So that component can make use of those call back
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * while sending buffers to the application. And also it will copy the
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * application private data to component memory
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent    handle for this instance of the component
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks    application callbacks
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppData      Application private data
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent,
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pAppData)
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate =
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCallBacks == NULL) {
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n");
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP1(pComponentPrivate->dbg, "Received the empty callbacks from the \
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                application\n");
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Copy the callbacks of the application to the component private */
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*copy the application private data to component memory */
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup);
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  GetComponentVersion() This will return the component version
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will retrun the component version
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp               handle for this instance of the component
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentName       Name of the component
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentVersion    handle for this instance of the component
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pSpecVersion        application callbacks
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompnentUUID
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING pComponentName,
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Inside the GetComponentVersion\n");
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  SendCommand() used to send the commands to the component
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will be used by the application.
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param phandle         handle for this instance of the component
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param Cmd             Command to be sent to the component
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam          indicates commmad is sent using this method
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle,
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam,OMX_PTR pCmdData)
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet;
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pCompPrivate =
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pCompPrivate->dbg, "phandle = %p\n",phandle);
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP1(pCompPrivate->dbg, "pCompPrivate = %p\n",pCompPrivate);
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pCompPrivate->pHandle = phandle;
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCompPrivate->curState == OMX_StateInvalid){
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pCompPrivate->curState == OMX_StateInvalid){
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pCompPrivate->dbg, "Error NotIfication \
617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     Sent to App\n");
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler (pHandle,
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           pHandle->pApplicationPrivate,
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_EventError,
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_ErrorInvalidState,
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_TI_ErrorMinor,
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           "Invalid State");
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(pCompPrivate->pPERF, Cmd,
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (Cmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam,
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleComponent);
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(Cmd) {
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandStateSet:
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE1(pCompPrivate->dbg, "pCompPrivate->curState = %d\n",pCompPrivate->curState);
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam == OMX_StateLoaded) {
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->bLoadedCommandPending = OMX_TRUE;
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pCompPrivate->curState == OMX_StateLoaded) {
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) {
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler (
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle,
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorIncorrectStateTransition,
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(nParam == OMX_StateInvalid) {
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pCompPrivate->curState = OMX_StateInvalid;
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler (
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle,
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandFlush:
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(nParam > 1 && nParam != -1) {
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortDisable:
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortEnable:
678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandMarkBuffer:
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam > 0) {
683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR2(pCompPrivate->dbg, "Command Received Default \
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      error\n");
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler (pHandle,
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           pHandle->pApplicationPrivate,
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_EventError,
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_ErrorUndefined,
694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_TI_ErrorMinor,
695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           "Invalid Command");
696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (Cmd == OMX_CommandMarkBuffer) {
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData,
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     sizeof(OMX_PTR));
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &nParam,
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     sizeof(OMX_U32));
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(pCompPrivate->dbg, "nRet = %d\n",nRet);
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "Inside SendCommand\n");
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(Cmd == OMX_CommandStateSet && nParam == OMX_StateExecuting) {
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* enable Tee device command*/
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        cmd_data.hComponent = pHandle;
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        cmd_data.AM_Cmd = AM_CommandTDNDownlinkMode;
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        cmd_data.param1 = 0;
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        cmd_data.param2 = 0;
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        cmd_data.streamID = 0;
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if((write(pCompPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0) {
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorHardware;
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  GetParameter() Gets the current configurations of the component
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp         handle for this instance of the component
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentParameterStructure
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp,
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure)
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE  *pComponentPrivate;
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure;
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
76800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong    OMX_PRINT1 (pComponentPrivate->dbg, "Entering with index:: %x\n",nParamIndex);
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure;
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pParameterStructure == NULL) {
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, "pParameterStructure = %p\n",pParameterStructure);
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState == OMX_StateInvalid) {
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               hComp,
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               ((OMX_COMPONENTTYPE *)hComp)->pApplicationPrivate,
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_EventError,
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_ErrorIncorrectStateOperation,
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_TI_ErrorMinor,
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex){
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioInit:
798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "OMX_IndexParamAudioInit\n");
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentParameterStructure, &pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "pParameterStructure->nPortIndex = %ld\n",pParameterStructure->nPortIndex);
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex = %ld\n",pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex);
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) {
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure,
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT],
810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   );
812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) {
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure,
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT],
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   );
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "nPortIndex = %ld\n",((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex);
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->sInPortFormat.nPortIndex= %ld\n",pComponentPrivate->sInPortFormat.nPortIndex);
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->sOutPortFormat.nPortIndex= %ld\n",pComponentPrivate->sOutPortFormat.nPortIndex);
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) {
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pComponentPrivate->sInPortFormat.nPortIndex) {
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, &pComponentPrivate->sInPortFormat,
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex){
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > pComponentPrivate->sOutPortFormat.nPortIndex) {
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, &pComponentPrivate->sOutPortFormat,
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioAmr:
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) {
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT1(pComponentPrivate->dbg, "Inside the GetParameter\n");
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure,pComponentPrivate->wbamrParams[WBAMR_DEC_INPUT_PORT],
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_AUDIO_PARAM_AMRTYPE));
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) {
868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT1(pComponentPrivate->dbg, "Inside the GetParameter\n");
869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT],
870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_AUDIO_PARAM_AMRTYPE));
871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_AMRTYPE *)(ComponentParameterStructure))->nPortIndex == WBAMR_DEC_OUTPUT_PORT){
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT], sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pComponentPrivate->pPriorityMgmt == NULL) {
888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    eError = OMX_ErrorBadPortIndex;
889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentParameterStructure, pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) {
896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "OMX_IndexParamCompBufferSupplier \n");
897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*  memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) {
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT1(pComponentPrivate->dbg, "OMX_IndexParamCompBufferSupplier \n");
901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR2(pComponentPrivate->dbg, "OMX_ErrorBadPortIndex from GetParameter");
905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamVideoInit:
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImageInit:
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamOtherInit:
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX:
918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, "Entering PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n");
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PV_OMXComponentCapabilityFlagsType* pCap_flags = (PV_OMXComponentCapabilityFlagsType *) ComponentParameterStructure;
921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (NULL == pCap_flags)
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "ERROR PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n");
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError =  OMX_ErrorBadParameter;
925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, "Copying PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n");
928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pCap_flags, &(pComponentPrivate->iPVCapabilityFlags), sizeof(PV_OMXComponentCapabilityFlagsType));
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorNone;
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting - %x\n",nParamIndex);
939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  SetParameter() Sets configuration paramets to the component
945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp         handle for this instance of the component
947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex
948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompParam
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pCompParam)
958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL temp_bEnabled,temp_bPopulated;
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole;
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *amr_op;
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE  *pComponentPrivate;
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCompParam == NULL) {
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex) {
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PARAM_PORTDEFINITIONTYPE *pComponentParam =
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentParam->nPortIndex = %ld\n",pComponentParam->nPortIndex);
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentParam->nBufferCountActual= %ld\n",pComponentParam->nBufferCountActual);
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentParam->nBufferSize= %ld\n",pComponentParam->nBufferSize);
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* 0 means Input port */
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentParam->nPortIndex == 0) {
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(&pComponentPrivate->sInPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else if (pComponentParam->nPortIndex == 1) {
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* 1 means Output port */
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(&pComponentPrivate->sOutPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }else {
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "Wrong Port Index Parameter\n");
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n");
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioAmr:
1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_AUDIO_PARAM_AMRTYPE *pCompAmrParam =
1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                (OMX_AUDIO_PARAM_AMRTYPE *)pCompParam;
1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (OMX_AUDIO_AMRFrameFormatConformance == pCompAmrParam->eAMRFrameFormat)
1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->mimemode = 0;
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (OMX_AUDIO_AMRFrameFormatIF2 == pCompAmrParam->eAMRFrameFormat)
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->mimemode = 2;
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (OMX_AUDIO_AMRFrameFormatRTPPayload == pCompAmrParam->eAMRFrameFormat){
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->mimemode = 1;
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->using_rtsp = 1;
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->mimemode = 1; /*MIME Format*/
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* 0 means Input port */
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pCompAmrParam->nPortIndex == 0) {
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(((WBAMR_DEC_COMPONENT_PRIVATE*)
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_INPUT_PORT],
1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE));
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else if (pCompAmrParam->nPortIndex == 1) {
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* 1 means Output port */
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(((WBAMR_DEC_COMPONENT_PRIVATE *)
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pHandle->pComponentPrivate)->wbamrParams[WBAMR_DEC_OUTPUT_PORT],
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pCompAmrParam, sizeof(OMX_AUDIO_PARAM_AMRTYPE));
1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) {
1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp_bEnabled = pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled;
1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp_bPopulated = pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated;
1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT],
1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   pCompParam,
1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   );
1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled = temp_bEnabled;
1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated = temp_bPopulated;
1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) {
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp_bEnabled = pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled;
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp_bPopulated = pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated;
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT],
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   pCompParam,
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   );
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = temp_bEnabled;
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated = temp_bPopulated;
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->curState != OMX_StateLoaded) {
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorIncorrectStateOperation;
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	if (pComponentPrivate->pPriorityMgmt == NULL) {
1075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    eError = OMX_ErrorBadParameter;
1076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
1077b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentPrivate->pPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pCompParam) {
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pCompParam){
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            amr_op = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam;
1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->wbamrParams[WBAMR_DEC_OUTPUT_PORT], amr_op, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else{
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nPortIndex) {
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput;
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nPortIndex) {
1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput;
1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR2(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from SetParameter");
1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  GetConfig() Gets the current configuration of to the component
1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp         handle for this instance of the component
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate =
1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_STREAM_INFO *streamInfo;
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1150e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(streamInfo, TI_OMX_STREAM_INFO);
1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nConfigIndex == OMX_IndexCustomWbAmrDecStreamIDConfig){
1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        streamInfo->streamId = pComponentPrivate->streamID;
1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO));
1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(nConfigIndex == OMX_IndexCustomDebug){
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1165eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong EXIT:
1166b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(streamInfo);
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting GetConfig. Returning = 0x%x\n",eError);
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  SetConfig() Sets the configraiton to the component
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp         handle for this instance of the component
1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex
1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure
1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1189b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16 *customFlag = NULL;
1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DSP_DEFINITION *configData;
1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_CONFIG_MUTETYPE *pMuteStructure = NULL;
1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_CONFIG_VOLUMETYPE *pVolumeStructure = NULL;
1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering SetConfig\n");
1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pHandle == NULL) {
1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Invalid HANDLE OMX_ErrorBadParameter \n");
1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1204b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (nConfigIndex) {
1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomWbAmrDecHeaderInfoConfig:
1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomWbAmrDecHeaderInfoConfig \n");
1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            configData = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure;
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (configData == NULL) {
1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n");
1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->acdnmode = configData->acousticMode;
1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->dasfmode = configData->dasfMode;
1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if( 2 == pComponentPrivate->dasfmode ){
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->dasfmode--;
1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->dasfmode ){
1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = 0;
1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->streamID = configData->streamId;
1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case  OMX_IndexCustomWbAmrDecDataPath:
1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        customFlag = (OMX_S16*)ComponentConfigStructure;
1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (customFlag == NULL) {
1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        switch(dataPath) {
1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case DATAPATH_APPLICATION:
1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_DECODER, pComponentPrivate->streamID);
1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case DATAPATH_APPLICATION_RTMIXER:
1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING);
1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case DATAPATH_ACDN:
1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING);
1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomModeDasfConfig_WBAMRDEC:
1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomModeDasfConfig \n");
1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            customFlag = (OMX_S16*)ComponentConfigStructure;
1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (customFlag == NULL) {
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n");
1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->dasfmode = *customFlag;
1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if( 2 == pComponentPrivate->dasfmode ){
1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->dasfmode--;
1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->dasfmode){
1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled = 0;
1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomModeMimeConfig_WBAMRDEC:
1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "SetConfig OMX_IndexCustomModeMimeConfig \n");
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            customFlag = (OMX_S16*)ComponentConfigStructure;
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (customFlag == NULL)
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "OMX_ErrorBadParameter from SetConfig\n");
1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->mimemode = *customFlag;
1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomWbAmrDecNextFrameLost:
1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bFrameLost=OMX_TRUE;
1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexConfigAudioMute:
1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pMuteStructure = (OMX_AUDIO_CONFIG_MUTETYPE *)ComponentConfigStructure;
1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "Set Mute/Unmute for playback stream\n");
1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.hComponent = hComp;
1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pMuteStructure->bMute == OMX_TRUE)
1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "Mute the playback stream\n");
1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                cmd_data.AM_Cmd = AM_CommandStreamMute;
1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "unMute the playback stream\n");
1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                cmd_data.AM_Cmd = AM_CommandStreamUnMute;
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param1 = 0;
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param2 = 0;
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.streamID = pComponentPrivate->streamID;
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0)
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR decoder] - fail to send Mute command to audio manager\n");
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexConfigAudioVolume:
1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pVolumeStructure = (OMX_AUDIO_CONFIG_VOLUMETYPE *)ComponentConfigStructure;
1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "Set volume for playback stream\n");
1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.hComponent = hComp;
1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.AM_Cmd = AM_CommandSWGain;
1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param1 = pVolumeStructure->sVolume.nValue;
1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.param2 = 0;
1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cmd_data.streamID = pComponentPrivate->streamID;
1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if((write(pComponentPrivate->fdwrite, &cmd_data, sizeof(cmd_data)))<0)
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "[WBAMR decoder] - fail to send Volume command to audio manager\n");
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDebug:
1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting SetConfig\n");
1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Returning = 0x%x\n",eError);
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  GetState() Gets the current state of the component
1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCompomponent handle for this instance of the component
1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pState
1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorUndefined;
1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pState) {
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        error = OMX_ErrorBadParameter;
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "About to return OMX_ErrorBadParameter on line\n");
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pHandle && pHandle->pComponentPrivate) {
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState =  ((WBAMR_DEC_COMPONENT_PRIVATE*)
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pHandle->pComponentPrivate)->curState;
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState = OMX_StateLoaded;
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    error = OMX_ErrorNone;
1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  EmptyThisBuffer() This callback is used to send the input buffer to
1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  component
1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent       handle for this instance of the component
1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex       input port index
1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer          buffer to be sent to codec
1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer)
1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate =
1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret;
1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*)
1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate)->pPortDef[WBAMR_DEC_INPUT_PORT];
1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->nFilledLen,
1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n");
1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nInputPortIndex != WBAMR_DEC_INPUT_PORT) {
1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Component Sending Filled ip buff %p \
1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             to Component Thread\n",pBuffer);
1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = pBuffer->pMarkData;
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent;
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers++;
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer,
1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 sizeof(OMX_BUFFERHEADERTYPE*));
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (ret == -1) {
1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Error in Writing to the Data pipe\n");
1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount++;
1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  FillThisBuffer() This callback is used to send the output buffer to
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  the component
1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent    handle for this instance of the component
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex    output port number
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer       buffer to be sent to codec
1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent,
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer)
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate =
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*)
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate)->pPortDef[WBAMR_DEC_OUTPUT_PORT];
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       0,
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line\n");
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nOutputPortIndex != WBAMR_DEC_OUTPUT_PORT) {
1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Decrementing app_nBuf = %ld\n",pComponentPrivate->app_nBuf);
1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkBuf = %p\n",pComponentPrivate->pMarkBuf);
1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkData = %p\n",pComponentPrivate->pMarkData);
1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->pMarkBuf){
1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent;
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData;
1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkBuf = NULL;
1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pMarkData) {
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkData;
1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "Component Sending Emptied op buff %p \
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             to Component Thread\n",pBuffer);
1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers++;
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    write (pComponentPrivate->dataPipe[1], &pBuffer,
1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           sizeof (OMX_BUFFERHEADERTYPE*));
1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount++;
1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ComponentDeinit() this methold will de init the component
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp         handle for this instance of the component
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle)
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* inform audio manager to remove the streamID*/
1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* compose the data */
1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate =
1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (WBAMR_DEC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate;
1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_TI_Debug dbg;
1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    dbg = pComponentPrivate->dbg;
1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(dbg, "ComponentDeInit\n");
1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryStart | PERF_BoundaryCleanup);
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(pComponentPrivate->fdwrite);
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(pComponentPrivate->fdread);
1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*RM*/
1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_WBAMR_Decoder_COMPONENT, 0, 3456, NULL);
1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(dbg, "Error returned from destroy ResourceManagerProxy thread\n");
1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_Deinitalize();
1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(dbg, "Error from RMProxy_Deinitalize\n");
1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*RM END*/
1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(dbg, "ComponentDeInit\n");
1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsStopping = 1;
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = WBAMR_DEC_StopComponentThread(pHandle);
1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Wait for thread to exit so we can get the status into "error" */
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList);
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList);
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* close the pipe handles */
1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_FreeCompResources(pHandle);
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryComplete | PERF_BoundaryCleanup);
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERF);
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->sDeviceString);
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(dbg, "After WBAMR_DEC_FreeCompResources\n");
1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1661e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MEMFREE_STRUCT(pComponentPrivate);
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_CLOSE(dbg);
1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  ComponentTunnelRequest() this method is not implemented in 1.5
1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This method will update application callbacks
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application.
1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp         handle for this instance of the component
1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks    application callbacks
1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr
1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup)
1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Inside the ComponentTunnelRequest\n");
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  AllocateBuffer()
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComp         handle for this instance of the component
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks    application callbacks
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ptr
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes)
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate;
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*)
1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate)->pPortDef[nPortIndex];
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef = %p\n",pPortDef);
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef->bEnabled = %d\n",pPortDef->bEnabled);
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "pPortDef->bEnabled = %d\n", pPortDef->bEnabled);
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while (!pPortDef->bEnabled) {
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->AlloBuf_waitingsignal = 1;
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex);
1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event));
1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1744e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE);
1745b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE_DSPALIGN(pBufferHeader->pBuffer, nSizeBytes,OMX_U8);
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == WBAMR_DEC_INPUT_PORT) {
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pInputBufferList->numBuffers,pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers]);
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1;
1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "Allocate WBAMR_DEC_Buffer Line\n");
1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers);
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "pPortDef->nBufferCountMin = %ld\n",pPortDef->nBufferCountMin);
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, "Setting pPortDef->bPopulated = OMX_TRUE for input port\n");
1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == WBAMR_DEC_OUTPUT_PORT) {
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
1765e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong        OMX_MALLOC_GENERIC(pBufferHeader->pOutputPortPrivate, WBAMRDEC_BUFDATA);
1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pOutputBufferList->numBuffers,pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers]);
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1;
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, "Setting pPortDef->bPopulated = OMX_TRUE for input port\n");
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled)&&
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) &&
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER;
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER;
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *pBuffer = pBufferHeader;
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) {
1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     OMX_CommandPortEnable,
1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->bEnableCommandParam,NULL);
1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (*pBuffer)->pBuffer, nSizeBytes,
1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleMemory);
1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "AllocateBuffer returning %d\n",eError);
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn FreeBuffer() description for FreeBuffer
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeBuffer().
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Called by the OMX IL client to newfree a buffer.
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         OMX_Core.h
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* buff;
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int inputIndex = -1;
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int outputIndex = -1;
1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle;
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) {
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        buff = pComponentPrivate->pInputBufferList->pBufHdr[i];
1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (buff == pBuffer) {
1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching input buffer\n");
1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            inputIndex = i;
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n");
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < WBAMR_DEC_MAX_NUM_OF_BUFS; i++) {
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        buff = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (buff == pBuffer) {
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching output buffer\n");
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            outputIndex = i;
1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n");
1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (inputIndex != -1) {
1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingBuffer(pComponentPrivate->pPERF,
1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer,
1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->nAllocLen,
1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleMemory);
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) {
1885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer, OMX_U8);
1886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1887e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong        OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
1888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pComponentPrivate->pInputBufferList->numBuffers--;
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers <
1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->nBufferCountMin) {
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated = OMX_FALSE;
1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled &&
1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorPortUnpopulated,OMX_TI_ErrorMinor, "Input Port Unpopulated");
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (outputIndex != -1) {
1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingBuffer(pComponentPrivate->pPERF,
1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer,
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->nAllocLen,
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleMemory);
1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) {
1912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer, OMX_U8);
1913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1914e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong        OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pOutputPortPrivate);
1915e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong        OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->numBuffers--;
1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers <
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->nBufferCountMin) {
1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated = OMX_FALSE;
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled &&
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorPortUnpopulated,OMX_TI_ErrorMinor, "Output Port Unpopulated");
1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Returning OMX_ErrorBadParameter\n");
1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((!pComponentPrivate->pInputBufferList->numBuffers &&
1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         !pComponentPrivate->pOutputBufferList->numBuffers) &&
1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded)
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded = 0;
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InIdle_threshold);
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InIdle_event));
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bDisableCommandPending && (pComponentPrivate->pInputBufferList->numBuffers + pComponentPrivate->pOutputBufferList->numBuffers == 0)) {
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,pComponentPrivate->bDisableCommandParam,NULL);
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting FreeBuffer\n");
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn UseBuffer() description for UseBuffer
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin UseBuffer().
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Called by the OMX IL client to pass a buffer to be used.
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         OMX_Core.h
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer)
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate;
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WBAMR_DEC_COMPONENT_PRIVATE*)
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate)->pPortDef[nPortIndex];
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "pPortDef->bPopulated = %d\n",pPortDef->bPopulated);
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "In UseBuffer\n");
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*if(nSizeBytes != pPortDef->nBufferSize || pPortDef->bPopulated) {
1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      OMX_PRINT1(pComponentPrivate->dbg, "In UseBuffer\n");
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      eError = OMX_ErrorBadParameter;
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      goto EXIT;
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      }*/
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2004e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong    OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE);
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == WBAMR_DEC_OUTPUT_PORT) {
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
2008e6e2e1c9616d3461a2c698f0d7e96648c74a0e0aBenny Wong        OMX_MALLOC_GENERIC(pBufferHeader->pOutputPortPrivate, WBAMRDEC_BUFDATA);
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0;
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0;
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_OUTPUT_PORT]->bEnabled)&&
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[WBAMR_DEC_INPUT_PORT]->bEnabled) &&
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = WBAMR_DEC_MAJOR_VER;
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = WBAMR_DEC_MINOR_VER;
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pBuffer = pBuffer;
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *ppBufferHdr = pBufferHeader;
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "pBufferHeader = %p\n",pBufferHeader);
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffer, nSizeBytes,
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM);
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetExtensionIndex() description for GetExtensionIndex
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin GetExtensionIndex().
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Returns index for vendor specific settings.
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         OMX_Core.h
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(OMX_IN  OMX_HANDLETYPE hComponent,
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN  OMX_STRING cParameterName,
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_INDEXTYPE* pIndexType)
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamrheaderinfo"))) {
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWbAmrDecHeaderInfoConfig;
2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamrstreamIDinfo"))) {
2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWbAmrDecStreamIDConfig;
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamr.datapath")))
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWbAmrDecDataPath;
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.wbamr.framelost")))
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWbAmrDecNextFrameLost;
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.WBAMR.Decode.Debug")))
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomDebug;
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn ComponentRoleEnum() description for ComponentRoleEnum()
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Returns the role at the given index
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         OMX_Core.h
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(OMX_IN OMX_HANDLETYPE hComponent,
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex)
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate;
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WBAMR_DEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nIndex == 0){
2117b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (cRole == NULL) {
2118b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
2119b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
2120b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	else {
2121b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE);
2122b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_PRINT1(pComponentPrivate->dbg, "In ComponenetRoleEnum: cRole is set to %s\n",cRole);
2123b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorNoMore;
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef WBAMRDEC_DEBUGMEM
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid * mymalloc(int line, char *s, int size)
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void *p;
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int e=0;
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    p = malloc(size);
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(p==NULL){
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "Memory not available\n");
2139b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* exit(1); */
2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else{
2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while((lines[e]!=0)&& (e<500) ){
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            e++;
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[e]=p;
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        lines[e]=line;
2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bytes[e]=size;
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strcpy(file[e],s);
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, PRINT, 1, 0, "Allocating %d bytes on address %p, line %d file %s\n", size, p, line, s);
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2151c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong    return p;
2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint myfree(void *dp, int line, char *s){
2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int q;
2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (dp==NULL){
2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "Null Memory can not be deleted line: %d  file: %s\n", line, s);
2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        return 0;
2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for(q=0;q<500;q++){
2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(arr[q]==dp){
2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMXDBG_PRINT(stderr, PRINT, 1, 0, "Deleting %d bytes on address %p, line %d file %s\n", bytes[q],dp, line, s);
2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            free(dp);
2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            dp = NULL;
2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            lines[q]=0;
2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            strcpy(file[q],"");
2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(500==q)
2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n\nPointer not found. Line:%d    File%s!!\n\n",line, s);
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2175