blob: 753acd7e658cc9580769c6831422070fcfc3fe6c [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//#include "isac_codec.h"
//#include "isac_structs.h"
#include "isacfix.h"
#define NUM_CODECS 1
int main(int argc, char* argv[])
{
FILE *inFileList;
FILE *audioFile;
FILE *outFile;
char audioFileName[501];
short audioBuff[960];
short encoded[600];
short startAudio;
short encodedLen;
ISACFIX_MainStruct *isac_struct;
unsigned long int hist[601];
// reset the histogram
for(short n=0; n < 601; n++)
{
hist[n] = 0;
}
inFileList = fopen(argv[1], "r");
if(inFileList == NULL)
{
printf("Could not open the input file.\n");
getchar();
exit(-1);
}
outFile = fopen(argv[2], "w");
if(outFile == NULL)
{
printf("Could not open the histogram file.\n");
getchar();
exit(-1);
}
short frameSizeMsec = 30;
if(argc > 3)
{
frameSizeMsec = atoi(argv[3]);
}
short audioOffset = 0;
if(argc > 4)
{
audioOffset = atoi(argv[4]);
}
int ok;
ok = WebRtcIsacfix_Create(&isac_struct);
// instantaneous mode
ok |= WebRtcIsacfix_EncoderInit(isac_struct, 1);
// is not used but initialize
ok |= WebRtcIsacfix_DecoderInit(isac_struct);
ok |= WebRtcIsacfix_Control(isac_struct, 32000, frameSizeMsec);
if(ok != 0)
{
printf("\nProblem in seting up iSAC\n");
exit(-1);
}
while( fgets(audioFileName, 500, inFileList) != NULL )
{
// remove trailing white-spaces and any Cntrl character
if(strlen(audioFileName) == 0)
{
continue;
}
short n = strlen(audioFileName) - 1;
while(isspace(audioFileName[n]) || iscntrl(audioFileName[n]))
{
audioFileName[n] = '\0';
n--;
if(n < 0)
{
break;
}
}
// remove leading spaces
if(strlen(audioFileName) == 0)
{
continue;
}
n = 0;
while((isspace(audioFileName[n]) || iscntrl(audioFileName[n])) &&
(audioFileName[n] != '\0'))
{
n++;
}
memmove(audioFileName, &audioFileName[n], 500 - n);
if(strlen(audioFileName) == 0)
{
continue;
}
audioFile = fopen(audioFileName, "rb");
if(audioFile == NULL)
{
printf("\nCannot open %s!!!!!\n", audioFileName);
exit(0);
}
if(audioOffset > 0)
{
fseek(audioFile, (audioOffset<<1), SEEK_SET);
}
while(fread(audioBuff, sizeof(short), (480*frameSizeMsec/30), audioFile) >= (480*frameSizeMsec/30))
{
startAudio = 0;
do
{
encodedLen = WebRtcIsacfix_Encode(isac_struct,
&audioBuff[startAudio], encoded);
startAudio += 160;
} while(encodedLen == 0);
if(encodedLen < 0)
{
printf("\nEncoding Error!!!\n");
exit(0);
}
hist[encodedLen]++;
}
fclose(audioFile);
}
fclose(inFileList);
unsigned long totalFrames = 0;
for(short n=0; n < 601; n++)
{
totalFrames += hist[n];
fprintf(outFile, "%10lu\n", hist[n]);
}
fclose(outFile);
short topTenCntr = 0;
printf("\nTotal number of Frames %lu\n\n", totalFrames);
printf("Payload Len # occurences\n");
printf("=========== ============\n");
for(short n = 600; (n >= 0) && (topTenCntr < 10); n--)
{
if(hist[n] > 0)
{
topTenCntr++;
printf(" %3d %3d\n", n, hist[n]);
}
}
WebRtcIsacfix_Free(isac_struct);
return 0;
}