git-svn-id: http://webrtc.googlecode.com/svn/trunk@4 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
iLBC 1.0.4
|
||||
|
||||
Folder is intentionally empty.
|
||||
This is the location where the test script will put the generated output files (.BITXX and .OUTXX).
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 156 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
Test and reference vectors to verify correct execution of PacketCable
|
||||
iLBC Fixed Point Reference Code
|
||||
|
||||
Version 1.0.6
|
||||
Format: all .INP and .OUT files contain 16 bit sampled data using the
|
||||
Intel (PC) format. The .BIT files are stored in the appropriate byte
|
||||
sequence (big-endian format).
|
||||
|
||||
*.INP - input files (located in the ../inFiles/ directory)
|
||||
*.BIT20 - bit stream files 20 ms mode
|
||||
*.OUT20 - output files 20 ms mode (on a channel without packet loss)
|
||||
*.BIT30 - bit stream files 30 ms mode
|
||||
*.OUT30 - output files 30 ms mode (on a channel without packet loss)
|
||||
239
modules/audio_coding/codecs/iLBC/main/test/iLBC_test.c
Normal file
239
modules/audio_coding/codecs/iLBC/main/test/iLBC_test.c
Normal file
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/******************************************************************
|
||||
|
||||
iLBC Speech Coder ANSI-C Source Code
|
||||
|
||||
iLBC_test.c
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "ilbc.h"
|
||||
|
||||
/*---------------------------------------------------------------*
|
||||
* Main program to test iLBC encoding and decoding
|
||||
*
|
||||
* Usage:
|
||||
* exefile_name.exe <infile> <bytefile> <outfile> <channel>
|
||||
*
|
||||
* <infile> : Input file, speech for encoder (16-bit pcm file)
|
||||
* <bytefile> : Bit stream output from the encoder
|
||||
* <outfile> : Output file, decoded speech (16-bit pcm file)
|
||||
* <channel> : Bit error file, optional (16-bit)
|
||||
* 1 - Packet received correctly
|
||||
* 0 - Packet Lost
|
||||
*
|
||||
*--------------------------------------------------------------*/
|
||||
|
||||
#define BLOCKL_MAX 240
|
||||
#define ILBCNOOFWORDS_MAX 25
|
||||
#define ILBCSCRATCHMEMSIZE 2156
|
||||
|
||||
#ifdef __ILBC_WITH_SCRATCHMEM
|
||||
WebRtc_Word16 iLBC_ScratchMem[ILBCSCRATCHMEMSIZE];
|
||||
WebRtc_Word16 size;
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
FILE *ifileid,*efileid,*ofileid, *cfileid;
|
||||
WebRtc_Word16 data[BLOCKL_MAX];
|
||||
WebRtc_Word16 encoded_data[ILBCNOOFWORDS_MAX], decoded_data[BLOCKL_MAX];
|
||||
int len;
|
||||
short pli, mode;
|
||||
int blockcount = 0;
|
||||
int packetlosscount = 0;
|
||||
int frameLen;
|
||||
WebRtc_Word16 speechType;
|
||||
iLBC_encinst_t *Enc_Inst;
|
||||
iLBC_decinst_t *Dec_Inst;
|
||||
|
||||
#ifdef __ILBC_WITH_40BITACC
|
||||
/* Doublecheck that long long exists */
|
||||
if (sizeof(long)>=sizeof(long long)) {
|
||||
fprintf(stderr, "40-bit simulation is not be supported on this platform\n");
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* get arguments and open files */
|
||||
|
||||
if ((argc!=5) && (argc!=6)) {
|
||||
fprintf(stderr,
|
||||
"\n*-----------------------------------------------*\n");
|
||||
fprintf(stderr,
|
||||
" %s <20,30> input encoded decoded (channel)\n\n",
|
||||
argv[0]);
|
||||
fprintf(stderr,
|
||||
" mode : Frame size for the encoding/decoding\n");
|
||||
fprintf(stderr,
|
||||
" 20 - 20 ms\n");
|
||||
fprintf(stderr,
|
||||
" 30 - 30 ms\n");
|
||||
fprintf(stderr,
|
||||
" input : Speech for encoder (16-bit pcm file)\n");
|
||||
fprintf(stderr,
|
||||
" encoded : Encoded bit stream\n");
|
||||
fprintf(stderr,
|
||||
" decoded : Decoded speech (16-bit pcm file)\n");
|
||||
fprintf(stderr,
|
||||
" channel : Packet loss pattern, optional (16-bit)\n");
|
||||
fprintf(stderr,
|
||||
" 1 - Packet received correctly\n");
|
||||
fprintf(stderr,
|
||||
" 0 - Packet Lost\n");
|
||||
fprintf(stderr,
|
||||
"*-----------------------------------------------*\n\n");
|
||||
exit(1);
|
||||
}
|
||||
mode=atoi(argv[1]);
|
||||
if (mode != 20 && mode != 30) {
|
||||
fprintf(stderr,"Wrong mode %s, must be 20, or 30\n",
|
||||
argv[1]);
|
||||
exit(2);
|
||||
}
|
||||
if ( (ifileid=fopen(argv[2],"rb")) == NULL) {
|
||||
fprintf(stderr,"Cannot open input file %s\n", argv[2]);
|
||||
exit(2);}
|
||||
if ( (efileid=fopen(argv[3],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open encoded file file %s\n",
|
||||
argv[3]); exit(1);}
|
||||
if ( (ofileid=fopen(argv[4],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open decoded file %s\n",
|
||||
argv[4]); exit(1);}
|
||||
if (argc==6) {
|
||||
if( (cfileid=fopen(argv[5],"rb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open channel file %s\n",
|
||||
argv[5]);
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
cfileid=NULL;
|
||||
}
|
||||
|
||||
/* print info */
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* iLBC test program *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
fprintf(stderr,"\nMode : %2d ms\n", mode);
|
||||
fprintf(stderr,"Input file : %s\n", argv[2]);
|
||||
fprintf(stderr,"Encoded file : %s\n", argv[3]);
|
||||
fprintf(stderr,"Output file : %s\n", argv[4]);
|
||||
if (argc==6) {
|
||||
fprintf(stderr,"Channel file : %s\n", argv[5]);
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
|
||||
/* Create structs */
|
||||
WebRtcIlbcfix_EncoderCreate(&Enc_Inst);
|
||||
WebRtcIlbcfix_DecoderCreate(&Dec_Inst);
|
||||
|
||||
#ifdef __ILBC_WITH_SCRATCHMEM
|
||||
/* Assign scratch memory. Note that Enc and Dec can use the same area */
|
||||
WebRtcIlbcfix_EncoderAssignScratchMem(Enc_Inst, iLBC_ScratchMem, &size);
|
||||
if (size>ILBCSCRATCHMEMSIZE) { fprintf(stderr,"Error: Scratch not big enough"); exit(0); }
|
||||
WebRtcIlbcfix_DecoderAssignScratchMem(Dec_Inst, iLBC_ScratchMem, &size);
|
||||
if (size>ILBCSCRATCHMEMSIZE) { fprintf(stderr,"Error: Scratch not big enough"); exit(0); }
|
||||
#endif
|
||||
|
||||
/* Initialization */
|
||||
|
||||
WebRtcIlbcfix_EncoderInit(Enc_Inst, mode);
|
||||
WebRtcIlbcfix_DecoderInit(Dec_Inst, mode);
|
||||
frameLen = mode*8;
|
||||
|
||||
/* loop over input blocks */
|
||||
|
||||
while (((WebRtc_Word16)fread(data,sizeof(WebRtc_Word16),frameLen,ifileid))==
|
||||
frameLen) {
|
||||
|
||||
blockcount++;
|
||||
|
||||
/* encoding */
|
||||
|
||||
fprintf(stderr, "--- Encoding block %i --- ",blockcount);
|
||||
len=WebRtcIlbcfix_Encode(Enc_Inst, data, (WebRtc_Word16)frameLen, encoded_data);
|
||||
fprintf(stderr, "\r");
|
||||
|
||||
/* write byte file */
|
||||
|
||||
fwrite(encoded_data, sizeof(WebRtc_Word16), ((len+1)/sizeof(WebRtc_Word16)), efileid);
|
||||
|
||||
/* get channel data if provided */
|
||||
if (argc==6) {
|
||||
if (fread(&pli, sizeof(WebRtc_Word16), 1, cfileid)) {
|
||||
if ((pli!=0)&&(pli!=1)) {
|
||||
fprintf(stderr, "Error in channel file\n");
|
||||
exit(0);
|
||||
}
|
||||
if (pli==0) {
|
||||
/* Packet loss -> remove info from frame */
|
||||
memset(encoded_data, 0,
|
||||
sizeof(WebRtc_Word16)*ILBCNOOFWORDS_MAX);
|
||||
packetlosscount++;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Error. Channel file too short\n");
|
||||
exit(0);
|
||||
}
|
||||
} else {
|
||||
pli=1;
|
||||
}
|
||||
|
||||
/* decoding */
|
||||
|
||||
fprintf(stderr, "--- Decoding block %i --- ",blockcount);
|
||||
if (pli==1) {
|
||||
len=WebRtcIlbcfix_Decode(Dec_Inst, encoded_data,
|
||||
(WebRtc_Word16)len, decoded_data,&speechType);
|
||||
} else {
|
||||
len=WebRtcIlbcfix_DecodePlc(Dec_Inst, decoded_data, 1);
|
||||
}
|
||||
fprintf(stderr, "\r");
|
||||
|
||||
/* write output file */
|
||||
|
||||
fwrite(decoded_data,sizeof(WebRtc_Word16),len,ofileid);
|
||||
}
|
||||
|
||||
/* close files */
|
||||
|
||||
fclose(ifileid); fclose(efileid); fclose(ofileid);
|
||||
if (argc==6) {
|
||||
fclose(cfileid);
|
||||
}
|
||||
|
||||
/* Free structs */
|
||||
WebRtcIlbcfix_EncoderFree(Enc_Inst);
|
||||
WebRtcIlbcfix_DecoderFree(Dec_Inst);
|
||||
|
||||
|
||||
printf("\nDone with simulation\n\n");
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
211
modules/audio_coding/codecs/iLBC/main/test/iLBC_testLib.c
Normal file
211
modules/audio_coding/codecs/iLBC/main/test/iLBC_testLib.c
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/******************************************************************
|
||||
|
||||
iLBC Speech Coder ANSI-C Source Code
|
||||
|
||||
iLBC_test.c
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include "ilbc.h"
|
||||
|
||||
//#define JUNK_DATA
|
||||
#ifdef JUNK_DATA
|
||||
#define SEED_FILE "randseed.txt"
|
||||
#endif
|
||||
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* Main program to test iLBC encoding and decoding
|
||||
*
|
||||
* Usage:
|
||||
* exefile_name.exe <infile> <bytefile> <outfile>
|
||||
*
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
FILE *ifileid,*efileid,*ofileid, *chfileid;
|
||||
short encoded_data[55], data[240], speechType;
|
||||
short len, mode, pli;
|
||||
int blockcount = 0;
|
||||
|
||||
iLBC_encinst_t *Enc_Inst;
|
||||
iLBC_decinst_t *Dec_Inst;
|
||||
|
||||
#ifdef JUNK_DATA
|
||||
int i;
|
||||
FILE *seedfile;
|
||||
unsigned int random_seed = (unsigned int) time(NULL);//1196764538
|
||||
#endif
|
||||
|
||||
/* Create structs */
|
||||
WebRtcIlbcfix_EncoderCreate(&Enc_Inst);
|
||||
WebRtcIlbcfix_DecoderCreate(&Dec_Inst);
|
||||
|
||||
/* get arguments and open files */
|
||||
|
||||
if (argc != 6 ) {
|
||||
fprintf(stderr, "%s mode inputfile bytefile outputfile channelfile\n",
|
||||
argv[0]);
|
||||
fprintf(stderr, "Example:\n");
|
||||
fprintf(stderr, "%s <30,20> in.pcm byte.dat out.pcm T30.0.dat\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
mode=atoi(argv[1]);
|
||||
if (mode != 20 && mode != 30) {
|
||||
fprintf(stderr,"Wrong mode %s, must be 20, or 30\n", argv[1]);
|
||||
exit(2);
|
||||
}
|
||||
if ( (ifileid=fopen(argv[2],"rb")) == NULL) {
|
||||
fprintf(stderr,"Cannot open input file %s\n", argv[2]);
|
||||
exit(2);}
|
||||
if ( (efileid=fopen(argv[3],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open channelfile file %s\n",
|
||||
argv[3]); exit(3);}
|
||||
if( (ofileid=fopen(argv[4],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open output file %s\n",
|
||||
argv[4]); exit(3);}
|
||||
if ( (chfileid=fopen(argv[5],"rb")) == NULL) {
|
||||
fprintf(stderr,"Cannot open channel file file %s\n", argv[5]);
|
||||
exit(2);}
|
||||
|
||||
/* print info */
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* iLBCtest *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
#ifdef SPLIT_10MS
|
||||
fprintf(stderr,"\n10ms split with raw mode: %2d ms\n", mode);
|
||||
#else
|
||||
fprintf(stderr,"\nMode : %2d ms\n", mode);
|
||||
#endif
|
||||
fprintf(stderr,"\nInput file : %s\n", argv[2]);
|
||||
fprintf(stderr,"Coded file : %s\n", argv[3]);
|
||||
fprintf(stderr,"Output file : %s\n\n", argv[4]);
|
||||
fprintf(stderr,"Channel file : %s\n\n", argv[5]);
|
||||
|
||||
|
||||
#ifdef JUNK_DATA
|
||||
srand(random_seed);
|
||||
|
||||
if ( (seedfile = fopen(SEED_FILE, "a+t") ) == NULL ) {
|
||||
fprintf(stderr, "Error: Could not open file %s\n", SEED_FILE);
|
||||
}
|
||||
else {
|
||||
fprintf(seedfile, "%u\n", random_seed);
|
||||
fclose(seedfile);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Initialization */
|
||||
|
||||
WebRtcIlbcfix_EncoderInit(Enc_Inst, mode);
|
||||
WebRtcIlbcfix_DecoderInit(Dec_Inst, mode);
|
||||
|
||||
/* loop over input blocks */
|
||||
#ifdef SPLIT_10MS
|
||||
while(fread(data, sizeof(short), 80, ifileid) == 80){
|
||||
#else
|
||||
while( (short)fread(data,sizeof(short),(mode<<3),ifileid)==(mode<<3)){
|
||||
#endif
|
||||
blockcount++;
|
||||
|
||||
/* encoding */
|
||||
|
||||
fprintf(stderr, "--- Encoding block %i --- ",blockcount);
|
||||
#ifdef SPLIT_10MS
|
||||
len=WebRtcIlbcfix_Encode(Enc_Inst, data, 80, encoded_data);
|
||||
#else
|
||||
len=WebRtcIlbcfix_Encode(Enc_Inst, data, (short)(mode<<3), encoded_data);
|
||||
#endif
|
||||
fprintf(stderr, "\r");
|
||||
|
||||
#ifdef JUNK_DATA
|
||||
for ( i = 0; i < len; i++) {
|
||||
encoded_data[i] = (short) (encoded_data[i] + (short) rand());
|
||||
}
|
||||
#endif
|
||||
/* write byte file */
|
||||
if(len != 0){ //len may be 0 in 10ms split case
|
||||
fwrite(encoded_data,1,len,efileid);
|
||||
}
|
||||
|
||||
if(len != 0){ //len may be 0 in 10ms split case
|
||||
/* get channel data if provided */
|
||||
if (argc==6) {
|
||||
if (fread(&pli, sizeof(WebRtc_Word16), 1, chfileid)) {
|
||||
if ((pli!=0)&&(pli!=1)) {
|
||||
fprintf(stderr, "Error in channel file\n");
|
||||
exit(0);
|
||||
}
|
||||
if (pli==0) {
|
||||
/* Packet loss -> remove info from frame */
|
||||
memset(encoded_data, 0, sizeof(WebRtc_Word16)*25);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Error. Channel file too short\n");
|
||||
exit(0);
|
||||
}
|
||||
} else {
|
||||
pli=1;
|
||||
}
|
||||
|
||||
/* decoding */
|
||||
|
||||
fprintf(stderr, "--- Decoding block %i --- ",blockcount);
|
||||
if (pli==1) {
|
||||
len=WebRtcIlbcfix_Decode(Dec_Inst, encoded_data, len, data, &speechType);
|
||||
} else {
|
||||
len=WebRtcIlbcfix_DecodePlc(Dec_Inst, data, 1);
|
||||
}
|
||||
fprintf(stderr, "\r");
|
||||
|
||||
/* write output file */
|
||||
|
||||
fwrite(data,sizeof(short),len,ofileid);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef JUNK_DATA
|
||||
if ( (seedfile = fopen(SEED_FILE, "a+t") ) == NULL ) {
|
||||
fprintf(stderr, "Error: Could not open file %s\n", SEED_FILE);
|
||||
}
|
||||
else {
|
||||
fprintf(seedfile, "ok\n\n");
|
||||
fclose(seedfile);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* free structs */
|
||||
WebRtcIlbcfix_EncoderFree(Enc_Inst);
|
||||
WebRtcIlbcfix_DecoderFree(Dec_Inst);
|
||||
|
||||
/* close files */
|
||||
|
||||
fclose(ifileid); fclose(efileid); fclose(ofileid);
|
||||
}
|
||||
348
modules/audio_coding/codecs/iLBC/main/test/iLBC_testprogram.c
Normal file
348
modules/audio_coding/codecs/iLBC/main/test/iLBC_testprogram.c
Normal file
@@ -0,0 +1,348 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/******************************************************************
|
||||
|
||||
iLBC Speech Coder ANSI-C Source Code
|
||||
|
||||
iLBC_test.c
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "nit_encode.h"
|
||||
#include "encode.h"
|
||||
#include "init_decode.h"
|
||||
#include "decode.h"
|
||||
#include "constants.h"
|
||||
#include "ilbc.h"
|
||||
|
||||
#define ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS)/2
|
||||
|
||||
/* Runtime statistics */
|
||||
#include <time.h>
|
||||
/* #define CLOCKS_PER_SEC 1000 */
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* Encoder interface function
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
short encode( /* (o) Number of bytes encoded */
|
||||
iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */
|
||||
WebRtc_Word16 *encoded_data, /* (o) The encoded bytes */
|
||||
WebRtc_Word16 *data /* (i) The signal block to encode */
|
||||
){
|
||||
|
||||
/* do the actual encoding */
|
||||
WebRtcIlbcfix_Encode((WebRtc_UWord16 *)encoded_data, data, iLBCenc_inst);
|
||||
|
||||
return (iLBCenc_inst->no_of_bytes);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* Decoder interface function
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
short decode( /* (o) Number of decoded samples */
|
||||
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */
|
||||
short *decoded_data, /* (o) Decoded signal block */
|
||||
short *encoded_data, /* (i) Encoded bytes */
|
||||
short mode /* (i) 0=PL, 1=Normal */
|
||||
){
|
||||
|
||||
/* check if mode is valid */
|
||||
|
||||
if (mode<0 || mode>1) {
|
||||
printf("\nERROR - Wrong mode - 0, 1 allowed\n"); exit(3);}
|
||||
|
||||
/* do actual decoding of block */
|
||||
|
||||
WebRtcIlbcfix_Decode(decoded_data, (WebRtc_UWord16 *)encoded_data,
|
||||
iLBCdec_inst, mode);
|
||||
|
||||
return (iLBCdec_inst->blockl);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* Main program to test iLBC encoding and decoding
|
||||
*
|
||||
* Usage:
|
||||
* exefile_name.exe <infile> <bytefile> <outfile> <channelfile>
|
||||
*
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
#define MAXFRAMES 10000
|
||||
#define MAXFILELEN (BLOCKL_MAX*MAXFRAMES)
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
/* Runtime statistics */
|
||||
|
||||
float starttime1, starttime2;
|
||||
float runtime1, runtime2;
|
||||
float outtime;
|
||||
|
||||
FILE *ifileid,*efileid,*ofileid, *chfileid;
|
||||
short *inputdata, *encodeddata, *decodeddata;
|
||||
short *channeldata;
|
||||
int blockcount = 0, noOfBlocks=0, i, noOfLostBlocks=0;
|
||||
short mode;
|
||||
iLBC_Enc_Inst_t Enc_Inst;
|
||||
iLBC_Dec_Inst_t Dec_Inst;
|
||||
|
||||
short frameLen;
|
||||
short count;
|
||||
#ifdef SPLIT_10MS
|
||||
short size;
|
||||
#endif
|
||||
|
||||
inputdata=(short*) malloc(MAXFILELEN*sizeof(short));
|
||||
if (inputdata==NULL) {
|
||||
fprintf(stderr,"Could not allocate memory for vector\n");
|
||||
exit(0);
|
||||
}
|
||||
encodeddata=(short*) malloc(ILBCNOOFWORDS_MAX*MAXFRAMES*sizeof(short));
|
||||
if (encodeddata==NULL) {
|
||||
fprintf(stderr,"Could not allocate memory for vector\n");
|
||||
free(inputdata);
|
||||
exit(0);
|
||||
}
|
||||
decodeddata=(short*) malloc(MAXFILELEN*sizeof(short));
|
||||
if (decodeddata==NULL) {
|
||||
fprintf(stderr,"Could not allocate memory for vector\n");
|
||||
free(inputdata);
|
||||
free(encodeddata);
|
||||
exit(0);
|
||||
}
|
||||
channeldata=(short*) malloc(MAXFRAMES*sizeof(short));
|
||||
if (channeldata==NULL) {
|
||||
fprintf(stderr,"Could not allocate memory for vector\n");
|
||||
free(inputdata);
|
||||
free(encodeddata);
|
||||
free(decodeddata);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* get arguments and open files */
|
||||
|
||||
if (argc != 6 ) {
|
||||
fprintf(stderr, "%s mode inputfile bytefile outputfile channelfile\n",
|
||||
argv[0]);
|
||||
fprintf(stderr, "Example:\n");
|
||||
fprintf(stderr, "%s <30,20> in.pcm byte.dat out.pcm T30.0.dat\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
mode=atoi(argv[1]);
|
||||
if (mode != 20 && mode != 30) {
|
||||
fprintf(stderr,"Wrong mode %s, must be 20, or 30\n", argv[1]);
|
||||
exit(2);
|
||||
}
|
||||
if ( (ifileid=fopen(argv[2],"rb")) == NULL) {
|
||||
fprintf(stderr,"Cannot open input file %s\n", argv[2]);
|
||||
exit(2);}
|
||||
if ( (efileid=fopen(argv[3],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open channelfile file %s\n",
|
||||
argv[3]); exit(3);}
|
||||
if( (ofileid=fopen(argv[4],"wb")) == NULL) {
|
||||
fprintf(stderr, "Cannot open output file %s\n",
|
||||
argv[4]); exit(3);}
|
||||
if ( (chfileid=fopen(argv[5],"rb")) == NULL) {
|
||||
fprintf(stderr,"Cannot open channel file file %s\n", argv[5]);
|
||||
exit(2);}
|
||||
|
||||
|
||||
/* print info */
|
||||
#ifndef PRINT_MIPS
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* iLBCtest *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"* *\n");
|
||||
fprintf(stderr,
|
||||
"*---------------------------------------------------*\n");
|
||||
#ifdef SPLIT_10MS
|
||||
fprintf(stderr,"\n10ms split with raw mode: %2d ms\n", mode);
|
||||
#else
|
||||
fprintf(stderr,"\nMode : %2d ms\n", mode);
|
||||
#endif
|
||||
fprintf(stderr,"\nInput file : %s\n", argv[2]);
|
||||
fprintf(stderr,"Coded file : %s\n", argv[3]);
|
||||
fprintf(stderr,"Output file : %s\n\n", argv[4]);
|
||||
fprintf(stderr,"Channel file : %s\n\n", argv[5]);
|
||||
#endif
|
||||
|
||||
/* Initialization */
|
||||
|
||||
WebRtcIlbcfix_EncoderInit(&Enc_Inst, mode);
|
||||
WebRtcIlbcfix_DecoderInit(&Dec_Inst, mode, 1);
|
||||
|
||||
#if __ILBC_WITH_SCRATCHMEM
|
||||
// we can use the same scratch space for both encoder and decoder.
|
||||
WebRtcIlbcfix_EncoderAssignScratchMem((iLBC_encinst_t*)&Enc_Inst, scratchBlock, &size);
|
||||
WebRtcIlbcfix_DecoderAssignScratchMem((iLBC_decinst_t*)&Dec_Inst, scratchBlock, &size);
|
||||
#endif
|
||||
|
||||
/* extract the input file and channel file */
|
||||
|
||||
#ifdef SPLIT_10MS
|
||||
frameLen = (mode==20)? 80:160;
|
||||
fread(Enc_Inst.past_samples, sizeof(short), frameLen, ifileid);
|
||||
Enc_Inst.section = 0;
|
||||
|
||||
while( fread(&inputdata[noOfBlocks*80], sizeof(short),
|
||||
80, ifileid) == 80 ) {
|
||||
noOfBlocks++;
|
||||
}
|
||||
|
||||
noOfBlocks += frameLen/80;
|
||||
frameLen = 80;
|
||||
#else
|
||||
frameLen = Enc_Inst.blockl;
|
||||
|
||||
while( fread(&inputdata[noOfBlocks*Enc_Inst.blockl],sizeof(short),
|
||||
Enc_Inst.blockl,ifileid)==(WebRtc_UWord16)Enc_Inst.blockl){
|
||||
noOfBlocks++;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
while ( (fread(&channeldata[blockcount],sizeof(short), 1,chfileid)==1)
|
||||
&& ( blockcount < noOfBlocks/(Enc_Inst.blockl/frameLen) ) ) {
|
||||
blockcount++;
|
||||
}
|
||||
|
||||
if ( blockcount < noOfBlocks/(Enc_Inst.blockl/frameLen) ) {
|
||||
fprintf(stderr,"Channel file %s is too short\n", argv[4]);
|
||||
free(inputdata);
|
||||
free(encodeddata);
|
||||
free(decodeddata);
|
||||
free(channeldata);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
count=0;
|
||||
|
||||
/* Runtime statistics */
|
||||
|
||||
starttime1 = clock()/(float)CLOCKS_PER_SEC;
|
||||
|
||||
/* Encoding loop */
|
||||
#ifdef PRINT_MIPS
|
||||
printf("-1 -1\n");
|
||||
#endif
|
||||
|
||||
#ifdef SPLIT_10MS
|
||||
/* "Enc_Inst.section != 0" is to make sure we run through full
|
||||
lengths of all vectors for 10ms split mode.
|
||||
*/
|
||||
// while( (count < noOfBlocks) || (Enc_Inst.section != 0) ) {
|
||||
while( count < blockcount * (Enc_Inst.blockl/frameLen) ) {
|
||||
|
||||
encode(&Enc_Inst, &encodeddata[Enc_Inst.no_of_words *
|
||||
(count/(Enc_Inst.nsub/2))], &inputdata[frameLen * count] );
|
||||
#else
|
||||
while (count < noOfBlocks) {
|
||||
encode( &Enc_Inst, &encodeddata[Enc_Inst.no_of_words * count],
|
||||
&inputdata[frameLen * count] );
|
||||
#endif
|
||||
|
||||
#ifdef PRINT_MIPS
|
||||
printf("-1 -1\n");
|
||||
#endif
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
count=0;
|
||||
|
||||
/* Runtime statistics */
|
||||
|
||||
starttime2=clock()/(float)CLOCKS_PER_SEC;
|
||||
runtime1 = (float)(starttime2-starttime1);
|
||||
|
||||
/* Decoding loop */
|
||||
|
||||
while (count < blockcount) {
|
||||
if (channeldata[count]==1) {
|
||||
/* Normal decoding */
|
||||
decode(&Dec_Inst, &decodeddata[count * Dec_Inst.blockl],
|
||||
&encodeddata[Dec_Inst.no_of_words * count], 1);
|
||||
} else if (channeldata[count]==0) {
|
||||
/* PLC */
|
||||
short emptydata[ILBCNOOFWORDS_MAX];
|
||||
memset(emptydata, 0, Dec_Inst.no_of_words*sizeof(short));
|
||||
decode(&Dec_Inst, &decodeddata[count*Dec_Inst.blockl],
|
||||
emptydata, 0);
|
||||
noOfLostBlocks++;
|
||||
} else {
|
||||
printf("Error in channel file (values have to be either 1 or 0)\n");
|
||||
exit(0);
|
||||
}
|
||||
#ifdef PRINT_MIPS
|
||||
printf("-1 -1\n");
|
||||
#endif
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
/* Runtime statistics */
|
||||
|
||||
runtime2 = (float)(clock()/(float)CLOCKS_PER_SEC-starttime2);
|
||||
|
||||
outtime = (float)((float)blockcount*
|
||||
(float)mode/1000.0);
|
||||
|
||||
#ifndef PRINT_MIPS
|
||||
printf("\nLength of speech file: %.1f s\n", outtime);
|
||||
printf("Lost frames : %.1f%%\n\n", 100*(float)noOfLostBlocks/(float)blockcount);
|
||||
|
||||
printf("Time to run iLBC_encode+iLBC_decode:");
|
||||
printf(" %.1f s (%.1f%% of realtime)\n", runtime1+runtime2,
|
||||
(100*(runtime1+runtime2)/outtime));
|
||||
|
||||
printf("Time in iLBC_encode :");
|
||||
printf(" %.1f s (%.1f%% of total runtime)\n",
|
||||
runtime1, 100.0*runtime1/(runtime1+runtime2));
|
||||
|
||||
printf("Time in iLBC_decode :");
|
||||
printf(" %.1f s (%.1f%% of total runtime)\n\n",
|
||||
runtime2, 100.0*runtime2/(runtime1+runtime2));
|
||||
#endif
|
||||
|
||||
/* Write data to files */
|
||||
for (i=0; i<blockcount; i++) {
|
||||
fwrite(&encodeddata[i*Enc_Inst.no_of_words], sizeof(short),
|
||||
Enc_Inst.no_of_words, efileid);
|
||||
}
|
||||
for (i=0;i<blockcount;i++) {
|
||||
fwrite(&decodeddata[i*Enc_Inst.blockl],sizeof(short),Enc_Inst.blockl,ofileid);
|
||||
}
|
||||
|
||||
/* return memory and close files */
|
||||
|
||||
free(inputdata);
|
||||
free(encodeddata);
|
||||
free(decodeddata);
|
||||
free(channeldata);
|
||||
fclose(ifileid); fclose(efileid); fclose(ofileid);
|
||||
return(0);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
(set -o igncr) 2>/dev/null && set -o igncr; # force bash to ignore \r character
|
||||
|
||||
#
|
||||
# This script can be used to verify the bit exatness of iLBC fixpoint version 1.0.6
|
||||
#
|
||||
|
||||
|
||||
./iLBCtest 20 ./inFiles/F00.INP ./GeneratedFiles/F00.BIT20 ./GeneratedFiles/F00.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F01.INP ./GeneratedFiles/F01.BIT20 ./GeneratedFiles/F01.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F02.INP ./GeneratedFiles/F02.BIT20 ./GeneratedFiles/F02.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F03.INP ./GeneratedFiles/F03.BIT20 ./GeneratedFiles/F03.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F04.INP ./GeneratedFiles/F04.BIT20 ./GeneratedFiles/F04.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F05.INP ./GeneratedFiles/F05.BIT20 ./GeneratedFiles/F05.OUT20 ./inFiles/clean.chn
|
||||
./iLBCtest 20 ./inFiles/F06.INP ./GeneratedFiles/F06.BIT20 ./GeneratedFiles/F06.OUT20 ./inFiles/clean.chn
|
||||
|
||||
./iLBCtest 30 ./inFiles/F00.INP ./GeneratedFiles/F00.BIT30 ./GeneratedFiles/F00.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F01.INP ./GeneratedFiles/F01.BIT30 ./GeneratedFiles/F01.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F02.INP ./GeneratedFiles/F02.BIT30 ./GeneratedFiles/F02.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F03.INP ./GeneratedFiles/F03.BIT30 ./GeneratedFiles/F03.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F04.INP ./GeneratedFiles/F04.BIT30 ./GeneratedFiles/F04.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F05.INP ./GeneratedFiles/F05.BIT30 ./GeneratedFiles/F05.OUT30 ./inFiles/clean.chn
|
||||
./iLBCtest 30 ./inFiles/F06.INP ./GeneratedFiles/F06.BIT30 ./GeneratedFiles/F06.OUT30 ./inFiles/clean.chn
|
||||
|
||||
./iLBCtest 20 ./inFiles/F00.INP ./GeneratedFiles/F00.BIT20 ./GeneratedFiles/F00_tlm10.OUT20 ./inFiles/tlm10.chn
|
||||
./iLBCtest 20 ./inFiles/F01.INP ./GeneratedFiles/F01.BIT20 ./GeneratedFiles/F01_tlm10.OUT20 ./inFiles/tlm10.chn
|
||||
./iLBCtest 20 ./inFiles/F02.INP ./GeneratedFiles/F02.BIT20 ./GeneratedFiles/F02_tlm10.OUT20 ./inFiles/tlm10.chn
|
||||
./iLBCtest 30 ./inFiles/F00.INP ./GeneratedFiles/F00.BIT30 ./GeneratedFiles/F00_tlm10.OUT30 ./inFiles/tlm10.chn
|
||||
./iLBCtest 30 ./inFiles/F01.INP ./GeneratedFiles/F01.BIT30 ./GeneratedFiles/F01_tlm10.OUT30 ./inFiles/tlm10.chn
|
||||
./iLBCtest 30 ./inFiles/F02.INP ./GeneratedFiles/F02.BIT30 ./GeneratedFiles/F02_tlm10.OUT30 ./inFiles/tlm10.chn
|
||||
|
||||
|
||||
diff ./GeneratedFiles/F00.BIT20 ./ReferenceVectors/F00.BIT20
|
||||
diff ./GeneratedFiles/F01.BIT20 ./ReferenceVectors/F01.BIT20
|
||||
diff ./GeneratedFiles/F02.BIT20 ./ReferenceVectors/F02.BIT20
|
||||
diff ./GeneratedFiles/F03.BIT20 ./ReferenceVectors/F03.BIT20
|
||||
diff ./GeneratedFiles/F04.BIT20 ./ReferenceVectors/F04.BIT20
|
||||
diff ./GeneratedFiles/F05.BIT20 ./ReferenceVectors/F05.BIT20
|
||||
diff ./GeneratedFiles/F06.BIT20 ./ReferenceVectors/F06.BIT20
|
||||
diff ./GeneratedFiles/F00.OUT20 ./ReferenceVectors/F00.OUT20
|
||||
diff ./GeneratedFiles/F01.OUT20 ./ReferenceVectors/F01.OUT20
|
||||
diff ./GeneratedFiles/F02.OUT20 ./ReferenceVectors/F02.OUT20
|
||||
diff ./GeneratedFiles/F03.OUT20 ./ReferenceVectors/F03.OUT20
|
||||
diff ./GeneratedFiles/F04.OUT20 ./ReferenceVectors/F04.OUT20
|
||||
diff ./GeneratedFiles/F05.OUT20 ./ReferenceVectors/F05.OUT20
|
||||
diff ./GeneratedFiles/F06.OUT20 ./ReferenceVectors/F06.OUT20
|
||||
|
||||
diff ./GeneratedFiles/F00.BIT30 ./ReferenceVectors/F00.BIT30
|
||||
diff ./GeneratedFiles/F01.BIT30 ./ReferenceVectors/F01.BIT30
|
||||
diff ./GeneratedFiles/F02.BIT30 ./ReferenceVectors/F02.BIT30
|
||||
diff ./GeneratedFiles/F03.BIT30 ./ReferenceVectors/F03.BIT30
|
||||
diff ./GeneratedFiles/F04.BIT30 ./ReferenceVectors/F04.BIT30
|
||||
diff ./GeneratedFiles/F05.BIT30 ./ReferenceVectors/F05.BIT30
|
||||
diff ./GeneratedFiles/F06.BIT30 ./ReferenceVectors/F06.BIT30
|
||||
diff ./GeneratedFiles/F00.OUT30 ./ReferenceVectors/F00.OUT30
|
||||
diff ./GeneratedFiles/F01.OUT30 ./ReferenceVectors/F01.OUT30
|
||||
diff ./GeneratedFiles/F02.OUT30 ./ReferenceVectors/F02.OUT30
|
||||
diff ./GeneratedFiles/F03.OUT30 ./ReferenceVectors/F03.OUT30
|
||||
diff ./GeneratedFiles/F04.OUT30 ./ReferenceVectors/F04.OUT30
|
||||
diff ./GeneratedFiles/F05.OUT30 ./ReferenceVectors/F05.OUT30
|
||||
diff ./GeneratedFiles/F06.OUT30 ./ReferenceVectors/F06.OUT30
|
||||
|
||||
diff ./GeneratedFiles/F00_tlm10.OUT20 ./ReferenceVectors/F00_tlm10.OUT20
|
||||
diff ./GeneratedFiles/F01_tlm10.OUT20 ./ReferenceVectors/F01_tlm10.OUT20
|
||||
diff ./GeneratedFiles/F02_tlm10.OUT20 ./ReferenceVectors/F02_tlm10.OUT20
|
||||
diff ./GeneratedFiles/F00_tlm10.OUT30 ./ReferenceVectors/F00_tlm10.OUT30
|
||||
diff ./GeneratedFiles/F01_tlm10.OUT30 ./ReferenceVectors/F01_tlm10.OUT30
|
||||
diff ./GeneratedFiles/F02_tlm10.OUT30 ./ReferenceVectors/F02_tlm10.OUT30
|
||||
|
||||
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F00.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F00.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F01.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F01.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F02.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F02.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F03.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F03.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F04.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F04.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F05.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F05.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F06.INP
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/F06.INP
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/clean.chn
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/clean.chn
Normal file
Binary file not shown.
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/tlm10.chn
Normal file
BIN
modules/audio_coding/codecs/iLBC/main/test/inFiles/tlm10.chn
Normal file
Binary file not shown.
Reference in New Issue
Block a user