comparison libaf/af_scaletempo.c @ 25069:d2f7027f0556

Avoid some casts by changing int8_t* to void* in af_scaletempo
author reimar
date Sun, 18 Nov 2007 14:57:59 +0000
parents 9079c9745ff9
children 60b34bf9a41e
comparison
equal deleted inserted replaced
25068:4b14d188ed34 25069:d2f7027f0556
58 // overlap 58 // overlap
59 int samples_overlap; 59 int samples_overlap;
60 int samples_standing; 60 int samples_standing;
61 int bytes_overlap; 61 int bytes_overlap;
62 int bytes_standing; 62 int bytes_standing;
63 int8_t* buf_overlap; 63 void* buf_overlap;
64 int8_t* table_blend; 64 void* table_blend;
65 void (*output_overlap)(struct af_scaletempo_s* s, int8_t* out_buf, int bytes_off); 65 void (*output_overlap)(struct af_scaletempo_s* s, void* out_buf, int bytes_off);
66 // best overlap 66 // best overlap
67 int frames_search; 67 int frames_search;
68 int num_channels; 68 int num_channels;
69 int8_t* buf_pre_corr; 69 void* buf_pre_corr;
70 int8_t* table_window; 70 void* table_window;
71 int (*best_overlap_offset)(struct af_scaletempo_s* s); 71 int (*best_overlap_offset)(struct af_scaletempo_s* s);
72 short shift_corr; 72 short shift_corr;
73 // command line 73 // command line
74 float scale_nominal; 74 float scale_nominal;
75 float ms_stride; 75 float ms_stride;
121 float *pw, *po, *ppc, *search_start; 121 float *pw, *po, *ppc, *search_start;
122 float best_corr = INT_MIN; 122 float best_corr = INT_MIN;
123 int best_off = 0; 123 int best_off = 0;
124 int i, off; 124 int i, off;
125 125
126 pw = (float*)s->table_window; 126 pw = s->table_window;
127 po = (float*)s->buf_overlap + s->num_channels; 127 po = s->buf_overlap;
128 ppc = (float*)s->buf_pre_corr; 128 po += s->num_channels;
129 ppc = s->buf_pre_corr;
129 for (i=s->num_channels; i<s->samples_overlap; i++) { 130 for (i=s->num_channels; i<s->samples_overlap; i++) {
130 *ppc++ = *pw++ * *po++; 131 *ppc++ = *pw++ * *po++;
131 } 132 }
132 133
133 search_start = (float*)s->buf_queue + s->num_channels; 134 search_start = (float*)s->buf_queue + s->num_channels;
134 for (off=0; off<s->frames_search; off++) { 135 for (off=0; off<s->frames_search; off++) {
135 float corr = 0; 136 float corr = 0;
136 float* ps = search_start; 137 float* ps = search_start;
137 ppc = (float*)s->buf_pre_corr; 138 ppc = s->buf_pre_corr;
138 for (i=s->num_channels; i<s->samples_overlap; i++) { 139 for (i=s->num_channels; i<s->samples_overlap; i++) {
139 corr += *ppc++ * *ps++; 140 corr += *ppc++ * *ps++;
140 } 141 }
141 if (corr > best_corr) { 142 if (corr > best_corr) {
142 best_corr = corr; 143 best_corr = corr;
154 int16_t *po, *search_start; 155 int16_t *po, *search_start;
155 int32_t best_corr = INT_MIN; 156 int32_t best_corr = INT_MIN;
156 int best_off = 0; 157 int best_off = 0;
157 int i, off; 158 int i, off;
158 159
159 pw = (int32_t*)s->table_window; 160 pw = s->table_window;
160 po = (int16_t*)s->buf_overlap + s->num_channels; 161 po = s->buf_overlap;
161 ppc = (int32_t*)s->buf_pre_corr; 162 po += s->num_channels;
163 ppc = s->buf_pre_corr;
162 for (i=s->num_channels; i<s->samples_overlap; i++) { 164 for (i=s->num_channels; i<s->samples_overlap; i++) {
163 *ppc++ = ( *pw++ * *po++ ) >> 15; 165 *ppc++ = ( *pw++ * *po++ ) >> 15;
164 } 166 }
165 167
166 search_start = (int16_t*)s->buf_queue + s->num_channels; 168 search_start = (int16_t*)s->buf_queue + s->num_channels;
167 for (off=0; off<s->frames_search; off++) { 169 for (off=0; off<s->frames_search; off++) {
168 int32_t corr = 0; 170 int32_t corr = 0;
169 int16_t* ps = search_start; 171 int16_t* ps = search_start;
170 ppc = (int32_t*)s->buf_pre_corr; 172 ppc = s->buf_pre_corr;
171 for (i=s->num_channels; i<s->samples_overlap; i++) { 173 for (i=s->num_channels; i<s->samples_overlap; i++) {
172 corr += ( *ppc++ * *ps++ ) >> s->shift_corr; 174 corr += ( *ppc++ * *ps++ ) >> s->shift_corr;
173 } 175 }
174 if (corr > best_corr) { 176 if (corr > best_corr) {
175 best_corr = corr; 177 best_corr = corr;
179 } 181 }
180 182
181 return best_off * 2 * s->num_channels; 183 return best_off * 2 * s->num_channels;
182 } 184 }
183 185
184 static void output_overlap_float(af_scaletempo_t* s, int8_t* buf_out, 186 static void output_overlap_float(af_scaletempo_t* s, void* buf_out,
185 int bytes_off) 187 int bytes_off)
186 { 188 {
187 float* pout = (float*)buf_out; 189 float* pout = buf_out;
188 float* pb = (float*)s->table_blend; 190 float* pb = s->table_blend;
189 float* po = (float*)s->buf_overlap; 191 float* po = s->buf_overlap;
190 float* pin = (float*)(s->buf_queue + bytes_off); 192 float* pin = (float*)(s->buf_queue + bytes_off);
191 int i; 193 int i;
192 for (i=0; i<s->samples_overlap; i++) { 194 for (i=0; i<s->samples_overlap; i++) {
193 *pout++ = *po - *pb++ * ( *po - *pin++ ); po++; 195 *pout++ = *po - *pb++ * ( *po - *pin++ ); po++;
194 } 196 }
195 } 197 }
196 static void output_overlap_s16(af_scaletempo_t* s, int8_t* buf_out, 198 static void output_overlap_s16(af_scaletempo_t* s, void* buf_out,
197 int bytes_off) 199 int bytes_off)
198 { 200 {
199 int16_t* pout = (int16_t*)buf_out; 201 int16_t* pout = buf_out;
200 int32_t* pb = (int32_t*)s->table_blend; 202 int32_t* pb = s->table_blend;
201 int16_t* po = (int16_t*)s->buf_overlap; 203 int16_t* po = s->buf_overlap;
202 int16_t* pin = (int16_t*)(s->buf_queue + bytes_off); 204 int16_t* pin = (int16_t*)(s->buf_queue + bytes_off);
203 int i; 205 int i;
204 for (i=0; i<s->samples_overlap; i++) { 206 for (i=0; i<s->samples_overlap; i++) {
205 *pout++ = *po - ( ( *pb++ * ( *po - *pin++ ) ) >> 16 ); po++; 207 *pout++ = *po - ( ( *pb++ * ( *po - *pin++ ) ) >> 16 ); po++;
206 } 208 }
331 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n"); 333 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n");
332 return AF_ERROR; 334 return AF_ERROR;
333 } 335 }
334 bzero(s->buf_overlap, s->bytes_overlap); 336 bzero(s->buf_overlap, s->bytes_overlap);
335 if (use_int) { 337 if (use_int) {
336 int32_t* pb = (int32_t*)s->table_blend; 338 int32_t* pb = s->table_blend;
337 int64_t blend = 0; 339 int64_t blend = 0;
338 for (i=0; i<frames_overlap; i++) { 340 for (i=0; i<frames_overlap; i++) {
339 int32_t v = blend / frames_overlap; 341 int32_t v = blend / frames_overlap;
340 for (j=0; j<nch; j++) { 342 for (j=0; j<nch; j++) {
341 *pb++ = v; 343 *pb++ = v;
342 } 344 }
343 blend += 65536; // 2^16 345 blend += 65536; // 2^16
344 } 346 }
345 s->output_overlap = output_overlap_s16; 347 s->output_overlap = output_overlap_s16;
346 } else { 348 } else {
347 float* pb = (float*)s->table_blend; 349 float* pb = s->table_blend;
348 for (i=0; i<frames_overlap; i++) { 350 for (i=0; i<frames_overlap; i++) {
349 float v = i / (float)frames_overlap; 351 float v = i / (float)frames_overlap;
350 for (j=0; j<nch; j++) { 352 for (j=0; j<nch; j++) {
351 *pb++ = v; 353 *pb++ = v;
352 } 354 }
367 s->table_window = realloc(s->table_window, s->bytes_overlap * 2 - nch * bps * 2); 369 s->table_window = realloc(s->table_window, s->bytes_overlap * 2 - nch * bps * 2);
368 if(!s->buf_pre_corr && !s->table_window) { 370 if(!s->buf_pre_corr && !s->table_window) {
369 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n"); 371 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n");
370 return AF_ERROR; 372 return AF_ERROR;
371 } 373 }
372 pw = (int32_t*)s->table_window; 374 pw = s->table_window;
373 for (i=1; i<frames_overlap; i++) { 375 for (i=1; i<frames_overlap; i++) {
374 int32_t v = ( i * (t - i) * n ) >> 15; 376 int32_t v = ( i * (t - i) * n ) >> 15;
375 for (j=0; j<nch; j++) { 377 for (j=0; j<nch; j++) {
376 *pw++ = v; 378 *pw++ = v;
377 } 379 }
384 s->table_window = realloc(s->table_window, s->bytes_overlap - nch * bps); 386 s->table_window = realloc(s->table_window, s->bytes_overlap - nch * bps);
385 if(!s->buf_pre_corr || !s->table_window) { 387 if(!s->buf_pre_corr || !s->table_window) {
386 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n"); 388 af_msg(AF_MSG_FATAL, "[scaletempo] Out of memory\n");
387 return AF_ERROR; 389 return AF_ERROR;
388 } 390 }
389 pw = (float*)s->table_window; 391 pw = s->table_window;
390 for (i=1; i<frames_overlap; i++) { 392 for (i=1; i<frames_overlap; i++) {
391 float v = i * (frames_overlap - i); 393 float v = i * (frames_overlap - i);
392 for (j=0; j<nch; j++) { 394 for (j=0; j<nch; j++) {
393 *pw++ = v; 395 *pw++ = v;
394 } 396 }