1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * test_iSACfixfloat.c 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Test compatibility and quality between floating- and fixed-point code 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * */ 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdlib.h> 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* include API */ 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "isac.h" 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "isacfix.h" 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* max number of samples per frame (= 60 ms frame) */ 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define MAX_FRAMESAMPLES 960 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* number of samples per 10ms frame */ 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FRAMESAMPLES_10ms 160 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* sampling frequency (Hz) */ 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FS 16000 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Runtime statistics */ 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <time.h> 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CLOCKS_PER_SEC 1000 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// FILE *histfile, *ratefile; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* function for reading audio data from PCM file */ 45fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint readframe(int16_t *data, FILE *inp, int length) { 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short k, rlen, status = 0; 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 49fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org rlen = fread(data, sizeof(int16_t), length, inp); 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (rlen < length) { 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (k = rlen; k < length; k++) 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org data[k] = 0; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org status = 1; 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return status; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct { 60fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org uint32_t send_time; /* samples */ 61fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org uint32_t arrival_time; /* samples */ 62fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org uint32_t sample_count; /* samples */ 63fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org uint16_t rtp_number; 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} BottleNeckModel; 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid get_arrival_time(int current_framesamples, /* samples */ 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int packet_size, /* bytes */ 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int bottleneck, /* excluding headers; bits/s */ 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BottleNeckModel *BN_data) 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int HeaderSize = 35; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int HeaderRate; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HeaderRate = HeaderSize * 8 * FS / current_framesamples; /* bits/s */ 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* everything in samples */ 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data->sample_count = BN_data->sample_count + current_framesamples; 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data->arrival_time += ((packet_size + HeaderSize) * 8 * FS) / (bottleneck + HeaderRate); 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data->send_time += current_framesamples; 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (BN_data->arrival_time < BN_data->sample_count) 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data->arrival_time = BN_data->sample_count; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data->rtp_number++; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint main(int argc, char* argv[]) 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char inname[50], outname[50], bottleneck_file[50], bitfilename[60], bitending[10]="_bits.pcm"; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE *inp, *outp, *f_bn, *bitsp; 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int framecnt, endfile; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int i,j,errtype, plc=0; 99fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t CodingMode; 100fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t bottleneck; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 102fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t framesize = 30; /* ms */ 103fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org //int16_t framesize = 60; /* To invoke cisco complexity case at frame 2252 */ 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int cur_framesmpls, err; 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Runtime statistics */ 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double starttime; 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double runtime; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double length_file; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t stream_len = 0; 113fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t declen; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t shortdata[FRAMESAMPLES_10ms]; 116fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t decoded[MAX_FRAMESAMPLES]; 117fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org uint16_t streamdata[600]; 118fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t speechType[1]; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org// int16_t *iSACstruct; 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char version_number[20]; 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int mode=-1, tmp, nbTest=0; /*,sss;*/ 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _DEBUG 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE *fy; 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double kbps; 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int totalbits =0; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int totalsmpls =0; 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* _DEBUG */ 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* only one structure used for ISAC encoder */ 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ISAC_MainStruct *ISAC_main_inst; 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ISACFIX_MainStruct *ISACFIX_main_inst; 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BottleNeckModel BN_data; 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org f_bn = NULL; 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _DEBUG 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fy = fopen("bit_rate.dat", "w"); 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(fy); 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fy = fopen("bytes_frames.dat", "w"); 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(fy); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* _DEBUG */ 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//histfile = fopen("histo.dat", "ab"); 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//ratefile = fopen("rates.dat", "ab"); 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* handling wrong input arguments in the command line */ 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((argc<6) || (argc>10)) { 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nWrong number of arguments or flag values.\n\n"); 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n"); 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_version(version_number); 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("iSAC version %s \n\n", version_number); 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Usage:\n\n"); 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("./kenny.exe [-I] bottleneck_value infile outfile \n\n"); 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("with:\n"); 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("[-I] : if -I option is specified, the coder will use\n"); 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" an instantaneous Bottleneck value. If not, it\n"); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" will be an adaptive Bottleneck value.\n\n"); 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("bottleneck_value : the value of the bottleneck provided either\n"); 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" as a fixed value (e.g. 25000) or\n"); 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" read from a file (e.g. bottleneck.txt)\n\n"); 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("[-m] mode : Mode (encoder - decoder):\n"); 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" : 0 - float - float \n"); 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" : 1 - float - fix \n"); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" : 2 - fix - float \n"); 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" : 3 - fix - fix \n"); 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("[-PLC] : Test PLC packetlosses\n"); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("[-NB] num : Test NB interfaces, num=1 encNB, num=2 decNB\n"); 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("infile : Normal speech input file\n\n"); 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("outfile : Speech output file\n\n"); 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Example usage:\n\n"); 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("./kenny.exe -I bottleneck.txt -m 1 speechIn.pcm speechOut.pcm\n\n"); 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(0); 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("--------------------START---------------------\n\n"); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_version(version_number); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("iSAC FLOAT version %s \n", version_number); 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_version(version_number); 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("iSAC FIX version %s \n\n", version_number); 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodingMode = 0; 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tmp=1; 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 1; i < argc;i++) 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!strcmp ("-I", argv[i])) 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nInstantaneous BottleNeck\n"); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodingMode = 1; 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i++; 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tmp=0; 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!strcmp ("-m", argv[i])) { 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org mode=atoi(argv[i+1]); 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i++; 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!strcmp ("-PLC", argv[i])) 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org plc=1; 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!strcmp ("-NB", argv[i])) 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nbTest = atoi(argv[i + 1]); 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i++; 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(mode<0) { 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nError! Mode must be set: -m 0 \n"); 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(0); 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 0) 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nAdaptive BottleNeck\n"); 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Get Bottleneck value */ 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bottleneck = atoi(argv[2-tmp]); 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (bottleneck == 0) 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sscanf(argv[2-tmp], "%s", bottleneck_file); 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org f_bn = fopen(bottleneck_file, "rb"); 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (f_bn == NULL) 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("No value provided for BottleNeck and cannot read file %s.\n", bottleneck_file); 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(0); 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else { 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("reading bottleneck rates from file %s\n\n",bottleneck_file); 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fscanf(f_bn, "%d", &bottleneck) == EOF) { 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Set pointer to beginning of file */ 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fseek(f_bn, 0L, SEEK_SET); 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fscanf(f_bn, "%d", &bottleneck); 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Bottleneck is a cosine function 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Matlab code for writing the bottleneck file: 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * BottleNeck_10ms = 20e3 + 10e3 * cos((0:5999)/5999*2*pi); 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * fid = fopen('bottleneck.txt', 'wb'); 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * fprintf(fid, '%d\n', BottleNeck_10ms); fclose(fid); 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nfixed bottleneck rate of %d bits/s\n\n", bottleneck); 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Get Input and Output files */ 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sscanf(argv[argc-2], "%s", inname); 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sscanf(argv[argc-1], "%s", outname); 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((inp = fopen(inname,"rb")) == NULL) { 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" iSAC: Cannot read file %s.\n", inname); 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((outp = fopen(outname,"wb")) == NULL) { 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" iSAC: Cannot write file %s.\n", outname); 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nInput:%s\nOutput:%s\n", inname, outname); 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i=0; 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (outname[i]!='\0') { 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bitfilename[i]=outname[i]; 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i++; 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org i-=4; 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (j=0;j<9;j++, i++) 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bitfilename[i]=bitending[j]; 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bitfilename[i]='\0'; 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((bitsp = fopen(bitfilename,"wb")) == NULL) { 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" iSAC: Cannot read file %s.\n", bitfilename); 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Bitstream:%s\n\n", bitfilename); 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org starttime = clock()/(double)CLOCKS_PER_SEC; /* Runtime statistics */ 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Initialize the ISAC and BN structs */ 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_create(&ISAC_main_inst); 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* WebRtcIsacfix_AssignSize(&sss); 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org iSACstruct=malloc(sss); 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_Assign(&ISACFIX_main_inst,iSACstruct);*/ 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_Create(&ISACFIX_main_inst); 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.send_time = 0; 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time = 0; 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.sample_count = 0; 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number = 0; 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Initialize encoder and decoder */ 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org framecnt= 0; 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org endfile = 0; 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (mode==0) { /* Encode using FLOAT, decode using FLOAT */ 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Coding mode: Encode using FLOAT, decode using FLOAT \n\n"); 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Init iSAC FLOAT */ 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_EncoderInit(ISAC_main_inst, CodingMode); 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_DecoderInit(ISAC_main_inst); 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_Control(ISAC_main_inst, bottleneck, framesize); 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // exit(EXIT_FAILURE); 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==1) { /* Encode using FLOAT, decode using FIX */ 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Coding mode: Encode using FLOAT, decode using FIX \n\n"); 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Init iSAC FLOAT */ 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_EncoderInit(ISAC_main_inst, CodingMode); 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_DecoderInit(ISAC_main_inst); 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_Control(ISAC_main_inst, bottleneck, framesize); 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // exit(EXIT_FAILURE); 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Init iSAC FIX */ 354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_EncoderInit(ISACFIX_main_inst, CodingMode); 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_DecoderInit(ISACFIX_main_inst); 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_Control(ISACFIX_main_inst, bottleneck, framesize); 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==2) { /* Encode using FIX, decode using FLOAT */ 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Coding mode: Encode using FIX, decode using FLOAT \n\n"); 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Init iSAC FLOAT */ 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_EncoderInit(ISAC_main_inst, CodingMode); 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_DecoderInit(ISAC_main_inst); 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_Control(ISAC_main_inst, bottleneck, framesize); 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Init iSAC FIX */ 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_EncoderInit(ISACFIX_main_inst, CodingMode); 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_DecoderInit(ISACFIX_main_inst); 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_Control(ISACFIX_main_inst, bottleneck, framesize); 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==3) { 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Coding mode: Encode using FIX, decode using FIX \n\n"); 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_EncoderInit(ISACFIX_main_inst, CodingMode); 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_DecoderInit(ISACFIX_main_inst); 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_Control(ISACFIX_main_inst, bottleneck, framesize); 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in initialization: %d.\n\n", errtype); 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Mode must be value between 0 and 3\n"); 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *speechType = 1; 413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//#define BI_TEST 1 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef BI_TEST 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_SetMaxPayloadSize(ISACFIX_main_inst, 300); 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\n Error in setMaxPayloadSize: %d.\n\n", errtype); 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(inp); 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(outp); 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(bitsp); 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return(EXIT_FAILURE); 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (endfile == 0) { 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org cur_framesmpls = 0; 432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (1) { 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Read 10 ms speech block */ 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest != 1) 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org endfile = readframe(shortdata, inp, FRAMESAMPLES_10ms); 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org endfile = readframe(shortdata, inp, (FRAMESAMPLES_10ms/2)); 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC encoding */ 440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (mode==0 || mode ==1) { 442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata, streamdata); 443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (stream_len < 0) { 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in encoder: %d.\n\n", errtype); 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // exit(EXIT_FAILURE); 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==2 || mode==3) { 450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC encoding */ 451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest != 1) 452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len = WebRtcIsacfix_Encode(ISACFIX_main_inst, shortdata, streamdata); 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len = WebRtcIsacfix_EncodeNb(ISACFIX_main_inst, shortdata, streamdata); 455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (stream_len < 0) { 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in encoder: %d.\n\n", errtype); 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // exit(EXIT_FAILURE); 461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org cur_framesmpls += FRAMESAMPLES_10ms; 465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* read next bottleneck rate */ 467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (f_bn != NULL) { 468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fscanf(f_bn, "%d", &bottleneck) == EOF) { 469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Set pointer to beginning of file */ 470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fseek(f_bn, 0L, SEEK_SET); 471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fscanf(f_bn, "%d", &bottleneck); 472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (CodingMode == 1) { 474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (mode==0 || mode==1) 475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_Control(ISAC_main_inst, bottleneck, framesize); 476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (mode==2 || mode==3) 477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_Control(ISACFIX_main_inst, bottleneck, framesize); 478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit encoder loop if the encoder returned a bitstream */ 482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (stream_len != 0) break; 483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fwrite(streamdata, 1, stream_len, bitsp); /* NOTE! Writes bytes to file */ 486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* simulate packet handling through NetEq and the modem */ 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org get_arrival_time(cur_framesmpls, stream_len, bottleneck, 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &BN_data); 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//***************************** 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (1){ 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (mode==0) { 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_UpdateBwEstimate(ISAC_main_inst, 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC decoding */ 506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsac_Decode(ISAC_main_inst, 507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (declen <= 0) { 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==1) { 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_UpdateBwEstimate(ISAC_main_inst, 520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_UpdateBwEstimate1(ISACFIX_main_inst, 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsac_Decode(ISAC_main_inst, 537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC decoding */ 543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (plc && (framecnt+1)%10 == 0) { 544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest !=2 ) 545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodePlc( ISACFIX_main_inst, decoded, 1 ); 546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodePlcNb( ISACFIX_main_inst, decoded, 1 ); 548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest !=2 ) 550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_Decode(ISACFIX_main_inst, 551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodeNb(ISACFIX_main_inst, 557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (declen <= 0) { 564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==2) { 570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_UpdateBwEstimate1(ISACFIX_main_inst, 571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsac_UpdateBwEstimate(ISAC_main_inst, 577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC decoding */ 589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsac_Decode(ISAC_main_inst, 590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (declen <= 0) { 595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst); 597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (mode==3) { 601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = WebRtcIsacfix_UpdateBwEstimate(ISACFIX_main_inst, 602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.rtp_number, 605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.send_time, 606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BN_data.arrival_time); 607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err < 0) { 609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* iSAC decoding */ 615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (plc && (framecnt+1)%10 == 0) { 617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest !=2 ) 618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodePlc( ISACFIX_main_inst, decoded, 1 ); 619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodePlcNb( ISACFIX_main_inst, decoded, 1 ); 621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (nbTest !=2 ) 623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_Decode(ISACFIX_main_inst, 624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org declen = WebRtcIsacfix_DecodeNb(ISACFIX_main_inst, 630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org streamdata, 631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org stream_len, 632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decoded, 633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org speechType); 634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (declen <= 0) { 636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* exit if returned with error */ 637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org errtype=WebRtcIsacfix_GetErrorCode(ISACFIX_main_inst); 638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nError in decoder: %d.\n\n", errtype); 639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //exit(EXIT_FAILURE); 640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Write decoded speech frame to file */ 644fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org fwrite(decoded, sizeof(int16_t), declen, outp); 645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr," \rframe = %d", framecnt); 648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org framecnt++; 649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _DEBUG 653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org totalsmpls += declen; 655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org totalbits += 8 * stream_len; 656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kbps = ((double) FS) / ((double) cur_framesmpls) * 8.0 * stream_len / 1000.0;// kbits/s 657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fy = fopen("bit_rate.dat", "a"); 658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(fy, "Frame %i = %0.14f\n", framecnt, kbps); 659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(fy); 660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* _DEBUG */ 662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _DEBUG 666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\ntotal bits = %d bits", totalbits); 667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nmeasured average bitrate = %0.3f kbits/s", (double)totalbits *(FS/1000) / totalsmpls); 668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n"); 669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* _DEBUG */ 670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Runtime statistics */ 672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org runtime = (double)(clock()/(double)CLOCKS_PER_SEC-starttime); 673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org length_file = ((double)framecnt*(double)declen/FS); 674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n\nLength of speech file: %.1f s\n", length_file); 675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Time to run iSAC: %.2f s (%.2f %% of realtime)\n\n", runtime, (100*runtime/length_file)); 676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("---------------------END----------------------\n"); 677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(inp); 679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(outp); 680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsac_Free(ISAC_main_inst); 682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIsacfix_Free(ISACFIX_main_inst); 683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// fclose(histfile); 687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// fclose(ratefile); 688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 694