• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <ctype.h>
15 
16 //#include "isac_codec.h"
17 //#include "isac_structs.h"
18 #include "isacfix.h"
19 
20 
21 #define NUM_CODECS 1
22 
main(int argc,char * argv[])23 int main(int argc, char* argv[])
24 {
25     FILE *inFileList;
26     FILE *audioFile;
27     FILE *outFile;
28     char audioFileName[501];
29     short audioBuff[960];
30     short encoded[600];
31     short startAudio;
32     short encodedLen;
33     ISACFIX_MainStruct *isac_struct;
34     unsigned long int hist[601];
35 
36     // reset the histogram
37     for(short n=0; n < 601; n++)
38     {
39         hist[n] = 0;
40     }
41 
42 
43     inFileList = fopen(argv[1], "r");
44     if(inFileList == NULL)
45     {
46         printf("Could not open the input file.\n");
47         getchar();
48         exit(-1);
49     }
50     outFile = fopen(argv[2], "w");
51     if(outFile == NULL)
52     {
53         printf("Could not open the histogram file.\n");
54         getchar();
55         exit(-1);
56     }
57 
58     short frameSizeMsec = 30;
59     if(argc > 3)
60     {
61         frameSizeMsec = atoi(argv[3]);
62     }
63 
64     short audioOffset = 0;
65     if(argc > 4)
66     {
67         audioOffset = atoi(argv[4]);
68     }
69     int ok;
70     ok = WebRtcIsacfix_Create(&isac_struct);
71     // instantaneous mode
72     ok |= WebRtcIsacfix_EncoderInit(isac_struct, 1);
73     // is not used but initialize
74     ok |= WebRtcIsacfix_DecoderInit(isac_struct);
75     ok |= WebRtcIsacfix_Control(isac_struct, 32000, frameSizeMsec);
76 
77     if(ok != 0)
78     {
79         printf("\nProblem in seting up iSAC\n");
80         exit(-1);
81     }
82 
83     while( fgets(audioFileName, 500, inFileList) != NULL )
84     {
85         // remove trailing white-spaces and any Cntrl character
86         if(strlen(audioFileName) == 0)
87         {
88             continue;
89         }
90         short n = strlen(audioFileName) - 1;
91         while(isspace(audioFileName[n]) || iscntrl(audioFileName[n]))
92         {
93             audioFileName[n] = '\0';
94             n--;
95             if(n < 0)
96             {
97                 break;
98             }
99         }
100 
101         // remove leading spaces
102         if(strlen(audioFileName) == 0)
103         {
104             continue;
105         }
106         n = 0;
107         while((isspace(audioFileName[n]) || iscntrl(audioFileName[n])) &&
108             (audioFileName[n] != '\0'))
109         {
110             n++;
111         }
112         memmove(audioFileName, &audioFileName[n], 500 - n);
113         if(strlen(audioFileName) == 0)
114         {
115             continue;
116         }
117         audioFile = fopen(audioFileName, "rb");
118         if(audioFile == NULL)
119         {
120             printf("\nCannot open %s!!!!!\n", audioFileName);
121             exit(0);
122         }
123 
124         if(audioOffset > 0)
125         {
126             fseek(audioFile, (audioOffset<<1), SEEK_SET);
127         }
128 
129         while(fread(audioBuff, sizeof(short), (480*frameSizeMsec/30), audioFile) >= (480*frameSizeMsec/30))
130         {
131             startAudio = 0;
132             do
133             {
134                 encodedLen = WebRtcIsacfix_Encode(isac_struct,
135                                                   &audioBuff[startAudio], encoded);
136                 startAudio += 160;
137             } while(encodedLen == 0);
138 
139             if(encodedLen < 0)
140             {
141                 printf("\nEncoding Error!!!\n");
142                 exit(0);
143             }
144             hist[encodedLen]++;
145         }
146         fclose(audioFile);
147     }
148     fclose(inFileList);
149     unsigned long totalFrames = 0;
150     for(short n=0; n < 601; n++)
151     {
152         totalFrames += hist[n];
153         fprintf(outFile, "%10lu\n", hist[n]);
154     }
155     fclose(outFile);
156 
157     short topTenCntr = 0;
158     printf("\nTotal number of Frames %lu\n\n", totalFrames);
159     printf("Payload Len    # occurences\n");
160     printf("===========    ============\n");
161 
162     for(short n = 600; (n >= 0) && (topTenCntr < 10); n--)
163     {
164         if(hist[n] > 0)
165         {
166             topTenCntr++;
167             printf("    %3d            %3d\n", n, hist[n]);
168         }
169     }
170     WebRtcIsacfix_Free(isac_struct);
171     return 0;
172 }
173 
174