| /* | |
| * Copyright (c) 2012 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. | |
| */ | |
| /* | |
| * settings.h | |
| * | |
| * Declaration of #defines used in the iSAC codec | |
| * | |
| */ | |
| #ifndef MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_SETTINGS_H_ | |
| #define MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_SETTINGS_H_ | |
| /* sampling frequency (Hz) */ | |
| #define FS 16000 | |
| /* number of samples per frame (either 320 (20ms), 480 (30ms) or 960 (60ms)) */ | |
| #define INITIAL_FRAMESAMPLES 960 | |
| /* do not modify the following; this will have to be modified if we | |
| * have a 20ms framesize option */ | |
| /**********************************************************************/ | |
| /* miliseconds */ | |
| #define FRAMESIZE 30 | |
| /* number of samples per frame processed in the encoder, 480 */ | |
| #define FRAMESAMPLES 480 /* ((FRAMESIZE*FS)/1000) */ | |
| #define FRAMESAMPLES_HALF 240 | |
| #define FRAMESAMPLES_QUARTER 120 | |
| /**********************************************************************/ | |
| /* max number of samples per frame (= 60 ms frame) */ | |
| #define MAX_FRAMESAMPLES 960 | |
| #define MAX_SWBFRAMESAMPLES (MAX_FRAMESAMPLES * 2) | |
| /* number of samples per 10ms frame */ | |
| #define FRAMESAMPLES_10ms ((10 * FS) / 1000) | |
| #define SWBFRAMESAMPLES_10ms (FRAMESAMPLES_10ms * 2) | |
| /* number of samples in 30 ms frame */ | |
| #define FRAMESAMPLES_30ms 480 | |
| /* number of subframes */ | |
| #define SUBFRAMES 6 | |
| /* length of a subframe */ | |
| #define UPDATE 80 | |
| /* length of half a subframe (low/high band) */ | |
| #define HALF_SUBFRAMELEN (UPDATE / 2) | |
| /* samples of look ahead (in a half-band, so actually | |
| * half the samples of look ahead @ FS) */ | |
| #define QLOOKAHEAD 24 /* 3 ms */ | |
| /* order of AR model in spectral entropy coder */ | |
| #define AR_ORDER 6 | |
| /* order of LP model in spectral entropy coder */ | |
| #define LP_ORDER 0 | |
| /* window length (masking analysis) */ | |
| #define WINLEN 256 | |
| /* order of low-band pole filter used to approximate masking curve */ | |
| #define ORDERLO 12 | |
| /* order of hi-band pole filter used to approximate masking curve */ | |
| #define ORDERHI 6 | |
| #define UB_LPC_ORDER 4 | |
| #define UB_LPC_VEC_PER_FRAME 2 | |
| #define UB16_LPC_VEC_PER_FRAME 4 | |
| #define UB_ACTIVE_SUBFRAMES 2 | |
| #define UB_MAX_LPC_ORDER 6 | |
| #define UB_INTERPOL_SEGMENTS 1 | |
| #define UB16_INTERPOL_SEGMENTS 3 | |
| #define LB_TOTAL_DELAY_SAMPLES 48 | |
| enum ISACBandwidth { isac8kHz = 8, isac12kHz = 12, isac16kHz = 16 }; | |
| enum ISACBand { | |
| kIsacLowerBand = 0, | |
| kIsacUpperBand12 = 1, | |
| kIsacUpperBand16 = 2 | |
| }; | |
| enum IsacSamplingRate { kIsacWideband = 16, kIsacSuperWideband = 32 }; | |
| #define UB_LPC_GAIN_DIM SUBFRAMES | |
| #define FB_STATE_SIZE_WORD32 6 | |
| /* order for post_filter_bank */ | |
| #define POSTQORDER 3 | |
| /* order for pre-filterbank */ | |
| #define QORDER 3 | |
| /* another order */ | |
| #define QORDER_ALL (POSTQORDER + QORDER - 1) | |
| /* for decimator */ | |
| #define ALLPASSSECTIONS 2 | |
| /* array size for byte stream in number of bytes. */ | |
| /* The old maximum size still needed for the decoding */ | |
| #define STREAM_SIZE_MAX 600 | |
| #define STREAM_SIZE_MAX_30 200 /* 200 bytes=53.4 kbps @ 30 ms.framelength */ | |
| #define STREAM_SIZE_MAX_60 400 /* 400 bytes=53.4 kbps @ 60 ms.framelength */ | |
| /* storage size for bit counts */ | |
| #define BIT_COUNTER_SIZE 30 | |
| /* maximum order of any AR model or filter */ | |
| #define MAX_AR_MODEL_ORDER 12 // 50 | |
| /* For pitch analysis */ | |
| #define PITCH_FRAME_LEN (FRAMESAMPLES_HALF) /* 30 ms */ | |
| #define PITCH_MAX_LAG 140 /* 57 Hz */ | |
| #define PITCH_MIN_LAG 20 /* 400 Hz */ | |
| #define PITCH_MAX_GAIN 0.45 | |
| #define PITCH_MAX_GAIN_06 0.27 /* PITCH_MAX_GAIN*0.6 */ | |
| #define PITCH_MAX_GAIN_Q12 1843 | |
| #define PITCH_LAG_SPAN2 (PITCH_MAX_LAG / 2 - PITCH_MIN_LAG / 2 + 5) | |
| #define PITCH_CORR_LEN2 60 /* 15 ms */ | |
| #define PITCH_CORR_STEP2 (PITCH_FRAME_LEN / 4) | |
| #define PITCH_BW 11 /* half the band width of correlation surface */ | |
| #define PITCH_SUBFRAMES 4 | |
| #define PITCH_GRAN_PER_SUBFRAME 5 | |
| #define PITCH_SUBFRAME_LEN (PITCH_FRAME_LEN / PITCH_SUBFRAMES) | |
| #define PITCH_UPDATE (PITCH_SUBFRAME_LEN / PITCH_GRAN_PER_SUBFRAME) | |
| /* maximum number of peaks to be examined in correlation surface */ | |
| #define PITCH_MAX_NUM_PEAKS 10 | |
| #define PITCH_PEAK_DECAY 0.85 | |
| /* For weighting filter */ | |
| #define PITCH_WLPCORDER 6 | |
| #define PITCH_WLPCWINLEN PITCH_FRAME_LEN | |
| #define PITCH_WLPCASYM 0.3 /* asymmetry parameter */ | |
| #define PITCH_WLPCBUFLEN PITCH_WLPCWINLEN | |
| /* For pitch filter */ | |
| /* Extra 50 for fraction and LP filters */ | |
| #define PITCH_BUFFSIZE (PITCH_MAX_LAG + 50) | |
| #define PITCH_INTBUFFSIZE (PITCH_FRAME_LEN + PITCH_BUFFSIZE) | |
| /* Max rel. step for interpolation */ | |
| #define PITCH_UPSTEP 1.5 | |
| /* Max rel. step for interpolation */ | |
| #define PITCH_DOWNSTEP 0.67 | |
| #define PITCH_FRACS 8 | |
| #define PITCH_FRACORDER 9 | |
| #define PITCH_DAMPORDER 5 | |
| #define PITCH_FILTDELAY 1.5f | |
| /* stepsize for quantization of the pitch Gain */ | |
| #define PITCH_GAIN_STEPSIZE 0.125 | |
| /* Order of high pass filter */ | |
| #define HPORDER 2 | |
| /* some mathematical constants */ | |
| /* log2(exp) */ | |
| #define LOG2EXP 1.44269504088896 | |
| #define PI 3.14159265358979 | |
| /* Maximum number of iterations allowed to limit payload size */ | |
| #define MAX_PAYLOAD_LIMIT_ITERATION 5 | |
| /* Redundant Coding */ | |
| #define RCU_BOTTLENECK_BPS 16000 | |
| #define RCU_TRANSCODING_SCALE 0.40f | |
| #define RCU_TRANSCODING_SCALE_INVERSE 2.5f | |
| #define RCU_TRANSCODING_SCALE_UB 0.50f | |
| #define RCU_TRANSCODING_SCALE_UB_INVERSE 2.0f | |
| /* Define Error codes */ | |
| /* 6000 General */ | |
| #define ISAC_MEMORY_ALLOCATION_FAILED 6010 | |
| #define ISAC_MODE_MISMATCH 6020 | |
| #define ISAC_DISALLOWED_BOTTLENECK 6030 | |
| #define ISAC_DISALLOWED_FRAME_LENGTH 6040 | |
| #define ISAC_UNSUPPORTED_SAMPLING_FREQUENCY 6050 | |
| /* 6200 Bandwidth estimator */ | |
| #define ISAC_RANGE_ERROR_BW_ESTIMATOR 6240 | |
| /* 6400 Encoder */ | |
| #define ISAC_ENCODER_NOT_INITIATED 6410 | |
| #define ISAC_DISALLOWED_CODING_MODE 6420 | |
| #define ISAC_DISALLOWED_FRAME_MODE_ENCODER 6430 | |
| #define ISAC_DISALLOWED_BITSTREAM_LENGTH 6440 | |
| #define ISAC_PAYLOAD_LARGER_THAN_LIMIT 6450 | |
| #define ISAC_DISALLOWED_ENCODER_BANDWIDTH 6460 | |
| /* 6600 Decoder */ | |
| #define ISAC_DECODER_NOT_INITIATED 6610 | |
| #define ISAC_EMPTY_PACKET 6620 | |
| #define ISAC_DISALLOWED_FRAME_MODE_DECODER 6630 | |
| #define ISAC_RANGE_ERROR_DECODE_FRAME_LENGTH 6640 | |
| #define ISAC_RANGE_ERROR_DECODE_BANDWIDTH 6650 | |
| #define ISAC_RANGE_ERROR_DECODE_PITCH_GAIN 6660 | |
| #define ISAC_RANGE_ERROR_DECODE_PITCH_LAG 6670 | |
| #define ISAC_RANGE_ERROR_DECODE_LPC 6680 | |
| #define ISAC_RANGE_ERROR_DECODE_SPECTRUM 6690 | |
| #define ISAC_LENGTH_MISMATCH 6730 | |
| #define ISAC_RANGE_ERROR_DECODE_BANDWITH 6740 | |
| #define ISAC_DISALLOWED_BANDWIDTH_MODE_DECODER 6750 | |
| #define ISAC_DISALLOWED_LPC_MODEL 6760 | |
| /* 6800 Call setup formats */ | |
| #define ISAC_INCOMPATIBLE_FORMATS 6810 | |
| #endif /* MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_SETTINGS_H_ */ |