Mercurial > mplayer.hg
comparison libaf/af_scaletempo.c @ 37108:a88581872033
scaletempo: add hack for smoother speed changes.
author | reimar |
---|---|
date | Sun, 18 May 2014 16:43:34 +0000 |
parents | a93891202051 |
children |
comparison
equal
deleted
inserted
replaced
37107:3c5c93a30fb7 | 37108:a88581872033 |
---|---|
331 if (frames_overlap <= 0) { | 331 if (frames_overlap <= 0) { |
332 s->bytes_standing = s->bytes_stride; | 332 s->bytes_standing = s->bytes_stride; |
333 s->samples_standing = s->bytes_standing / bps; | 333 s->samples_standing = s->bytes_standing / bps; |
334 s->output_overlap = NULL; | 334 s->output_overlap = NULL; |
335 } else { | 335 } else { |
336 int old_overlap = s->bytes_overlap; | |
336 s->samples_overlap = frames_overlap * nch; | 337 s->samples_overlap = frames_overlap * nch; |
337 s->bytes_overlap = frames_overlap * nch * bps; | 338 s->bytes_overlap = frames_overlap * nch * bps; |
338 s->bytes_standing = s->bytes_stride - s->bytes_overlap; | 339 s->bytes_standing = s->bytes_stride - s->bytes_overlap; |
339 s->samples_standing = s->bytes_standing / bps; | 340 s->samples_standing = s->bytes_standing / bps; |
340 s->buf_overlap = realloc(s->buf_overlap, s->bytes_overlap); | 341 s->buf_overlap = realloc(s->buf_overlap, s->bytes_overlap); |
341 s->table_blend = realloc(s->table_blend, s->bytes_overlap * 4); | 342 s->table_blend = realloc(s->table_blend, s->bytes_overlap * 4); |
342 if(!s->buf_overlap || !s->table_blend) { | 343 if(!s->buf_overlap || !s->table_blend) { |
343 mp_msg(MSGT_AFILTER, MSGL_FATAL, "[scaletempo] Out of memory\n"); | 344 mp_msg(MSGT_AFILTER, MSGL_FATAL, "[scaletempo] Out of memory\n"); |
344 return AF_ERROR; | 345 return AF_ERROR; |
345 } | 346 } |
346 memset(s->buf_overlap, 0, s->bytes_overlap); | 347 // not necessarily correct, but keeping old data if possible |
348 // avoids clicks when changing speed. | |
349 if (s->bytes_overlap != old_overlap) | |
350 memset(s->buf_overlap, 0, s->bytes_overlap); | |
347 if (use_int) { | 351 if (use_int) { |
348 int32_t* pb = s->table_blend; | 352 int32_t* pb = s->table_blend; |
349 int64_t blend = 0; | 353 int64_t blend = 0; |
350 for (i=0; i<frames_overlap; i++) { | 354 for (i=0; i<frames_overlap; i++) { |
351 int32_t v = blend / frames_overlap; | 355 int32_t v = blend / frames_overlap; |