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