1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  you may not use this file except in compliance with the License.
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  You may obtain a copy of the License at
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  See the License for the specific language governing permissions and
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * limitations under the License.
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* =============================================================================
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *             Texas Instruments OMAP (TM) Platform Software
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Use of this software is controlled by the terms and conditions found
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  in the license agreement under which this software has been supplied.
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @file G729Enc_Test.c
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements G729 Encoder Component Test Application to verify
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * which is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g729_enc\tests
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev  1.0
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *!
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! ===================================
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 21-sept-2006 bk: updated review findings for alpha release
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 21-Jun-2006 bk: Khronos OpenMAX (TM) 1.0 migration done
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 22-May-2006 bk: DASF recording quality improved
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 19-Apr-2006 bk: DASF recording speed issue resloved
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 23-Feb-2006 bk: DASF functionality added
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 18-Jan-2006 bk: Repated recording issue fixed and LCML changes taken care
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 14-Dec-2005 bk: Initial Version
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 16-Nov-2005 bk: Initial Version
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 23-Sept-2005 bk: Initial Version
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 10-Sept-2005 bk: Initial Version
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 10-Sept-2005 bk:
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! This is newest file
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  INCLUDE FILES
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <linux/vt.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <linux/soundcard.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Index.h>
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Types.h>
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Core.h>
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Audio.h>
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <TIDspOmx.h>
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Common_Utils.h>
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_GetTime.h>     /*Headers for Performance & measuremet    */
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinFILE *fpRes = NULL;
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729ENC_INPUT_BUFFER_SIZE        Default input buffer size
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *              G729ENC_INPUT_BUFFER_SIZE_DASF  Default input buffer size DASF
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_INPUT_BUFFER_SIZE 160
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_INPUT_BUFFER_SIZE_DASF 160
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729ENC_OUTPUT_BUFFER_SIZE   Default output buffer size
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_OUTPUT_BUFFER_SIZE 66
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729ENC_APP_ID  App ID Value setting
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729ENC_APP_ID 100
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SLEEP_TIME 5
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729ENC_HEADER_LEN 2
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729_NO_TX_FRAME_TYPE   0                /* No Data: 0 bytes */
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729_SPEECH_FRAME_TYPE  1                /* Speech: 10 bytes */
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729_SID_FRAME_TYPE             2                /* SID: 2 bytes */
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729_ERASURE_FRAME_TYPE 3                /* Erasure frame */
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define BIT_0 0x007f
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define BIT_1 0x0081
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#undef APP_DEBUG
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#undef APP_MEMCHECK
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#undef USE_BUFFER
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define STRESS_TEST_ITERATIONS 20
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef APP_DEBUG
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define APP_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define APP_DPRINT(...)
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef APP_MEMCHECK
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define APP_MEMPRINT(...)    fprintf(stderr,__VA_ARGS__)
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define APP_MEMPRINT(...)
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE eError = OMX_ErrorNone;
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint GT_FlagE = 0;  /* Fill Buffer 1 = First Buffer,  0 = Not First Buffer  */
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint GT_FlagF = 0;  /*Empty Buffer  1 = First Buffer,  0 = Not First Buffer  */
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_NODE* pListHead = NULL;
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef struct AUDIO_INFO {
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 efrMode;
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 g729Mode;
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 acdnMode;
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 dasfMode;
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 mimeMode;
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBufs;
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nOpBufs;
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nMFrameMode;
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} AUDIO_INFO;
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_G729APP_CONF_INIT_STRUCT(_s_, _name_)   \
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset((_s_), 0x0, sizeof(_name_));             \
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (_s_)->nSize = sizeof(_name_);                  \
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (_s_)->nVersion.s.nVersionMajor = 0x1;          \
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (_s_)->nVersion.s.nVersionMinor = 0x1;          \
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (_s_)->nVersion.s.nRevision = 0x0;              \
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    (_s_)->nVersion.s.nStep = 0x0
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_G729APP_INIT_STRUCT(_s_, _name_)    \
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset((_s_), 0x0, sizeof(_name_)); \
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define OMX_G729APP_MALLOC_STRUCT(_pStruct_, _sName_)                   \
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    _pStruct_ = (_sName_*)malloc(sizeof(_sName_));                      \
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(_pStruct_ == NULL){                                              \
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("***********************************\n");                \
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: Malloc Failed\n",__LINE__);                       \
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("***********************************\n");                \
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;                        \
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;                                                      \
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }                                                                   \
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: ALLOCATING MEMORY = %p\n",__LINE__,_pStruct_);
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** G729APP_COMP_PORT_TYPE  Port types
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @param  G729APP_INPUT_PORT                  Input port
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @param  G729APP_OUTPUT_PORT                 Output port
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*  ====================================================================== */
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*This enum must not be changed. */
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavintypedef enum G729APP_COMP_PORT_TYPE {
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G729APP_INPUT_PORT = 0,
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G729APP_OUTPUT_PORT
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}G729APP_COMP_PORT_TYPE;
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729APP_MAX_NUM_OF_BUFS         Maximum number of buffers
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729APP_NUM_OF_CHANNELS                 Number of Channels
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @def G729APP_SAMPLING_FREQUENCY    Sampling frequency
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ======================================================================= */
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_MAX_NUM_OF_BUFS 10
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_NUM_OF_CHANNELS 1
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G729APP_SAMPLING_FREQUENCY 8000
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint maxint(int a, int b);
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint inputPortDisabled = 0;
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint outputPortDisabled = 0;
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_STRING strG729Encoder = "OMX.TI.G729.encode";
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint IpBuf_Pipe[2] = {0};
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint OpBuf_Pipe[2] = {0};
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinfd_set rfds;
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint done = 0;
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint doneWriting = 0;
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint tcID = 0;
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_BOOL bExitOnError = OMX_TRUE;
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint ebd = 0;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fbd = 0;
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid writeITUFormat(OMX_U8* buffer, OMX_U32 length, FILE* fOut) ;
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef USE_BUFFER
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE FreeResources(OMX_AUDIO_PARAM_G729TYPE* pG729Param,
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct,
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            AUDIO_INFO* audioinfo,
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_U8* pInputBuffer[G729APP_MAX_NUM_OF_BUFS],
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_U8* pOutputBuffer[G729APP_MAX_NUM_OF_BUFS]);
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE FreeResources(OMX_AUDIO_PARAM_G729TYPE* pG729Param,
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct,
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            AUDIO_INFO* audioinfo,
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pInputBufferHeader[G729APP_MAX_NUM_OF_BUFS],
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pOutputBufferHeader[G729APP_MAX_NUM_OF_BUFS],
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_HANDLETYPE pHandle);
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* safe routine to get the maximum of 2 integers */
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint maxint(int a, int b)
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return (a>b) ? a : b;
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* This method will wait for the component to get to the state
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * specified by the DesiredState input. */
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForState(OMX_HANDLETYPE* pHandle,
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_STATETYPE DesiredState)
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE CurState = OMX_StateInvalid;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nCnt = 0;
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pComponent->GetState(pHandle, &CurState);
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: App: Error returned from GetState\n",__LINE__);
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while( (eError == OMX_ErrorNone) && (CurState != DesiredState) ) {
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sleep(2);
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nCnt++ == 10) {
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: Still Waiting, press CTL-C to continue\n",__LINE__);
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = pComponent->GetState(pHandle, &CurState);
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: App: Error returned from GetState\n",__LINE__);
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE EventHandler(
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_HANDLETYPE hComponent,
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_PTR pAppData,
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_EVENTTYPE eEvent,
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_U32 nData1,
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_U32 nData2,
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           OMX_PTR pEventData)
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT( "%d :: App: Entering EventHandler \n", __LINE__);
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)hComponent;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE state = OMX_StateInvalid;
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pComponent->GetState (hComponent, &state);
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: App: Error returned from GetState\n",__LINE__);
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT( "%d :: App: Component eEvent = %d\n", __LINE__,eEvent);
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (eEvent) {
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component State Changed To %d\n", __LINE__,state);
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventCmdComplete:
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component State Changed To %d\n", __LINE__,state);
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nData1 == OMX_CommandPortDisable) {
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nData2 == G729APP_INPUT_PORT) {
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                inputPortDisabled = 1;
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nData2 == G729APP_OUTPUT_PORT) {
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                outputPortDisabled = 1;
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventError:
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventMax:
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component OMX_EventMax = %d\n", __LINE__,eEvent);
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventMark:
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component OMX_EventMark = %d\n", __LINE__,eEvent);
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventPortSettingsChanged:
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component OMX_EventPortSettingsChanged = %d\n", __LINE__,eEvent);
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventBufferFlag:
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component OMX_EventBufferFlag = %d\n", __LINE__,eEvent);
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_EventResourcesAcquired:
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT( "%d :: App: Component OMX_EventResourcesAcquired = %d\n", __LINE__,eEvent);
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_DPRINT( "%d :: App: Exiting EventHandler \n", __LINE__);
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer)
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    write(OpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fbd++;
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (GT_FlagF == 1 ) /* First Buffer Reply*/  /* 1 = First Buffer,  0 = Not First Buffer  */
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Call to FillBufferDone  <First: FillBufferDone>");
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_FlagF = 0 ;   /* 1 = First Buffer,  0 = Not First Buffer  */
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid EmptyBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer)
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    write(IpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ebd++;
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (GT_FlagE == 1 ) /* First Buffer Reply*/  /* 1 = First Buffer,  0 = Not First Buffer  */
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Call to EmptyBufferDone <First: EmptyBufferDone>");
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_FlagE = 0;   /* 1 = First Buffer,  0 = Not First Buffer  */
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint main(int argc, char* argv[])
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CALLBACKTYPE G729CaBa = {(void *)EventHandler,
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 (void*)EmptyBufferDone,
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 (void*)FillBufferDone};
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle;
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 AppData = G729ENC_APP_ID;
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct = NULL;
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_G729TYPE *pG729Param = NULL;
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = NULL;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE state = OMX_StateInvalid;
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pInputBufferHeader[G729APP_MAX_NUM_OF_BUFS] = {NULL};
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pOutputBufferHeader[G729APP_MAX_NUM_OF_BUFS] = {NULL};
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef USE_BUFFER
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pInputBuffer[G729APP_MAX_NUM_OF_BUFS] = {NULL};
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pOutputBuffer[G729APP_MAX_NUM_OF_BUFS] = {NULL};
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    AUDIO_INFO* audioinfo = NULL;
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DSP_DEFINITION tiOmxDspDefinition;
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fIn = NULL;
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    FILE* fOut = NULL;
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timeval tv;
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int retval = 0, i = 0, j = 0, k = 0, kk = 0;
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int frmCount = 0;
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int frmCnt = 1;
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int testcnt = 0;
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int testcnt1 = 0;
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int status = 0;
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax = 0;
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRead = 0;
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nFrameCount = 1;
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nFrameLen = 0;
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIpBuff = 1;
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nOutBuff = 1;
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_INDEXTYPE index = 0;
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int frameLengthInBytes = 0;
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int frameType = 0;
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int framesPerBuffer=1;
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int g729encfdwrite = 0;
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int g729encfdread = 0;
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("------------------------------------------------------\n");
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("This is Main Thread In G729 ENCODER Test Application:\n");
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("Test Core 1.5 - " __DATE__ ":" __TIME__ "\n");
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("------------------------------------------------------\n");
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    GTeError = OMX_ListCreate(&pListHead);
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("eError = %d\n",GTeError);
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    GT_START();
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    bExitOnError = OMX_FALSE;
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((g729encfdwrite=open(FIFO1,O_WRONLY))<0) {
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[G729TEST] - failure to open WRITE pipe\n");
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[G729TEST] - opened WRITE pipe\n");
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((g729encfdread=open(FIFO2,O_RDONLY))<0) {
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[G729TEST] - failure to open READ pipe\n");
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[G729TEST] - opened READ pipe\n");
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* check the input parameters */
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(argc != 11) {
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: Usage: [TestApp] [O/P] [FUNC_ID_X] [FM/DM]   [DTXON/OFF] [ACDNON/OFF] [FRAMES] [1 to N] [1 to N] [MFON]\n",__LINE__);
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* check to see that the input file exists */
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct stat sb = {0};
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    status = stat(argv[1], &sb);
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( status != 0 ) {
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("Cannot find file %s. (%u)\n", argv[1], errno);
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Open the file of data to be encoded. */
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fIn = fopen(argv[1], "r");
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( fIn == NULL ) {
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("Error:  failed to open the input file %s\n", argv[1]);
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Open the file of data to be written. */
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fOut = fopen(argv[2], "w");
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if( fOut == NULL ) {
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("Error:  failed to open the output file %s\n", argv[2]);
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!strcmp(argv[3],"FUNC_ID_0")) {
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 1 PLAY TILL END ###\n",__LINE__);
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 1;
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 0;
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!strcmp(argv[3],"FUNC_ID_1")) {
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 1 PLAY TILL END ###\n",__LINE__);
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 1;
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 1;
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!strcmp(argv[3],"FUNC_ID_2")) {
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 2 STOP IN THE END ###\n",__LINE__);
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 1;
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 2;
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!strcmp(argv[3],"FUNC_ID_3")) {
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 3 PAUSE - RESUME IN BETWEEN ###\n",__LINE__);
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 1;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 3;
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!strcmp(argv[3],"FUNC_ID_4")) {
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 4 STOP IN BETWEEN ###\n",__LINE__);
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 2;
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 4;
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("######## testcnt = %d #########\n",testcnt);
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!strcmp(argv[3],"FUNC_ID_5")){
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 5 ENCODE without Deleting component Here ###\n",__LINE__);
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = STRESS_TEST_ITERATIONS;
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = 1;
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 5;
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!strcmp(argv[3],"FUNC_ID_6")) {
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: ### Testing TESTCASE 6 ENCODE with Deleting component Here ###\n",__LINE__);
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt = 1;
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        testcnt1 = STRESS_TEST_ITERATIONS;
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tcID = 6;
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = TIOMX_Init();
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error returned by OMX_Init()\n",__LINE__);
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(j = 0; j < testcnt1; j++) {
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Create a pipe used to queue data from the callback. */
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        retval = pipe(IpBuf_Pipe);
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( retval != 0) {
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Error:Fill Data Pipe failed to open\n");
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        retval = pipe(OpBuf_Pipe);
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( retval != 0) {
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Error:Empty Data Pipe failed to open\n");
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* save off the "max" of the handles for the selct statement */
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fdmax = maxint(IpBuf_Pipe[0], OpBuf_Pipe[0]);
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(j > 0) {
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf ("%d :: Encoding the file for %d Time in TESTCASE 6\n",__LINE__,j+1);
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fIn = fopen(argv[1], "r");
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if( fIn == NULL ) {
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf(stderr, "Error:  failed to open the file %s for read only access\n",argv[1]);
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fOut = fopen("TC6_G7291.g729", "w");
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if( fOut == NULL ) {
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fprintf(stderr, "Error:  failed to create the output file %s\n",argv[2]);
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Load the G729 Encoder Component */
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_GetHandle(&pHandle, strG729Encoder, &AppData, &G729CaBa);
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Call to GetHandle");
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = TIOMX_GetHandle(&pHandle, strG729Encoder, &AppData, &G729CaBa);
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((eError != OMX_ErrorNone) || (pHandle == NULL)) {
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Error in Get Handle function\n");
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_MALLOC_STRUCT(audioinfo, AUDIO_INFO);
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_INIT_STRUCT(audioinfo, AUDIO_INFO);
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Setting No.Of Input and Output Buffers for the Component */
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(atoi(argv[8]) <1 || atoi(argv[8]) > 4)
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Please enter a valid number of buffers between 1 and 4\n");
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = 1;
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->nIpBufs = atoi(argv[8]);
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->nIpBufs = %ld \n",__LINE__,audioinfo->nIpBufs);
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(atoi(argv[9]) <1 || atoi(argv[9]) > 4)
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Please enter a valid number of buffers between 1 and 4\n");
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = 1;
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->nOpBufs = atoi(argv[9]);
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->nOpBufs = %ld \n",__LINE__,audioinfo->nOpBufs);
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(atoi(argv[10]) <1 || atoi(argv[10]) > 8)
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Please enter a valid number of frames per buffer between 1 and 8\n");
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = 1;
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            framesPerBuffer = atoi(argv[10]);
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_MALLOC_STRUCT(pCompPrivateStruct, OMX_PARAM_PORTDEFINITIONTYPE);
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_CONF_INIT_STRUCT(pCompPrivateStruct, OMX_PARAM_PORTDEFINITIONTYPE);
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_MALLOC_STRUCT(pG729Param, OMX_AUDIO_PARAM_G729TYPE);
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G729APP_CONF_INIT_STRUCT(pG729Param, OMX_AUDIO_PARAM_G729TYPE);
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Setting input port config\n",__LINE__);
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nSize                                                          = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMajor           = 0xF1;
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMinor               = 0xF2;
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex                         = G729APP_INPUT_PORT;
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDir                               = OMX_DirInput;
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountActual                 = audioinfo->nIpBufs;
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountMin                    = audioinfo->nIpBufs;
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferSize                        = G729APP_INPUT_BUFFER_SIZE*framesPerBuffer;
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bEnabled                           = OMX_TRUE;
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bPopulated                         = OMX_FALSE;
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDomain                            = OMX_PortDomainAudio;
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.eEncoding             = OMX_AUDIO_CodingG729;
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.cMIMEType             = NULL;
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.pNativeRender         = NULL;
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.bFlagErrorConcealment = OMX_FALSE;    /*Send input port config*/
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Setting input port config\n",__LINE__);
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!(strcmp(argv[4],"FM"))) {
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->dasfMode = 0;
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tiOmxDspDefinition.dasfMode = OMX_FALSE;
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->dasfMode = %ld \n",__LINE__,audioinfo->dasfMode);
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(!(strcmp(argv[4],"DM"))){
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->dasfMode = 1;
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tiOmxDspDefinition.dasfMode = OMX_TRUE;
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->dasfMode = %ld \n",__LINE__,audioinfo->dasfMode);
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER DASF MODE \n",__LINE__);
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct->nBufferCountActual = 0;
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("\n%d :: App: audioinfo->dasfMode Sending Bad Parameter\n",__LINE__);
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: Should Be One of these Modes FM, DM\n",__LINE__);
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(audioinfo->dasfMode == 0) {
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((atoi(argv[7])) != 0) {
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("\n%d :: App: No. of Frames Sending Bad Parameter\n",__LINE__);
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: App: For FILE mode argv[7] Should Be --> 0\n",__LINE__);
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: App: For DASF mode argv[7] Should be greater than zero depends on number of frames user want to encode\n",__LINE__);
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((atoi(argv[7])) == 0) {
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("\n%d :: App: No. of Frames Sending Bad Parameter\n",__LINE__);
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: App: For DASF mode argv[7] Should be greater than zero depends on number of frames user want to encode\n",__LINE__);
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: App: For FILE mode argv[7] Should Be --> 0\n",__LINE__);
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!(strcmp(argv[6],"ACDNOFF"))) {
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->acdnMode = 0;
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tiOmxDspDefinition.acousticMode = OMX_FALSE;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->acdnMode = %ld \n",__LINE__,audioinfo->acdnMode);
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(!(strcmp(argv[6],"ACDNON"))) {
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo->acdnMode = 1;
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            tiOmxDspDefinition.acousticMode = OMX_TRUE;
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("\n%d :: App: audioinfo->acdnMode = %ld \n",__LINE__,audioinfo->acdnMode);
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("\n%d :: App: audioinfo->acdnMode Sending Bad Parameter\n",__LINE__);
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: Should Be One of these Modes ACDNON, ACDNOFF\n",__LINE__);
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Set Parameter Test-SetParameter");
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: OMX_ErrorBadParameter\n",__LINE__);
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: Setting output port config\n",__LINE__);
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nSize                                                          = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMajor           = 0x1;
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nVersion.s.nVersionMinor               = 0x1;
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nPortIndex                         = G729APP_OUTPUT_PORT;
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDir                               = OMX_DirOutput;
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountActual                 = audioinfo->nOpBufs;
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferCountMin                    = audioinfo->nOpBufs;
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->nBufferSize                        = G729APP_OUTPUT_BUFFER_SIZE;
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bEnabled                           = OMX_TRUE;
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->bPopulated                         = OMX_FALSE;
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->eDomain                            = OMX_PortDomainAudio;
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.eEncoding             = OMX_AUDIO_CodingG729;
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.cMIMEType             = NULL;
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.pNativeRender         = NULL;
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct->format.audio.bFlagErrorConcealment = OMX_FALSE;    /*Send input port config*/
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Set Parameter Test-SetParameter");
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: OMX_ErrorBadParameter\n",__LINE__);
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param->nSize                    = sizeof(OMX_AUDIO_PARAM_G729TYPE);
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param->nVersion.s.nVersionMajor = 0x1;
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param->nVersion.s.nVersionMinor = 0x1;
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param->nPortIndex               = G729APP_OUTPUT_PORT;
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param->nChannels                = G729APP_NUM_OF_CHANNELS;
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*        APP_DPRINT("\n%d :: App: pG729Param->eG729BandMode --> %d \n",__LINE__,pG729Param->eG729BandMode); */
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!(strcmp(argv[5],"DTXON"))) {
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /**< G729 Discontinuous Transmission Mode is enabled  */
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*            APP_DPRINT("\n%d :: App: pG729Param->eARMDTXMode --> %s \n",__LINE__,argv[5]); */
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pG729Param->bDTX = OMX_TRUE;
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(!(strcmp(argv[5],"DTXOFF"))) {
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pG729Param->bDTX = OMX_FALSE;
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /**< G729 Discontinuous Transmission Mode is disabled */
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("\n%d :: App: pG729Param->eARMDTXMode Sending Bad Parameter\n",__LINE__);
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: Should Be One of these Modes DTXON, DTXOFF\n",__LINE__);
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioG729, pG729Param);
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Set Parameter Test-SetParameter");
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioG729, pG729Param);
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: OMX_ErrorBadParameter\n",__LINE__);
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef USE_BUFFER
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: About to call OMX_AllocateBuffer\n",__LINE__);
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i = 0; i < audioinfo->nIpBufs; i++) {
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* allocate input buffer */
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: About to call OMX_AllocateBuffer for pInputBufferHeader[%d]\n",__LINE__, i);
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_AllocateBuffer(pHandle, &pInputBufferHeader[i], 0, NULL, G729APP_INPUT_BUFFER_SIZE*framesPerBuffer);
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Error returned by OMX_AllocateBuffer for pInputBufferHeader[%d]\n",__LINE__, i);
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("\n%d :: App: pCompPrivateStruct->nBufferSize --> %ld \n",__LINE__,pCompPrivateStruct->nBufferSize);
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i = 0; i < audioinfo->nOpBufs; i++) {
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* allocate output buffer */
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: About to call OMX_AllocateBuffer for pOutputBufferHeader[%d]\n",__LINE__, i);
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_AllocateBuffer(pHandle, &pOutputBufferHeader[i], 1, NULL, pCompPrivateStruct->nBufferSize);
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Error returned by OMX_AllocateBuffer for pOutputBufferHeader[%d]\n",__LINE__, i);
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i = 0; i < audioinfo->nIpBufs; i++) {
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInputBuffer[i] = (OMX_U8*)malloc(G729APP_INPUT_BUFFER_SIZE*framesPerBuffer);
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInputBuffer[i] += 128;
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_MEMPRINT("%d :: [TESTAPP ALLOC] pInputBuffer[%d] = %p\n",__LINE__,i,pInputBuffer[i]);
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(NULL == pInputBuffer[i]) {
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Malloc Failed\n",__LINE__);
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorInsufficientResources;
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*  allocate input buffer */
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: About to call OMX_UseBuffer\n",__LINE__);
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_UseBuffer(pHandle, &pInputBufferHeader[i], 0, NULL, G729APP_INPUT_BUFFER_SIZE*framesPerBuffer, pInputBuffer[i]);
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Error returned by OMX_UseBuffer()\n",__LINE__);
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i = 0; i < audioinfo->nOpBufs; i++) {
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pOutputBuffer[i] = malloc (pCompPrivateStruct->nBufferSize + 256);
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_MEMPRINT("%d :: [TESTAPP ALLOC] pOutputBuffer[%d] = %p\n",__LINE__,i,pOutputBuffer[i]);
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(NULL == pOutputBuffer[i]) {
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Malloc Failed\n",__LINE__);
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorInsufficientResources;
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pOutputBuffer[i] = pOutputBuffer[i] + 128;
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* allocate output buffer */
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: About to call OMX_UseBuffer\n",__LINE__);
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_UseBuffer(pHandle, &pOutputBufferHeader[i], 1, NULL, pCompPrivateStruct->nBufferSize, pOutputBuffer[i]);
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Error returned by OMX_UseBuffer()\n",__LINE__);
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.index.config.tispecific",&index);
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Error returned from OMX_GetExtensionIndex\n");
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cmd_data.hComponent = pHandle;
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cmd_data.AM_Cmd = AM_CommandIsInputStreamAvailable;
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cmd_data.param1 = 0;
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((write(g729encfdwrite, &cmd_data, sizeof(cmd_data)))<0) {
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((read(g729encfdread, &cmd_data, sizeof(cmd_data)))<0) {
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tiOmxDspDefinition.streamId = cmd_data.streamID;
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetConfig (pHandle, index, &tiOmxDspDefinition);
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: Error from OMX_SetConfig() function\n",__LINE__);
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (tiOmxDspDefinition.dasfMode) {
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RTM_PATH
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            dataPath = DATAPATH_APPLICATION_RTMIXER;
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef ETEEDN_PATH
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            dataPath = DATAPATH_APPLICATION;
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.index.config.g729.datapath",&index);
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("Error getting extension index\n");
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SetConfig (pHandle, index, &dataPath);
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("Error from SendCommand-Idle(Init) State function\n");
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Wait for startup to complete */
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = WaitForState(pHandle, OMX_StateIdle);
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Call to SendCommand <OMX_StateIdle>");
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT( "Error:  hG729Encoder->WaitForState reports an eError %X\n", eError);
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i = 0; i < testcnt; i++) {
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            frmCnt = 1;
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nFrameCount = 1;
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nOutBuff = 1;
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nIpBuff  = 1;
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(i > 0) {
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: Encoding the file for %d Time in TESTCASE 5 OR TESTCSE 4\n",__LINE__,i+1);
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fIn = fopen(argv[1], "r");
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(fIn == NULL) {
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr, "Error:  failed to open the file %s for readonly access\n", argv[1]);
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    bExitOnError = OMX_TRUE;
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                fOut = fopen("TC5_G7291.g729", "w");
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(fOut == NULL) {
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    fprintf(stderr, "Error:  failed to create the output file %s\n", argv[2]);
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    bExitOnError = OMX_TRUE;
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            done = 0;
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: Sending OMX_StateExecuting Command\n",__LINE__);
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            GT_START();
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("Error from SendCommand-Executing State function\n");
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = WaitForState(pHandle, OMX_StateExecuting);
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            GT_END("Call to SendCommand <OMX_StateExecuting>");
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT( "Error:  hG729Encoder->WaitForState reports an eError %X\n", eError);
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(audioinfo->dasfMode == 1) {
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("%d :: App: No.of Frames Encoding = %d\n",__LINE__, atoi(argv[7]));
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponent = (OMX_COMPONENTTYPE *)pHandle;
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(audioinfo->dasfMode == 0) {
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (k=0; k < audioinfo->nIpBufs; k++) {
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_BUFFERHEADERTYPE* pBuffer = pInputBufferHeader[k];
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nRead = fread(pBuffer->pBuffer, 1, pBuffer->nAllocLen, fIn);
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: App :: Reading InputBuffer = %d from the input file nRead = %d\n",__LINE__,nIpBuff,nRead);
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffer->nFilledLen = nRead;
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffer->nTimeStamp = (OMX_S64)rand() % 70;
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffer->nTickCount = rand() % 70;
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if((nRead == 0) && (done == 0)) {
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf("%d :: Sending Last Input Buffer from TestApp.............. \n",__LINE__);
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        done = 1;
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBuffer->nFilledLen = 0;
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: App:: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (k==0)
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    {
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_FlagE=1;  /* 1 = First Buffer,  0 = Not First Buffer  */
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_START(); /* Empty Bufffer */
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_EmptyThisBuffer(pHandle, pBuffer);
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nIpBuff++;
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (kk = 0; kk < audioinfo->nOpBufs; kk++) {
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (kk==0)
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                {
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    GT_FlagF=1;  /* 1 = First Buffer,  0 = Not First Buffer  */
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    GT_START(); /* Fill Buffer */
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_FillThisBuffer(pHandle, pOutputBufferHeader[kk]);
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_GetState(pHandle, &state);
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: pComponent->GetState has returned status %X\n",__LINE__, eError);
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                bExitOnError = OMX_TRUE;
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            while((eError == OMX_ErrorNone) && (state != OMX_StateIdle)) {
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_ZERO(&rfds);
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(IpBuf_Pipe[0], &rfds);
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                FD_SET(OpBuf_Pipe[0], &rfds);
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                tv.tv_sec = 1;
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                tv.tv_usec = 0;
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                frmCount++;
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                retval = select(fdmax+1, &rfds, NULL, NULL, &tv);
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(retval == -1) {
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    perror("select()");
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT( " :: Error \n");
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(retval == 0) {
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    sleep(1);
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: BasicFn App Timeout !!!!!!!!!!! \n",__LINE__);
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                switch (tcID) {
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 0:
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 1:
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 2:
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 5:
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 6:
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(audioinfo->dasfMode == 0) {
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(FD_ISSET(IpBuf_Pipe[0], &rfds)) {
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pBuffer = NULL;
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(done == 0) {
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nRead = fread(pBuffer->pBuffer, 1, pBuffer->nAllocLen, fIn);
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App :: Reading InputBuffer = %d from the input file nRead = %d\n",__LINE__,nIpBuff,nRead);
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nFilledLen = nRead;
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nTimeStamp = (OMX_S64)rand() % 2;
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nTickCount = (OMX_S64)rand() % 70;
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if (tcID == 0){
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("Input time stamp = %ld\n", (long int)pBuffer->nTimeStamp);
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("Input tick count = %ld\n", pBuffer->nTickCount);
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if((nRead < 160) && (done == 0)) {
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    printf("%d :: App: Sending Last Input Buffer from TestApp.............. \n",__LINE__);
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    done = 1;
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBuffer->nFilledLen = 0;
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EmptyThisBuffer(pHandle, pBuffer);
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nIpBuff++;
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER DASF MODE \n",__LINE__);
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(nFrameCount == atoi(argv[7])) {
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Sending Stop.........From APP \n",__LINE__);
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Shutting down ---------- \n",__LINE__);
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_START();
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fprintf (stderr,"Error from SendCommand-Idle(Stop) State function\n");
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = WaitForState(pHandle, OMX_StateIdle);
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_END("Call to SendCommand <OMX_StateIdle>");
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT( "Error:  G729Encoder->WaitForState reports an error         %X\n", eError);
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            done = 1;
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER READING DATA FROM DASF  \n",__LINE__);
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 3:
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(audioinfo->dasfMode == 0) {
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER FILE 2 FILE MODE \n",__LINE__);
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(FD_ISSET(IpBuf_Pipe[0], &rfds)) {
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pBuffer = NULL;
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(done == 0) {
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App: Read from IpBuf_Pipe InBufHeader %p\n",__LINE__,pBuffer);
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                nRead = fread(pBuffer->pBuffer, 1, pBuffer->nAllocLen, fIn);
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App: Reading I/P Buffer = %d & Size = %d from IpBuf_Pipe\n",__LINE__,nFrameCount,nRead);
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nFilledLen = nRead;
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if((nRead < pBuffer->nAllocLen) && (done == 0)) {
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    printf("%d :: App: Shutting down ---------- \n",__LINE__);
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    done = 1;
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBuffer->nFilledLen = 0;
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Sending Last Input Buffer from TestApp.............. \n",__LINE__);
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EmptyThisBuffer(pHandle, pBuffer);
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    GT_START();
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    if(eError != OMX_ErrorNone) {
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        printf("Error from SendCommand-Idle(Stop) State function\n");
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        bExitOnError = OMX_TRUE;
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        goto EXIT;
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    }
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    eError = WaitForState(pHandle, OMX_StateIdle);
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    GT_END("Call to SendCommand <OMX_StateIdle>");
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    if ( eError != OMX_ErrorNone ){
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        printf("Error:WaitForState has timed out %d", eError);
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        bExitOnError = OMX_TRUE;
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        goto EXIT;
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    }
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                else {
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EmptyThisBuffer(pHandle, pBuffer);
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER DASF MODE \n",__LINE__);
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(nFrameCount == atoi(argv[7])) {
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Sending Stop.........From APP \n",__LINE__);
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Shutting down ---------- \n",__LINE__);
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_START();
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fprintf (stderr,"Error from SendCommand-Idle(Stop) State function\n");
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = WaitForState(pHandle, OMX_StateIdle);
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_END("Call to SendCommand <OMX_StateIdle>");
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT( "Error:  G729Encoder->WaitForState reports an error         %X\n", eError);
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            done = 1;
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER READING DATA FROM DASF  \n",__LINE__);
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (frmCount == 15) {
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("%d :: App: $$$$$ Sending Resume command to Codec $$$$$$$\n",__LINE__);
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_START();
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet,OMX_StateExecuting, NULL);
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            fprintf (stderr,"Error from SendCommand-Executing State function\n");
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            bExitOnError = OMX_TRUE;
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /* Wait for startup to complete */
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = WaitForState(pHandle, OMX_StateExecuting);
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_END("Call to SendCommand <OMX_StateExecuting>");
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            fprintf(stderr, "Error:  hPcmDecoder->WaitForState reports an eError %X\n", eError);
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            bExitOnError = OMX_TRUE;
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(frmCount == 10) {
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        printf ("%d :: App: $$$$$ Sending Pause command to Codec $$$$$$\n",__LINE__);
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_START();
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StatePause, NULL);
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("Error from SendCommand-Pasue State function\n");
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            bExitOnError = OMX_TRUE;
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /* Wait for startup to complete */
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = WaitForState(pHandle, OMX_StatePause);
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        GT_END("Call to SendCommand <OMX_StatePause>");
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("hG729Encoder->WaitForState reports error\n");
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            bExitOnError = OMX_TRUE;
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case 4:
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(audioinfo->dasfMode == 0) {
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER FILE 2 FILE MODE \n",__LINE__);
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if( FD_ISSET(IpBuf_Pipe[0], &rfds) ) {
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(frmCnt > 20) {
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_BUFFERHEADERTYPE* pBuffer = NULL;
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("%d :: App: Shutting down ---------- \n",__LINE__);
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                done = 1;
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nFilledLen = 0;
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App:: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_EmptyThisBuffer(pHandle, pBuffer);
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            else {
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_BUFFERHEADERTYPE* pBuffer;
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                if(done == 0) {
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Read from IpBuf_Pipe InBufHeader %p\n",__LINE__,pBuffer);
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    nRead = fread(pBuffer->pBuffer, 1, pBuffer->nAllocLen, fIn);
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Reading I/P Buffer = %d & Size = %d from IpBuf_Pipe\n",__LINE__,nFrameCount,nRead);
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pBuffer->nFilledLen = nRead;
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    if((nRead == 0) && (done == 0)) {
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        printf("%d :: App: Shutting down ---------- \n",__LINE__);
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        done = 1;
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pBuffer->nFilledLen = 0;
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    }
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    APP_DPRINT("%d :: App: Input Buffer: Calling EmptyThisBuffer: %p\n",__LINE__,pBuffer);
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EmptyThisBuffer(pHandle, pBuffer);
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                }
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        frmCnt++;
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    } else {
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: G729 ENCODER RUNNING UNDER DASF MODE \n",__LINE__);
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(nFrameCount == atoi(argv[7])) {
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Shutting down ---------- \n",__LINE__);
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_START();
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("Error from SendCommand-Idle(Stop) State function\n");
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = WaitForState(pHandle, OMX_StateIdle);
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_END("Call to SendCommand <OMX_StateIdle>");
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT( "Error:  G729Encoder->WaitForState reports an error         %X\n", eError);
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            done = 1;
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(nFrameCount == 20) {
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Sending Stop After %d frames \n",__LINE__,nFrameCount);
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_START();
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateIdle, NULL);
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("Error from SendCommand-Idle(Stop) State function\n");
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = WaitForState(pHandle, OMX_StateIdle);
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_END("Call to SendCommand <OMX_StateIdle>");
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT( "Error:  G729Encoder->WaitForState reports an error         %X\n", eError);
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            done = 1;
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                default:
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: ### Simple DEFAULT Case Here ###\n",__LINE__);
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if( FD_ISSET(OpBuf_Pipe[0], &rfds) ) {
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_BUFFERHEADERTYPE* pBuf = NULL;
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    read(OpBuf_Pipe[0], &pBuf, sizeof(pBuf));
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: App: pBuf->nFilledLen = %ld\n",__LINE__, pBuf->nFilledLen);
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nFrameLen = pBuf->nFilledLen;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* strip off the G.729 Encoder frame format */
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    int subFrameLength = 0;
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    char* temp = (char *)pBuf->pBuffer;
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    while (nFrameLen > 0) {
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        frameType = *(temp);
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        temp++;
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        switch (frameType) {
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        case 0:
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            subFrameLength = 0;
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        case 1:
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            subFrameLength = 10;
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        case 2:
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            subFrameLength = 2;
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            break;
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        char Header[] = {0x21, 0x6b};
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (!doneWriting) {
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if (!(subFrameLength == 0 && done)) {
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fwrite(Header, 1, G729ENC_HEADER_LEN, fOut);
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fflush(fOut);
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: App: nFrameLen = %d \n",__LINE__, nFrameLen);
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                APP_DPRINT("%d :: Writing OutputBuffer No: %d to the file nWrite = %d \n",__LINE__, nOutBuff, nFrameLen);
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                frameLengthInBytes = subFrameLength*8;
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fwrite(&frameLengthInBytes,2,1,fOut);
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                writeITUFormat((OMX_U8*)temp, subFrameLength,fOut);
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                temp+= subFrameLength;
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                fflush(fOut);
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        nFrameLen = nFrameLen - subFrameLength -1;
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (done) doneWriting = 1;
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nFrameCount++;
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    nOutBuff++;
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_FillThisBuffer(pHandle, pBuf);
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    APP_DPRINT("%d :: App: pBuf->nFlags = %ld\n",__LINE__, pBuf->nFlags);
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (tcID == 0){
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("-----------------------------------------------------\n");
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Output time stamp = %ld\n",(long int) pBuf->nTimeStamp);
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("Output tick count = %ld\n", pBuf->nTickCount);
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("-----------------------------------------------------\n");
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pBuf->nFlags == 1) {
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(tcID != 3) {
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Sending OMX_StateIdle.........From APP \n",__LINE__);
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_START();
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("Error from SendCommand-Idle(Stop) State function\n");
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = WaitForState(pHandle, OMX_StateIdle);
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            GT_END("Call to SendCommand <OMX_StateIdle>");
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if ( eError != OMX_ErrorNone ){
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                printf("Error:WaitForState has timed out %d", eError);
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                bExitOnError = OMX_TRUE;
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            audioinfo->dasfMode = 0;
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pBuf->nFlags = 0;
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            printf("%d :: App: Shutting down ---------- \n",__LINE__);
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(done == 1) {
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_GetState(pHandle, &state);
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        APP_DPRINT("%d :: pComponent->GetState has returned status %X\n",__LINE__, eError);
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        bExitOnError = OMX_TRUE;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } /* While Loop Ending Here */
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: The current state of the component = %d \n",__LINE__,state);
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fclose(fOut);
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fclose(fIn);
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(tcID == 5 || tcID == 4) {
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sleep (2);
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                sleep (0);
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            printf("%d :: App: G729 Encoded = %d Frames \n",__LINE__,(nOutBuff));
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } /*Test Case 4 & 5 Inner for loop ends here  */
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf ("%d :: App: Sending the OMX_StateLoaded Command\n",__LINE__);
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_START();
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SendCommand(pHandle,OMX_CommandStateSet, OMX_StateLoaded, NULL);
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d:: Error from SendCommand-Idle State function\n",__LINE__);
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf ("%d :: App: Sending the OMX_CommandPortDisable Command\n",__LINE__);
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_SendCommand(pHandle, OMX_CommandPortDisable, -1, NULL);
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d:: Error from SendCommand OMX_CommandPortDisable\n",__LINE__);
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* free the Allocate and Use Buffers */
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: App: Freeing the Allocate OR Use Buffers in TestApp\n",__LINE__);
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i < audioinfo->nIpBufs; i++) {
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: App: About to free pInputBufferHeader[%d]\n",__LINE__, i);
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_FreeBuffer(pHandle, G729APP_INPUT_PORT, pInputBufferHeader[i]);
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((eError != OMX_ErrorNone)) {
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d:: Error in FreeBuffer function\n",__LINE__);
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i < audioinfo->nOpBufs; i++) {
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: App: About to free pOutputBufferHeader[%d]\n",__LINE__, i);
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_FreeBuffer(pHandle, G729APP_OUTPUT_PORT, pOutputBufferHeader[i]);
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((eError != OMX_ErrorNone)) {
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                APP_DPRINT("%d :: Error in Free Buffer function\n",__LINE__);
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef USE_BUFFER
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* free the App Allocated Buffers */
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d :: App: Freeing the App Allocated Buffers in TestApp\n",__LINE__);
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i < audioinfo->nIpBufs; i++) {
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInputBuffer[i] = pInputBuffer[i] -128;
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_MEMPRINT("%d :: App: [TESTAPPFREE] pInputBuffer[%d] = %p\n",__LINE__,i,pInputBuffer[i]);
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pInputBuffer[i] != NULL){
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pInputBuffer[i]);
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pInputBuffer[i] = NULL;
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i < audioinfo->nOpBufs; i++) {
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pOutputBuffer[i] = pOutputBuffer[i] - 128;
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_MEMPRINT("%d :: App: [TESTAPPFREE] pOutputBuffer[%d] = %p\n",__LINE__,i, pOutputBuffer[i]);
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pOutputBuffer[i] != NULL){
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pOutputBuffer[i]);
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pOutputBuffer[i] = NULL;
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = WaitForState(pHandle, OMX_StateLoaded);
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        GT_END("Call to SendCommand <OMX_StateLoaded>, Disableport and cleared the buffers");
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT( "Error:  G729Encoder->WaitForState reports an error         %X\n", eError);
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pG729Param);
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pG729Param != NULL){
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pG729Param);
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pG729Param = NULL;
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pCompPrivateStruct);
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pCompPrivateStruct != NULL){
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pCompPrivateStruct);
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivateStruct = NULL;
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,audioinfo);
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(audioinfo != NULL){
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(audioinfo);
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            audioinfo = NULL;
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Unload the G729 Encoder Component */
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = TIOMX_FreeHandle(pHandle);
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((eError != OMX_ErrorNone)) {
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: Error in Free Handle function\n",__LINE__);
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } /*Outer for loop ends here */
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* De-Initialize OMX Core */
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = TIOMX_Deinit();
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("App::Failed to de-init OMX Core!\n");
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("EBD = %d\n FBD = %d\n", ebd, fbd);
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: *********************************************************************\n",__LINE__);
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: NOTE: An output file %s has been created in file system\n",__LINE__,argv[2]);
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: *********************************************************************\n",__LINE__);
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (bExitOnError){
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("Application exiting due to an error!!\n");
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef USE_BUFFER
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeResources(pG729Param, pCompPrivateStruct, audioinfo, pInputBuffer, pOutputBuffer);
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeResources(pG729Param, pCompPrivateStruct, audioinfo, pInputBufferHeader, pOutputBufferHeader, pHandle);
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Unload the G729 Encoder Component */
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = TIOMX_FreeHandle(pHandle);
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((eError != OMX_ErrorNone)) {
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: Error in Free Handle function\n",__LINE__);
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    cmd_data.hComponent = pHandle;
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    cmd_data.AM_Cmd = AM_Exit;
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if((write(g729encfdwrite, &cmd_data, sizeof(cmd_data)))<0)
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("%d ::- send command to audio manager\n",__LINE__);
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    close(g729encfdwrite);
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    close(g729encfdread);
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef OMX_GETTIME
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    GT_END("G729Enc test <End>");
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ListDestroy(pListHead);
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* This function writes the output into a format that is expected by the decoder */
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid writeITUFormat(OMX_U8* buffer, OMX_U32 length, FILE* fOut)
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0,j = 0;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 theByte = 0;
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 theMask = 0;
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 theBit = 0;
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 theWord = 0;
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (j=0; j < length; j++) {
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        theByte = buffer[j];
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        theMask = 128;
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < 8; i++) {
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            theBit = (theMask & theByte) >> (7-i);
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            theMask = theMask >> 1;
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (theBit == 0) {
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                theWord = BIT_0;
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if (theBit == 1) {
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                theWord = BIT_1;
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            fwrite(&theWord,2,1,fOut);
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef USE_BUFFER
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE FreeResources(OMX_AUDIO_PARAM_G729TYPE* pG729Param,
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct,
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            AUDIO_INFO* audioinfo,
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_U8* pInputBuffer[G729APP_MAX_NUM_OF_BUFS],
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_U8* pOutputBuffer[G729APP_MAX_NUM_OF_BUFS])
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* free the App Allocated Buffers */
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: App: Freeing the App Allocated Buffers in TestApp\n",__LINE__);
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i < audioinfo->nIpBufs; i++) {
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pInputBuffer[i] = pInputBuffer[i] -128;
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: App: [TESTAPPFREE] pInputBuffer[%d] = %p\n",__LINE__,i,pInputBuffer[i]);
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pInputBuffer[i] != NULL){
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pInputBuffer[i]);
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pInputBuffer[i] = NULL;
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i < audioinfo->nOpBufs; i++) {
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pOutputBuffer[i] = pOutputBuffer[i] - 128;
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_MEMPRINT("%d :: App: [TESTAPPFREE] pOutputBuffer[%d] = %p\n",__LINE__,i, pOutputBuffer[i]);
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pOutputBuffer[i] != NULL){
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pOutputBuffer[i]);
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pOutputBuffer[i] = NULL;
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pG729Param);
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pG729Param != NULL){
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pG729Param);
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param = NULL;
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pCompPrivateStruct);
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pCompPrivateStruct != NULL){
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pCompPrivateStruct);
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct = NULL;
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,audioinfo);
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(audioinfo != NULL){
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(audioinfo);
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        audioinfo = NULL;
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: App: Closing the Input and Output Pipes\n",__LINE__);
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (IpBuf_Pipe[0]);
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing IpBuf_Pipe[0]\n",__LINE__);
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (IpBuf_Pipe[1]);
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing IpBuf_Pipe[1]\n",__LINE__);
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (OpBuf_Pipe[0]);
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing OpBuf_Pipe[0]\n",__LINE__);
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (OpBuf_Pipe[1]);
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing OpBuf_Pipe[1]\n",__LINE__);
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE FreeResources(OMX_AUDIO_PARAM_G729TYPE* pG729Param,
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct,
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            AUDIO_INFO* audioinfo,
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pInputBufferHeader[G729APP_MAX_NUM_OF_BUFS],
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_BUFFERHEADERTYPE* pOutputBufferHeader[G729APP_MAX_NUM_OF_BUFS],
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_HANDLETYPE pHandle)
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int i = 0;
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* free the Allocate and Use Buffers */
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: App: Freeing the Allocate OR Use Buffers in TestApp\n",__LINE__);
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i < audioinfo->nIpBufs; i++) {
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: App: About to free pInputBufferHeader[%d]\n",__LINE__, i);
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_FreeBuffer(pHandle, G729APP_INPUT_PORT, pInputBufferHeader[i]);
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((eError != OMX_ErrorNone)) {
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d:: Error in FreeBuffer function\n",__LINE__);
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i < audioinfo->nOpBufs; i++) {
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: App: About to free pOutputBufferHeader[%d]\n",__LINE__, i);
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_FreeBuffer(pHandle, G729APP_OUTPUT_PORT, pOutputBufferHeader[i]);
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((eError != OMX_ErrorNone)) {
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            APP_DPRINT("%d :: Error in Free Buffer function\n",__LINE__);
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            bExitOnError = OMX_TRUE;
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pG729Param);
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pG729Param != NULL){
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pG729Param);
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pG729Param = NULL;
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,pCompPrivateStruct);
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pCompPrivateStruct != NULL){
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pCompPrivateStruct);
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivateStruct = NULL;
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n",__LINE__,audioinfo);
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(audioinfo != NULL){
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(audioinfo);
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        audioinfo = NULL;
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("%d :: App: Closing the Input and Output Pipes\n",__LINE__);
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (IpBuf_Pipe[0]);
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing IpBuf_Pipe[0]\n",__LINE__);
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (IpBuf_Pipe[1]);
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing IpBuf_Pipe[1]\n",__LINE__);
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (OpBuf_Pipe[0]);
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing OpBuf_Pipe[0]\n",__LINE__);
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = close (OpBuf_Pipe[1]);
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != eError && OMX_ErrorNone == eError) {
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        APP_DPRINT("%d :: Error while closing OpBuf_Pipe[1]\n",__LINE__);
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1697