123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- ################# REMOVE warnings on trimedia compiler ##############################
- ################# Not critical to compilation ##############################
- 1. Change the following statements to remove warning for constant expression
- (i) mdf.c [if(0) --> #if 0]
- (ii) ltp.c [if(1) --> #if 1]
- (iii) preprocess.c [if(1) --> #if 1]
- (iv) sb_celp.c [if (SPEEX_SET_VBR_MAX_BITRATE<1) --> #if (SPEEX_SET_VBR_MAX_BITRATE<1)]
- 2. add REMARK_ON macro to remove warning on not reference variable
- -- uses (void)<variable> to remove warning on not referenced variable
- -- #define REMARK_ON
- -- (void)<variable>
- -- #endif
- -- search for REMARK_ON on the following files
- (i) jitter.c
- (ii) lsp.c
- (iii) ltp.c
- (iv) mdf.c
- (v) filters.c
- (vi) filterbank.c
- (vii) cb_search.c
- (viii) vq.c
- (ix) vbr.c
- (x) stereo.c
- (xi) speex_callbacks.c
- (xii) preprocess.c
- 3. commented out the following in pseudofloat.h for unused variable
- //static const spx_float_t FLOAT_HALF = {16384,-15};
- 4. commented out unused variable in nb_celp.c
- //spx_word16_t *sp; ***unused variable***
- //sp=out+offset; ***unused variable***
- //int submode; ***unused variable***
- // ***unused variable***
- // advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS);
- advance = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS);
- // ***unused variable***
- //advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS);
- advance = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS);
- // spx_word16_t *exc; ***unused variable***
- // exc=st->exc+offset; ***unused variable***
- 5. commented out unused variable in vbr.c
- //int va; ***unused variable***
- //va = 0; ***unused variable***
- //va = 1; ***unused variable***
- 6. added HAVE_CONFIG into medfilter.c
- ################# Patches for trimedia compiler ##############################
- ################# Critical to compilation ##############################
- -- change the following in modes.c and speex.h as compiler does not support const * const...
- (i) modes.c
- #ifdef __TCS__
- const SpeexMode * speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode, &speex_uwb_mode};
- #else
- const SpeexMode * const speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode, &speex_uwb_mode};
- #endif
- (ii) speex.h
- #ifdef __TCS__
- extern const SpeexMode * speex_mode_list[SPEEX_NB_MODES];
- #else
- extern const SpeexMode * const speex_mode_list[SPEEX_NB_MODES];
- #endif
- -- added the #elif defined (TM_ASM) to the following files for optimized codes
- (1) arch.h
- (2) cb_search.c
- (3) fftwrap.c
- (4) filterbank.c
- (5) filters.c
- (6) kiss_fft.c
- (7) kiss_fftr.c
- (8) lpc.c
- (9) lsp.c
- (10) ltp.c
- (11) mdf.c
- (12) misc.c
- (13) preprocess.c
- (14) quant_lsp.c
- (15) vq.c
- -- reorder macro definitions in quant_lsp.c
- #ifdef FIXED_POINT
- #define LSP_LINEAR(i) (SHL16(i+1,11))
- #define LSP_LINEAR_HIGH(i) (ADD16(MULT16_16_16(i,2560),6144))
- #define LSP_DIV_256(x) (SHL16((spx_word16_t)x, 5))
- #define LSP_DIV_512(x) (SHL16((spx_word16_t)x, 4))
- #define LSP_DIV_1024(x) (SHL16((spx_word16_t)x, 3))
- #define LSP_PI 25736
- #else
- #define LSP_LINEAR(i) (.25*(i)+.25)
- #define LSP_LINEAR_HIGH(i) (.3125*(i)+.75)
- #define LSP_SCALE 256.
- #define LSP_DIV_256(x) (0.0039062*(x))
- #define LSP_DIV_512(x) (0.0019531*(x))
- #define LSP_DIV_1024(x) (0.00097656*(x))
- #define LSP_PI M_PI
- #endif
- #ifdef BFIN_ASM
- #include "quant_lsp_bfin.h"
- #elif defined (TM_ASM)
- #include "quant_lsp_tm.h"
- #endif
- -- added macro PREPROCESS_MDF_FLOAT to allow using of floating point
- -- in mdf and preprocess while keeping fixed point in encoder/decoder
- -- This is due to the fact that preprocess/mdf run faster on floating
- -- point on trimedia
- -- added the following 3 lines to the files below
- #ifdef PREPROCESS_MDF_FLOAT
- #undef FIXED_POINT
- #endif
- (1) mdf.c
- (2) preprocess.c
- (3) filterbank.c
- (4) fftwrap.c
- (5) kiss_fft.c
- (6) kiss_fftr.c
- -- created a new USE_COMPACT_KISS_FFT for fftwrap.c and shifted definition
- -- to config file so that user configure the usage of fft on config.h
- -- TOEXPLORE:is it possible to share table between mdf/preprocess?
- -- Introducing this macro made the following changes in C code
- -- New macro to facilitate integration
- (grouping real/complex for dc and nyquist frequency seems to require a large
- amount of memory for mdf, therefore did not made the changes for that)
- (1) modify preprocess.c on init and destroy
- (2) modify mdf.c on init and destroy
- (3) shifted power_spectrum to fftwrap.c to share optimised code between
- preprocess.c and mdf.c
-
- ################# NOTES ##############################
- (1) fixed point encoding/decoding is tested on narrowband
- - some of the QX fractions are packed together to
- (frac1 * a + frac2 * a) >> X (should be more accurate in rounding)
- instead of
- ((frac1 * a) >> X) + ((frac2 * a) >> X)
- will cause some different between optimized and unoptimized code.
- tried decoding/encoding optimized code on some audio files retains
- the clearity of the word
-
- - wideband/ultrawideband is not heavily tested yet
-
- (2) optimized fixed point code requires memory alignment
- - used config to debug on functions where memory is not align
- (3) floating point optimization for preprocess/mdf is tested
- fixed point is not tested yet (except fft/filterbank)
- Note (1) also applies to sround in fft for fixed point
- some optimization is provided for fixed point as it requires lesser
- memory compared to floating point.
-
- (4) unroll configurations provided to reduce code size if required
- (5) use profile options only if compiler profiling fails to work
- (6) can't include the makefile as it is close proprietary
- ################# TODO:For Trimedia ##############################
- (1) Possible add TSSA wrapper for codec but don't think this can be open source.
- (2) Optimizations for fixed point in mdf/preprocess
- ################# Added Files ##############################
- - _kiss_fft_guts_tm.h
- - cb_search_tm.h
- - fftwrap_tm.h
- - filterbank_tm.h
- - filters_tm.h
- - fixed_tm.h
- - kiss_fft_tm.h
- - kiss_fftr_tm.h
- - lpc_tm.h
- - lsp_tm.h
- - ltp_tm.h
- - mdf_tm.h
- - misc_tm.h
- - preprocess_tm.h
- - profile_tm.h
- - quant_lsp_tm.h
- - vq_tm.h
- - config.h
- - speex_config_types.h
|