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
(cherry picked from commit 16a4a18db0
)
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:

committed by
Reinhard Tartler

parent
77a2f4cbcf
commit
600bc1deba
@@ -237,18 +237,23 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *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++)
|
for (ch = 0; ch < planes; ch++)
|
||||||
buf_out->extended_data[ch] += delta;
|
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++)
|
for (ch = 0; ch < planes; ch++)
|
||||||
buf_out->extended_data[ch] -= delta;
|
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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user