FreeCalypso > hg > gsm-codec-lib
view libtwamr/vad2.h @ 477:4c9222d95647
libtwamr encoder: always emit frame->mode = mode;
In the original implementation of amr_encode_frame(), the 'mode' member
of the output struct was set to 0xFF if the output frame type is TX_NO_DATA.
This design was made to mimic the mode field (16-bit word) being set to
0xFFFF (or -1) in 3GPP test sequence format - but nothing actually depends
on this struct member being set in any way, and amr_frame_to_tseq()
generates the needed 0xFFFF on its own, based on frame->type being equal
to TX_NO_DATA.
It is simpler and more efficient to always set frame->mode to the actual
encoding mode in amr_encode_frame(), and this new behavior has already
been documented in doc/AMR-library-API description in anticipation of
the present change.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 18 May 2024 22:30:42 +0000 |
parents | 0152c069d01f |
children |
line wrap: on
line source
/* ******************************************************************************** * * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 * R99 Version 3.3.0 * REL-4 Version 4.1.0 * ******************************************************************************** * * File : vad2.h * Purpose : Voice Activity Detection (VAD) for AMR (option 2) * ******************************************************************************** */ #ifndef vad2_h #define vad2_h "$Id $" #include "typedef.h" /***** Defines ****/ #define YES 1 #define NO 0 #define ON 1 #define OFF 0 #define TRUE 1 #define FALSE 0 #define FRM_LEN 80 #define DELAY 24 #define FFT_LEN 128 #define NUM_CHAN 16 #define LO_CHAN 0 #define HI_CHAN 15 #define UPDATE_THLD 35 #define HYSTER_CNT_THLD 6 #define UPDATE_CNT_THLD 50 #define SHIFT_STATE_0 0 /* channel energy scaled as 22,9 */ #define SHIFT_STATE_1 1 /* channel energy scaled as 27,4 */ #define NOISE_FLOOR_CHAN_0 512 /* 1.0 scaled as 22,9 */ #define MIN_CHAN_ENRG_0 32 /* 0.0625 scaled as 22,9 */ #define MIN_NOISE_ENRG_0 32 /* 0.0625 scaled as 22,9 */ #define INE_NOISE_0 8192 /* 16.0 scaled as 22,9 */ #define FRACTIONAL_BITS_0 9 /* used as input to fn10Log10() */ #define NOISE_FLOOR_CHAN_1 16 /* 1.0 scaled as 27,4 */ #define MIN_CHAN_ENRG_1 1 /* 0.0625 scaled as 27,4 */ #define MIN_NOISE_ENRG_1 1 /* 0.0625 scaled as 27,4 */ #define INE_NOISE_1 256 /* 16.0 scaled as 27,4 */ #define FRACTIONAL_BITS_1 4 /* used as input to fn10Log10() */ #define STATE_1_TO_0_SHIFT_R (FRACTIONAL_BITS_1-FRACTIONAL_BITS_0) /* state correction factor */ #define STATE_0_TO_1_SHIFT_R (FRACTIONAL_BITS_0-FRACTIONAL_BITS_1) /* state correction factor */ #define HIGH_ALPHA 29491 /* 0.9 scaled as 0,15 */ #define LOW_ALPHA 22938 /* 0.7 scaled as 0,15 */ #define ALPHA_RANGE (HIGH_ALPHA - LOW_ALPHA) #define DEV_THLD 7168 /* 28.0 scaled as 7,8 */ #define PRE_EMP_FAC (-26214) /* -0.8 scaled as 0,15 */ #define CEE_SM_FAC 18022 /* 0.55 scaled as 0,15 */ #define ONE_MINUS_CEE_SM_FAC 14746 /* 0.45 scaled as 0,15 */ #define CNE_SM_FAC 3277 /* 0.1 scaled as 0,15 */ #define ONE_MINUS_CNE_SM_FAC 29491 /* 0.9 scaled as 0,15 */ #define FFT_HEADROOM 2 typedef struct { Word16 pre_emp_mem; Word16 update_cnt; Word16 hyster_cnt; Word16 last_update_cnt; Word16 ch_enrg_long_db[NUM_CHAN]; /* scaled as 7,8 */ Word32 Lframe_cnt; Word32 Lch_enrg[NUM_CHAN]; /* scaled as 22,9 or 27,4 */ Word32 Lch_noise[NUM_CHAN]; /* scaled as 22,9 */ Word16 last_normb_shift; /* last block norm shift count */ Word16 tsnr; /* total signal-to-noise ratio in dB (scaled as 7,8) */ Word16 hangover; Word16 burstcount; Word16 fupdate_flag; /* forced update flag from previous frame */ Word16 negSNRvar; /* Negative SNR variance (scaled as 7,8) */ Word16 negSNRbias; /* sensitivity bias from negative SNR variance (scaled as 15,0) */ Word16 shift_state; /* use 22,9 or 27,4 scaling for ch_enrg[] */ Word32 L_R0; Word32 L_Rmax; Flag LTP_flag; /* Use to indicate the the LTP gain is > LTP_THRESH */ } vadState2; /**** Prototypes ****/ Word16 vad2 (Word16 *farray_ptr, vadState2 *st); void vad2_reset (vadState2 *st); void r_fft (Word16 *farray_ptr); void LTP_flag_update (vadState2 *st, Word16 mode); #endif