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