1/* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11/* 12 * settings.h 13 * 14 * Declaration of #defines used in the iSAC codec 15 * 16 */ 17 18#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_SETTINGS_H_ 19#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_SETTINGS_H_ 20 21 22/* sampling frequency (Hz) */ 23#define FS 16000 24/* 1.5 times Sampling frequency */ 25#define FS_1_HALF (WebRtc_UWord32) 24000 26/* Three times Sampling frequency */ 27#define FS3 (WebRtc_UWord32) 48000 28/* Eight times Sampling frequency */ 29#define FS8 (WebRtc_UWord32) 128000 30 31/* number of samples per frame (either 480 (30ms) or 960 (60ms)) */ 32#define INITIAL_FRAMESAMPLES 960 33 34/* miliseconds */ 35#define FRAMESIZE 30 36/* number of samples per frame processed in the encoder (30ms) */ 37#define FRAMESAMPLES 480 /* ((FRAMESIZE*FS)/1000) */ 38#define FRAMESAMPLES_HALF 240 39/* max number of samples per frame (= 60 ms frame) */ 40#define MAX_FRAMESAMPLES 960 41/* number of samples per 10ms frame */ 42#define FRAMESAMPLES_10ms 160 /* ((10*FS)/1000) */ 43/* Number of samples per 1 ms */ 44#define SAMPLES_PER_MSEC 16 45/* number of subframes */ 46#define SUBFRAMES 6 47/* length of a subframe */ 48#define UPDATE 80 49/* length of half a subframe (low/high band) */ 50#define HALF_SUBFRAMELEN 40 /* (UPDATE/2) */ 51/* samples of look ahead (in a half-band, so actually half the samples of look ahead @ FS) */ 52#define QLOOKAHEAD 24 /* 3 ms */ 53 54/* order of AR model in spectral entropy coder */ 55#define AR_ORDER 6 56#define MAX_ORDER 13 57#define LEVINSON_MAX_ORDER 12 58 59/* window length (masking analysis) */ 60#define WINLEN 256 61/* order of low-band pole filter used to approximate masking curve */ 62#define ORDERLO 12 63/* order of hi-band pole filter used to approximate masking curve */ 64#define ORDERHI 6 65 66#define KLT_NUM_AVG_GAIN 0 67#define KLT_NUM_AVG_SHAPE 0 68#define KLT_NUM_MODELS 3 69#define LPC_SHAPE_ORDER 18 /* (ORDERLO + ORDERHI) */ 70 71#define KLT_ORDER_GAIN 12 /* (2 * SUBFRAMES) */ 72#define KLT_ORDER_SHAPE 108 /* (LPC_SHAPE_ORDER * SUBFRAMES) */ 73 74 75 76/* order for post_filter_bank */ 77#define POSTQORDER 3 78/* order for pre-filterbank */ 79#define QORDER 3 80/* for decimator */ 81#define ALLPASSSECTIONS 2 82/* The number of composite all-pass filter factors */ 83#define NUMBEROFCOMPOSITEAPSECTIONS 4 84 85/* The number of all-pass filter factors in an upper or lower channel*/ 86#define NUMBEROFCHANNELAPSECTIONS 2 87 88 89 90#define DPMIN_Q10 -10240 /* -10.00 in Q10 */ 91#define DPMAX_Q10 10240 /* 10.00 in Q10 */ 92#define MINBITS_Q10 10240 /* 10.0 in Q10 */ 93 94 95/* array size for byte stream in number of Word16. */ 96#define STREAM_MAXW16 300 /* The old maximum size still needed for the decoding */ 97#define STREAM_MAXW16_30MS 100 /* 100 Word16 = 200 bytes = 53.4 kbit/s @ 30 ms.framelength */ 98#define STREAM_MAXW16_60MS 200 /* 200 Word16 = 400 bytes = 53.4 kbit/s @ 60 ms.framelength */ 99 100 101/* storage size for bit counts */ 102//#define BIT_COUNTER_SIZE 30 103/* maximum order of any AR model or filter */ 104#define MAX_AR_MODEL_ORDER 12 105 106/* Maximum number of iterations allowed to limit payload size */ 107#define MAX_PAYLOAD_LIMIT_ITERATION 1 108 109/* Bandwidth estimator */ 110 111#define MIN_ISAC_BW 10000 /* Minimum bandwidth in bits per sec */ 112#define MAX_ISAC_BW 32000 /* Maxmum bandwidth in bits per sec */ 113#define MIN_ISAC_MD 5 /* Minimum Max Delay in ?? */ 114#define MAX_ISAC_MD 25 /* Maxmum Max Delay in ?? */ 115#define DELAY_CORRECTION_MAX 717 116#define DELAY_CORRECTION_MED 819 117#define Thld_30_60 18000 118#define Thld_60_30 27000 119 120/* assumed header size; we don't know the exact number (header compression may be used) */ 121#define HEADER_SIZE 35 /* bytes */ 122#define INIT_FRAME_LEN 60 123#define INIT_BN_EST 20000 124#define INIT_BN_EST_Q7 2560000 /* 20 kbps in Q7 */ 125#define INIT_REC_BN_EST_Q5 789312 /* INIT_BN_EST + INIT_HDR_RATE in Q5 */ 126 127/* 8738 in Q18 is ~ 1/30 */ 128/* #define INIT_HDR_RATE (((HEADER_SIZE * 8 * 1000) * 8738) >> NUM_BITS_TO_SHIFT (INIT_FRAME_LEN)) */ 129#define INIT_HDR_RATE 4666 130/* number of packets in a row for a high rate burst */ 131#define BURST_LEN 3 132/* ms, max time between two full bursts */ 133#define BURST_INTERVAL 800 134/* number of packets in a row for initial high rate burst */ 135#define INIT_BURST_LEN 5 136/* bits/s, rate for the first BURST_LEN packets */ 137#define INIT_RATE 10240000 /* INIT_BN_EST in Q9 */ 138 139 140/* For pitch analysis */ 141#define PITCH_FRAME_LEN 240 /* (FRAMESAMPLES/2) 30 ms */ 142#define PITCH_MAX_LAG 140 /* 57 Hz */ 143#define PITCH_MIN_LAG 20 /* 400 Hz */ 144#define PITCH_MIN_LAG_Q8 5120 /* 256 * PITCH_MIN_LAG */ 145#define OFFSET_Q8 768 /* 256 * 3 */ 146 147#define PITCH_MAX_GAIN_Q12 1843 /* 0.45 */ 148#define PITCH_LAG_SPAN2 65 /* (PITCH_MAX_LAG/2-PITCH_MIN_LAG/2+5) */ 149#define PITCH_CORR_LEN2 60 /* 15 ms */ 150#define PITCH_CORR_STEP2 60 /* (PITCH_FRAME_LEN/4) */ 151#define PITCH_SUBFRAMES 4 152#define PITCH_SUBFRAME_LEN 60 /* (PITCH_FRAME_LEN/PITCH_SUBFRAMES) */ 153 154/* For pitch filter */ 155#define PITCH_BUFFSIZE 190 /* (PITCH_MAX_LAG + 50) Extra 50 for fraction and LP filters */ 156#define PITCH_INTBUFFSIZE 430 /* (PITCH_FRAME_LEN+PITCH_BUFFSIZE) */ 157#define PITCH_FRACS 8 158#define PITCH_FRACORDER 9 159#define PITCH_DAMPORDER 5 160 161 162/* Order of high pass filter */ 163#define HPORDER 2 164 165 166/* PLC */ 167#define DECAY_RATE 10 /* Q15, 20% of decay every lost frame apllied linearly sample by sample*/ 168#define PLC_WAS_USED 1 169#define PLC_NOT_USED 3 170#define RECOVERY_OVERLAP 80 171#define RESAMP_RES 256 172#define RESAMP_RES_BIT 8 173 174 175 176/* Define Error codes */ 177/* 6000 General */ 178#define ISAC_MEMORY_ALLOCATION_FAILED 6010 179#define ISAC_MODE_MISMATCH 6020 180#define ISAC_DISALLOWED_BOTTLENECK 6030 181#define ISAC_DISALLOWED_FRAME_LENGTH 6040 182/* 6200 Bandwidth estimator */ 183#define ISAC_RANGE_ERROR_BW_ESTIMATOR 6240 184/* 6400 Encoder */ 185#define ISAC_ENCODER_NOT_INITIATED 6410 186#define ISAC_DISALLOWED_CODING_MODE 6420 187#define ISAC_DISALLOWED_FRAME_MODE_ENCODER 6430 188#define ISAC_DISALLOWED_BITSTREAM_LENGTH 6440 189#define ISAC_PAYLOAD_LARGER_THAN_LIMIT 6450 190/* 6600 Decoder */ 191#define ISAC_DECODER_NOT_INITIATED 6610 192#define ISAC_EMPTY_PACKET 6620 193#define ISAC_DISALLOWED_FRAME_MODE_DECODER 6630 194#define ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH 6640 195#define ISAC_RANGE_ERROR_DECODE_BANDWIDTH 6650 196#define ISAC_RANGE_ERROR_DECODE_PITCH_GAIN 6660 197#define ISAC_RANGE_ERROR_DECODE_PITCH_LAG 6670 198#define ISAC_RANGE_ERROR_DECODE_LPC 6680 199#define ISAC_RANGE_ERROR_DECODE_SPECTRUM 6690 200#define ISAC_LENGTH_MISMATCH 6730 201/* 6800 Call setup formats */ 202#define ISAC_INCOMPATIBLE_FORMATS 6810 203 204 205#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_SETTINGS_H_ */ 206