|
|
@@ -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); |
|
|
|
} |
|
|
|