optek_dsp_ip.h
4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#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