Commit 9b41c7cd authored by Stefan Westerfeld's avatar Stefan Westerfeld

avfilter/asubprocess: improve eof handling

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 2bc3be02
......@@ -67,6 +67,7 @@ typedef struct ASubProcessContext {
void *sample_buffer;
size_t sample_buffer_size;
int eof;
int64_t last_pts;
FFFrameQueue frame_queue;
} ASubProcessContext;
......@@ -581,7 +582,7 @@ static int try_read_frame(AVFilterContext *ctx)
int sample_size = s->out_bit_depth / 8;
int avail = sp_can_read(s->sp) / sample_size / outlink->ch_layout.nb_channels;
if (avail >= out->nb_samples || (s->eof && avail > 0)) { // TODO: eof handling correct?
if (avail >= out->nb_samples) {
avail = FFMIN(avail, out->nb_samples);
out = ff_framequeue_take(&s->frame_queue);
av_assert0(avail <= s->sample_buffer_size);
......@@ -602,7 +603,6 @@ static int activate(AVFilterContext *ctx)
AVFilterLink *outlink = ctx->outputs[0];
ASubProcessContext *s = ctx->priv;
AVFrame *in = NULL;
int64_t pts;
int status, ret;
if (s->state == STATE_START) {
......@@ -622,11 +622,8 @@ static int activate(AVFilterContext *ctx)
ret = try_read_frame(ctx);
if (ret != 0)
return ret;
ret = ff_inlink_consume_frame(inlink, &in);
if (ff_inlink_acknowledge_status(inlink, &status, &pts))
s->eof |= status == AVERROR_EOF;
ret = ff_inlink_consume_frame(inlink, &in);
if (ret < 0)
return ret;
if (ret > 0) {
......@@ -638,6 +635,10 @@ static int activate(AVFilterContext *ctx)
if (ret != 0)
return ret;
}
if (!s->eof && ff_inlink_acknowledge_status(inlink, &status, &s->last_pts))
s->eof |= status == AVERROR_EOF;
if (s->eof && !sp_done(s->sp)) {
while (!sp_done(s->sp)) {
int ret = sp_write(ctx, 0, 0);
......@@ -654,8 +655,7 @@ static int activate(AVFilterContext *ctx)
av_log(ctx, AV_LOG_ERROR, "Subprocess output wav is incomplete (no data chunk found)\n");
return AVERROR_INVALIDDATA;
}
// s->last_pts
ff_outlink_set_status(outlink, AVERROR_EOF, AV_NOPTS_VALUE);
ff_outlink_set_status(outlink, AVERROR_EOF, s->last_pts);
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment