Browse Source

af_asyncts: fix offset calculation

delta is in samples, not bytes. Also the sample format is not guaranteed
to be planar.

CC:libav-stable@libav.org
tags/n2.0
Anton Khirnov 12 years ago
parent
commit
16a4a18db0
1 changed files with 9 additions and 4 deletions
  1. +9
    -4
      libavfilter/af_asyncts.c

+ 9
- 4
libavfilter/af_asyncts.c View File

@@ -237,18 +237,23 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
} }


if (s->first_frame && delta > 0) { if (s->first_frame && delta > 0) {
int planar = av_sample_fmt_is_planar(buf_out->format);
int planes = planar ? nb_channels : 1;
int block_size = av_get_bytes_per_sample(buf_out->format) *
(planar ? 1 : nb_channels);

int ch; int ch;


av_samples_set_silence(buf_out->extended_data, 0, delta, av_samples_set_silence(buf_out->extended_data, 0, delta,
nb_channels, buf->format); nb_channels, buf->format);


for (ch = 0; ch < nb_channels; ch++)
buf_out->extended_data[ch] += delta;
for (ch = 0; ch < planes; ch++)
buf_out->extended_data[ch] += delta * block_size;


avresample_read(s->avr, buf_out->extended_data, out_size); avresample_read(s->avr, buf_out->extended_data, out_size);


for (ch = 0; ch < nb_channels; ch++)
buf_out->extended_data[ch] -= delta;
for (ch = 0; ch < planes; ch++)
buf_out->extended_data[ch] -= delta * block_size;
} else { } else {
avresample_read(s->avr, buf_out->extended_data, out_size); avresample_read(s->avr, buf_out->extended_data, out_size);




Loading…
Cancel
Save