mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
afifo: fix request_samples on the last frame in certain cases
The current code can fail to return the last frame if it contains exactly the requested number of samples. Fixes the join filter test, which previously did not include the last 408 samples in most cases. CC:libav-stable@libav.org Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
parent
b845f5e97b
commit
9bfc6e02ba
@ -183,8 +183,25 @@ static int return_audio_frame(AVFilterContext *ctx)
|
||||
}
|
||||
|
||||
while (s->out->nb_samples < s->allocated_samples) {
|
||||
int len = FFMIN(s->allocated_samples - s->out->nb_samples,
|
||||
head->nb_samples);
|
||||
int len;
|
||||
|
||||
if (!s->root.next) {
|
||||
ret = ff_request_frame(ctx->inputs[0]);
|
||||
if (ret == AVERROR_EOF) {
|
||||
av_samples_set_silence(s->out->extended_data,
|
||||
s->out->nb_samples,
|
||||
s->allocated_samples -
|
||||
s->out->nb_samples,
|
||||
nb_channels, link->format);
|
||||
s->out->nb_samples = s->allocated_samples;
|
||||
break;
|
||||
} else if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
head = s->root.next->frame;
|
||||
|
||||
len = FFMIN(s->allocated_samples - s->out->nb_samples,
|
||||
head->nb_samples);
|
||||
|
||||
av_samples_copy(s->out->extended_data, head->extended_data,
|
||||
s->out->nb_samples, 0, len, nb_channels,
|
||||
@ -194,21 +211,6 @@ static int return_audio_frame(AVFilterContext *ctx)
|
||||
if (len == head->nb_samples) {
|
||||
av_frame_free(&head);
|
||||
queue_pop(s);
|
||||
|
||||
if (!s->root.next &&
|
||||
(ret = ff_request_frame(ctx->inputs[0])) < 0) {
|
||||
if (ret == AVERROR_EOF) {
|
||||
av_samples_set_silence(s->out->extended_data,
|
||||
s->out->nb_samples,
|
||||
s->allocated_samples -
|
||||
s->out->nb_samples,
|
||||
nb_channels, link->format);
|
||||
s->out->nb_samples = s->allocated_samples;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
head = s->root.next->frame;
|
||||
} else {
|
||||
buffer_offset(link, head, len);
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ fate-filter-join: SRC2 = $(TARGET_PATH)/tests/data/asynth-44100-3.wav
|
||||
fate-filter-join: tests/data/asynth-44100-2.wav tests/data/asynth-44100-3.wav
|
||||
fate-filter-join: CMD = md5 -i $(SRC1) -i $(SRC2) -filter_complex join=channel_layout=5 -f s16le
|
||||
fate-filter-join: CMP = oneline
|
||||
fate-filter-join: REF = 38fa1b18b0c46d77df6f17bfc4f078dd
|
||||
fate-filter-join: REF = 409e66fc5ece4ddea4aa16bc47026bb0
|
||||
|
||||
FATE_AFILTER-$(call FILTERDEMDECENCMUX, VOLUME, WAV, PCM_S16LE, PCM_S16LE, PCM_S16LE) += fate-filter-volume
|
||||
fate-filter-volume: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
|
||||
|
Loading…
Reference in New Issue
Block a user