optek_hifi2_bqriir.h 5.55 KB
/*
	Optek BiQuad
	Copyright by Optek in May 24, 2016
*/

#ifndef _OPTEK_HIFI2_BQRIIR_H
#define _OPTEK_HIFI2_BQRIIR_H


/*
	input->no input
	return->string of optek_bgriir build date,time and version
*/
const char *optek_bqriir_data_get(void);
const char *optek_bqriir_time_get(void);
const char *optek_bqriir_version_get(void);


/*
	M->how many bqriirs
	return how many bytes needed
*/
int optek_bqriir_alloc(int M);
void optek_bqriir_init (void);

/*
	handle->optek_bqriir
	coef->all coef table
	return true
*/
/*
	please note, running this function, the interrupt should be disable
*/
int optek_bqriir_coeffs_updata_all (void * handle, const int *coef);

/*
	handle->optek_bqriir
	coef->all coef table
	return true
*/

/*
	please note, running this function, the interrupt should be disable
*/

int optek_bqriir_5_coeffs_updata_all (void * handle, const int *coef);


/*
	handle->optek_bqriir
	k->update kth coef
	coef->kth coef table
	return true/false
*/
/*
	please note, running this function, the interrupt should be disable
*/
int optek_bqriir_coeffs_updata(void * handle, int k, const int *coef);

/*
	objmem->mem allocated for bqriir
	M-> how many bqriirs
	coef->all coef table
	return handle
*/

/*
	handle->optek_bqriir
	k->update kth coef
	coef->kth coef table
	return true/false
*/

/*
	please note, running this function, the interrupt should be disable
*/

int optek_bqriir_5_coeffs_updata(void * handle, int k, const int *coef);

void * optek_bqriir_open(void * objmem, int M, const int *coef);
/*
	handle->optek_bqriir,
	r->output
	x->input
	N->samples
	return void
*/
//MCPS: 0.31 Average: 0.31 Peak: 0.31
void optek_bqdir_mono_24b_process (
		  void *handle, 
          int * r,     // [N] output
		  int * x,     // [N] input
          int N
) OPTEK_HIFI2_DSP_ATTIB;

/*
	handle->optek_bqriir,
	r->output
	x->input
	N->samples
	return void
*/
//MCPS: 0.31 Average: 0.31 Peak: 0.31
void optek_bqdiir_mono_16b_process (
									void *handle, 
									short * r,     // [N] output
									short * x,     // [N] input
									int N
									) OPTEK_HIFI2_DSP_ATTIB;

/*
	handle->optek_bqriir,
	r->output
	x->input
	N->samples (L sampes + R samples for stereo)
	return void
*/
//MCPS: 0.58 Average: 0.58 Peak: 0.58
void optek_bqdiir_stereo_24b_process (
									void *handle, 
									int * r,     // [N] output
									int * x,     // [N] input
									int N
									) OPTEK_HIFI2_DSP_ATTIB;

/*
	handle->optek_bqriir,
	r->output
	x->input
	N->samples (L sampes + R samples for stereo)
	return void
*/
//MCPS: 0.58 Average: 0.58 Peak: 0.58
void optek_bqdiir_stereo_16b_process (
									void *handle, 
									short * r,     // [N] output
									short * x,     // [N] input
									int N
									) OPTEK_HIFI2_DSP_ATTIB;


/*pre scale and convert*/

/*
	r->output, if r = x, r size should be double of x, aligned with 8 bytes
	x->input
	N->samples
	return void
*/
void optek_hifi2_prescale_16b (	int * r,				// [N] output
							   short * x,				// [N] input
								int N) OPTEK_HIFI2_DSP_ATTIB;



/*
	r->output, if r = x, r size should be double of x, aligned with 8 bytes
	x->input
	N->samples
	return void
*/
void optek_hifi2_16b_to_24b (	int * r,				// [N] output
								short * x,				// [N] input
								int N) OPTEK_HIFI2_DSP_ATTIB;



/*
	r->output
	x->input
	N->samples
	return void
*/
void optek_hifi2_prescale_24b (	int * r,				// [N] output
								int * x,				// [N] input
								int N) OPTEK_HIFI2_DSP_ATTIB;

/*
	r->output
	x->input
	N->samples
	return void
*/
void optek_hifi2_24b_to_16b (	short * r,				// [N] output
								int * x,				// [N] input
								int N) OPTEK_HIFI2_DSP_ATTIB;

/*
	r->output		r = (x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_24b_to_mono (	int * r,				// [N/2] output
								int * x,				// [N] input
								int N);

/*
	r->output		r.L = r.R = (x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_24b_to_2mono (	int * r,				// [N] output
								int * x,				// [N] input
								int N);

/*
	r->output		r.L = (x_L + x_R)/2 r.R = -(x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_24b_to_difference (	int * r,				// [N] output
								int * x,				// [N] input
								int N);

/*
	r->output		r.L = (x_L - x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_difference_in_24b_to_mono (	int * r,				// [N/2] output
								int * x,				// [N] input
								int N);

/*
	r->output		r.L = r.R = (x_L - x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_difference_in_24b_to_2mono (	int * r,				// [N] output
								int * x,				// [N] input
								int N);

/*
	r->output		r = (x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_16b_to_mono (	short * r,				// [N/2] output
								short * x,				// [N] input
								int N);

/*
	r->output		r.L = r.R = (x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_16b_to_2mono (	short * r,				// [N] output
								short * x,				// [N] input
								int N);

/*
	r->output		r.L = (x_L + x_R)/2 r.R = -(x_L + x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_stereo_16b_to_difference (	short * r,				// [N] output
								short * x,				// [N] input
								int N);

/*
	r->output		r.L = (x_L - x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_difference_in_16b_to_mono (	short * r,				// [N/2] output
								short * x,				// [N] input
								int N);


/*
	r->output		r.L = r.R = (x_L - x_R)/2
	x->input
	N->samples
	return void
*/
void optek_hifi2_difference_in_16b_to_2mono (	short * r,				// [N] output
								short * x,				// [N] input
								int N);


#endif	//_OPTEK_HIFI2_BQRIIR_H