Commit dd04911c authored by Stefano Sabatini's avatar Stefano Sabatini

Make graphparser.c use av_get_token().

This also avoids the need for '\=' escaping.

Originally committed as revision 18726 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent d11dbf09
......@@ -26,6 +26,7 @@
#include "graphparser.h"
#include "avfilter.h"
#include "avfiltergraph.h"
#include "parseutils.h"
#define WHITESPACES " \n\t"
......@@ -43,49 +44,6 @@ static int link_filter(AVFilterContext *src, int srcpad,
return 0;
}
/**
* 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
......@@ -97,7 +55,7 @@ static char *parse_link_name(const char **buf, AVClass *log_ctx)
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(const char **buf, AVFilterGraph *graph,
int index, AVClass *log_ctx)
{
char *opts = NULL;
char *name = consume_string(buf);
char *name = av_get_token(buf, "=,");
AVFilterContext *ret;
if(**buf == '=') {
(*buf)++;
opts = consume_string(buf);
opts = av_get_token(buf, "[],\n");
}
ret = create_filter(graph, index, name, opts, log_ctx);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment