[FFmpeg-devel] [PATCH] lavfi: add interleave filters

Stefano Sabatini stefasab at gmail.com
Thu Apr 18 23:00:51 CEST 2013


On date Saturday 2013-04-13 14:02:02 +0200, Stefano Sabatini encoded:
> On date Wednesday 2013-04-10 17:11:33 +0200, Nicolas George encoded:
> > Le primidi 21 germinal, an CCXXI, Stefano Sabatini a écrit :
> > > >From f88d1af608f99ed4f4fe7e1f9e2489049ade04f8 Mon Sep 17 00:00:00 2001
> > > From: Stefano Sabatini <stefasab at gmail.com>
> > > Date: Mon, 8 Apr 2013 15:16:06 +0200
> > > Subject: [PATCH] lavfi: add splice filters
> > > 
> > > TODO: bump minor, add changelog entry
> > > ---
> > >  doc/filters.texi         |   43 +++++++
> > >  libavfilter/Makefile     |    2 +
> > >  libavfilter/allfilters.c |    2 +
> > >  libavfilter/f_splice.c   |  293 ++++++++++++++++++++++++++++++++++++++++++++++
> > >  4 files changed, 340 insertions(+)
> > >  create mode 100644 libavfilter/f_splice.c
> [...]
> > > +static int request_frame(AVFilterLink *outlink)
> > > +{
> > > +    AVFilterContext *ctx = outlink->src;
> > > +    SpliceContext *splice = ctx->priv;
> > > +    int i, queue_idx = -1;
> > > +    int64_t pts_min = INT64_MAX;
> > > +    AVFrame *frame;
> > > +
> > > +    splice->req_fulfilled = 0;
> > > +    /* check if all the queues have available frames */
> > 
> > > +    for (i = 0; i < ctx->nb_inputs; i++) {
> > > +        struct FFBufQueue *q = &splice->queues[i];
> > > +
> > > +        while (!ctx->inputs[i]->closed && !q->available &&
> > > +               !splice->req_fulfilled) {
> > > +            int ret = ff_request_frame(ctx->inputs[i]);
> > > +            if (ret < 0 && ret != AVERROR_EOF)
> > > +                return ret;
> > > +        }
> > > +
> > > +        if (splice->req_fulfilled)
> > > +            return 0;
> > > +
> > > +        if (q->available) {
> > > +            frame = ff_bufqueue_peek(q, 0);
> > > +            if (frame->pts < pts_min) {
> > > +                pts_min = frame->pts;
> > > +                queue_idx = i;
> > > +            }
> > > +        }
> > > +    }
> > > +
> > > +    if (queue_idx < 0)
> > > +        return AVERROR_EOF;
> > > +
> > > +    /* send out oldest frame */
> > > +    return push_frame(ctx, queue_idx);
> > 
> 
> > Suggestion: move the "find oldest input" loop to push_frame, and let it
> > return in an additional parameter the empty input that is preventing it from
> > progressing. I suspect you will reduce much code duplication.
> 
> Changed this, but I can't get the "additional parameter" stuff.
> 
> What works:
> ffplay -f lavfi "color=c=red:d=5[l1]; color=c=blue[l2]; [l1][l2] interleave" -framedrop
> ffmpeg -i ~/s/matrixbench_mpeg2.mpg  -f lavfi -i testsrc=s=720x576,setsar=1/1 -filter_complex "[0:v]setsar=1/1, [1:v]interleave" -y out.nut
> 
> But if I set the duration in the second input I get:
> ffmpeg -i ~/s/matrixbench_mpeg2.mpg  -f lavfi -i testsrc=s=720x576:d=2,setsar=1/1 -filter_complex "[0:v]setsar=1/1, [1:v]interleave" -y out.nut
> [...]
> Failed to inject frame into filter network: End of file
> 
> Updated patch in attachment.
> -- 
> FFmpeg = Frightening and Fascinating Mere Pure Extensive Gadget

> From b64c4166e28fa433d73d1690ec2f127fba3ae41b Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab at gmail.com>
> Date: Mon, 8 Apr 2013 15:16:06 +0200
> Subject: [PATCH] lavfi: add interleave filters
> 
> TODO: bump minor, add changelog entry
> ---
>  doc/filters.texi           |   48 +++++++++
>  libavfilter/Makefile       |    2 +
>  libavfilter/allfilters.c   |    2 +
>  libavfilter/f_interleave.c |  255 ++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 307 insertions(+)
>  create mode 100644 libavfilter/f_interleave.c

Updated, pending problems addressed.
-- 
FFmpeg = Friendly and Fabulous Mastering Portentous Eccentric Game
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-lavfi-add-interleave-filters.patch
Type: text/x-diff
Size: 13307 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130418/ce8cfb2c/attachment.bin>


More information about the ffmpeg-devel mailing list