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

Vitor Sessak vitor1001
Mon Mar 17 20:12:08 CET 2008


Hi

Michael Niedermayer wrote:
> Hi
> 
> On Sun, Mar 16, 2008 at 07:57:29PM +0100, Vitor Sessak wrote:
> [...]> >>>
>>>>>> static void consume_whitespace(Parser *p)
>>>>>> {
>>>>>>     while (p->next_chr == ' ' || p->next_chr == '\n' || p->next_chr == '\t')
>>>>>>         p->next_chr = *(++p->buf);
>>>>>> }
>>>>> id replace all consume_whitespace() by
>>>>> ptr += strspn(ptr, " \n\t");
>>>> Looks a good idea, I'll look into it.
>>>>
>>>>> [...]
>>>>>
>>>>>
>>>>>> static char *consume_string(Parser *p, int escaped)
>>>>>> {
>>>>> What does the "escaped" do? Document or remove it please!
>>>> buf = "'bbb;ccc)ddd'"
>>>>
>>>> consume_string(p, 1) == "bbb;ccc)ddd"
>>>> consume_string(p, 0) == "'bbb"
>>> But why do we need the =0 case?
>> My idea was to use it for anything other than the filter parameters 
>> (there is something wrong if the filter/link name is escaped). But maybe 
>> it don't justify the additional complexity.
> 
> iam for avoiding extra complexity

Done.

>>>>> [...]
>>>>>> static int parse_link_name(Parser *p, char **name)
>>>>>> {
>>>>>>     if (consume_char(p) != '(')
>>>>>>         goto fail;
>>>>>>
>>>>>>     *name = consume_string(p,0);
>>>>>>
>>>>>>     if (!*name[0])
>>>>>>         goto fail;
>>>>>>
>>>>>>     if (consume_char(p) != ')')
>>>>>>         goto fail;
>>>>>>
>>>>>>     return 0;
>>>>>>
>>>>>>  fail:
>>>>>>     *name = NULL;
>>>>>>     return AVERROR_INVALIDDATA;
>>>>>> }
>>>>> We need some clear error messages for the various failures. Not only here
>>>>> of course ...
>>>> What should I do? av_log(NULL, AV_LOG_ERROR, "...")? Is in those cases 
>>> maybe
>>>
>>>
>>>> ok to have no context?
>>> no

Done.

>>>
>>>>> [...]
>>>>>>     single_chain = (strchr(filters, '(') == NULL);
>>>>> why the special case?
>>>> To make
>>>>
>>>> (in) vflip, hflip (out)
>>>>
>>>> the same as
>>>>
>>>> flip, hflip
>>>>
>>>> without erroneously adding a '(in)' in the beginning of the following:
>>>>
>>>> movie_src=test.avi, vflip, (in)overlay(out)
>>>>
>>>> The syntax is that adding explicitly '(in)' and '(out)' is mandated for 
>>>> anything more complicated than a single chain.
>>> what about:
>>> ()movie_src=test.avi, vflip, (in)overlay
>>>
>>> () would override the default ...
>>>
>>> or test for the occurance of (in) / (out) and add them at the begin/end only
>>> if they dont occur anywhere. 
>> I like this idea. It allows for things like
>>
>> (tmp)overlay,vflip,split(tmp)
>>
>> as an alias to
>>
>> (in)(tmp)overlay,vflip,split(tmp)(out)
>>
>> The only problem would be searching for (in), from all the possible cases:
>>
>> (    in   )vflip(out)
>>
>> (
>>    in   )vflip(out)
>>
>> (in) vflip(out)
>>
>> drawtext='text in pic'
>>
>> are you ok with the extra complexity it'll add? And I cannot test for it 
>> during parsing, since I have to set the input pad indexes for the first 
>> filter, ie, in
>>
>> (tmp)overlay,vflip,split(tmp)
>>
>> I have to set
>>
>> link.name="tmp";
>> link.type=input;
>> link.pad = 1; // And not 0, since in pad 0 there is the input!
>>
>> and to know (tmp) is in the second pad, I have to know beforehand that 
>> there is no (in) in the chain...
> 
> Maybe its crazy but, why dont you just parse the string twice once with
> and once without in/out ? One of these should fail due to duplicate in/out

Works fine, without too much additional complexity.

> Anyway i suspect we can cleanup the parser a bit more, my review just stoped
> early as i was confused by the "escaped" and thought its simpler to ask what
> its good for ...

Well, that first message was, as I said, more of a RFC than a patch. 
Now, I'm attaching a more cleaned up version for reviewing...

-Vitor

-------------- next part --------------
A non-text attachment was scrubbed...
Name: avfiltergraphdesc.c
Type: text/x-csrc
Size: 9167 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080317/8854a527/attachment.c>



More information about the ffmpeg-devel mailing list