123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- /*
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #define TEST
- #include "libavutil/parseutils.c"
- #include <stdint.h>
- #include <stdio.h>
- #include "libavutil/common.h"
- #include "libavutil/log.h"
- #include "libavutil/rational.h"
- static uint32_t randomv = MKTAG('L','A','V','U');
- static uint32_t av_get_random_seed_deterministic(void)
- {
- return randomv = randomv * 1664525 + 1013904223;
- }
- static void test_av_parse_video_rate(void)
- {
- int i;
- static const char *const rates[] = {
- "-inf",
- "inf",
- "nan",
- "123/0",
- "-123 / 0",
- "",
- "/",
- " 123 / 321",
- "foo/foo",
- "foo/1",
- "1/foo",
- "0/0",
- "/0",
- "1/",
- "1",
- "0",
- "-123/123",
- "-foo",
- "123.23",
- ".23",
- "-.23",
- "-0.234",
- "-0.0000001",
- " 21332.2324 ",
- " -21332.2324 ",
- };
- for (i = 0; i < FF_ARRAY_ELEMS(rates); i++) {
- int 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");
- }
- }
- static void test_av_parse_color(void)
- {
- int i;
- uint8_t rgba[4];
- static const char *const color_names[] = {
- "bikeshed",
- "RaNdOm",
- "foo",
- "red",
- "Red ",
- "RED",
- "Violet",
- "Yellow",
- "Red",
- "0x000000",
- "0x0000000",
- "0xff000000",
- "0x3e34ff",
- "0x3e34ffaa",
- "0xffXXee",
- "0xfoobar",
- "0xffffeeeeeeee",
- "#ff0000",
- "#ffXX00",
- "ff0000",
- "ffXX00",
- "red@foo",
- "random@10",
- "0xff0000@1.0",
- "red@",
- "red@0xfff",
- "red@0xf",
- "red@2",
- "red@0.1",
- "red@-1",
- "red@0.5",
- "red@1.0",
- "red@256",
- "red@10foo",
- "red@-1.0",
- "red@-0.0",
- };
- av_log_set_level(AV_LOG_DEBUG);
- 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]);
- else
- printf("%s -> error\n", color_names[i]);
- }
- }
- static void test_av_small_strptime(void)
- {
- int i;
- struct tm tm = { 0 };
- struct fmt_timespec_entry {
- const char *fmt, *timespec;
- } fmt_timespec_entries[] = {
- { "%Y-%m-%d", "2012-12-21" },
- { "%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 - may21 20 : 12 : 21" },
- { " %Y - %B%d %H : %M : %S", " 2012 - mby21 20 : 12 : 21" },
- { " %Y - %B - %d %H : %M : %S", " 2012 - JunE - 21 20 : 12 : 21" },
- { " %Y - %B - %d %H : %M : %S", " 2012 - Jane - 21 20 : 12 : 21" },
- { " %Y - %B - %d %H : %M : %S", " 2012 - January - 21 20 : 12 : 21" },
- };
- av_log_set_level(AV_LOG_DEBUG);
- for (i = 0; i < FF_ARRAY_ELEMS(fmt_timespec_entries); i++) {
- char *p;
- struct fmt_timespec_entry *e = &fmt_timespec_entries[i];
- printf("fmt:'%s' spec:'%s' -> ", e->fmt, e->timespec);
- p = av_small_strptime(e->timespec, e->fmt, &tm);
- if (p) {
- printf("%04d-%02d-%2d %02d:%02d:%02d\n",
- 1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday,
- tm.tm_hour, tm.tm_min, tm.tm_sec);
- } else {
- printf("error\n");
- }
- }
- }
- static void test_av_parse_time(void)
- {
- int i;
- int64_t tv;
- time_t tvi;
- struct tm *tm;
- static char tzstr[] = "TZ=CET-1";
- static const char * const time_string[] = {
- "now",
- "12:35:46",
- "2000-12-20 0:02:47.5z",
- "2012 - 02-22 17:44:07",
- "2000-12-20T010247.6",
- "2000-12-12 1:35:46+05:30",
- "2002-12-12 22:30:40-02",
- };
- static const char * const duration_string[] = {
- "2:34:56.79",
- "-1:23:45.67",
- "42.1729",
- "-1729.42",
- "12:34",
- "2147483648s",
- "4294967296ms",
- "8589934592us",
- "9223372036854775808us",
- };
- av_log_set_level(AV_LOG_DEBUG);
- putenv(tzstr);
- printf("(now is 2012-03-17 09:14:13.2 +0100, local time is UTC+1)\n");
- for (i = 0; i < FF_ARRAY_ELEMS(time_string); i++) {
- printf("%-24s -> ", time_string[i]);
- if (av_parse_time(&tv, time_string[i], 0)) {
- printf("error\n");
- } else {
- tvi = tv / 1000000;
- tm = gmtime(&tvi);
- printf("%14"PRIi64".%06d = %04d-%02d-%02dT%02d:%02d:%02dZ\n",
- tv / 1000000, (int)(tv % 1000000),
- tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
- tm->tm_hour, tm->tm_min, tm->tm_sec);
- }
- }
- for (i = 0; i < FF_ARRAY_ELEMS(duration_string); i++) {
- printf("%-24s -> ", duration_string[i]);
- if (av_parse_time(&tv, duration_string[i], 1)) {
- printf("error\n");
- } else {
- printf("%+21"PRIi64"\n", tv);
- }
- }
- }
- static void test_av_get_known_color_name(void)
- {
- int i;
- const uint8_t *rgba;
- const char *color;
- for (i = 0; i < FF_ARRAY_ELEMS(color_table); ++i) {
- color = av_get_known_color_name(i, &rgba);
- if (color)
- printf("%s -> R(%d) G(%d) B(%d) A(%d)\n",
- color, rgba[0], rgba[1], rgba[2], rgba[3]);
- else
- printf("Color ID: %d not found\n", i);
- }
- }
- static void test_av_find_info_tag(void)
- {
- static const char args[] = "?tag1=val1&tag2=val2&tag3=val3&tag41=value 41&tag42=random1";
- static const char *tags[] = {"tag1", "tag2", "tag3", "tag4", "tag41", "41", "random1"};
- char buff[16];
- int i;
- for (i = 0; i < FF_ARRAY_ELEMS(tags); ++i) {
- if (av_find_info_tag(buff, sizeof(buff), tags[i], args))
- printf("%d. %s found: %s\n", i, tags[i], buff);
- else
- printf("%d. %s not found\n", i, tags[i]);
- }
- }
- int main(void)
- {
- printf("Testing av_parse_video_rate()\n");
- test_av_parse_video_rate();
- printf("\nTesting av_parse_color()\n");
- test_av_parse_color();
- printf("\nTesting av_small_strptime()\n");
- test_av_small_strptime();
- printf("\nTesting av_parse_time()\n");
- test_av_parse_time();
- printf("\nTesting av_get_known_color_name()\n");
- test_av_get_known_color_name();
- printf("\nTesting av_find_info_tag()\n");
- test_av_find_info_tag();
- return 0;
- }
|