/* * 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 WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_SETTINGS_H_ #define WEBRTC_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 #define MAXFFTSIZE 2048 #define NFACTOR 11 /* 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 /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_SETTINGS_H_ */