[FFmpeg-devel] [PATCH] [2/??] [3/3] Filter graphs - Parser for a graph description

Aurelien Jacobs aurel
Tue Mar 18 23:13:25 CET 2008


Michael Niedermayer wrote:

> On Tue, Mar 18, 2008 at 09:29:51AM +0000, vmrsss wrote:
> [...]
> > (F) If I understood your examples correctly (which I might have
> > not)`, there is still one missing ingredient: a feedback
> > combinator, say !, which takes a filter with at least one input and
> > at least one output stream and feeds back the first output to the
> > first input. For instance, let's look at the examples you have been
> > discussing in this thread:
> > 
> > (1)
> > > in --> scale --> crop --> picInPic --> rotate --> split --> out
> > >                             ^                      |
> > >                             |                      |
> > >                           delay<-------------------/
> > 
> > 
> > becomes: scale,crop, !( picInPic, rotate, split, delay * nop ) --
> > in fact the duplicated stream from split is fed to delay and
> > delay's output is then fed back to picInPic (if that was the sense
> > of the example, of course...)
> 
> How does the following work in your system?
> 
> (in0,tmp0,tmp2)filter1(tmp1,out0,tmp2);(in1,tmp1,tmp3)filter2(tmp3,tmp0,out1)

If I understood correctly, this would look like this:

!(swap*nop,
     !(swap*nop*nop, nop*swap*nop,
           !(swap*nop,nop*swap,filter1,nop*swap,swap*nop)
         * (swap, !(swap*nop,nop*swap,filter2))
       ),
  swap*nop)

Well, not very beautiful, but at least, it is possible to describe such
a filter chain.
I suppose this would not exactly be a common filter chain, and I also
suppose that filter1 and filter2 would naturally be designed so that
their "natural" self-feedback in and out pad would be the first pad.
This would highly simplify this filter graph. Here is an example of
the exact same graph, with ideally ordered filters pad:

(tmp0,tmp1,in0)filter1(tmp0,tmp2,out0);(tmp3,tmp2,in1)filter2(tmp3,tmp1,out1)

!(swap*nop, !( !filter1 * !filter2, nop*swap*nop, swap,nop,nop))

So IMO, this case just show that "mathematical" description allows
to represent complex graph as well as the original description.
But it don't show which one is the most simple/intuitive to
describe commonly used graph (ie. graph with no feedback or at
most one feedback).

Aurel




More information about the ffmpeg-devel mailing list