Changeset 2c28bcbadce84f19b29350939eb9cd4af294c422
- Timestamp:
- 20/08/08 23:22:22
(3 months ago)
- Author:
- Rémi Duraffort <ivoire@videolan.org>
- git-committer:
- Rémi Duraffort <ivoire@videolan.org> 1219267342 +0200
- git-parent:
[131a15b62ba4440b80df480f9c56448a47785800]
- git-author:
- Rémi Duraffort <ivoire@videolan.org> 1219261335 +0200
- Message:
Fix potential memleaks (free the module if it can't be loaded)
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| 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 | |
|---|