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_G711Encoder.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements OpenMAX (TM) 1.0 Specific APIs and its functionality
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * that is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g711_enc\src
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev  1.0
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! ===================================
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 12-Dec-2006: Initial Version
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! This is newest file
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  INCLUDE FILES
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------program files ----------------------------------------*/
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin//#include <encode_common_ti.h>
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G711Enc_Utils.h"
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  EXTERNAL REFERENCES NOTE : only use if not found in header file
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  PUBLIC DECLARATIONS Defined here, used elsewhere
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  PRIVATE DECLARATIONS Defined here, used only here
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp,
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData);
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_STRING pComponentName,
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID);
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand,
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_U32 nParam,OMX_PTR pCmdData);
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex,
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PTR ComponentParamStruct);
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR ComponentParamStruct);
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup);
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle);
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes);
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_HANDLETYPE hComponent,
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_HANDLETYPE hComponent,
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer);
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_HANDLETYPE hComponent,
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_STRING cParameterName,
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_INDEXTYPE* pIndexType);
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_HANDLETYPE hComponent,
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex);
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* interface with audio manager*/
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define PERMS 0666
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G711_ENC_ROLE "audio_encoder.g711"
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ComponentInit() Set the all the function pointers of component
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update the component function pointer to the handle
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_ErrorInsufficientResources If the malloc fails
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip=NULL, *pPortDef_op=NULL;
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate=NULL;
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *G711_op=NULL;
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *G711_ip=NULL;
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_PORT_TYPE *pCompPort = NULL;
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE *pInPortFormat = NULL;
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE *pOutPortFormat = NULL;
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering OMX_ComponentInit\n", __LINE__);
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Set the all component function pointer to the handle */
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetCallbacks               = SetCallbacks;
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetComponentVersion        = GetComponentVersion;
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SendCommand                = SendCommand;
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetParameter               = GetParameter;
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetParameter               = SetParameter;
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetConfig                  = GetConfig;
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetConfig                  = SetConfig;
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetState                   = GetState;
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->EmptyThisBuffer            = EmptyThisBuffer;
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FillThisBuffer             = FillThisBuffer;
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentTunnelRequest     = ComponentTunnelRequest;
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentDeInit            = ComponentDeInit;
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->AllocateBuffer             = AllocateBuffer;
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FreeBuffer                 = FreeBuffer;
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->UseBuffer                  = UseBuffer;
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetExtensionIndex          = GetExtensionIndex;
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentRoleEnum          = ComponentRoleEnum;
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Allocate the memory for Component private data area */
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pHandle->pComponentPrivate, G711ENC_COMPONENT_PRIVATE);
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = pHandle->pComponentPrivate;
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pCompPort, G711ENC_PORT_TYPE);
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCompPort[G711ENC_INPUT_PORT] = pCompPort;
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pCompPort, G711ENC_PORT_TYPE);
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT] = pCompPort;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize sPortParam data structures to default values */
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPortParam->nPorts = 0x2;
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPortParam->nStartPortNumber = 0x0;
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Malloc and Set pPriorityMgmt defaults */
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize sPriorityMgmt data structures to default values */
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPriorityMgmt->nGroupPriority = -1;
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sPriorityMgmt->nGroupID = -1;
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(G711_op, OMX_AUDIO_PARAM_PCMMODETYPE);
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(G711_op, OMX_AUDIO_PARAM_PCMMODETYPE);
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G711Params[G711ENC_OUTPUT_PORT] = G711_op;
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Input PCM format defaults */
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->nPortIndex = G711ENC_OUTPUT_PORT;
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->nChannels  = 1;
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->eNumData = OMX_NumericalDataUnsigned;
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->eEndian  = OMX_EndianLittle;
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->bInterleaved = OMX_FALSE;
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->nSamplingRate = 0;
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->nBitPerSample = 8;
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_op->ePCMMode = OMX_AUDIO_PCMModeLinear;
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(G711_ip, OMX_AUDIO_PARAM_PCMMODETYPE);
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(G711_ip, OMX_AUDIO_PARAM_PCMMODETYPE);
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G711Params[G711ENC_INPUT_PORT] = G711_ip;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Output PCM format defaults */
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->nPortIndex = G711ENC_INPUT_PORT;
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->nChannels  = 1;
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->eNumData = OMX_NumericalDataUnsigned;
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->eEndian  = OMX_EndianLittle;
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->bInterleaved = OMX_FALSE;
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->nSamplingRate = 8000;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->nBitPerSample = 16;
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711_ip->ePCMMode = OMX_AUDIO_PCMModeLinear;
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize number of input buffers */
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->pInputBufferList, G711ENC_BUFFERLIST);
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pInputBufferList->numBuffers = 0;
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize number of output buffers */
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->pOutputBufferList, G711ENC_BUFFERLIST);
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pOutputBufferList->numBuffers = 0;
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < G711ENC_MAX_NUM_OF_BUFS; i++) {
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL;
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[i]  = NULL;
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set input port defaults */
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortDef[G711ENC_INPUT_PORT] = pPortDef_ip;
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nPortIndex                         = G711ENC_INPUT_PORT;
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->eDir                               = OMX_DirInput;
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferCountActual                 = G711ENC_NUM_INPUT_BUFFERS;
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferCountMin                    = G711ENC_NUM_INPUT_BUFFERS;
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferSize                        = G711ENC_INPUT_BUFFER_SIZE_DASF;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->bEnabled                           = OMX_TRUE;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->bPopulated                         = OMX_FALSE;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->eDomain                            = OMX_PortDomainAudio;
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.eEncoding             = OMX_AUDIO_CodingPCM;
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.pNativeRender         = NULL;
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->format.audio.bFlagErrorConcealment = OMX_FALSE;
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set output port defaults */
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT] = pPortDef_op;
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nPortIndex                         = G711ENC_OUTPUT_PORT;
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->eDir                               = OMX_DirOutput;
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferCountMin                    = G711ENC_NUM_OUTPUT_BUFFERS;
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferCountActual                 = G711ENC_NUM_OUTPUT_BUFFERS;
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferSize                        = G711ENC_OUTPUT_BUFFER_SIZE;
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->bEnabled                           = OMX_TRUE;
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->bPopulated                         = OMX_FALSE;
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->eDomain                            = OMX_PortDomainAudio;
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.eEncoding             = OMX_AUDIO_CodingG711;
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.pNativeRender         = NULL;
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->format.audio.bFlagErrorConcealment = OMX_FALSE;
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set input port format defaults */
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pInPortFormat = pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat;
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pInPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pInPortFormat->nPortIndex     = G711ENC_INPUT_PORT;
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pInPortFormat->nIndex         = OMX_IndexParamAudioPcm;
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pInPortFormat->eEncoding          = OMX_AUDIO_CodingPCM;
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set output port format defaults */
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pOutPortFormat = pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat;
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_INIT_STRUCT(pOutPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pOutPortFormat->nPortIndex         = G711ENC_OUTPUT_PORT;
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pOutPortFormat->nIndex           = OMX_IndexParamAudioPcm;
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pOutPortFormat->eEncoding          = OMX_AUDIO_CodingG711;
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Setting dasf & acdn and MultiFrame modes to 0\n",__LINE__);
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->dasfMode = 0;
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->acdnMode = 0;
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pParams = NULL;
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pAlgParam = NULL;
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 0;
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkBuf = NULL;
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkData = NULL;
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nEmptyBufferDoneCount = 0;
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount = 0;
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillBufferDoneCount = 0;
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount = 0;
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIdleCommandPending = 0;
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDisableCommandParam = 0;
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsEOFSent = 0;
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bBypassDSP = 0;
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bEnableCommandParam = 0;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeInputBuffers = 0;
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeOutputBuffers = 0;
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers = 0;
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers = 0;
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < G711ENC_MAX_NUM_OF_BUFS; i++) {
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufHdrPending[i] = NULL;
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nInvalidFrameCount = 0;
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nNumInputBufPending = 0;
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nNumOutputBufPending = 0;
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDisableCommandPending = 0;
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bEnableCommandPending = 0;
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bNoIdleOnStop= OMX_FALSE;
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIdleCommandPending = OMX_FALSE;
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOutStandingFillDones = 0;
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Default create phase parameters */
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*pComponentPrivate->frametype = 0;
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      pComponentPrivate->vaumode = 2;
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      pComponentPrivate->vauthreshold = 0;
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      pComponentPrivate->vaunumber = 0;
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      pComponentPrivate->nmunoise = 2;
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      pComponentPrivate->lporder = 5;*/
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* initialize role name */
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy((char*)pComponentPrivate->componentRole.cRole,G711_ENC_ROLE);
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString,
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            100*sizeof(OMX_STRING),
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_STRING);
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize device string to the default value */
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy((char*)pComponentPrivate->sDeviceString,"/eteedn:i0:o0/codec\0");
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize LMCL back up pointer*/
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->ptrLibLCML = NULL;
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL);
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL);
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL);
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL);
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL);
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL);
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewInitalize();
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error returned from loading ResourceManagerProxy thread\n",__LINE__);
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G711ENC_StartComponentThread(pHandle);
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: Error returned from the Component\n",__LINE__);
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((pComponentPrivate->fdwrite=open(FIFO1,O_WRONLY))<0) {
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: [G711E Component] - failure to open WRITE pipe\n",__LINE__);
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((pComponentPrivate->fdread=open(FIFO2,O_RDONLY))<0) {
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: [G711E Component] - failure to open READ pipe\n",__LINE__);
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting OMX_ComponentInit\n", __LINE__);
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetCallbacks() Sets application callbacks to the component
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update application callbacks
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to the component. So that component can make use of those call back
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * while sending buffers to the application. And also it will copy the
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * application private data to component memory
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent    handle for this instance of the component
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pAppData      Application private data
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent,
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR pAppData)
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate =
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering SetCallbacks\n", __LINE__);
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pCallBacks == NULL) {
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Received the empty callbacks from the application\n",__LINE__);
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Copy the callbacks of the application to the component private*/
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*copy the application private data to component memory */
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting SetCallbacks\n", __LINE__);
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetComponentVersion() This will return the component version
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will retrun the component version
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp               handle for this instance of the component
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentName       Name of the component
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentVersion    handle for this instance of the component
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pSpecVersion        application callbacks
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentUUID
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_STRING pComponentName,
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering GetComponentVersion\n", __LINE__);
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Copy component version structure */
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentVersion != NULL && pComponentName != NULL) {
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strcpy(pComponentName, pComponentPrivate->cComponentName);
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorBadParameter from GetComponentVersion",__LINE__);
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting GetComponentVersion\n", __LINE__);
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SendCommand() used to send the commands to the component
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will be used by the application.
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param phandle         handle for this instance of the component
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param Cmd             Command to be sent to the component
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParam          indicates commmad is sent using this method
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle,
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_U32 nParam,
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PTR pCmdData)
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pCompPrivate =
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = 0;
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering SendCommand()\n", __LINE__);
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pCompPrivate->curState == OMX_StateInvalid) {
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error OMX_ErrorInvalidState Sent to App\n",__LINE__);
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(Cmd) {
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandStateSet:
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandStateSet nparam: %d \n",__LINE__,(int)nParam);
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nParam == OMX_StateLoaded) {
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivate->bLoadedCommandPending = OMX_TRUE;
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pCompPrivate->curState == OMX_StateLoaded) {
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) {
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler ( pHandle,
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorIncorrectStateTransition,
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    0,
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nParam == OMX_StateInvalid) {
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G711ENC_DPRINT("%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->curState = OMX_StateInvalid;
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler ( pHandle,
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorInvalidState,
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    0,
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandFlush:
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandFlush SendCommand\n",__LINE__);
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nParam > 1 && nParam != -1) {
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortDisable:
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandPortDisable SendCommand\n",__LINE__);
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortEnable:
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandPortEnable SendCommand\n",__LINE__);
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandMarkBuffer:
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_CommandMarkBuffer SendCommand\n",__LINE__);
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nParam > 0) {
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Command Received Default eError\n",__LINE__);
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler ( pHandle,
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            pHandle->pApplicationPrivate,
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_EventError,
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            OMX_ErrorUndefined,
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            0,
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            "Invalid Command");
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (Cmd == OMX_CommandMarkBuffer) {
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData,sizeof(OMX_PTR));
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &nParam,sizeof(OMX_U32));
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting SendCommand()\n", __LINE__);
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetParameter() Gets the current configurations of the component
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParamIndex
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentParameterStructure
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp,
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure)
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE  *pComponentPrivate = NULL;
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure = NULL;
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure;
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering the GetParameter\n",__LINE__);
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pParameterStructure == NULL) {
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter",__LINE__);
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->curState == OMX_StateInvalid) {
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorIncorrectStateOperation from GetParameter",__LINE__);
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParamIndex){
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioInit:
693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pComponentPrivate->sPortParam == NULL) {
694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioInit \n",__LINE__);
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(ComponentParameterStructure, pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: GetParameter OMX_IndexParamPortDefinition \n",__LINE__);
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nPortIndex) {
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[G711ENC_INPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nPortIndex) {
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nPortIndex) {
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat->nPortIndex) {
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorNoMore;
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nPortIndex){
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat->nPortIndex) {
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorNoMore;
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioG711 \n",__LINE__);
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_PCMMODETYPE *)(ComponentParameterStructure))->nPortIndex ==
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->G711Params[G711ENC_OUTPUT_PORT]->nPortIndex) {
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->G711Params[G711ENC_OUTPUT_PORT], sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_AUDIO_PARAM_PCMMODETYPE *)(ComponentParameterStructure))->nPortIndex ==
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->G711Params[G711ENC_INPUT_PORT]->nPortIndex) {
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->G711Params[G711ENC_INPUT_PORT], sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) {
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT(":: GetParameter OMX_IndexParamCompBufferSupplier \n");
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*  memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) {
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G711ENC_DPRINT(":: GetParameter OMX_IndexParamCompBufferSupplier \n");
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G711ENC_DPRINT(":: OMX_ErrorBadPortIndex from GetParameter");
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: GetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pComponentPrivate->sPriorityMgmt == NULL) {
780b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
781b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
782b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(ComponentParameterStructure, pComponentPrivate->sPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoInit:
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamImageInit:
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamOtherInit:
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorUnsupportedIndex GetParameter \n",__LINE__);
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting GetParameter\n",__LINE__);
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetParameter() Sets configuration paramets to the component
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParamIndex
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompParam
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR pCompParam)
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE  *pComponentPrivate = NULL;
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE* pComponentParam = NULL;
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pComponentParamPort = NULL;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *pCompG711Param = NULL;
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole = NULL;
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering the SetParameter\n",__LINE__);
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pCompParam == NULL) {
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorBadParameter from SetParameter",__LINE__);
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateLoaded) {
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorIncorrectStateOperation from SetParameter",__LINE__);
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParamIndex) {
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentParam = (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pCompParam;
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat->nPortIndex ) {
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[G711ENC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[G711ENC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioG711 \n",__LINE__);
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompG711Param = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam;
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pCompG711Param->nPortIndex == OMX_DirOutput) {
864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (((G711ENC_COMPONENT_PRIVATE *)
865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pHandle->pComponentPrivate)->G711Params[G711ENC_OUTPUT_PORT] == NULL) {
866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorBadParameter;
867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		break;
868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(((G711ENC_COMPONENT_PRIVATE *)
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->G711Params[G711ENC_OUTPUT_PORT], pCompG711Param, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (pCompG711Param->nPortIndex == OMX_DirInput) {
873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (((G711ENC_COMPONENT_PRIVATE *)
874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pHandle->pComponentPrivate)->G711Params[G711ENC_INPUT_PORT] == NULL) {
875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorBadParameter;
876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		break;
877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(((G711ENC_COMPONENT_PRIVATE *)
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->G711Params[G711ENC_INPUT_PORT], pCompG711Param, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentParamPort = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nPortIndex) {
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[G711ENC_INPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("Input Count actual %d \n",(int)pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nBufferCountActual);
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nPortIndex) {
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("Output Count actual %d \n",(int)pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nBufferCountActual);
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
907b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	if (pComponentPrivate->sPriorityMgmt == NULL) {
908b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
910b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentPrivate->sPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioInit:
916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	if (pComponentPrivate->sPortParam == NULL) {
917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    break;
919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioInit \n",__LINE__);
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentPrivate->sPortParam, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE));
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pCompParam) {
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*  eError = OMX_ErrorBadPortIndex; *//*remove for StdAudioDecoderTest, leave for other tests*/
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nPortIndex) {
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT(":: SetParameter OMX_IndexParamCompBufferSupplier \n");
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput;
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nPortIndex) {
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT(":: SetParameter OMX_IndexParamCompBufferSupplier \n");
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput;
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT(":: OMX_ErrorBadPortIndex from SetParameter");
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: SetParameter OMX_ErrorUnsupportedIndex \n",__LINE__);
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting SetParameter\n",__LINE__);
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetConfig() Gets the current configuration of to the component
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nConfigIndex
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentConfigStructure
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering GetConfig\n", __LINE__);
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting GetConfig\n", __LINE__);
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetConfig() Sets the configraiton to the component
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nConfigIndex
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentConfigStructure
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    G711ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DSP_DEFINITION *pTiDspDefinition = NULL;
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_FTYPES *confFrameParams = NULL;
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_S16 *customFlag = NULL;
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering SetConfig\n", __LINE__);
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pHandle == NULL) {
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT ("%d :: Invalid HANDLE OMX_ErrorBadParameter \n",__LINE__);
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1021b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("Index: %x \n",nConfigIndex);
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (nConfigIndex) {
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomG711ENCModeConfig:
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTiDspDefinition = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure;
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(&(pComponentPrivate->tiOmxDspDefinition),pTiDspDefinition,sizeof(TI_OMX_DSP_DEFINITION));
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->dasfMode = pComponentPrivate->tiOmxDspDefinition.dasfMode;
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->acdnMode = pComponentPrivate->tiOmxDspDefinition.acousticMode;
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->streamID= pTiDspDefinition->streamId;
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: dasfMode : %d \n",__LINE__,(int)pComponentPrivate->dasfMode);
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: acdnMode : %d \n",__LINE__,(int)pComponentPrivate->acdnMode);
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: streamID : %d \n",__LINE__,(int)pComponentPrivate->streamID);
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomG711EncFrameParams:
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        confFrameParams = (G711ENC_FTYPES*)ComponentConfigStructure;
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->frametype = confFrameParams->FrameSizeType;
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->vaumode = confFrameParams->VAUMode;
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->vauthreshold = confFrameParams->VAUThresOffset;
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->vaunumber = confFrameParams->VAUNum;
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->nmunoise = confFrameParams->NMUNoise;
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->lporder = confFrameParams->LPOrder;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case  OMX_IndexCustomG711EncDataPath:
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        customFlag = (OMX_S16*)ComponentConfigStructure;
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (customFlag == NULL) {
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: OMX_ErrorBadParameter from SetConfig()  \n",__LINE__);
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        dataPath = *customFlag;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch(dataPath) {
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_APPLICATION:
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_ENCODER, pComponentPrivate->streamID);
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_APPLICATION_RTMIXER:
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING_ENCODER);
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_ACDN:
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_APPLICATION_TEE:
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorUnsupportedIndex.\n",__LINE__);
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting SetConfig\n", __LINE__);
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetState() Gets the current state of the component
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompomponent handle for this instance of the component
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pState
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering GetState\n", __LINE__);
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pState) {
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: OMX_ErrorBadParameter from GetState\n",__LINE__);
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pHandle && pHandle->pComponentPrivate) {
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pState =  ((G711ENC_COMPONENT_PRIVATE*)
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->curState;
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pState = OMX_StateLoaded;
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNone;
1115b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    G711ENC_DPRINT("State = %d \n", (*pState));
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting GetState\n", __LINE__);
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  EmptyThisBuffer() This callback is used to send the input buffer to
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  component
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent       handle for this instance of the component
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nPortIndex       input port index
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBuffer          buffer to be sent to codec
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer)
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = 0;
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate =
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G711ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[G711ENC_INPUT_PORT];
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering EmptyThisBuffer\n", __LINE__);
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer == NULL) {
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pPortDef->bEnabled) {
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorIncorrectStateOperation;
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nInputPortIndex != G711ENC_INPUT_PORT) {
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateExecuting &&
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState != OMX_StatePause) {
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: current state: %d \n ",__LINE__,pComponentPrivate->curState);
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("----------------------------------------------------------------\n");
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Comp Sending Filled ip buff = %p to CompThread\n",__LINE__,pBuffer);
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("----------------------------------------------------------------\n");
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkData = pBuffer->pMarkData;
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent;
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers++;
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof(OMX_BUFFERHEADERTYPE*));
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ret == -1) {
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_PRINT("%d :: Error in Writing to the Data pipe\n", __LINE__);
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount++;
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting EmptyThisBuffer\n", __LINE__);
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  FillThisBuffer() This callback is used to send the output buffer to
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  the component
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent    handle for this instance of the component
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nPortIndex    output port number
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBuffer       buffer to be sent to codec
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent,
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer)
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = 0;
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate =
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G711ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G711ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[G711ENC_OUTPUT_PORT];
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering FillThisBuffer\n", __LINE__);
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("------------------------------------------------------------------\n");
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Comp Sending Emptied op buff = %p to CompThread\n",__LINE__,pBuffer);
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("------------------------------------------------------------------\n");
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer == NULL) {
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT(" %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT(" %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pPortDef->bEnabled) {
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorIncorrectStateOperation;
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT(" %d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer->nOutputPortIndex != G711ENC_OUTPUT_PORT) {
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT(" %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting &&
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       pComponentPrivate->curState != OMX_StatePause) {
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*pBuffer->nFilledLen = 0;
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      memset(pBuffer->pBuffer, 0, pBuffer->nAllocLen);*/
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->app_nBuf--;
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->pMarkBuf != NULL){
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent;
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData;
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkBuf = NULL;
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pMarkData != NULL) {
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkData;
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers++;
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof (OMX_BUFFERHEADERTYPE*));
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ret == -1) {
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error in Writing to the Data pipe\n", __LINE__);
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nFillThisBufferCount++;
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting FillThisBuffer\n", __LINE__);
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ComponentDeinit() this methold will de init the component
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
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 ComponentDeInit(OMX_HANDLETYPE pHandle)
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate =
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G711ENC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate;
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering ComponentDeInit\n", __LINE__);
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    close(pComponentPrivate->fdwrite);
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    close(pComponentPrivate->fdread);
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource,
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_G711_Encoder_COMPONENT,
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    0, 1234, NULL);
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT ("%d ::Error returned from destroy ResourceManagerProxy thread\n",
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        __LINE__);
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_Deinitalize();
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error from RMProxy_Deinitalize\n",__LINE__);
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsThreadstop = 1;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G711ENC_StopComponentThread(pHandle);
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error from G711ENC_StopComponentThread\n",__LINE__);
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Wait for thread to exit so we can get the status into "eError" */
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* close the pipe handles */
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G711ENC_FreeCompResources(pHandle);
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Error from G711ENC_FreeCompResources\n",__LINE__);
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_MEMFREE_STRUCT(pComponentPrivate->sDeviceString);
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_G711ENC_MEMFREE_STRUCT(pComponentPrivate);
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting ComponentDeInit\n", __LINE__);
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  ComponentTunnelRequest() this method is not implemented in 1.5
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update application callbacks
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application.
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup)
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering ComponentTunnelRequest\n", __LINE__);
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting ComponentTunnelRequest\n", __LINE__);
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  AllocateBuffer()
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes)
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G711ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering AllocateBuffer\n", __LINE__);
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: pPortDef = %p\n", __LINE__,pPortDef);
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!pPortDef->bEnabled){
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->AlloBuf_waitingsignal = 1;
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold,
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          &pComponentPrivate->AlloBuf_mutex);
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event));
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled);
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pBufferHeader, OMX_BUFFERHEADERTYPE);
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_SIZE(pBufferHeader->pBuffer,
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            (nSizeBytes + DSP_CACHE_ALIGNMENT),
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_U8);
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pBuffer += EXTRA_BYTES;
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == G711ENC_INPUT_PORT) {
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1;
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d ::Comparing INPUT numBuffers : pPortDef->nBufferCountActual  = %d : %d \n",__LINE__,
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       (int)pComponentPrivate->pInputBufferList->numBuffers,(int)pPortDef->nBufferCountActual);
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (nPortIndex == G711ENC_OUTPUT_PORT) {
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1;
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Comparing OUTPUT numBuffers : pPortDef->nBufferCountActual  = %d : %d \n",__LINE__,
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       (int)pComponentPrivate->pOutputBufferList->numBuffers,(int)pPortDef->nBufferCountActual);
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT(" %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bPopulated ==
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bEnabled) &&
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bPopulated ==
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bEnabled) &&
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle)){
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = G711ENC_MAJOR_VER;
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = G711ENC_MINOR_VER;
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *pBuffer = pBufferHeader;
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) {
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     OMX_CommandPortEnable,
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->nEnableCommandParam,
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     NULL);
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting AllocateBuffer\n",__LINE__);
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  FreeBuffer()
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComponent   handle for this instance of the component
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks   application callbacks
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* buff = NULL;
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* tempBuff = NULL;
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int inputIndex = -1;
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int outputIndex = -1;
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering FreeBuffer\n", __LINE__);
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < G711ENC_MAX_NUM_OF_BUFS; i++) {
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pInputBufferList->pBufHdr[i];
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: Found matching input buffer\n",__LINE__);
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            inputIndex = i;
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: This is not a match\n",__LINE__);
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < G711ENC_MAX_NUM_OF_BUFS; i++) {
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: Found matching output buffer\n",__LINE__);
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            outputIndex = i;
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: This is not a match\n",__LINE__);
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (inputIndex != -1) {
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) {
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tempBuff = pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer;
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (tempBuff != 0){
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                tempBuff -= EXTRA_BYTES;
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_G711ENC_MEMFREE_STRUCT(tempBuff);
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G711ENC_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->numBuffers--;
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: pComponentPrivate->pInputBufferList->numBuffers = %ld \n",__LINE__,pComponentPrivate->pInputBufferList->numBuffers);
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nBufferCountMin = %ld \n",__LINE__,pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nBufferCountMin);
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers <
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->nBufferCountMin) {
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bPopulated = OMX_FALSE;
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bEnabled &&
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pPortDef[G711ENC_INPUT_PORT]->bPopulated = %d \n",
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           __LINE__,
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bPopulated);
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("%d :: pComponentPrivate->curState = %d \n",
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           __LINE__,
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->curState);
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler( pHandle,
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorPortUnpopulated,
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    nPortIndex,
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (outputIndex != -1) {
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) {
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tempBuff = pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer;
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (tempBuff != 0){
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                tempBuff -= EXTRA_BYTES;
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_G711ENC_MEMFREE_STRUCT(tempBuff);
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G711ENC_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->numBuffers--;
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("\n%d :: pComponentPrivate->pOutputBufferList->numBuffers = %ld \n",
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__,
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pOutputBufferList->numBuffers);
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("\n%d :: pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferCountMin = %ld \n",
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__,
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nBufferCountMin);
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers <
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->nBufferCountMin) {
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bPopulated = OMX_FALSE;
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bEnabled &&
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("\n%d :: pPortDef[G711ENC_OUTPUT_PORT]->bPopulated = %d \n",
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           __LINE__,
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bPopulated);
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G711ENC_DPRINT("\n%d :: pComponentPrivate->curState = %d \n",
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           __LINE__,
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->curState);
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler( pHandle,
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorPortUnpopulated,
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    nPortIndex,
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: Returning OMX_ErrorBadParameter\n",__LINE__);
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((!pComponentPrivate->pInputBufferList->numBuffers &&
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         !pComponentPrivate->pOutputBufferList->numBuffers) &&
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded){
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded = 0;
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InIdle_threshold);
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InIdle_event));
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bDisableCommandPending &&
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->pInputBufferList->numBuffers +
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pOutputBufferList->numBuffers == 0)) {
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     OMX_CommandPortDisable,
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->bDisableCommandParam,
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     NULL);
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting FreeBuffer\n", __LINE__);
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  UseBuffer()
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer)
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G711ENC_COMPONENT_PRIVATE *)
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G711ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Entering UseBuffer\n", __LINE__);
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: pPortDef->bPopulated = %d \n",__LINE__,pPortDef->bPopulated);
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nSizeBytes != pPortDef->nBufferSize || pPortDef->bPopulated) {
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_OMX_MALLOC_STRUCT(pBufferHeader, OMX_BUFFERHEADERTYPE);
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == G711ENC_OUTPUT_PORT) {
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0;
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0;
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bPopulated ==
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pPortDef[G711ENC_OUTPUT_PORT]->bEnabled)&&
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bPopulated ==
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pPortDef[G711ENC_INPUT_PORT]->bEnabled) &&
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle)){
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = G711ENC_MAJOR_VER;
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = G711ENC_MINOR_VER;
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pBuffer = pBuffer;
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *ppBufferHdr = pBufferHeader;
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Exiting UseBuffer\n", __LINE__);
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn GetExtensionIndex() description for GetExtensionIndex
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin GetExtensionIndex().
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Returns index for vendor specific settings.
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex( OMX_IN  OMX_HANDLETYPE hComponent,
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_IN  OMX_STRING cParameterName,
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_OUT OMX_INDEXTYPE* pIndexType)
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("GetExtensionIndex\n");
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!(strcmp(cParameterName,"OMX.TI.index.config.tispecific"))) {
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomG711ENCModeConfig;
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("OMX_IndexCustomG711ENCModeConfig\n");
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.g711.datapath"))) {
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomG711EncDataPath;
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G711ENC_DPRINT("OMX_IndexCustomG711EncDataPath\n");
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!strcmp(cParameterName,"OMX.TI.index.config.g711.frameparamters")){
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pIndexType = OMX_IndexCustomG711EncFrameParams;
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("pIndexType %x \n",*pIndexType);
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G711ENC_DPRINT("Exiting GetExtensionIndex\n");
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn ComponentRoleEnum() description for ComponentRoleEnum()
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Returns the role at the given index
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum( OMX_IN OMX_HANDLETYPE hComponent,
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_OUT OMX_U8 *cRole,
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_IN OMX_U32 nIndex)
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1858