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