diff options
Diffstat (limited to 'src/modules/audio_coding/codecs/isac/fix/test/ISACHist.cc')
-rw-r--r-- | src/modules/audio_coding/codecs/isac/fix/test/ISACHist.cc | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/modules/audio_coding/codecs/isac/fix/test/ISACHist.cc b/src/modules/audio_coding/codecs/isac/fix/test/ISACHist.cc new file mode 100644 index 0000000000..753acd7e65 --- /dev/null +++ b/src/modules/audio_coding/codecs/isac/fix/test/ISACHist.cc @@ -0,0 +1,173 @@ +/* + * 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; +} + |