mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 23:21:06 +01:00
avfilter/f_loop: fix length of aloop leftover buffer
If the audio loop stops inside an audio frame, the leftover buffer contains the end of the frame, which is not looped. The length supposed to be the part which was not written to the loop buffer, so we need to drain exactly that number of bytes from the leftover buffer. Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
97c5cc3a5c
commit
b33a594160
1 changed files with 2 additions and 3 deletions
|
|
@ -170,14 +170,13 @@ static int afilter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|||
s->pts += av_rescale_q(s->start - s->ignored_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||
}
|
||||
s->nb_samples += ret - drain;
|
||||
drain = frame->nb_samples - written;
|
||||
if (s->nb_samples == s->size && drain > 0) {
|
||||
if (s->nb_samples == s->size && frame->nb_samples > written) {
|
||||
int ret2;
|
||||
|
||||
ret2 = av_audio_fifo_write(s->left, (void **)frame->extended_data, frame->nb_samples);
|
||||
if (ret2 < 0)
|
||||
return ret2;
|
||||
av_audio_fifo_drain(s->left, drain);
|
||||
av_audio_fifo_drain(s->left, written);
|
||||
}
|
||||
frame->nb_samples = ret;
|
||||
s->pts += av_rescale_q(ret, (AVRational){1, outlink->sample_rate}, outlink->time_base);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue