[FFmpeg-devel] [PATCH 5/7] lavfi/split: handle closed outputs.
Stefano Sabatini
stefasab at gmail.com
Tue Aug 21 20:26:08 CEST 2012
On date Monday 2012-08-20 23:28:13 +0200, Nicolas George encoded:
> Return AVERROR_EOF if all outputs are closed.
>
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
> libavfilter/split.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/libavfilter/split.c b/libavfilter/split.c
> index 083e31b..b0d36f3 100644
> --- a/libavfilter/split.c
> +++ b/libavfilter/split.c
> @@ -71,10 +71,14 @@ static void split_uninit(AVFilterContext *ctx)
> static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
> {
> AVFilterContext *ctx = inlink->dst;
> - int i, ret = 0;
> + int i, ret = AVERROR_EOF;
>
> for (i = 0; i < ctx->nb_outputs; i++) {
> - AVFilterBufferRef *buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);
> + AVFilterBufferRef *buf_out;
> +
> + if (ctx->outputs[i]->closed)
> + continue;
> + buf_out = avfilter_ref_buffer(picref, ~AV_PERM_WRITE);
> if (!buf_out)
> return AVERROR(ENOMEM);
>
> @@ -88,9 +92,11 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
> static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
> {
> AVFilterContext *ctx = inlink->dst;
> - int i, ret = 0;
> + int i, ret = AVERROR_EOF;
>
> for (i = 0; i < ctx->nb_outputs; i++) {
> + if (ctx->outputs[i]->closed)
> + continue;
> ret = ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
> if (ret < 0)
> break;
> @@ -101,9 +107,11 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
> static int end_frame(AVFilterLink *inlink)
> {
> AVFilterContext *ctx = inlink->dst;
> - int i, ret = 0;
> + int i, ret = AVERROR_EOF;
>
> for (i = 0; i < ctx->nb_outputs; i++) {
> + if (ctx->outputs[i]->closed)
> + continue;
> ret = ff_end_frame(ctx->outputs[i]);
> if (ret < 0)
> break;
LGTM.
--
FFmpeg = Faithless and Faithless Magnificient Purposeless Evil Guide
More information about the ffmpeg-devel
mailing list