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

Michael Niedermayer michaelni
Wed Mar 19 00:12:36 CET 2008


On Tue, Mar 18, 2008 at 11:13:25PM +0100, Aurelien Jacobs wrote:
> 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.

interresting, lets add a 3rd one

(in0,tmp0,tmp1,tmp2)filter1(out0,tmp2,tmp8,tmp3);
(tmp3,tmp4,in1,tmp5)filter2(tmp7,out1,tmp4,tmp0);
(tmp6,in2,tmp7,tmp8)filter3(tmp5,tmp6,tmp1,out2)

And i wonder how many users will be able to do that ...

Also what about filters which can take a variable number of inputs/outputs?


> 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.

no, it does not, it shows that you could represent the given graph. Its
not a proof that all graphs can be represented. Though its quite easy
to proof that if you want ...


> 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).

Filter chains are just filter1,filter2,filter3 in either system.


More complex ones without feedback could look like

filter1(T),filter2,filter3,(T)filter4
VS.
filter1,filter2*nop,filter3*nop,filter4

i think first wins


With one feedback

(T)filter1,filter2,filter3(T),filter4
VS.
!(filter1,filter2,filter3),filter4


And with multiple feedbacks we have seen that the !*, description is
significantly less readable

So IMHO while the * operator might be worth considering, the way feedbacks
are handled is absolutely messy when there is more than 1 feedback.

Also i think ,* is unintuitiv |, might be better but then maybe not i dunno

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080319/b2d57e2b/attachment.pgp>



More information about the ffmpeg-devel mailing list