Originally committed as revision 25225 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
| @@ -26,7 +26,7 @@ | |||||
| #define LIBAVFILTER_VERSION_MAJOR 1 | #define LIBAVFILTER_VERSION_MAJOR 1 | ||||
| #define LIBAVFILTER_VERSION_MINOR 46 | #define LIBAVFILTER_VERSION_MINOR 46 | ||||
| #define LIBAVFILTER_VERSION_MICRO 0 | |||||
| #define LIBAVFILTER_VERSION_MICRO 1 | |||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
| LIBAVFILTER_VERSION_MINOR, \ | LIBAVFILTER_VERSION_MINOR, \ | ||||
| @@ -23,6 +23,7 @@ | |||||
| #include <ctype.h> | #include <ctype.h> | ||||
| #include <string.h> | #include <string.h> | ||||
| #include "libavutil/avstring.h" | |||||
| #include "graphparser.h" | #include "graphparser.h" | ||||
| #include "avfilter.h" | #include "avfilter.h" | ||||
| #include "avfiltergraph.h" | #include "avfiltergraph.h" | ||||
| @@ -28,42 +28,6 @@ | |||||
| #include "libavutil/random_seed.h" | #include "libavutil/random_seed.h" | ||||
| #include "parseutils.h" | #include "parseutils.h" | ||||
| #define WHITESPACES " \n\t" | |||||
| char *av_get_token(const char **buf, const char *term) | |||||
| { | |||||
| char *out = av_malloc(strlen(*buf) + 1); | |||||
| char *ret= out, *end= out; | |||||
| const char *p = *buf; | |||||
| if (!out) return NULL; | |||||
| p += strspn(p, WHITESPACES); | |||||
| while(*p && !strspn(p, term)) { | |||||
| char c = *p++; | |||||
| if(c == '\\' && *p){ | |||||
| *out++ = *p++; | |||||
| end= out; | |||||
| }else if(c == '\''){ | |||||
| while(*p && *p != '\'') | |||||
| *out++ = *p++; | |||||
| if(*p){ | |||||
| p++; | |||||
| end= out; | |||||
| } | |||||
| }else{ | |||||
| *out++ = c; | |||||
| } | |||||
| } | |||||
| do{ | |||||
| *out-- = 0; | |||||
| }while(out >= end && strspn(out, WHITESPACES)); | |||||
| *buf = p; | |||||
| return ret; | |||||
| } | |||||
| typedef struct { | typedef struct { | ||||
| const char *name; ///< a string representing the name of the color | const char *name; ///< a string representing the name of the color | ||||
| uint8_t rgb_color[3]; ///< RGB values for the color | uint8_t rgb_color[3]; ///< RGB values for the color | ||||
| @@ -395,41 +359,6 @@ int main(void) | |||||
| { | { | ||||
| int i; | int i; | ||||
| const char *strings[] = { | |||||
| "''", | |||||
| "", | |||||
| ":", | |||||
| "\\", | |||||
| "'", | |||||
| " '' :", | |||||
| " '' '' :", | |||||
| "foo '' :", | |||||
| "'foo'", | |||||
| "foo ", | |||||
| "foo\\", | |||||
| "foo': blah:blah", | |||||
| "foo\\: blah:blah", | |||||
| "foo\'", | |||||
| "'foo : ' :blahblah", | |||||
| "\\ :blah", | |||||
| " foo", | |||||
| " foo ", | |||||
| " foo \\ ", | |||||
| "foo ':blah", | |||||
| " foo bar : blahblah", | |||||
| "\\f\\o\\o", | |||||
| "'foo : \\ \\ ' : blahblah", | |||||
| "'\\fo\\o:': blahblah", | |||||
| "\\'fo\\o\\:': foo ' :blahblah" | |||||
| }; | |||||
| for (i=0; i < FF_ARRAY_ELEMS(strings); i++) { | |||||
| const char *p= strings[i]; | |||||
| printf("|%s|", p); | |||||
| printf(" -> |%s|", av_get_token(&p, ":")); | |||||
| printf(" + |%s|\n", p); | |||||
| } | |||||
| printf("\nTesting av_parse_color()\n"); | printf("\nTesting av_parse_color()\n"); | ||||
| { | { | ||||
| uint8_t rgba[4]; | uint8_t rgba[4]; | ||||
| @@ -27,21 +27,6 @@ | |||||
| #include "libavutil/opt.h" | #include "libavutil/opt.h" | ||||
| /** | |||||
| * Unescape the given string until a non escaped terminating char, | |||||
| * and return the token corresponding to the unescaped string. | |||||
| * | |||||
| * The normal \ and ' escaping is supported. Leading and trailing | |||||
| * whitespaces are removed. | |||||
| * | |||||
| * @param buf the buffer to parse, buf will be updated to point to the | |||||
| * terminating char | |||||
| * @param term a 0-terminated list of terminating chars | |||||
| * @return the malloced unescaped string, which must be av_freed by | |||||
| * the user, NULL in case of allocation failure | |||||
| */ | |||||
| char *av_get_token(const char **buf, const char *term); | |||||
| /** | /** | ||||
| * Put the RGBA values that correspond to color_string in rgba_color. | * Put the RGBA values that correspond to color_string in rgba_color. | ||||
| * | * | ||||
| @@ -26,6 +26,7 @@ | |||||
| #include <dlfcn.h> | #include <dlfcn.h> | ||||
| #include <frei0r.h> | #include <frei0r.h> | ||||
| #include "libavutil/avstring.h" | |||||
| #include "avfilter.h" | #include "avfilter.h" | ||||
| #include "parseutils.h" | #include "parseutils.h" | ||||
| @@ -97,3 +97,91 @@ char *av_d2str(double d) | |||||
| if(str) snprintf(str, 16, "%f", d); | if(str) snprintf(str, 16, "%f", d); | ||||
| return str; | return str; | ||||
| } | } | ||||
| #define WHITESPACES " \n\t" | |||||
| char *av_get_token(const char **buf, const char *term) | |||||
| { | |||||
| char *out = av_malloc(strlen(*buf) + 1); | |||||
| char *ret= out, *end= out; | |||||
| const char *p = *buf; | |||||
| if (!out) return NULL; | |||||
| p += strspn(p, WHITESPACES); | |||||
| while(*p && !strspn(p, term)) { | |||||
| char c = *p++; | |||||
| if(c == '\\' && *p){ | |||||
| *out++ = *p++; | |||||
| end= out; | |||||
| }else if(c == '\''){ | |||||
| while(*p && *p != '\'') | |||||
| *out++ = *p++; | |||||
| if(*p){ | |||||
| p++; | |||||
| end= out; | |||||
| } | |||||
| }else{ | |||||
| *out++ = c; | |||||
| } | |||||
| } | |||||
| do{ | |||||
| *out-- = 0; | |||||
| }while(out >= end && strspn(out, WHITESPACES)); | |||||
| *buf = p; | |||||
| return ret; | |||||
| } | |||||
| #ifdef TEST | |||||
| #undef printf | |||||
| int main(void) | |||||
| { | |||||
| int i; | |||||
| printf("Testing av_get_token()\n"); | |||||
| { | |||||
| const char *strings[] = { | |||||
| "''", | |||||
| "", | |||||
| ":", | |||||
| "\\", | |||||
| "'", | |||||
| " '' :", | |||||
| " '' '' :", | |||||
| "foo '' :", | |||||
| "'foo'", | |||||
| "foo ", | |||||
| " ' foo ' ", | |||||
| "foo\\", | |||||
| "foo': blah:blah", | |||||
| "foo\\: blah:blah", | |||||
| "foo\'", | |||||
| "'foo : ' :blahblah", | |||||
| "\\ :blah", | |||||
| " foo", | |||||
| " foo ", | |||||
| " foo \\ ", | |||||
| "foo ':blah", | |||||
| " foo bar : blahblah", | |||||
| "\\f\\o\\o", | |||||
| "'foo : \\ \\ ' : blahblah", | |||||
| "'\\fo\\o:': blahblah", | |||||
| "\\'fo\\o\\:': foo ' :blahblah" | |||||
| }; | |||||
| for (i=0; i < FF_ARRAY_ELEMS(strings); i++) { | |||||
| const char *p= strings[i]; | |||||
| printf("|%s|", p); | |||||
| printf(" -> |%s|", av_get_token(&p, ":")); | |||||
| printf(" + |%s|\n", p); | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| #endif /* TEST */ | |||||
| @@ -114,4 +114,20 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...); | |||||
| */ | */ | ||||
| char *av_d2str(double d); | char *av_d2str(double d); | ||||
| /** | |||||
| * Unescape the given string until a non escaped terminating char, | |||||
| * and return the token corresponding to the unescaped string. | |||||
| * | |||||
| * The normal \ and ' escaping is supported. Leading and trailing | |||||
| * whitespaces are removed, unless they are escaped with '\' or are | |||||
| * enclosed between ''. | |||||
| * | |||||
| * @param buf the buffer to parse, buf will be updated to point to the | |||||
| * terminating char | |||||
| * @param term a 0-terminated list of terminating chars | |||||
| * @return the malloced unescaped string, which must be av_freed by | |||||
| * the user, NULL in case of allocation failure | |||||
| */ | |||||
| char *av_get_token(const char **buf, const char *term); | |||||
| #endif /* AVUTIL_AVSTRING_H */ | #endif /* AVUTIL_AVSTRING_H */ | ||||
| @@ -40,7 +40,7 @@ | |||||
| #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | ||||
| #define LIBAVUTIL_VERSION_MAJOR 50 | #define LIBAVUTIL_VERSION_MAJOR 50 | ||||
| #define LIBAVUTIL_VERSION_MINOR 29 | |||||
| #define LIBAVUTIL_VERSION_MINOR 30 | |||||
| #define LIBAVUTIL_VERSION_MICRO 0 | #define LIBAVUTIL_VERSION_MICRO 0 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||