optek_dsp_ip.h 4.1 KB
#ifndef OPTEK_HIFI2_DSP_H

#define OPTEK_HIFI2_DSP_H

#define OPTEK_HIFI2_DSP_ATTIB	__attribute__ ((section (".dsp_critical_sec_text")))

#define PROCESSING_DATA_16b			1
#define PROCESSING_DATA_24b			2		//24b
#define PROCESSING_DATA_32b			2		//32b

void optek_dsrc_init (void);

/*
	object->allocated mem
	N-> input data block length, should be aligned with 8
	M-> FIR filter order, should be aligned with 4
	h-> coeffs
	index_init->0
	step->	input x inter_d/step	
	inter_d-> input x M/step
	out_samples_mask-> out samples mask, should be 0,1,3,5,15,31...
	chan-> 1 mono, 2 stereo
	processing_data_bits->16 bit data 1, 24/32bit data 2 
*/

void * optek_dsrc_open (void *object, unsigned short M, unsigned short N, int *h, unsigned short index_init, unsigned short step, unsigned short inter_d, 
				unsigned short out_samples_mask, unsigned short chans, unsigned short processing_data_bits);

void optek_dsrc_close (void);
void optek_dsrc_fini (void);

#define OPTEK_DSRC_FAST		1
#define OPTEK_DSRC_SLOW		2

/*
	Dynamic Digital Audio Sync, Every sample (unsigned int)+frac, if overflow, move (forward or backward) one oversample sample.
	For example, if y = x*320/294, adjust = 1ppm (1000000), frac = 100000000/(294 * adjsut)
	frac->adjust speed
	dir->adjust direction 1, fast; 2 slow
*/
void optek_d2as_frac_set (void *handle, unsigned int frac, short dir);

const char  *optek_dsrc_get_version (void);

/*
	N-> input data block length, should be aligned with 8
	M-> FIR filter order, should be aligned with 4
	out_samples_mask-> out samples mask, should be 0,1,3,5,15,31...
	chans-> 1 mono, 2 stereo
	processing_data_bits->16 bit data 1, 24/32bit data 2 
*/

unsigned int optek_dsrc_alloc( unsigned short M, unsigned short N, unsigned short out_samples_mask, unsigned short chans,unsigned short processing_data_bits);

/*
	x->input data
	N->input samples (should be same with optek_dsrc_open(...) and multiple 4)
	y->out data, should be large enouth to hold src data + mask samples
	return out data L/R samples
*/
int optek_dsrc_stereo_16b (void *handle, short *y,  short *x, int N) OPTEK_HIFI2_DSP_ATTIB;
int optek_dsrc_mono_16b (void *handle, short *y,  short *x, int N) OPTEK_HIFI2_DSP_ATTIB;
int optek_dsrc_stereo_24b (void *handle, int *y,  int *x, int N); //OPTEK_HIFI2_DSP_ATTIB;
int optek_dsrc_mono_24b (void *handle, int *y,  int *x, int N); //OPTEK_HIFI2_DSP_ATTIB;


int optek_dsrc_get_samples_left (void *handle);
int optek_dsrc_get_index (void *handle);

const char  *optek_aec_get_version (void);

/*
	handle-> aec handle
	input_signal->far end signal
	r_signal->near end signal
	samples-> input block size, should be same with optek_nlms_open and multiple of 8
	far_end_plev->far end signal peak level
	error_plev->error signal peak level
*/

int optek_nlms_process_16b( void *handle, short *input_signal, short *r_signal, short *error_signal, int samples,
					   short  *far_end_plev, short *error_plev) OPTEK_HIFI2_DSP_ATTIB;


int optek_nlms_process_24b( void *handle, int *input_signal, int *r_signal, int *error_signal, int samples,
						   short  *far_end_plev, short *error_plev) OPTEK_HIFI2_DSP_ATTIB;


/*
	M->filter size, should be multiple of 16
	N->(M+N) Fir filter input buffer
	processing_data_bits->16b or 24b
*/

unsigned int optek_nlms_alloc(int M, int N,unsigned short processing_data_bits);

void optek_nlms_init (void);

/*
	objmem->mem
	M-> filter size, should be multiple of 16
	N->input block size, should be multiple of 8
	mu-> sould be < 2
	lamba->refer to NLMS
	h-> init coeffs
	updata_mask-> 0
	far_end_plevel_rtime->far end signal peak level release time
	error_plevel_rtime->error signal peak level release time
	update_disable_farend_lev-> 0
	dtd_lev-> 0
	processing_data_bits->16b or 24b
*/
void  * optek_nlms_open(void * objmem, 
                        unsigned short M,
						unsigned short N,
						unsigned int mu,
						unsigned int lambda,
                        const int* h,
						unsigned short updata_mask,
						unsigned short far_end_plevel_rtime,
						unsigned short error_plevel_rtime,						
						unsigned short update_disable_farend_lev,
						unsigned short dtd_lev,
						unsigned short processing_data_bits
						);

#endif