@@ -140,6 +140,12 @@ static const VideoRateAbbr video_rate_abbrs[]= {
{ "ntsc-film", { 24000, 1001 } },
};
+static const char *mo_abr[] = { "jan", "feb", "mar", "apr", "may", "jun",
+ "jul", "aug", "sep", "oct", "nov", "dec" };
+
+static const char *mo_full[] = { "uary", "ruary", "ch", "il", NULL, "e", "y",
+ "ust", "tember", "ober", "ember", "ember" };
+
int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str)
{
int i;
@@ -466,6 +472,23 @@ static int date_get_num(const char **pp,
return val;
}
+static int date_get_month(const char **pp) {
+ for (int i = 0; i < 12; i++) {
+ if (!av_strncasecmp(*pp, mo_abr[i], 3)) {
+ *pp += 3;
+ if (mo_full[i] != NULL) {
+ int len = strlen(mo_full[i]);
+ if (!av_strncasecmp(*pp, mo_full[i], len)) {
+ *pp += len;
+ return i;
+ }
+ }
+ return i;
+ }
+ }
+ return -1;
+}
+
char *av_small_strptime(const char *p, const char *fmt, struct tm *dt)
{
int c, val;
@@ -525,6 +548,14 @@ char *av_small_strptime(const char *p, const char *fmt, struct tm *dt)
if (!p)
return NULL;
break;
+ case 'b':
+ case 'B':
+ case 'h':
+ val = date_get_month(&p);
+ if (val == -1)
+ return NULL;
+ dt->tm_mon = val;
+ break;
case '%':
if (*p++ != '%')
return NULL;
@@ -138,6 +138,11 @@ static void test_av_small_strptime(void)
{ "%Y - %m - %d", "2012-12-21" },
{ "%Y-%m-%d %H:%M:%S", "2012-12-21 20:12:21" },
{ " %Y - %m - %d %H : %M : %S", " 2012 - 12 - 21 20 : 12 : 21" },
+ { " %Y - %b - %d %H : %M : %S", " 2012 - nOV - 21 20 : 12 : 21" },
+ { " %Y - %B - %d %H : %M : %S", " 2012 - nOVemBeR - 21 20 : 12 : 21" },
+ { " %Y - %B - %d %H : %M : %S", " 2012 - may - 21 20 : 12 : 21" },
+ { " %Y - %B - %d %H : %M : %S", " 2012 - JunE - 21 20 : 12 : 21" },
+ { " %Y - %B - %d %H : %M : %S", " 2012 - January - 21 20 : 12 : 21" },
};
av_log_set_level(AV_LOG_DEBUG);