Mercurial > mplayer.hg
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 } |