- Timestamp:
- 20/08/08 23:22:22 (3 months ago)
- git-parent:
- Files:
-
- modules/audio_filter/scaletempo.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/audio_filter/scaletempo.c
reaa8fb6 r2c28bcb 289 289 /* overlap */ 290 290 unsigned frames_overlap = frames_stride * p->percent_overlap; 291 if( frames_overlap < 1 ) { /* if no overlap */ 291 if( frames_overlap < 1 ) 292 { /* if no overlap */ 292 293 p->bytes_overlap = 0; 293 294 p->bytes_standing = p->bytes_stride; 294 295 p->samples_standing = p->bytes_standing / p->bytes_per_sample; 295 296 p->output_overlap = NULL; 296 } else { 297 } 298 else 299 { 297 300 unsigned prev_overlap = p->bytes_overlap; 298 301 p->bytes_overlap = frames_overlap * p->bytes_per_frame; … … 302 305 p->buf_overlap = malloc( p->bytes_overlap ); 303 306 p->table_blend = malloc( p->samples_overlap * 4 ); /* sizeof (int32|float) */ 304 if( ! p->buf_overlap || ! p->table_blend ) {307 if( !p->buf_overlap || !p->table_blend ) 305 308 return VLC_ENOMEM; 306 } 307 if( p->bytes_overlap > prev_overlap ) { 309 if( p->bytes_overlap > prev_overlap ) 308 310 memset( (uint8_t *)p->buf_overlap + prev_overlap, 0, p->bytes_overlap - prev_overlap ); 309 } 311 310 312 float *pb = p->table_blend; 311 313 float t = (float)frames_overlap; 312 for( i = 0; i<frames_overlap; i++ ) { 314 for( i = 0; i<frames_overlap; i++ ) 315 { 313 316 float v = i / t; 314 for( j = 0; j < p->samples_per_frame; j++ ) {317 for( j = 0; j < p->samples_per_frame; j++ ) 315 318 *pb++ = v; 316 }317 319 } 318 320 p->output_overlap = output_overlap_float; … … 321 323 /* best overlap */ 322 324 p->frames_search = ( frames_overlap <= 1 ) ? 0 : p->ms_search * p->sample_rate / 1000.0; 323 if( p->frames_search < 1 ) { /* if no search */ 325 if( p->frames_search < 1 ) 326 { /* if no search */ 324 327 p->best_overlap_offset = NULL; 325 } else { 328 } 329 else 330 { 326 331 unsigned bytes_pre_corr = ( p->samples_overlap - p->samples_per_frame ) * 4; /* sizeof (int32|float) */ 327 332 p->buf_pre_corr = malloc( bytes_pre_corr ); 328 333 p->table_window = malloc( bytes_pre_corr ); 329 if( ! p->buf_pre_corr || ! p->table_window ) {334 if( ! p->buf_pre_corr || ! p->table_window ) 330 335 return VLC_ENOMEM; 331 }332 336 float *pw = p->table_window; 333 for( i = 1; i<frames_overlap; i++ ) { 337 for( i = 1; i<frames_overlap; i++ ) 338 { 334 339 float v = i * ( frames_overlap - i ); 335 for( j = 0; j < p->samples_per_frame; j++ ) {340 for( j = 0; j < p->samples_per_frame; j++ ) 336 341 *pw++ = v; 337 }338 342 } 339 343 p->best_overlap_offset = best_overlap_offset_float; … … 341 345 342 346 unsigned new_size = ( p->frames_search + frames_stride + frames_overlap ) * p->bytes_per_frame; 343 if( p->bytes_queued > new_size ) { 344 if( p->bytes_to_slide > p->bytes_queued ) { 347 if( p->bytes_queued > new_size ) 348 { 349 if( p->bytes_to_slide > p->bytes_queued ) 350 { 345 351 p->bytes_to_slide -= p->bytes_queued; 346 352 p->bytes_queued = 0; 347 } else { 353 } 354 else 355 { 348 356 unsigned new_queued = __MIN( p->bytes_queued - p->bytes_to_slide, new_size ); 349 357 memmove( p->buf_queue, … … 356 364 p->bytes_queue_max = new_size; 357 365 p->buf_queue = malloc( p->bytes_queue_max ); 358 if( ! p->buf_queue ) {366 if( ! p->buf_queue ) 359 367 return VLC_ENOMEM; 360 }361 368 362 369 p->bytes_stride_scaled = p->bytes_stride * p->scale; … … 401 408 402 409 if( ! b_fit ) 403 {404 410 return VLC_EGENERIC; 405 }406 411 407 412 p_filter->pf_do_work = DoWork; … … 411 416 p_sys = p_filter->p_sys = malloc( sizeof(aout_filter_sys_t) ); 412 417 if( ! p_sys ) 413 {414 418 return VLC_ENOMEM; 415 }416 419 417 420 p_sys->scale = 1.0; … … 447 450 p_sys->bytes_to_slide = 0; 448 451 p_sys->frames_stride_error = 0; 449 return reinit_buffers( p_filter ); 452 453 if( reinit_buffers( p_filter ) != VLC_SUCCESS ) 454 { 455 Close( p_this ); 456 return VLC_EGENERIC; 457 } 458 return VLC_SUCCESS; 450 459 } 451 460
