* misc parsing utilities
*/
-#include <strings.h>
-#include <sys/time.h>
#include <time.h>
#include "avstring.h"
#include "avutil.h"
+#include "common.h"
#include "eval.h"
+#include "log.h"
#include "random_seed.h"
#include "parseutils.h"
}
}
if (i == n) {
- p = str;
- width = strtol(p, &p, 10);
+ width = strtol(str, &p, 10);
if (*p)
p++;
height = strtol(p, &p, 10);
static int color_table_compare(const void *lhs, const void *rhs)
{
- return strcasecmp(lhs, ((const ColorEntry *)rhs)->name);
+ return av_strcasecmp(lhs, ((const ColorEntry *)rhs)->name);
}
#define ALPHA_SEP '@'
len = strlen(color_string2);
rgba_color[3] = 255;
- if (!strcasecmp(color_string2, "random") || !strcasecmp(color_string2, "bikeshed")) {
+ if (!av_strcasecmp(color_string2, "random") || !av_strcasecmp(color_string2, "bikeshed")) {
int rgba = av_get_random_seed();
rgba_color[0] = rgba >> 24;
rgba_color[1] = rgba >> 16;
}
if (tail) {
- unsigned long int alpha;
+ double alpha;
const char *alpha_string = tail;
if (!strncmp(alpha_string, "0x", 2)) {
alpha = strtoul(alpha_string, &tail, 16);
alpha = 255 * strtod(alpha_string, &tail);
}
- if (tail == alpha_string || *tail || alpha > 255) {
+ if (tail == alpha_string || *tail || alpha > 255 || alpha < 0) {
av_log(log_ctx, AV_LOG_ERROR, "Invalid alpha value specifier '%s' in '%s'\n",
alpha_string, color_string);
return AVERROR(EINVAL);
val = 0;
for(i = 0; i < len_max; i++) {
c = *p;
- if (!isdigit(c))
+ if (!av_isdigit(c))
break;
val = (val * 10) + c - '0';
p++;
return val;
}
-/* small strptime for ffmpeg */
-static
-const char *small_strptime(const char *p, const char *fmt,
- struct tm *dt)
+static const char *small_strptime(const char *p, const char *fmt, struct tm *dt)
{
int c, val;
p++;
}
}
- return p;
}
-static time_t mktimegm(struct tm *tm)
+time_t av_timegm(struct tm *tm)
{
time_t t;
return t;
}
-int av_parse_time(int64_t *timeval, const char *datestr, int duration)
+int av_parse_time(int64_t *timeval, const char *timestr, int duration)
{
const char *p;
int64_t t;
- struct tm dt;
+ struct tm dt = { 0 };
int i;
static const char * const date_fmt[] = {
"%Y-%m-%d",
char lastch;
int negative = 0;
-#undef time
time_t now = time(0);
- len = strlen(datestr);
+ len = strlen(timestr);
if (len > 0)
- lastch = datestr[len - 1];
+ lastch = timestr[len - 1];
else
lastch = '\0';
is_utc = (lastch == 'z' || lastch == 'Z');
- memset(&dt, 0, sizeof(dt));
-
- p = datestr;
+ p = timestr;
q = NULL;
if (!duration) {
- if (!strncasecmp(datestr, "now", len)) {
+ if (!av_strncasecmp(timestr, "now", len)) {
*timeval = (int64_t) now * 1000000;
return 0;
}
}
}
} else {
- /* parse datestr as a duration */
+ /* parse timestr as a duration */
if (p[0] == '-') {
negative = 1;
++p;
}
- /* parse datestr as HH:MM:SS */
+ /* parse timestr as HH:MM:SS */
q = small_strptime(p, time_fmt[0], &dt);
if (!q) {
- /* parse datestr as S+ */
- dt.tm_sec = strtol(p, (char **)&q, 10);
- if (q == p) {
+ char *o;
+ /* parse timestr as S+ */
+ dt.tm_sec = strtol(p, &o, 10);
+ if (o == p) {
/* the parsing didn't succeed */
*timeval = INT64_MIN;
return AVERROR(EINVAL);
}
dt.tm_min = 0;
dt.tm_hour = 0;
+ q = o;
}
}
} else {
dt.tm_isdst = -1; /* unknown */
if (is_utc) {
- t = mktimegm(&dt);
+ t = av_timegm(&dt);
} else {
t = mktime(&dt);
}
int val, n;
q++;
for (val = 0, n = 100000; n >= 1; n /= 10, q++) {
- if (!isdigit(*q))
+ if (!av_isdigit(*q))
break;
val += n * (*q - '0');
}
#ifdef TEST
-#undef printf
-
int main(void)
{
printf("Testing av_parse_video_rate()\n");
{
int i;
- const char *rates[] = {
+ static const char *const rates[] = {
"-inf",
"inf",
"nan",
for (i = 0; i < FF_ARRAY_ELEMS(rates); i++) {
int ret;
- AVRational q = (AVRational){0, 0};
- ret = av_parse_video_rate(&q, rates[i]),
- printf("'%s' -> %d/%d ret:%d\n",
- rates[i], q.num, q.den, ret);
+ AVRational q = { 0, 0 };
+ ret = av_parse_video_rate(&q, rates[i]);
+ printf("'%s' -> %d/%d %s\n",
+ rates[i], q.num, q.den, ret ? "ERROR" : "OK");
}
}
{
int i;
uint8_t rgba[4];
- const char *color_names[] = {
- "bikeshed",
- "RaNdOm",
+ static const char *const color_names[] = {
"foo",
"red",
"Red ",
for (i = 0; i < FF_ARRAY_ELEMS(color_names); i++) {
if (av_parse_color(rgba, color_names[i], -1, NULL) >= 0)
- printf("%s -> R(%d) G(%d) B(%d) A(%d)\n", color_names[i], rgba[0], rgba[1], rgba[2], rgba[3]);
+ printf("%s -> R(%d) G(%d) B(%d) A(%d)\n",
+ color_names[i], rgba[0], rgba[1], rgba[2], rgba[3]);
}
}