192 lines
6.0 KiB
Plaintext
192 lines
6.0 KiB
Plaintext
|
################# 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 definations 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 defination
|
||
|
-- 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
|