@@ -26,33 +26,37 @@ void eq_fir_s16(struct fir_state_32x16 fir[], struct cir_buf_source *source,
2626 struct cir_buf_sink * sink , int frames , int channels )
2727{
2828 struct fir_state_32x16 * filter ;
29- int32_t z ;
30- const int16_t * x0 ;
31- int16_t * y0 ;
32- const int16_t * x = source -> ptr ;
33- int16_t * y = sink -> ptr ;
34- int nmax , n , i , j ;
29+ int32_t filtered_sample ;
30+ const int16_t * src_channel ;
31+ int16_t * dst_channel ;
32+ const int16_t * src = source -> ptr ;
33+ int16_t * dst = sink -> ptr ;
34+ int max_samples ;
35+ int chunk_samples ;
36+ int sample_index ;
37+ int channel ;
3538 int remaining_samples = frames * channels ;
3639
3740 while (remaining_samples ) {
38- nmax = cir_buf_samples_without_wrap_s16 (x , source -> buf_end );
39- n = MIN (remaining_samples , nmax );
40- nmax = cir_buf_samples_without_wrap_s16 (y , sink -> buf_end );
41- n = MIN (n , nmax );
42- for (j = 0 ; j < channels ; j ++ ) {
43- x0 = x + j ;
44- y0 = y + j ;
45- filter = & fir [j ];
46- for (i = 0 ; i < n ; i += channels ) {
47- z = fir_32x16 (filter , * x0 << 16 );
48- * y0 = sat_int16 (Q_SHIFT_RND (z , 31 , 15 ));
49- x0 += channels ;
50- y0 += channels ;
41+ max_samples = cir_buf_samples_without_wrap_s16 (src , source -> buf_end );
42+ chunk_samples = MIN (remaining_samples , max_samples );
43+ max_samples = cir_buf_samples_without_wrap_s16 (dst , sink -> buf_end );
44+ chunk_samples = MIN (chunk_samples , max_samples );
45+ for (channel = 0 ; channel < channels ; channel ++ ) {
46+ src_channel = src + channel ;
47+ dst_channel = dst + channel ;
48+ filter = & fir [channel ];
49+ for (sample_index = 0 ; sample_index < chunk_samples ;
50+ sample_index += channels ) {
51+ filtered_sample = fir_32x16 (filter , * src_channel << 16 );
52+ * dst_channel = sat_int16 (Q_SHIFT_RND (filtered_sample , 31 , 15 ));
53+ src_channel += channels ;
54+ dst_channel += channels ;
5155 }
5256 }
53- remaining_samples -= n ;
54- x = source_cir_buf_wrap (x + n , source -> buf_start , source -> buf_end );
55- y = cir_buf_wrap (y + n , sink -> buf_start , sink -> buf_end );
57+ remaining_samples -= chunk_samples ;
58+ src = source_cir_buf_wrap (src + chunk_samples , source -> buf_start , source -> buf_end );
59+ dst = cir_buf_wrap (dst + chunk_samples , sink -> buf_start , sink -> buf_end );
5660 }
5761}
5862#endif /* CONFIG_FORMAT_S16LE */
@@ -62,33 +66,37 @@ void eq_fir_s24(struct fir_state_32x16 fir[], struct cir_buf_source *source,
6266 struct cir_buf_sink * sink , int frames , int channels )
6367{
6468 struct fir_state_32x16 * filter ;
65- int32_t z ;
66- const int32_t * x0 ;
67- int32_t * y0 ;
68- const int32_t * x = source -> ptr ;
69- int32_t * y = sink -> ptr ;
70- int nmax , n , i , j ;
69+ int32_t filtered_sample ;
70+ const int32_t * src_channel ;
71+ int32_t * dst_channel ;
72+ const int32_t * src = source -> ptr ;
73+ int32_t * dst = sink -> ptr ;
74+ int max_samples ;
75+ int chunk_samples ;
76+ int sample_index ;
77+ int channel ;
7178 int remaining_samples = frames * channels ;
7279
7380 while (remaining_samples ) {
74- nmax = cir_buf_samples_without_wrap_s32 (x , source -> buf_end );
75- n = MIN (remaining_samples , nmax );
76- nmax = cir_buf_samples_without_wrap_s32 (y , sink -> buf_end );
77- n = MIN (n , nmax );
78- for (j = 0 ; j < channels ; j ++ ) {
79- x0 = x + j ;
80- y0 = y + j ;
81- filter = & fir [j ];
82- for (i = 0 ; i < n ; i += channels ) {
83- z = fir_32x16 (filter , * x0 << 8 );
84- * y0 = sat_int24 (Q_SHIFT_RND (z , 31 , 23 ));
85- x0 += channels ;
86- y0 += channels ;
81+ max_samples = cir_buf_samples_without_wrap_s32 (src , source -> buf_end );
82+ chunk_samples = MIN (remaining_samples , max_samples );
83+ max_samples = cir_buf_samples_without_wrap_s32 (dst , sink -> buf_end );
84+ chunk_samples = MIN (chunk_samples , max_samples );
85+ for (channel = 0 ; channel < channels ; channel ++ ) {
86+ src_channel = src + channel ;
87+ dst_channel = dst + channel ;
88+ filter = & fir [channel ];
89+ for (sample_index = 0 ; sample_index < chunk_samples ;
90+ sample_index += channels ) {
91+ filtered_sample = fir_32x16 (filter , * src_channel << 8 );
92+ * dst_channel = sat_int24 (Q_SHIFT_RND (filtered_sample , 31 , 23 ));
93+ src_channel += channels ;
94+ dst_channel += channels ;
8795 }
8896 }
89- remaining_samples -= n ;
90- x = source_cir_buf_wrap (x + n , source -> buf_start , source -> buf_end );
91- y = cir_buf_wrap (y + n , sink -> buf_start , sink -> buf_end );
97+ remaining_samples -= chunk_samples ;
98+ src = source_cir_buf_wrap (src + chunk_samples , source -> buf_start , source -> buf_end );
99+ dst = cir_buf_wrap (dst + chunk_samples , sink -> buf_start , sink -> buf_end );
92100 }
93101}
94102#endif /* CONFIG_FORMAT_S24LE */
@@ -98,31 +106,35 @@ void eq_fir_s32(struct fir_state_32x16 fir[], struct cir_buf_source *source,
98106 struct cir_buf_sink * sink , int frames , int channels )
99107{
100108 struct fir_state_32x16 * filter ;
101- const int32_t * x0 ;
102- int32_t * y0 ;
103- const int32_t * x = source -> ptr ;
104- int32_t * y = sink -> ptr ;
105- int nmax , n , i , j ;
109+ const int32_t * src_channel ;
110+ int32_t * dst_channel ;
111+ const int32_t * src = source -> ptr ;
112+ int32_t * dst = sink -> ptr ;
113+ int max_samples ;
114+ int chunk_samples ;
115+ int sample_index ;
116+ int channel ;
106117 int remaining_samples = frames * channels ;
107118
108119 while (remaining_samples ) {
109- nmax = cir_buf_samples_without_wrap_s32 (x , source -> buf_end );
110- n = MIN (remaining_samples , nmax );
111- nmax = cir_buf_samples_without_wrap_s32 (y , sink -> buf_end );
112- n = MIN (n , nmax );
113- for (j = 0 ; j < channels ; j ++ ) {
114- x0 = x + j ;
115- y0 = y + j ;
116- filter = & fir [j ];
117- for (i = 0 ; i < n ; i += channels ) {
118- * y0 = fir_32x16 (filter , * x0 );
119- x0 += channels ;
120- y0 += channels ;
120+ max_samples = cir_buf_samples_without_wrap_s32 (src , source -> buf_end );
121+ chunk_samples = MIN (remaining_samples , max_samples );
122+ max_samples = cir_buf_samples_without_wrap_s32 (dst , sink -> buf_end );
123+ chunk_samples = MIN (chunk_samples , max_samples );
124+ for (channel = 0 ; channel < channels ; channel ++ ) {
125+ src_channel = src + channel ;
126+ dst_channel = dst + channel ;
127+ filter = & fir [channel ];
128+ for (sample_index = 0 ; sample_index < chunk_samples ;
129+ sample_index += channels ) {
130+ * dst_channel = fir_32x16 (filter , * src_channel );
131+ src_channel += channels ;
132+ dst_channel += channels ;
121133 }
122134 }
123- remaining_samples -= n ;
124- x = source_cir_buf_wrap (x + n , source -> buf_start , source -> buf_end );
125- y = cir_buf_wrap (y + n , sink -> buf_start , sink -> buf_end );
135+ remaining_samples -= chunk_samples ;
136+ src = source_cir_buf_wrap (src + chunk_samples , source -> buf_start , source -> buf_end );
137+ dst = cir_buf_wrap (dst + chunk_samples , sink -> buf_start , sink -> buf_end );
126138 }
127139}
128140#endif /* CONFIG_FORMAT_S32LE */
0 commit comments