1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  you may not use this file except in compliance with the License.
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  You may obtain a copy of the License at
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  See the License for the specific language governing permissions and
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * limitations under the License.
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =============================================================================
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             Texas Instruments OMAP (TM) Platform Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  Use of this software is controlled by the terms and conditions found
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file WbAmrEnc_Test.c
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements WBAMR Encoder Component Specific APIs and its functionality
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* that is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\wbamr_enc\tests
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev  1.0
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----------------------------------------------------------------------------
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ===================================
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 21-sept-2006 bk: updated review findings for alpha release
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! This is newest file
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  INCLUDE FILES
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h>
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h>
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h>
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <linux/vt.h>
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <signal.h>
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/stat.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <linux/soundcard.h>
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Index.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Types.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Core.h>
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Audio.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <TIDspOmx.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
70b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef DSP_RENDERING_ON
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <AudioManagerAPI.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <time.h>
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
76b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#include <OMX_Common_Utils.h>
77b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#include <OMX_GetTime.h>     /*Headers for Performance & measuremet    */
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinFILE *fpRes;
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_NUM_INPUT_BUFFERS   Default number of input buffers
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_NUM_INPUT_BUFFERS 1
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_NUM_INPUT_BUFFERS_DASF  Default No.of input buffers DASF
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_NUM_INPUT_BUFFERS_DASF 2
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_NUM_OUTPUT_BUFFERS   Default number of output buffers
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_NUM_OUTPUT_BUFFERS 1
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
101b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * @def WBAPP_INPUT_BUFFER_SIZE       Default input buffer size
102b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *      WBAPP_INPUT_BUFFER_SIZE_DASF  Default input buffer size DASF
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_INPUT_BUFFER_SIZE 640
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_INPUT_BUFFER_SIZE_DASF 640
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_OUTPUT_BUFFER_SIZE   Default output buffer size
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_OUTPUT_BUFFER_SIZE 116
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_OUTPUT_BUFFER_SIZE_MIME  Default input buffer size MIME
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_OUTPUT_BUFFER_SIZE_MIME 61
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
122b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * @def WBAMRENC_APP_ID  App ID Value setting
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAMRENC_APP_ID 100
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define SLEEP_TIME 5
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAMRENC_MIME_HEADER_LEN 9
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define APP_INFO
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef APP_DEBUG
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef USE_BUFFER
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef APP_MEMCHECK
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef  APP_INFO
144b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_IPRINT(...)    fprintf(stderr,__VA_ARGS__)          /* Information prints */
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
146b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_IPRINT(...)
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef APP_DEBUG
151b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
153b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_DPRINT(...)
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef APP_MEMCHECK
157b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_MEMPRINT(...)    fprintf(stderr,__VA_ARGS__)
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define APP_MEMPRINT(...)
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef APP_DEBUGMEM
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
165b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE eError = OMX_ErrorNone;
166b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint GT_FlagE = 0;  /* Fill Buffer 1 = First Buffer,  0 = Not First Buffer  */
167b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint GT_FlagF = 0;  /*Empty Buffer  1 = First Buffer,  0 = Not First Buffer  */
168b65f253fdc60f6208a54911bee793d225f23cdf8James Dongstatic OMX_NODE* pListHead = NULL;
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef APP_DEBUGMEM
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid *arr[500];
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint lines[500];
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint bytes[500];
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar file[500][50];
176b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint ind = 0;
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) mynewmalloc(__LINE__,__FILE__,x)
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) mynewfree(z,__LINE__,__FILE__)
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
181b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid * mynewmalloc(int line, char *s, int size) {
182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    void *p;
183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int e = 0;
184b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    p = calloc(1, size);
185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
186b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (p == NULL) {
187b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("Memory not available\n");
188b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        exit(1);
189b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else {
190b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        while ((lines[e] != 0) && (e < 500) ) {
191b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            e++;
192b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
193b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
194b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        arr[e] = p;
195b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        lines[e] = line;
196b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        bytes[e] = size;
197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        strcpy(file[e], s);
198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("Allocating %d bytes on address %p, line %d file %s pos %d\n", size, p, line, s, e);
199b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        return p;
200b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
203b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint mynewfree(void *dp, int line, char *s) {
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int q;
205b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (dp == NULL) {
207b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("NULL can't be deleted\n");
208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        return 0;
209b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
210b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
211b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (q = 0; q < 500; q++) {
212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (arr[q] == dp) {
213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Deleting %d bytes on address %p, line %d file %s\n", bytes[q], dp, line, s);
214b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            free(dp);
215b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            dp = NULL;
216b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            lines[q] = 0;
217b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            strcpy(file[q], "");
218b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
219b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
221b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
222b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (500 == q)
223b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("\n\nPointer not found. Line:%d    File%s!!\n\n", line, s);
224b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
225b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return 1;
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newmalloc(x) malloc(x)
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define newfree(z) free(z)
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct WBAMRENC_BUFDATA {
233b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8 nFrames;
234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} WBAMRENC_BUFDATA;
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define OMX_WBAPP_CONF_INIT_STRUCT(_s_, _name_) \
243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    memset((_s_), 0x0, sizeof(_name_)); \
244b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    (_s_)->nSize = sizeof(_name_);      \
245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    (_s_)->nVersion.s.nVersionMajor = 0x1;  \
246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    (_s_)->nVersion.s.nVersionMinor = 0x0;  \
247b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    (_s_)->nVersion.s.nRevision = 0x0;      \
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (_s_)->nVersion.s.nStep = 0x0
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define OMX_WBAPP_INIT_STRUCT(_s_, _name_)  \
251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    memset((_s_), 0x0, sizeof(_name_)); \
252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_WBAPP_MALLOC_STRUCT(_pStruct_, _sName_)   \
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    _pStruct_ = (_sName_*)newmalloc(sizeof(_sName_));      \
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(_pStruct_ == NULL){      \
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        APP_IPRINT("***********************************\n"); \
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        APP_IPRINT("%d :: Malloc Failed\n",__LINE__); \
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        APP_IPRINT("***********************************\n"); \
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources; \
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;      \
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } \
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    APP_MEMPRINT("%d :: ALLOCATING MEMORY = %p\n",__LINE__,_pStruct_);
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** WBAPP_COMP_PORT_TYPE  Port types
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *  @param  WBAPP_INPUT_PORT            Input port
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
269b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *  @param  WBAPP_OUTPUT_PORT           Output port
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*  ====================================================================== */
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*This enum must not be changed. */
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum WBAPP_COMP_PORT_TYPE {
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAPP_INPUT_PORT = 0,
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WBAPP_OUTPUT_PORT
276b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} WBAPP_COMP_PORT_TYPE;
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_MAX_NUM_OF_BUFS      Maximum number of buffers
281b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * @def WBAPP_NUM_CHANNELS         Number of Channels
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @def WBAPP_SAMPLING_FREQUENCY   Sampling frequency
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_MAX_NUM_OF_BUFS 10
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_NUM_OF_CHANNELS 1
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WBAPP_SAMPLING_FREQUENCY 16000
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef  WAITFORRESOURCES
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinpthread_mutex_t WaitForState_mutex;
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinpthread_cond_t  WaitForState_threshold;
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U8          WaitForState_flag;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U8      TargetedState;
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_BOOL bInvalidState;
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid* ArrayOfPointers[6];
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE StopComponent(OMX_HANDLETYPE *pHandle);
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE PauseComponent(OMX_HANDLETYPE *pHandle);
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE PlayComponent(OMX_HANDLETYPE *pHandle);
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE send_input_buffer(OMX_HANDLETYPE pHandle, OMX_BUFFERHEADERTYPE* pBuffer, FILE *fIn);
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint maxint(int a, int b);
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint inputPortDisabled = 0;
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint outputPortDisabled = 0;
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U8 NextBuffer[WBAPP_INPUT_BUFFER_SIZE*3];
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint FirstTime = 1;
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint nRead;
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinWBAMRENC_BUFDATA* OutputFrames;
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef DSP_RENDERING_ON
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data;
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_STRING strWbAmrEncoder = "OMX.TI.WBAMR.encode";
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef USE_BUFFER
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint FreeAllResources( OMX_HANDLETYPE *pHandle,
318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_BUFFERHEADERTYPE* pBufferIn,
319b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_BUFFERHEADERTYPE* pBufferOut,
320b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      int NIB, int NOB,
321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      FILE* fIn, FILE* fOut);
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint  FreeAllResources(OMX_HANDLETYPE *pHandle,
324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_U8* UseInpBuf[],
325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_U8* UseOutBuf[],
326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      int NIB, int NOB,
327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      FILE* fIn, FILE* fOut);
328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint IpBuf_Pipe[2];
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OpBuf_Pipe[2];
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint Event_Pipe[2];
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinfd_set rfds;
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint done = 0;
335b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint DasfMode = 0;
336b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint mframe = 0;
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint preempted = 0;
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* safe routine to get the maximum of 2 integers */
341b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint maxint(int a, int b) {
342b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return (a > b) ? a : b;
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This method will wait for the component to get to the state
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * specified by the DesiredState input. */
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForState(OMX_HANDLETYPE* pHandle,
348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  OMX_STATETYPE DesiredState) {
349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_STATETYPE CurState = OMX_StateInvalid;
350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE eError = OMX_ErrorNone;
351b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
352b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
353b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    eError = pComponent->GetState(pHandle, &CurState);
354b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (CurState == OMX_StateInvalid && bInvalidState == OMX_TRUE) {
356b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_ErrorInvalidState;
357b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
358b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
359b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (CurState != DesiredState) {
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        WaitForState_flag = 1;
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TargetedState = DesiredState;
362b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pthread_mutex_lock(&WaitForState_mutex);
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_wait(&WaitForState_threshold, &WaitForState_mutex);/*Going to sleep till signal arrives*/
364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pthread_mutex_unlock(&WaitForState_mutex);
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
367b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return eError;
368b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE EventHandler(
372b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_HANDLETYPE hComponent,
373b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PTR pAppData,
374b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_EVENTTYPE eEvent,
375b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nData1,
376b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 nData2,
377b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PTR pEventData) {
378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_DPRINT( "%d :: App: Entering EventHandler \n", __LINE__);
379b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE eError = OMX_ErrorNone;
380b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)hComponent;
381b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_STATETYPE state;
382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
383b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8 writeValue;
384b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
385b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    eError = pComponent->GetState (hComponent, &state);
386b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
387b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (eError != OMX_ErrorNone) {
388b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("%d :: App: Error returned from GetState\n", __LINE__);
389b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
390b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
391b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_DPRINT( "%d :: App: Component eEvent = %d\n", __LINE__, eEvent);
393b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
394b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    switch (eEvent) {
395b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component State Changed To %d\n", __LINE__, state);
396b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventCmdComplete:
397b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component State Changed To %d\n", __LINE__, state);
398b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
399b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (nData1 == OMX_CommandPortDisable) {
400b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (nData2 == WBAPP_INPUT_PORT) {
401b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    inputPortDisabled = 1;
402b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
403b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
404b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (nData2 == WBAPP_OUTPUT_PORT) {
405b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    outputPortDisabled = 1;
406b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ((nData1 == OMX_CommandStateSet) && (TargetedState == nData2) &&
410b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    (WaitForState_flag)) {
411b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                WaitForState_flag = 0;
412b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_mutex_lock(&WaitForState_mutex);
413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_cond_signal(&WaitForState_threshold);
414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_mutex_unlock(&WaitForState_mutex);
415b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
416b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
418b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventError:
419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
420b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (nData1 == OMX_ErrorInvalidState) {
421b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("Event Handler Invalid!!!\n\n");
422b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                bInvalidState = OMX_TRUE;
423b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            } else if (nData1 == OMX_ErrorResourcesPreempted) {
424b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                preempted = 1;
425b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                writeValue = 0;
426b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                write(Event_Pipe[1], &writeValue, sizeof(OMX_U8));
427b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            } else if (nData1 == OMX_ErrorResourcesLost) {
428b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                WaitForState_flag = 0;
429b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_mutex_lock(&WaitForState_mutex);
430b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_cond_signal(&WaitForState_threshold);/*Sending Waking Up Signal*/
431b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pthread_mutex_unlock(&WaitForState_mutex);
432b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
433b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
434b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
435b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventMax:
436b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component OMX_EventMax = %d\n", __LINE__, eEvent);
437b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
438b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventMark:
439b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component OMX_EventMark = %d\n", __LINE__, eEvent);
440b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
441b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventPortSettingsChanged:
442b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component OMX_EventPortSettingsChanged = %d\n", __LINE__, eEvent);
443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
444b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventBufferFlag:
445b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component OMX_EventBufferFlag = %d\n", __LINE__, eEvent);
446b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            writeValue = 2;
447b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            write(Event_Pipe[1], &writeValue, sizeof(OMX_U8));
448b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
449b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case OMX_EventResourcesAcquired:
450b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "%d :: App: Component OMX_EventResourcesAcquired = %d\n", __LINE__, eEvent);
451b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            writeValue = 1;
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            write(Event_Pipe[1], &writeValue, sizeof(OMX_U8));
453b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            preempted = 0;
454b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
455b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
456b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        default:
457b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
458b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
459b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
460b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
462b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_DPRINT( "%d :: App: Exiting EventHandler \n", __LINE__);
463b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return eError;
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
466b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer) {
467b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (!preempted)
468b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        write(OpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
469b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
471b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
472b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (GT_FlagF == 1 ) /* First Buffer Reply*/ { /* 1 = First Buffer,  0 = Not First Buffer  */
473b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to FillBufferDone  <First: FillBufferDone>");
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        GT_FlagF = 0 ;   /* 1 = First Buffer,  0 = Not First Buffer  */
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
476b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
480b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid EmptyBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR ptr, OMX_BUFFERHEADERTYPE* pBuffer) {
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    write(IpBuf_Pipe[1], &pBuffer, sizeof(pBuffer));
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
483b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
484b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (GT_FlagE == 1 ) /* First Buffer Reply*/ { /* 1 = First Buffer,  0 = Not First Buffer  */
485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to EmptyBufferDone <First: EmptyBufferDone>");
486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_FlagE = 0;   /* 1 = First Buffer,  0 = Not First Buffer  */
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
488b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
492b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint main(int argc, char* argv[]) {
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CALLBACKTYPE AmrCaBa = {(void *)EventHandler,
494b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                (void*)EmptyBufferDone,
495b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                (void*)FillBufferDone
496b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                               };
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pHandle;
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 AppData = WBAMRENC_APP_ID;
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pCompPrivateStruct;
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_AMRTYPE *pAmrParam;
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent;
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_STATETYPE state;
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pInputBufferHeader[WBAPP_MAX_NUM_OF_BUFS];
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pOutputBufferHeader[WBAPP_MAX_NUM_OF_BUFS];
506b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    bInvalidState = OMX_FALSE;
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef USE_BUFFER
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8* pInputBuffer[WBAPP_MAX_NUM_OF_BUFS];
509b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8* pOutputBuffer[WBAPP_MAX_NUM_OF_BUFS];
510b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
511b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    FILE* fIn = NULL;
512b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    FILE* fOut = NULL;
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct timeval tv;
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int retval, i, j, k, kk, tcID = 0;
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int frmCount = 0;
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int frmCnt = 1;
517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int testcnt = 0;
518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int testcnt1 = 0;
519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int status = 0;
520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int fdmax = 0;
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nFrameCount = 1;
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nFrameLen = 0;
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nIpBuff = 1;
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nOutBuff = 1;
526b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int numOfInputBuffer = 0;
527b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int numOfOutputBuffer = 0;
528b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_INDEXTYPE index;
529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int NoDataRead = 0;
530b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 streamId;
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DSP_DEFINITION *audioinfo;
533b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_AUDIO_CONFIG_VOLUMETYPE* pCompPrivateStructGain = NULL;
534b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int wbamrencfdwrite;
535b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int wbamrencfdread;
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&WaitForState_mutex, NULL);
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&WaitForState_threshold, NULL);
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WaitForState_flag = 0;
540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    srand ( time(NULL) );
542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("------------------------------------------------------\n");
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    APP_IPRINT("This is Main Thread In WBAMR ENCODER Test Application:\n");
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    APP_IPRINT("Test Core 1.5 - " __DATE__ ":" __TIME__ "\n");
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    APP_IPRINT("------------------------------------------------------\n");
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("Line %d\n", __LINE__);
549b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GTeError = OMX_ListCreate(&pListHead);
550b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("Line %d\n", __LINE__);
551b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("eError = %d\n", GTeError);
552b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_START();
553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("Line %d\n", __LINE__);
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* check the input parameters */
558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ((argc < 14) || (argc > 15)) {
559b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: Usage: [TestApp] [O/P] [FUNC_ID_X] [FM/DM] [WBAMR/EFR] [BITRATE] [DTXON/OFF] [NONMIME/MIME/IF2] [ACDNON/OFF] [FRAMES] [1 to N] [1 to N] [MFON]\n", __LINE__);
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* check to see that the input file exists */
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct stat sb = {0};
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    status = stat(argv[1], &sb);
566b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
567b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( status != 0 ) {
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        APP_IPRINT("Cannot find file %s. (%u)\n", argv[1], errno);
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Open the file of data to be encoded. */
573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    fIn = fopen(argv[1], "r");
574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( fIn == NULL ) {
576b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("Error:  failed to open the input file %s\n", argv[1]);
577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* Open the file of data to be written. */
581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    fOut = fopen(argv[2], "w");
582b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( fOut == NULL ) {
584b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("Error:  failed to open the output file %s\n", argv[2]);
585b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (!strcmp(argv[3], "FUNC_ID_1")) {
589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 1 PLAY TILL END ###\n", __LINE__);
590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt = 1;
591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt1 = 1;
592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        tcID = 1;
593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_2")) {
594b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 2 STOP IN THE END ###\n", __LINE__);
595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt = 1;
596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt1 = 1;
597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        tcID = 2;
598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_3")) {
599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 3 PAUSE - RESUME IN BETWEEN ###\n", __LINE__);
600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt = 1;
601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt1 = 1;
602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        tcID = 3;
603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_4")) {
604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 4 STOP IN BETWEEN ###\n", __LINE__);
605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt = 2;
606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt1 = 1;
607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        tcID = 4;
608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("######## testcnt = %d #########\n", testcnt);
609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_5")) {
610b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 5 ENCODE without Deleting component Here ###\n", __LINE__);
611b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (argc == 15) {
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            testcnt = atoi(argv[14]);
614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            testcnt = 20;  /*20 cycles by default*/
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
617b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        testcnt1 = 1;
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tcID = 5;
620b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_6")) {
621b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 6 ENCODE with Deleting component Here ###\n", __LINE__);
622b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
623b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (argc == 15) {
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            testcnt1 = atoi(argv[14]);
625b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            testcnt1 = 20;  /*20 cycles by default*/
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
628b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        testcnt = 1;
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tcID = 6;
631b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_7")) {
632b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing TESTCASE 7 ENCODE with Volume Control ###\n", __LINE__);
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        testcnt = 1;
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        testcnt1 = 1;
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tcID = 7;
636b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else if (!strcmp(argv[3], "FUNC_ID_8")) {
637b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Testing PLAY TILL END  WITH TWO FRAMES BY BUFFER###\n", __LINE__);
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        testcnt = 1;
639b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        testcnt1 = 1;
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tcID = 1;
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        mframe = 1;
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
643b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: ### Invalid test case###\n", __LINE__);
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
647b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (j = 0; j < testcnt1; j++) {
648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
649b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef DSP_RENDERING_ON
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((wbamrencfdwrite = open(FIFO1, O_WRONLY)) < 0) {
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            APP_IPRINT("[AMRTEST] - failure to open WRITE pipe\n");
653b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            APP_IPRINT("[AMRTEST] - opened WRITE pipe\n");
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((wbamrencfdread = open(FIFO2, O_RDONLY)) < 0) {
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            APP_IPRINT("[AMRTEST] - failure to open READ pipe\n");
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            APP_IPRINT("[AMRTEST] - opened READ pipe\n");
662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
666b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Create a pipe used to queue data from the callback. */
667b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        retval = pipe(IpBuf_Pipe);
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ( retval != 0) {
670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("Error:Fill Data Pipe failed to open\n");
671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
672b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        retval = pipe(OpBuf_Pipe);
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
676b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ( retval != 0) {
677b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("Error:Empty Data Pipe failed to open\n");
678b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
679b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
681b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        retval = pipe(Event_Pipe);
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ( retval != 0) {
684b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "Error:Empty Data Pipe failed to open\n");
685b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
686b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* save off the "max" of the handles for the selct statement */
689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fdmax = maxint(IpBuf_Pipe[0], OpBuf_Pipe[0]);
690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fdmax = maxint(fdmax, Event_Pipe[0]);
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = TIOMX_Init();
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error returned by OMX_Init()\n", __LINE__);
696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
699b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        TI_OMX_STREAM_INFO *streaminfo;
700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
701b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_MALLOC_STRUCT(streaminfo, TI_OMX_STREAM_INFO);
702b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_MALLOC_STRUCT(audioinfo, TI_OMX_DSP_DEFINITION);
703b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_INIT_STRUCT(audioinfo, TI_OMX_DSP_DEFINITION);
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
705b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ArrayOfPointers[0] = (TI_OMX_STREAM_INFO*)streaminfo;
706b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ArrayOfPointers[1] = (TI_OMX_DSP_DEFINITION*)audioinfo;
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
708b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (j > 0) {
709b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT ("%d :: Encoding the file for %d Time in TESTCASE 6\n", __LINE__, j + 1);
710b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fIn = fopen(argv[1], "r");
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
712b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ( fIn == NULL ) {
713b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                fprintf(stderr, "Error:  failed to open the file %s for read only access\n", argv[1]);
714b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
715b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
717b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fOut = fopen("TC6_WbAmr1.amr", "w");
71836733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
719b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ( fOut == NULL ) {
720b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                fprintf(stderr, "Error:  failed to create the output file %s\n", argv[2]);
721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
722b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
72436733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
725b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Load the WBAMR Encoder Component */
72636733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
727eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#ifdef OMX_GETTIME
728b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
729b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_GetHandle(&pHandle, strWbAmrEncoder, &AppData, &AmrCaBa);
730b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to GetHandle");
731eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#else
732b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = TIOMX_GetHandle(&pHandle, strWbAmrEncoder, &AppData, &AmrCaBa);
733eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#endif
73436733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
735b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((eError != OMX_ErrorNone) || (pHandle == NULL)) {
736b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("Error in Get Handle function\n");
737b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
738eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        }
73936733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
740b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Setting No.Of Input and Output Buffers for the Component */
741b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        numOfInputBuffer = atoi(argv[11]);
742b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("\n%d :: App: audioinfo->nIpBufs = %d \n", __LINE__, numOfInputBuffer);
743b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
744b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        numOfOutputBuffer = atoi(argv[12]);
745b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("\n%d :: App: audioinfo->numOfOutputBuffer = %d \n", __LINE__, numOfOutputBuffer);
746b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
747b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
748b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_MALLOC_STRUCT(pCompPrivateStruct, OMX_PARAM_PORTDEFINITIONTYPE);
749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_CONF_INIT_STRUCT(pCompPrivateStruct, OMX_PARAM_PORTDEFINITIONTYPE);
750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
751b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ArrayOfPointers[2] = (OMX_PARAM_PORTDEFINITIONTYPE*)pCompPrivateStruct;
752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("%d :: Setting input port config\n", __LINE__);
753b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nSize                              = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nVersion.s.nVersionMajor           = 0xF1;
755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nVersion.s.nVersionMinor           = 0xF2;
756b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nPortIndex                         = WBAPP_INPUT_PORT;
757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->eDir                               = OMX_DirInput;
758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferCountActual                 = numOfInputBuffer;
759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferCountMin                    = numOfInputBuffer;
760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferSize                        = WBAPP_INPUT_BUFFER_SIZE;
761b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->bEnabled                           = OMX_TRUE;
762b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->bPopulated                         = OMX_FALSE;
763b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->eDomain                            = OMX_PortDomainAudio;
764b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.eEncoding             = OMX_AUDIO_CodingAMR;
765b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.cMIMEType             = NULL;
766b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.pNativeRender         = NULL;
767b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.bFlagErrorConcealment = OMX_FALSE;    /*Send input port config*/
768b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("%d :: Setting input port config\n", __LINE__);
769b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
770b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[8], "NONMIME"))) {
771b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "NONMIME";
772b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n",
773b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                       __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
774b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[8], "MIME"))) {
775b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "MIME";
776b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n",
777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                       __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
778b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[8], "IF2"))) {
779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "IF2";
780b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n",
781b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                       __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
782b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
783b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
784b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
785b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("\n%d :: App: audioinfo->amrMIMEMode Sending Bad Parameter\n", __LINE__);
786b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Should Be One of these Modes MIME, NONMIME, IF2\n", __LINE__);
787b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
788b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
78936733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
79036733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
791b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[4], "FM"))) {
792b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            audioinfo->dasfMode = 0;
793b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            DasfMode = 0;
794b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: audioinfo->dasfMode = %x \n", __LINE__, audioinfo->dasfMode);
795b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[4], "DM"))) {
796b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            audioinfo->dasfMode = 1;
797b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            DasfMode = 1;
798b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: audioinfo->dasfMode = %x \n", __LINE__, audioinfo->dasfMode);
799b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: WBAMR ENCODER RUNNING UNDER DASF MODE \n", __LINE__);
800b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->nBufferCountActual = 0;
801b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
802b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
803b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("\n%d :: App: audioinfo->dasfMode Sending Bad Parameter\n", __LINE__);
804b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Should Be One of these Modes FM, DM\n", __LINE__);
805b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
80736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
80836733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
809b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (audioinfo->dasfMode == 0) {
810b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ((atoi(argv[10])) != 0) {
811b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorBadParameter;
812b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("\n%d :: App: No. of Frames Sending Bad Parameter\n", __LINE__);
813b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("%d :: App: For FILE mode argv[10] Should Be --> 0\n", __LINE__);
814b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("%d :: App: For DASF mode argv[10] Should be greater than zero depends on number of frames user want to encode\n", __LINE__);
815b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
816b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
817b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
818b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ((atoi(argv[10])) == 0) {
819b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorBadParameter;
820b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("\n%d :: App: No. of Frames Sending Bad Parameter\n", __LINE__);
821b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("%d :: App: For DASF mode argv[10] Should be greater than zero depends on number of frames user want to encode\n", __LINE__);
822b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("%d :: App: For FILE mode argv[10] Should Be --> 0\n", __LINE__);
823b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
824b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
825b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
82636733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
827b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[9], "ACDNOFF"))) {
828b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            audioinfo->acousticMode = 0;
829b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: audioinfo->acousticMode = %x \n", __LINE__, audioinfo->acousticMode);
830b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[9], "ACDNON"))) {
831b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            audioinfo->acousticMode = 1;
832b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: audioinfo->acousticMode = %x \n", __LINE__, audioinfo->acousticMode);
833b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
834b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
835b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("\n%d :: App: audioinfo->acousticMode Sending Bad Parameter\n", __LINE__);
836b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Should Be One of these Modes ACDNON, ACDNOFF\n", __LINE__);
837b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
838b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
841b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
842b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
843b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Set Parameter Test-SetParameter");
844b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
845b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
84736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
849b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: OMX_ErrorBadParameter\n", __LINE__);
851b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
852b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_MEMPRINT("%d :: Setting output port config\n", __LINE__);
855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nSize                              = sizeof (OMX_PARAM_PORTDEFINITIONTYPE);
856b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nVersion.s.nVersionMajor           = 0xF1;
857b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nVersion.s.nVersionMinor           = 0xF2;
858b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nPortIndex                         = WBAPP_OUTPUT_PORT;
859b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->eDir                               = OMX_DirOutput;
860b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferCountActual                 = numOfOutputBuffer;
861b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferCountMin                    = numOfOutputBuffer;
862b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->nBufferSize                        = WBAPP_OUTPUT_BUFFER_SIZE;
863b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->bEnabled                           = OMX_TRUE;
864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->bPopulated                         = OMX_FALSE;
865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->eDomain                            = OMX_PortDomainAudio;
866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.eEncoding             = OMX_AUDIO_CodingAMR;
867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.cMIMEType             = NULL;
868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.pNativeRender         = NULL;
869b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStruct->format.audio.bFlagErrorConcealment = OMX_FALSE;    /*Send input port config*/
870b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
871b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_MALLOC_STRUCT(pAmrParam, OMX_AUDIO_PARAM_AMRTYPE);
872b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_WBAPP_CONF_INIT_STRUCT(pAmrParam, OMX_AUDIO_PARAM_AMRTYPE);
873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ArrayOfPointers[3] = (OMX_AUDIO_PARAM_AMRTYPE *)pAmrParam;
874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[8], "NONMIME"))) {
876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "NONMIME";
877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatConformance;
878b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->cMIMEType --> %s \n", __LINE__, argv[3]);
879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /**< Codec Configuring to WBAMR Mode Buffer Size to 116 */
880b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->nBufferSize = WBAPP_OUTPUT_BUFFER_SIZE;
881b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
882b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
883b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[8], "MIME"))) {
884b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "MIME";
885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatFSF;
886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n",
887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                       __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /**< Codec Configuring to MIME Mode Buffer Size to 61 */
889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->nBufferSize = WBAPP_OUTPUT_BUFFER_SIZE_MIME;
890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[8], "IF2"))) {
891b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct->format.audio.cMIMEType = "IF2";
892b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatIF2;
893b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n",
894b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                       __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
895b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
896b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
897b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("\n%d :: App: pCompPrivateStruct->nBufferSize --> %ld \n", __LINE__, pCompPrivateStruct->nBufferSize);
898eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#ifdef OMX_GETTIME
899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
900b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Set Parameter Test-SetParameter");
902b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
903b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, pCompPrivateStruct);
904eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#endif
90536733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
906b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
907b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
908b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: OMX_ErrorBadParameter\n", __LINE__);
909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
910b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
91136733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nSize                    = sizeof(OMX_AUDIO_PARAM_AMRTYPE);
913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nVersion.s.nVersionMajor = 0xF1;
914b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nVersion.s.nVersionMinor = 0xF2;
915b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nPortIndex               = WBAPP_INPUT_PORT;
916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nChannels                = WBAPP_NUM_OF_CHANNELS;
917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioAmr, pAmrParam);
920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Set Parameter Test-SetParameter");
921b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
922b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioAmr, pAmrParam);
923eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong#endif
92436733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
925b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
926b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: OMX_ErrorBadParameter\n", __LINE__);
928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
929b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
93036733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
931b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nSize                    = sizeof(OMX_AUDIO_PARAM_AMRTYPE);
932b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nVersion.s.nVersionMajor = 0xF1;
933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nVersion.s.nVersionMinor = 0xF2;
934b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nPortIndex               = WBAPP_OUTPUT_PORT;
935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->nChannels                = WBAPP_NUM_OF_CHANNELS;
936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->eAMRBandMode             = OMX_AUDIO_AMRBandModeUnused;
937b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pAmrParam->eAMRDTXMode              = OMX_AUDIO_AMRDTXModeOff;
938b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
939b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[6], "BR2385"))) {
940b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB8;
941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
942b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR2305"))) {
943b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB7;
944b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
945b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR1985"))) {
946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB6;
947b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
948b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR1825"))) {
949b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB5;
950b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
951b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR1585"))) {
952b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB4;
953b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
954b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR1425"))) {
955b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB3;
956b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
957b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR1265"))) {
958b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB2;
959b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
960b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR885"))) {
961b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB1;
962b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
963b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[6], "BR660"))) {
964b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRBandMode = OMX_AUDIO_AMRBandModeWB0;
965b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode = %d \n", __LINE__, pAmrParam->eAMRBandMode);
966b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
967b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
968b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("\n%d :: App: pAmrParam->eAMRBandMode Sending Bad Parameter\n", __LINE__);
969b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Should Be One of these BitRates BR2385, BR2305, BR1985, BR1825, BR1585, BR1425, BR1265, BR885, BR660\n", __LINE__);
970b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
971b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
972b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
973b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("\n%d :: App: pAmrParam->eAMRBandMode --> %d \n", __LINE__, pAmrParam->eAMRBandMode);
974b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!(strcmp(argv[7], "DTXON"))) {
976b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /**< AMR Discontinuous Transmission Mode is enabled  */
977b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRDTXMode = OMX_AUDIO_AMRDTXModeOnVAD1;
978b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRDTXMode --> %s \n", __LINE__, argv[7]);
979b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (!(strcmp(argv[7], "DTXOFF"))) {
980b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /**< AMR Discontinuous Transmission Mode is disabled */
981b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam->eAMRDTXMode = OMX_AUDIO_AMRDTXModeOff;
982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("\n%d :: App: pAmrParam->eAMRDTXMode --> %s \n", __LINE__, argv[7]);
983b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
984b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
985b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("\n%d :: App: pAmrParam->eAMRDTXMode Sending Bad Parameter\n", __LINE__);
986b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Should Be One of these Modes DTXON, DTXOFF\n", __LINE__);
987b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
98836733d62c0d4c565da10b34978e587d0fda0f1adJames Dong        }
98936733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
99036733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#ifdef OMX_GETTIME
991b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioAmr, pAmrParam);
993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Set Parameter Test-SetParameter");
994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetParameter (pHandle, OMX_IndexParamAudioAmr, pAmrParam);
99636733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#endif
99736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
998b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
999b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
1000b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: OMX_ErrorBadParameter\n", __LINE__);
1001b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1002b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
100336733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
100436733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1005b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* setting for stream gain */
1006b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain = newmalloc (sizeof(OMX_AUDIO_CONFIG_VOLUMETYPE));
100736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pCompPrivateStructGain == NULL) {
1009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: App: Malloc Failed\n", __LINE__);
1010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
101236733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ArrayOfPointers[4] = (OMX_AUDIO_CONFIG_VOLUMETYPE*) pCompPrivateStructGain;
101436733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1015b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* default setting for gain */
1016b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->nSize = sizeof(OMX_AUDIO_CONFIG_VOLUMETYPE);
1017b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->nVersion.s.nVersionMajor    = 0xF1;
1018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->nVersion.s.nVersionMinor    = 0xF2;
1019b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->nPortIndex                  = OMX_DirOutput;
1020b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->bLinear                     = OMX_FALSE;
1021b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->sVolume.nValue              = 50;               /* actual volume */
1022b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->sVolume.nMin                = 0;                /* min volume */
1023b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivateStructGain->sVolume.nMax                = 100;              /* max volume */
1024b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1025b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1026b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (audioinfo->acousticMode == OMX_TRUE) {
1027b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Using Acoustic Devide Node Path\n");
1028b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            dataPath = DATAPATH_ACDN;
1029b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fprintf("HERE %d \n", __LINE__);
1030b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else if (audioinfo->dasfMode) {
1031b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RTM_PATH
1032b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Using Real Time Mixer Path\n");
1033b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            dataPath = DATAPATH_APPLICATION_RTMIXER;
1034b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fprintf("HERE %d \n", __LINE__);
103536733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#endif
103636733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1037b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef ETEEDN_PATH
1038b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Using Eteedn Path\n");
1039b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            dataPath = DATAPATH_APPLICATION;
1040b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fprintf("HERE %d \n", __LINE__);
104136733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#endif
1042b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
104336733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1044b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.index.config.wbamrheaderinfo", &index);
104536733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1046b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1047b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Error getting extension index\n");
1048b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1049b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1050b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1051b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef DSP_RENDERING_ON
1052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        cmd_data.hComponent = pHandle;
1053b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        cmd_data.AM_Cmd = AM_CommandIsInputStreamAvailable;
1054b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1055b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        cmd_data.param1 = 0;
1056b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((write(wbamrencfdwrite, &cmd_data, sizeof(cmd_data))) < 0) {
1058b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d ::WbAmrEncTest.c ::[WBAMR Enc Component] - send command to audio manager\n", __LINE__);
1059b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1060b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1061b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((read(wbamrencfdread, &cmd_data, sizeof(cmd_data))) < 0) {
1062b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d ::WbAmrEncTest.c ::[WBAMR Enc Component] - failure to get data from the audio manager\n", __LINE__);
1063b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1064b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1065b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1066b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        audioinfo->streamId = cmd_data.streamID;
1067b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        streamId = audioinfo->streamId;
1068b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1069b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1070b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetConfig (pHandle, index, audioinfo);
1071b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1072b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1073b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
1074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error from OMX_SetConfig() function\n", __LINE__);
1075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1077b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1078b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.index.config.wbamr.datapath", &index);
1079b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1080b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1081b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Error getting extension index\n");
1082b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1083b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1084b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1085b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SetConfig (pHandle, index, &dataPath);
1086b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1087b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1088b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorBadParameter;
1089b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: AmrDecTest.c :: Error from OMX_SetConfig() function\n", __LINE__);
1090b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
109136733d62c0d4c565da10b34978e587d0fda0f1adJames Dong        }
109236733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
109336733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#ifdef OMX_GETTIME
1094b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
109536733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#endif
1096b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
109736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1098b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1099b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("Error from SendCommand-Idle(Init) State function\n");
1100b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1101b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1102b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1103b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        sleep(1);
1104b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1106b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifndef USE_BUFFER
1107b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("%d :: About to call OMX_AllocateBuffer\n", __LINE__);
110836733d62c0d4c565da10b34978e587d0fda0f1adJames Dong
1109b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!DasfMode) {
1110b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* allocate input buffer */
1111b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            for (i = 0; i < numOfInputBuffer; i++) {
1112b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: About to call OMX_AllocateBuffer for pInputBufferHeader[%d]\n", __LINE__, i);
1113b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_AllocateBuffer(pHandle, &pInputBufferHeader[i], 0, NULL, WBAPP_INPUT_BUFFER_SIZE * 2);
1114b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1115b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (eError != OMX_ErrorNone) {
1116b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    APP_DPRINT("%d :: Error returned by OMX_AllocateBuffer for pInputBufferHeader[%d]\n", __LINE__, i);
1117b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto EXIT;
1118b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1119b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1120b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1121b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1122b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("\n%d :: App: pCompPrivateStruct->nBufferSize --> %ld \n", __LINE__, pCompPrivateStruct->nBufferSize);
1123b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1124b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < numOfOutputBuffer; i++) {
1125b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* allocate output buffer */
1126b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: About to call OMX_AllocateBuffer for pOutputBufferHeader[%d]\n", __LINE__, i);
1127b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_AllocateBuffer(pHandle, &pOutputBufferHeader[i], 1, NULL, pCompPrivateStruct->nBufferSize * 2);
1128b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1129b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1130b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: Error returned by OMX_AllocateBuffer for pOutputBufferHeader[%d]\n", __LINE__, i);
1131b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1132b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1133b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1134b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1135b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
1136b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1137b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!DasfMode) {
1138b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            for (i = 0; i < numOfInputBuffer; i++) {
1139b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pInputBuffer[i] = (OMX_U8*)newmalloc(WBAPP_INPUT_BUFFER_SIZE * 2 + 256);
1140b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_MEMPRINT("%d :: [TESTAPP ALLOC] pInputBuffer[%d] = %p\n", __LINE__, i, pInputBuffer[i]);
1141b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1142b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (NULL == pInputBuffer[i]) {
1143b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    APP_DPRINT("%d :: Malloc Failed\n", __LINE__);
1144b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    eError = OMX_ErrorInsufficientResources;
1145b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto EXIT;
1146b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1147b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1148b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pInputBuffer[i] = pInputBuffer[i] + 128;
1149b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1150b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                /*  allocate input buffer */
1151b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: About to call OMX_UseBuffer\n", __LINE__);
1152b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_UseBuffer(pHandle, &pInputBufferHeader[i], 0, NULL, WBAPP_INPUT_BUFFER_SIZE * 2, pInputBuffer[i]);
1153b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1154b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (eError != OMX_ErrorNone) {
1155b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    APP_DPRINT("%d :: Error returned by OMX_UseBuffer()\n", __LINE__);
1156eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong                    goto EXIT;
1157b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1158b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1160b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1161b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < numOfOutputBuffer; i++) {
1162b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pOutputBuffer[i] = newmalloc (pCompPrivateStruct->nBufferSize * 2 + 256);
1163b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_MEMPRINT("%d :: [TESTAPP ALLOC] pOutputBuffer[%d] = %p\n", __LINE__, i, pOutputBuffer[i]);
1164b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1165b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (NULL == pOutputBuffer[i]) {
1166b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: Malloc Failed\n", __LINE__);
1167b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorInsufficientResources;
1168b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1169b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1170b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1171b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pOutputBuffer[i] = pOutputBuffer[i] + 128;
1172b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1173b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* allocate output buffer */
1174b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: About to call OMX_UseBuffer\n", __LINE__);
1175b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_UseBuffer(pHandle, &pOutputBufferHeader[i], 1, NULL, pCompPrivateStruct->nBufferSize * 2, pOutputBuffer[i]);
1176b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1177b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1178b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: Error returned by OMX_UseBuffer()\n", __LINE__);
1179b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1181b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1184b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Wait for startup to complete */
1185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = WaitForState(pHandle, OMX_StateIdle);
1186b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1187b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to SendCommand <OMX_StateIdle & Allocated the buffers & Cleared it>");
1188b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1189b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1190b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1191b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "Error:  WaitForState reports an eError %X\n", eError);
1192b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1193b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1194b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1195b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (audioinfo->dasfMode) {
1196b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* get streamID back to application */
1197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_GetExtensionIndex(pHandle, "OMX.TI.index.config.wbamrstreamIDinfo", &index);
1198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1199b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1200b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("Error getting extension index\n");
1201b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1202b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1203b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1204b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_GetConfig (pHandle, index, streaminfo);
1205b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1207b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_ErrorBadParameter;
1208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: PcmDecTest.c :: Error from OMX_GetConfig() function\n", __LINE__);
1209b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1210b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1211b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            streamId = streaminfo->streamId;
1213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("***************StreamId=%d******************\n", (int)streamId);
1214b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1215b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1216b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < testcnt; i++) {
1217b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            frmCnt = 1;
1218b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            nFrameCount = 1;
1219b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            nOutBuff = 1;
1220b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            nIpBuff  = 1;
1221b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1222b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (i > 0) {
1223b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT ("%d :: Encoding the file for %d Time\n", __LINE__, i + 1);
1224b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                fIn = fopen(argv[1], "r");
1225b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1226b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (fIn == NULL) {
1227b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    fprintf(stderr, "Error:  failed to open the file %s for readonly access\n", argv[1]);
1228b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto EXIT;
1229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1230b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1231b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                fOut = fopen("TC5_WbAmr1.amr", "w");
1232b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1233b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (fOut == NULL) {
1234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    fprintf(stderr, "Error:  failed to create the output file %s\n", argv[2]);
1235b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto EXIT;
1236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1237b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1238b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1239b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: pAmrParam->eAMRBandMode --> %d \n", __LINE__, pAmrParam->eAMRBandMode);
1240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: pAmrParam->eAMRDTXMode --> %s \n", __LINE__, argv[4]);
1241b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: pCompPrivateStruct->format.audio.cMIMEType --> %s \n", __LINE__, pCompPrivateStruct->format.audio.cMIMEType);
1242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: Sending OMX_StateExecuting Command\n", __LINE__);
1244b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            GT_START()
1246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1247b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
1248b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1249b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("Error from SendCommand-Executing State function\n");
1251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = WaitForState(pHandle, OMX_StateExecuting);
1255b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1256b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            GT_END("Call to SendCommand <OMX_StateExecuting>");
1257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT( "Error:  WaitForState reports an eError %X\n", eError);
1261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1263b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1264b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (audioinfo->dasfMode ) {
1265b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_IPRINT("%d :: App: No.of Frames Encoding = %d\n", __LINE__, atoi(argv[10]));
1266b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pComponent = (OMX_COMPONENTTYPE *)pHandle;
1269b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1270b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (audioinfo->dasfMode == 0) {
1271b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                for (k = 0; k < numOfInputBuffer; k++) {
1272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    OMX_BUFFERHEADERTYPE* pBuffer = pInputBufferHeader[k];
1273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pBuffer->nFlags = 0;
1274b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1275b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1276b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if (k == 0) {
1277b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        GT_FlagE = 1;  /* 1 = First Buffer,  0 = Not First Buffer  */
1278b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        GT_START(); /* Empty Bufffer */
1279b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1280b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1281b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    eError =  send_input_buffer(pHandle, pBuffer, fIn);
1283b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1284b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1285b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1286b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            for (kk = 0; kk < numOfOutputBuffer; kk++) {
1287b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: App: Calling FillThisBuffer \n", __LINE__);
128836733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#ifdef OMX_GETTIME
1289b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1290b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (kk == 0) {
1291b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    GT_FlagF = 1;  /* 1 = First Buffer,  0 = Not First Buffer  */
1292b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    GT_START(); /* Fill Buffer */
1293b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1294b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
129536733d62c0d4c565da10b34978e587d0fda0f1adJames Dong#endif
1296b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1297b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponent->FillThisBuffer(pHandle, pOutputBufferHeader[kk]);
1298b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1299b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1300b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1301b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = pComponent->GetState(pHandle, &state);
1302b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1303b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (eError != OMX_ErrorNone) {
1304b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: pComponent->GetState has returned status %X\n", __LINE__, eError);
1305b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            retval = 1;
1309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1311b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifndef WAITFORRESOURCES
1312b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1313b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            while ( (eError == OMX_ErrorNone) && (state != OMX_StateIdle)  && (state != OMX_StateInvalid) ) {
1314b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (1) {
1315b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
1316b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1317b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            while (1) {
1318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if ((eError == OMX_ErrorNone) && (state != OMX_StateIdle) && (state != OMX_StateInvalid) ) {
1319b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1320b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    FD_ZERO(&rfds);
1321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    FD_SET(IpBuf_Pipe[0], &rfds);
1322b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    FD_SET(OpBuf_Pipe[0], &rfds);
1323b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    FD_SET(Event_Pipe[0], &rfds);
1324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    tv.tv_sec = 1;
1326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    tv.tv_usec = 0;
1327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    frmCount++;
1328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    retval = select(fdmax + 1, &rfds, NULL, NULL, &tv);
1329b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1330b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if (retval == -1) {
1331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        perror("select()");
1332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        APP_DPRINT( " :: Error \n");
1333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        break;
1334b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1336b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if (!retval) {
1337b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        NoDataRead++;
1338b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (NoDataRead == 2) {
1340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_IPRINT("Stoping component since No data is read from the pipes\n");
1341b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            StopComponent(pHandle);
1342b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    } else {
1344b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        NoDataRead = 0;
1345b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1346b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    switch (tcID) {
1348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 1:
1349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 2:
1350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 3:
1351b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 4:
1352b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 5:
1353b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 6:
1354b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        case 7:
1355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1356b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            if (audioinfo->dasfMode == 0) {
1357b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (FD_ISSET(IpBuf_Pipe[0], &rfds)) {
1358b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    OMX_BUFFERHEADERTYPE* pBuffer;
1359b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    read(IpBuf_Pipe[0], &pBuffer, sizeof(pBuffer));
1360b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1361b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    if ((frmCount == 14 || frmCount == 15) && tcID == 3) { /*Pause the component*/
1362b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        APP_IPRINT("App: Pausing Component for 2 Seconds\n");
1363b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        PauseComponent(pHandle);
1364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        sleep(2);
1365b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        APP_IPRINT("App: Resume Component\n");
1366b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        PlayComponent(pHandle);
1367b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    }
1368b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1369b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    if (frmCount == 20 && tcID == 4) { /*Stop the component*/
1370b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        tcID = 1;
1371b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        StopComponent(pHandle);
1372b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        break;
1373b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    }
1374b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1375b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    eError =  send_input_buffer(pHandle, pBuffer, fIn);
1376b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1377b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            } else {
1378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (frmCount == 15 && tcID == 3) { /*Pause the component*/
1379b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    tcID = 1;
1380b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_IPRINT("App: Pausing Component for 2 Seconds\n");
1381b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    PauseComponent(pHandle);
1382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    sleep(2);
1383b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_IPRINT("App: Resume Component\n");
1384b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    PlayComponent(pHandle);
1385b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1386b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1387b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (frmCount == 20 && tcID == 4) { /*Stop the component*/
1388b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    StopComponent(pHandle);
1389b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    break;
1390b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1391b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: WBAMR ENCODER RUNNING UNDER DASF MODE \n", __LINE__);
1393b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1394b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (nFrameCount == 10 && tcID == 7) {
1395b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    /* set high gain for record stream */
1396b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_IPRINT("[WBAMR encoder] --- will set stream gain to high\n");
1397b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    pCompPrivateStructGain->sVolume.nValue = 0x8000;
1398b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    eError = OMX_SetConfig(pHandle, OMX_IndexConfigAudioVolume, pCompPrivateStructGain);
1399b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1400b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    if (eError != OMX_ErrorNone) {
1401b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        eError = OMX_ErrorBadParameter;
1402b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        goto EXIT;
1403b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    }
1404b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1405b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1406b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (nFrameCount == 250 && tcID == 7) {
1407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    /* set low gain for record stream */
1408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_IPRINT("[WBAMR encoder] --- will set stream gain to low\n");
1409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    pCompPrivateStructGain->sVolume.nValue = 0x2000;
1410b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    eError = OMX_SetConfig(pHandle, OMX_IndexConfigAudioVolume, pCompPrivateStructGain);
1411b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1412b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    if (eError != OMX_ErrorNone) {
1413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        eError = OMX_ErrorBadParameter;
1414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                        goto EXIT;
1415b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    }
1416b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1418b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (nFrameCount == atoi(argv[10])) {
1419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    StopComponent(pHandle);
1420b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1421b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1422b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: WBAMR ENCODER READING DATA FROM DASF  \n", __LINE__);
1423b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1424b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1425b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            break;
1426b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        default:
1427b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_DPRINT("%d :: ### Simple DEFAULT Case Here ###\n", __LINE__);
1428b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1429b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1430b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if ( FD_ISSET(OpBuf_Pipe[0], &rfds) ) {
1431b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_BUFFERHEADERTYPE* pBuf;
1432b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        read(OpBuf_Pipe[0], &pBuf, sizeof(pBuf));
1433b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        APP_DPRINT("%d :: App: pBuf->nFilledLen = %ld\n", __LINE__, pBuf->nFilledLen);
1434b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        nFrameLen = pBuf->nFilledLen;
1435b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1436b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (!(strcmp(pCompPrivateStruct->format.audio.cMIMEType, "MIME"))) {
1437b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            if (1 == nFrameCount) {
1438b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                char MimeHeader[] = {0x23, 0x21, 0x41, 0x4d, 0x52, 0x2d, 0x57, 0x42, 0x0a};
1439b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                fwrite(MimeHeader, 1, WBAMRENC_MIME_HEADER_LEN, fOut);
1440b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                fflush(fOut);
1441b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_IPRINT("%d :: App: MIME Supported:: FrameLen = %d\n", __LINE__, nFrameLen);
1442b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1444b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1445b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        APP_DPRINT("%d :: App: nFrameLen = %d \n", __LINE__, nFrameLen);
1446b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1447b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (nFrameLen != 0) {
1448b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_DPRINT("%d :: Writing OutputBuffer No: %d to the file nWrite = %d \n", __LINE__, nOutBuff, nFrameLen);
1449b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            fwrite(pBuf->pBuffer, 1, nFrameLen, fOut);
1450b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            fflush(fOut);
1451b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1452b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1453b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (pBuf->nFlags == OMX_BUFFERFLAG_EOS) {
1454b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_IPRINT("%d :: App: OMX_BUFFERFLAG_EOS is received\n", __LINE__);
1455b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_IPRINT("%d :: App: Shutting down ---------- \n", __LINE__);
1456b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            StopComponent(pHandle);
1457b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            pBuf->nFlags = 0;
1458b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        } else {
1459b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            nFrameCount++;
1460b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            nOutBuff++;
1461b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            pComponent->FillThisBuffer(pHandle, pBuf);
1462b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_DPRINT("%d :: App: pBuf->nFlags = %ld\n", __LINE__, pBuf->nFlags);
1463b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1464b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1465b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1466b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if ( FD_ISSET(Event_Pipe[0], &rfds) ) {
1467b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_U8 pipeContents;
1468b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        read(Event_Pipe[0], &pipeContents, sizeof(OMX_U8));
1469b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1470b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (pipeContents == 0) {
1471b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_IPRINT("Test app received OMX_ErrorResourcesPreempted\n");
1472b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateIdle);
1473b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1474b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfInputBuffer; i++) {
1475b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: App: About to newfree pInputBufferHeader[%d]\n", __LINE__, i);
1476b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                eError = OMX_FreeBuffer(pHandle, WBAPP_INPUT_PORT, pInputBufferHeader[i]);
1477b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1478b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if ((eError != OMX_ErrorNone)) {
1479b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_DPRINT("%d:: Error in FreeBuffer function\n", __LINE__);
1480b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    goto EXIT;
1481b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1482b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1483b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1484b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfOutputBuffer; i++) {
1486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: App: About to newfree pOutputBufferHeader[%d]\n", __LINE__, i);
1487b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                eError = OMX_FreeBuffer(pHandle, WBAPP_OUTPUT_PORT, pOutputBufferHeader[i]);
1488b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1489b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if ((eError != OMX_ErrorNone)) {
1490b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_DPRINT("%d :: Error in Free Buffer function\n", __LINE__);
1491b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    goto EXIT;
1492b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1493b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1494b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1495b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1496b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef USE_BUFFER
1497b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1498b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfInputBuffer; i++) {
1499b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (pInputBuffer[i] != NULL) {
1500b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_MEMPRINT("%d :: App: [TESTAPPFREE] pInputBuffer[%d] = %p\n", __LINE__, i, pInputBuffer[i]);
1501b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    pInputBuffer[i] = pInputBuffer[i] - 128;
1502b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    newfree(pInputBuffer[i]);
1503b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    pInputBuffer[i] = NULL;
1504b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1505b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1506b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1507b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1508b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1509b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateLoaded, NULL);
1510b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateLoaded);
1511b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1512b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateWaitForResources, NULL);
1513b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateWaitForResources);
1514b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        } else if (pipeContents == 1) {
1515b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            APP_IPRINT("Test app received OMX_ErrorResourcesAcquired\n");
1516b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfOutputBuffer; i++) {
1520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                /* allocate output buffer */
1521b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: About to call OMX_AllocateBuffer for pOutputBufferHeader[%d]\n", __LINE__, i);
1522b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                eError = OMX_AllocateBuffer(pHandle, &pOutputBufferHeader[i], 1, NULL, pCompPrivateStruct->nBufferSize * 2);
1523b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1524b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if (eError != OMX_ErrorNone) {
1525b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_DPRINT("%d :: Error returned by OMX_AllocateBuffer for pOutputBufferHeader[%d]\n", __LINE__, i);
1526b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    goto EXIT;
1527b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1528b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1530b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateIdle);
1531b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1532b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
1533b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateExecuting);
1534b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1535b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            rewind(fIn);
1536b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1537b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfInputBuffer; i++) {
1538b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                send_input_buffer (pHandle, pOutputBufferHeader[i], fIn);
1539b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1541b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        if (pipeContents == 2) {
1543b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1544b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1545b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            GT_START();
1546b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1547b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1549b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateIdle);
1550b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1551b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1552b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            GT_END("Call to SendCommand <OMX_StateIdle>");
1553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1554b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1555b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef WAITFORRESOURCES
1556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfInputBuffer; i++) {
1558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: App: About to newfree pInputBufferHeader[%d]\n", __LINE__, i);
1559b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                eError = OMX_FreeBuffer(pHandle, WBAPP_INPUT_PORT, pInputBufferHeader[i]);
1560b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1561b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if ((eError != OMX_ErrorNone)) {
1562b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_DPRINT("%d:: Error in FreeBuffer function\n", __LINE__);
1563b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    goto EXIT;
1564b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1566b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1567b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1568b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            for (i = 0; i < numOfOutputBuffer; i++) {
1569b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                APP_DPRINT("%d :: App: About to newfree pOutputBufferHeader[%d]\n", __LINE__, i);
1570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                eError = OMX_FreeBuffer(pHandle, WBAPP_OUTPUT_PORT, pOutputBufferHeader[i]);
1571b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1572b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                if ((eError != OMX_ErrorNone)) {
1573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    APP_DPRINT("%d :: Error in Free Buffer function\n", __LINE__);
1574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                    goto EXIT;
1575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                }
1576b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            }
1578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateLoaded, NULL);
1580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            WaitForState(pHandle, OMX_StateLoaded);
1581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1582b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            goto SHUTDOWN;
1583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1584b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        }
1585b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    eError = pComponent->GetState(pHandle, &state);
1589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    if (eError != OMX_ErrorNone) {
1591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        APP_DPRINT("%d :: pComponent->GetState has returned status %X\n", __LINE__, eError);
1592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        goto EXIT;
1593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    }
1594b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                } else if (preempted) {
1596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    sched_yield();
1597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                } else {
1598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto SHUTDOWN;
1599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            } /* While Loop Ending Here */
1602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: The current state of the component = %d \n", __LINE__, state);
1604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fclose(fOut);
1605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fclose(fIn);
1606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            FirstTime = 1;
1607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            NoDataRead = 0;
1608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (tcID == 4)
1610b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                tcID = 1;
1611b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: App: WBAMR Encoded = %d Frames \n", __LINE__, (nOutBuff));
1613b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } /*Test Case 4 & 5 Inner for loop ends here  */
1614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1615b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* newfree the Allocate and Use Buffers */
1616b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Freeing the Allocate OR Use Buffers in TestApp\n", __LINE__);
1617b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1618b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!DasfMode) {
1619b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            for (i = 0; i < numOfInputBuffer; i++) {
1620b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: App: About to newfree pInputBufferHeader[%d]\n", __LINE__, i);
1621b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                eError = OMX_FreeBuffer(pHandle, WBAPP_INPUT_PORT, pInputBufferHeader[i]);
1622b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1623b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if ((eError != OMX_ErrorNone)) {
1624b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    APP_DPRINT("%d:: Error in FreeBuffer function\n", __LINE__);
1625b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    goto EXIT;
1626b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1627b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1628b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1629b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1630b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < numOfOutputBuffer; i++) {
1631b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: App: About to newfree pOutputBufferHeader[%d]\n", __LINE__, i);
1632b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_FreeBuffer(pHandle, WBAPP_OUTPUT_PORT, pOutputBufferHeader[i]);
1633b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1634b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if ((eError != OMX_ErrorNone)) {
1635b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_DPRINT("%d :: Error in Free Buffer function\n", __LINE__);
1636b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto EXIT;
1637b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1638b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1639b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1640b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef USE_BUFFER
1641b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* newfree the App Allocated Buffers */
1642b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Freeing the App Allocated Buffers in TestApp\n", __LINE__);
1643b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1644b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!DasfMode) {
1645b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            for (i = 0; i < numOfInputBuffer; i++) {
1646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (pInputBuffer[i] != NULL) {
1647b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    APP_MEMPRINT("%d :: App: [TESTAPPFREE] pInputBuffer[%d] = %p\n", __LINE__, i, pInputBuffer[i]);
1648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pInputBuffer[i] = pInputBuffer[i] - 128;
1649b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    newfree(pInputBuffer[i]);
1650b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pInputBuffer[i] = NULL;
1651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
1652b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1653b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1654b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < numOfOutputBuffer; i++) {
1656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (pOutputBuffer[i] != NULL) {
1657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                APP_MEMPRINT("%d :: App: [TESTAPPFREE] pOutputBuffer[%d] = %p\n", __LINE__, i, pOutputBuffer[i]);
1658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pOutputBuffer[i] = pOutputBuffer[i] - 128;
1659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                newfree(pOutputBuffer[i]);
1660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pOutputBuffer[i] = NULL;
1661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
1662b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1664b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1665b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT ("%d :: App: Sending the OMX_StateLoaded Command\n", __LINE__);
1666b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1667b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
1668b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateLoaded, NULL);
1670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1672b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d:: Error from SendCommand-Idle State function\n", __LINE__);
1673b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1676b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = WaitForState(pHandle, OMX_StateLoaded);
1677b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1678b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to SendCommand <OMX_StateLoaded>");
1679b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1680b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1681b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1682b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT( "Error:  WaitForState reports an eError %X\n", eError);
1683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1684b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1685b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1686b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT ("%d :: App: Sending the OMX_CommandPortDisable Command\n", __LINE__);
1687b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SendCommand(pHandle, OMX_CommandPortDisable, -1, NULL);
1688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d:: Error from SendCommand OMX_CommandPortDisable\n", __LINE__);
1691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef WAITFORRESOURCES
1696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateWaitForResources, NULL);
1697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1698b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (eError != OMX_ErrorNone) {
1699b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT ("%d Error from SendCommand-Idle State function\n", __LINE__);
1700b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1701b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1702b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1703b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = WaitForState(pHandle, OMX_StateWaitForResources);
1704b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1705b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* temporarily put this here until I figure out what should really happen here */
1706b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        sleep(10);
1707b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* temporarily put this here until I figure out what should really happen here */
1708b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1709b65f253fdc60f6208a54911bee793d225f23cdf8James DongSHUTDOWN:
1710b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1711b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1712b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Freeing the Memory Allocated in TestApp\n", __LINE__);
1713b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1714b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n", __LINE__, pAmrParam);
1715b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1716b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pAmrParam != NULL) {
1717b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(pAmrParam);
1718b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pAmrParam = NULL;
1719b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1720b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n", __LINE__, pCompPrivateStruct);
1722b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pCompPrivateStruct != NULL) {
1724b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(pCompPrivateStruct);
1725b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivateStruct = NULL;
1726b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1727b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1728b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_MEMPRINT("%d :: App: [TESTAPPFREE] %p\n", __LINE__, audioinfo);
1729b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1730b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (audioinfo != NULL) {
1731b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(audioinfo);
1732b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            audioinfo = NULL;
1733b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1734b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1735b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (streaminfo != NULL) {
1736b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(streaminfo);
1737b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            streaminfo = NULL;
1738b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1739b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1740b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Closing the Input and Output Pipes\n", __LINE__);
1741b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close (IpBuf_Pipe[0]);
1742b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1743b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1744b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1745b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing IpBuf_Pipe[0]\n", __LINE__);
1746b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1747b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1748b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close (IpBuf_Pipe[1]);
1750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1751b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1753b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing IpBuf_Pipe[1]\n", __LINE__);
1754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1756b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close (OpBuf_Pipe[0]);
1758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1761b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing OpBuf_Pipe[0]\n", __LINE__);
1762b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1763b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1764b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1765b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close (OpBuf_Pipe[1]);
1766b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1767b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1768b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1769b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing OpBuf_Pipe[1]\n", __LINE__);
1770b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1771b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1772b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1773b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1774b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close(Event_Pipe[0]);
1775b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1776b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1778b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing Event_Pipe[0]\n", __LINE__);
1779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1780b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1781b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1782b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = close(Event_Pipe[1]);
1783b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1784b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (0 != eError && OMX_ErrorNone == eError) {
1785b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
1786b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error while closing Event_Pipe[1]\n", __LINE__);
1787b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1788b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1789b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1790b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1791b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Free the Component handle\n", __LINE__);
1792b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Unload the WBAMR Encoder Component */
1793b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = TIOMX_FreeHandle(pHandle);
1794b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1795b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((eError != OMX_ErrorNone)) {
1796b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT("%d :: Error in Free Handle function\n", __LINE__);
1797b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1798b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1799b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1800b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1801b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1802b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1803b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: App: Free Handle returned Successfully\n", __LINE__);
1804b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1805b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("%d :: Deleting %p\n", __LINE__, pCompPrivateStructGain);
1806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        newfree(pCompPrivateStructGain);
1807b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1808b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef DSP_RENDERING_ON
1809b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        cmd_data.hComponent = pHandle;
1810b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        cmd_data.AM_Cmd = AM_Exit;
1811b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1812b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((write(wbamrencfdwrite, &cmd_data, sizeof(cmd_data))) < 0)
1813b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d ::- send command to audio manager\n", __LINE__);
1814b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1815b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        close(wbamrencfdwrite);
1816b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        close(wbamrencfdread);
1817b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1818b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1819b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1820b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1821b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } /*Outer for loop ends here */
1822b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1823b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1824b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1825b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d :: *********************************************************************\n", __LINE__);
1826b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d :: NOTE: An output file %s has been created in file system\n", __LINE__, argv[2]);
1827b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d :: *********************************************************************\n", __LINE__);
1828b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1829b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    eError = TIOMX_Deinit();
1830b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1831b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( (eError != OMX_ErrorNone)) {
1832b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_DPRINT("APP: Error in Deinit Core function\n");
1833b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
1834b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1835b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1836b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_mutex_destroy(&WaitForState_mutex);
1837b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_cond_destroy(&WaitForState_threshold);
1838b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1839b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
1840b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1841b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (bInvalidState == OMX_TRUE) {
1842b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifndef USE_BUFFER
1843b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = FreeAllResources(pHandle,
1844b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  pInputBufferHeader[0],
1845b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  pOutputBufferHeader[0],
1846b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  numOfInputBuffer,
1847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  numOfOutputBuffer,
1848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  fIn,
1849b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  fOut);
1850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
1851b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = FreeAllResources(pHandle,
1852b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  pInputBuffer,
1853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  pOutputBuffer,
1854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  numOfInputBuffer,
1855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  numOfOutputBuffer,
1856b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  fIn,
1857b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                  fOut);
1858b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1859b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1860b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1861b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef APP_DEBUGMEM
1862b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("\n-Printing memory not deleted-\n");
1863b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1864b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < 500; i++) {
1865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (lines[i] != 0) {
1866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT(" --->%d Bytes allocated on File:%s Line: %d\n", bytes[i], file[i], lines[i]);
1867b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1868b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1869b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1870b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1871b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1872b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_END("WBAMR_ENC test <End>");
1874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ListDestroy(pListHead);
1875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return eError;
1877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong}
1878b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1880b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE send_input_buffer(OMX_HANDLETYPE pHandle, OMX_BUFFERHEADERTYPE* pBuffer, FILE *fIn) {
1881b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE error = OMX_ErrorNone;
1882b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1883b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1884b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (FirstTime) {
1885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (mframe) {
1886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            nRead = fread(pBuffer->pBuffer, 1, WBAPP_INPUT_BUFFER_SIZE * 2, fIn);
1887b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        } else {
1888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            nRead = fread(pBuffer->pBuffer, 1, WBAPP_INPUT_BUFFER_SIZE, fIn);
1889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1891b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pBuffer->nFilledLen = nRead;
1892b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else {
1893b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pBuffer->pBuffer, NextBuffer, nRead);
1894b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pBuffer->nFilledLen = nRead;
1895b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1896b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1897b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (mframe) {
1898b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        nRead = fread(NextBuffer, 1, WBAPP_INPUT_BUFFER_SIZE * 2, fIn);
1899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else {
1900b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        nRead = fread(NextBuffer, 1, WBAPP_INPUT_BUFFER_SIZE, fIn);
1901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1902b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1903b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (nRead < WBAPP_INPUT_BUFFER_SIZE && !DasfMode) {
1904b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1905b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1906b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_START();
1907b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1908b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        error = WaitForState(pHandle, OMX_StateIdle);
1910b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1911b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        GT_END("Call to SendCommand <OMX_StateIdle>");
1912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1914b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (error != OMX_ErrorNone) {
1915b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_DPRINT ("%d :: Error from SendCommand-Idle(Stop) State function\n", __LINE__);
1916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto EXIT;
1917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pBuffer->nFlags = OMX_BUFFERFLAG_EOS;
1920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    } else {
1921b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pBuffer->nFlags = 0;
1922b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1923b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1924b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pBuffer->nFilledLen != 0) {
1925b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pBuffer->nFlags == OMX_BUFFERFLAG_EOS) {
1926b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("Sending Last Input Buffer from App\n");
1927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1929b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pBuffer->nTimeStamp = rand() % 100;
1930b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1931b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (!preempted) {
1932b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            error = pComponent->EmptyThisBuffer(pHandle, pBuffer);
1933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1934b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if (error == OMX_ErrorIncorrectStateOperation)
1935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                error = 0;
1936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
1937b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1938b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1939b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    FirstTime = 0;
1940b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
1941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return error;
1942b65f253fdc60f6208a54911bee793d225f23cdf8James Dong}
1943b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE StopComponent(OMX_HANDLETYPE *pHandle) {
1944b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE error = OMX_ErrorNone;
1945b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_START();
1947b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1948b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1949b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d :: APP: Sending Stop.........From APP \n", __LINE__);
1950b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1951b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateIdle, NULL);
1952b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1953b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
1954b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf(stderr, "\nError from SendCommand-Idle(Stop) State function!!!!!!!!\n");
1955b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
1956b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1957b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1958b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = WaitForState(pHandle, OMX_StateIdle);
1959b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_GETTIME
1960b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_END("Call to SendCommand <OMX_StateIdle>");
1961b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1962b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1963b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
1964b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf(stderr, "\nError:  WaitForState reports an error %X!!!!!!!\n", error);
1965b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
1966b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1967b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1972b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE PauseComponent(OMX_HANDLETYPE *pHandle) {
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
1975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_START();
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1977b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StatePause, NULL);
1978b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1979b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
1980b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf (stderr, "\nError from SendCommand-Pause State function!!!!!!\n");
1981b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
1982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1983b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1984b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = WaitForState(pHandle, OMX_StatePause);
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
1987b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_END("Call to SendCommand <OMX_StatePause>");
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1989b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1990b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
1991b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf(stderr, "\nError:  WaitForState reports an error %X!!!!!!!\n", error);
1992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
1993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1999b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE PlayComponent(OMX_HANDLETYPE *pHandle) {
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorNone;
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
2002b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_START();
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2004b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = OMX_SendCommand(pHandle, OMX_CommandStateSet, OMX_StateExecuting, NULL);
2005b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2006b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
2007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf (stderr, "\nError from SendCommand-Executing State function!!!!!!!\n");
2008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
2009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    error = WaitForState(pHandle, OMX_StateExecuting);
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef OMX_GETTIME
2013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    GT_END("Call to SendCommand <OMX_StateExecuting>");
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2015b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2016b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (error != OMX_ErrorNone) {
2017b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        fprintf(stderr, "\nError:  WaitForState reports an error %X!!!!!!!\n", error);
2018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
2019b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2020b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=================================================================
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2026b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            Freeing All allocated resources
2027b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin==================================================================*/
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef USE_BUFFER
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint FreeAllResources( OMX_HANDLETYPE *pHandle,
2031b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_BUFFERHEADERTYPE* pBufferIn,
2032b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      OMX_BUFFERHEADERTYPE* pBufferOut,
2033b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      int NIB, int NOB,
2034b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                      FILE* fileIn, FILE* fileOut) {
2035b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d::Freeing all resources by state invalid \n", __LINE__);
2036b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE eError = OMX_ErrorNone;
2037b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U16 i;
2038b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2039b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (!DasfMode) {
2040b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        for (i = 0; i < NIB; i++) {
2041b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            APP_IPRINT("%d :: APP: About to free pInputBufferHeader[%d]\n", __LINE__, i);
2042b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_FreeBuffer(pHandle, OMX_DirInput, pBufferIn + i);
2043b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2044b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
2045b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2046b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2047b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < NOB; i++) {
2048b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: APP: About to free pOutputBufferHeader[%d]\n", __LINE__, i);
2049b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_FreeBuffer(pHandle, OMX_DirOutput, pBufferOut + i);
2050b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2051b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /*i value is fixed by the number calls to malloc in the App */
2053b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < 5; i++) {
2054b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (ArrayOfPointers[i] != NULL)
2055b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            free(ArrayOfPointers[i]);
2056b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2058b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    TIOMX_FreeHandle(pHandle);
2059b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2060b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return eError;
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=================================================================
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2066b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            Freeing the resources with USE_BUFFER define
2067b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin==================================================================*/
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint FreeAllResources(OMX_HANDLETYPE *pHandle,
2072b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                     OMX_U8* UseInpBuf[],
2073b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                     OMX_U8* UseOutBuf[],
2074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                     int NIB, int NOB,
2075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                     FILE* fileIn, FILE* fileOut) {
2076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2077b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_ERRORTYPE eError = OMX_ErrorNone;
2078b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U16 i;
2079b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    APP_IPRINT("%d::Freeing all resources by state invalid \n", __LINE__);
2080b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2081b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* free the UseBuffers */
2082b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < NIB; i++) {
2083b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        UseInpBuf[i] = UseInpBuf[i] - 128;
2084b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: [TESTAPPFREE] pInputBuffer[%d] = %p\n", __LINE__, i, (UseInpBuf[i]));
2085b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2086b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (UseInpBuf[i] != NULL) {
2087b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(UseInpBuf[i]);
2088b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            UseInpBuf[i] = NULL;
2089b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
2090b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2091b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2092b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < NOB; i++) {
2093b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        UseOutBuf[i] = UseOutBuf[i] - 128;
2094b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        APP_IPRINT("%d :: [TESTAPPFREE] pOutputBuffer[%d] = %p\n", __LINE__, i, UseOutBuf[i]);
2095b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2096b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (UseOutBuf[i] != NULL) {
2097b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            newfree(UseOutBuf[i]);
2098b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            UseOutBuf[i] = NULL;
2099b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
2100b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2101b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2102b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /*i value is fixed by the number calls to malloc in the App */
2103b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (i = 0; i < 5; i++) {
2104b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (ArrayOfPointers[i] != NULL)
2105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            free(ArrayOfPointers[i]);
2106b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
2107b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2108b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_FreeHandle(pHandle);
2109b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2110b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return eError;
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2114