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
 |