[FFmpeg-cvslog] r18726 - trunk/libavfilter/graphparser.c
Vitor Sessak
vitor1001
Fri May 8 01:38:02 CEST 2009
stefano wrote:
> Author: stefano
> Date: Fri May 1 20:17:59 2009
> New Revision: 18726
>
> Log:
> Make graphparser.c use av_get_token().
> This also avoids the need for '\=' escaping.
>
> Modified:
> trunk/libavfilter/graphparser.c
>
> Modified: trunk/libavfilter/graphparser.c
> ==============================================================================
> --- trunk/libavfilter/graphparser.c Fri May 1 16:38:07 2009 (r18725)
> +++ trunk/libavfilter/graphparser.c Fri May 1 20:17:59 2009 (r18726)
> @@ -26,6 +26,7 @@
> #include "graphparser.h"
> #include "avfilter.h"
> #include "avfiltergraph.h"
> +#include "parseutils.h"
>
> #define WHITESPACES " \n\t"
>
> @@ -44,49 +45,6 @@ static int link_filter(AVFilterContext *
> }
>
> /**
> - * Consumes a string from *buf.
> - * @return a copy of the consumed string, which should be free'd after use
> - */
> -static char *consume_string(const char **buf)
> -{
> - char *out = av_malloc(strlen(*buf) + 1);
> - char *ret = out;
> -
> - *buf += strspn(*buf, WHITESPACES);
> -
> - do{
> - char c = *(*buf)++;
> - switch (c) {
> - case '\\':
> - *out++ = *(*buf)++;
> - break;
> - case '\'':
> - while(**buf && **buf != '\'')
> - *out++ = *(*buf)++;
> - if(**buf) (*buf)++;
> - break;
> - case 0:
> - case ']':
> - case '[':
> - case '=':
> - case ',':
> - case ';':
> - case ' ':
> - case '\n':
> - *out++ = 0;
> - break;
> - default:
> - *out++ = c;
> - }
> - } while(out[-1]);
> -
> - (*buf)--;
> - *buf += strspn(*buf, WHITESPACES);
> -
> - return ret;
> -}
> -
> -/**
> * Parse "[linkname]"
> * @param name a pointer (that need to be free'd after use) to the name between
> * parenthesis
> @@ -97,7 +55,7 @@ static char *parse_link_name(const char
> char *name;
> (*buf)++;
>
> - name = consume_string(buf);
> + name = av_get_token(buf, "]");
>
> if(!name[0]) {
> av_log(log_ctx, AV_LOG_ERROR,
> @@ -162,12 +120,12 @@ static AVFilterContext *parse_filter(con
> int index, AVClass *log_ctx)
> {
> char *opts = NULL;
> - char *name = consume_string(buf);
> + char *name = av_get_token(buf, "=,");
This caused a regression with the example
./ffmpeg -i in.avi -s 240x320 -vfilters "[in]split [T1], fifo,
[T2]overlay='0:240'[out]; [T1]fifo, crop=0:0:-1:240, vflip[T2]" out.avi
In particular to parse "[in]split [T1]". Fix attached.
-Vitor
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gparser.diff
Type: text/x-diff
Size: 448 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-cvslog/attachments/20090508/bf46e662/attachment-0001.diff>
More information about the ffmpeg-cvslog
mailing list