1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * This file is part of FFmpeg. 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cabdff1aSopenharmony_ci * Lesser General Public License for more details. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17cabdff1aSopenharmony_ci */ 18cabdff1aSopenharmony_ci 19cabdff1aSopenharmony_ci#define TEST 20cabdff1aSopenharmony_ci#include "libavutil/parseutils.c" 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci#include <stdint.h> 23cabdff1aSopenharmony_ci#include <stdio.h> 24cabdff1aSopenharmony_ci 25cabdff1aSopenharmony_ci#include "libavutil/common.h" 26cabdff1aSopenharmony_ci#include "libavutil/log.h" 27cabdff1aSopenharmony_ci#include "libavutil/rational.h" 28cabdff1aSopenharmony_ci 29cabdff1aSopenharmony_cistatic uint32_t randomv = MKTAG('L','A','V','U'); 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_cistatic uint32_t av_get_random_seed_deterministic(void) 32cabdff1aSopenharmony_ci{ 33cabdff1aSopenharmony_ci return randomv = randomv * 1664525 + 1013904223; 34cabdff1aSopenharmony_ci} 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_cistatic void test_av_parse_video_rate(void) 37cabdff1aSopenharmony_ci{ 38cabdff1aSopenharmony_ci int i; 39cabdff1aSopenharmony_ci static const char *const rates[] = { 40cabdff1aSopenharmony_ci "-inf", 41cabdff1aSopenharmony_ci "inf", 42cabdff1aSopenharmony_ci "nan", 43cabdff1aSopenharmony_ci "123/0", 44cabdff1aSopenharmony_ci "-123 / 0", 45cabdff1aSopenharmony_ci "", 46cabdff1aSopenharmony_ci "/", 47cabdff1aSopenharmony_ci " 123 / 321", 48cabdff1aSopenharmony_ci "foo/foo", 49cabdff1aSopenharmony_ci "foo/1", 50cabdff1aSopenharmony_ci "1/foo", 51cabdff1aSopenharmony_ci "0/0", 52cabdff1aSopenharmony_ci "/0", 53cabdff1aSopenharmony_ci "1/", 54cabdff1aSopenharmony_ci "1", 55cabdff1aSopenharmony_ci "0", 56cabdff1aSopenharmony_ci "-123/123", 57cabdff1aSopenharmony_ci "-foo", 58cabdff1aSopenharmony_ci "123.23", 59cabdff1aSopenharmony_ci ".23", 60cabdff1aSopenharmony_ci "-.23", 61cabdff1aSopenharmony_ci "-0.234", 62cabdff1aSopenharmony_ci "-0.0000001", 63cabdff1aSopenharmony_ci " 21332.2324 ", 64cabdff1aSopenharmony_ci " -21332.2324 ", 65cabdff1aSopenharmony_ci }; 66cabdff1aSopenharmony_ci 67cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(rates); i++) { 68cabdff1aSopenharmony_ci int ret; 69cabdff1aSopenharmony_ci AVRational q = { 0, 0 }; 70cabdff1aSopenharmony_ci ret = av_parse_video_rate(&q, rates[i]); 71cabdff1aSopenharmony_ci printf("'%s' -> %d/%d %s\n", 72cabdff1aSopenharmony_ci rates[i], q.num, q.den, ret ? "ERROR" : "OK"); 73cabdff1aSopenharmony_ci } 74cabdff1aSopenharmony_ci} 75cabdff1aSopenharmony_ci 76cabdff1aSopenharmony_cistatic void test_av_parse_color(void) 77cabdff1aSopenharmony_ci{ 78cabdff1aSopenharmony_ci int i; 79cabdff1aSopenharmony_ci uint8_t rgba[4]; 80cabdff1aSopenharmony_ci static const char *const color_names[] = { 81cabdff1aSopenharmony_ci "bikeshed", 82cabdff1aSopenharmony_ci "RaNdOm", 83cabdff1aSopenharmony_ci "foo", 84cabdff1aSopenharmony_ci "red", 85cabdff1aSopenharmony_ci "Red ", 86cabdff1aSopenharmony_ci "RED", 87cabdff1aSopenharmony_ci "Violet", 88cabdff1aSopenharmony_ci "Yellow", 89cabdff1aSopenharmony_ci "Red", 90cabdff1aSopenharmony_ci "0x000000", 91cabdff1aSopenharmony_ci "0x0000000", 92cabdff1aSopenharmony_ci "0xff000000", 93cabdff1aSopenharmony_ci "0x3e34ff", 94cabdff1aSopenharmony_ci "0x3e34ffaa", 95cabdff1aSopenharmony_ci "0xffXXee", 96cabdff1aSopenharmony_ci "0xfoobar", 97cabdff1aSopenharmony_ci "0xffffeeeeeeee", 98cabdff1aSopenharmony_ci "#ff0000", 99cabdff1aSopenharmony_ci "#ffXX00", 100cabdff1aSopenharmony_ci "ff0000", 101cabdff1aSopenharmony_ci "ffXX00", 102cabdff1aSopenharmony_ci "red@foo", 103cabdff1aSopenharmony_ci "random@10", 104cabdff1aSopenharmony_ci "0xff0000@1.0", 105cabdff1aSopenharmony_ci "red@", 106cabdff1aSopenharmony_ci "red@0xfff", 107cabdff1aSopenharmony_ci "red@0xf", 108cabdff1aSopenharmony_ci "red@2", 109cabdff1aSopenharmony_ci "red@0.1", 110cabdff1aSopenharmony_ci "red@-1", 111cabdff1aSopenharmony_ci "red@0.5", 112cabdff1aSopenharmony_ci "red@1.0", 113cabdff1aSopenharmony_ci "red@256", 114cabdff1aSopenharmony_ci "red@10foo", 115cabdff1aSopenharmony_ci "red@-1.0", 116cabdff1aSopenharmony_ci "red@-0.0", 117cabdff1aSopenharmony_ci }; 118cabdff1aSopenharmony_ci 119cabdff1aSopenharmony_ci av_log_set_level(AV_LOG_DEBUG); 120cabdff1aSopenharmony_ci 121cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(color_names); i++) { 122cabdff1aSopenharmony_ci if (av_parse_color(rgba, color_names[i], -1, NULL) >= 0) 123cabdff1aSopenharmony_ci printf("%s -> R(%d) G(%d) B(%d) A(%d)\n", 124cabdff1aSopenharmony_ci color_names[i], rgba[0], rgba[1], rgba[2], rgba[3]); 125cabdff1aSopenharmony_ci else 126cabdff1aSopenharmony_ci printf("%s -> error\n", color_names[i]); 127cabdff1aSopenharmony_ci } 128cabdff1aSopenharmony_ci} 129cabdff1aSopenharmony_ci 130cabdff1aSopenharmony_cistatic void test_av_small_strptime(void) 131cabdff1aSopenharmony_ci{ 132cabdff1aSopenharmony_ci int i; 133cabdff1aSopenharmony_ci struct tm tm = { 0 }; 134cabdff1aSopenharmony_ci struct fmt_timespec_entry { 135cabdff1aSopenharmony_ci const char *fmt, *timespec; 136cabdff1aSopenharmony_ci } fmt_timespec_entries[] = { 137cabdff1aSopenharmony_ci { "%Y-%m-%d", "2012-12-21" }, 138cabdff1aSopenharmony_ci { "%Y - %m - %d", "2012-12-21" }, 139cabdff1aSopenharmony_ci { "%Y-%m-%d %H:%M:%S", "2012-12-21 20:12:21" }, 140cabdff1aSopenharmony_ci { " %Y - %m - %d %H : %M : %S", " 2012 - 12 - 21 20 : 12 : 21" }, 141cabdff1aSopenharmony_ci { " %Y - %b - %d %H : %M : %S", " 2012 - nOV - 21 20 : 12 : 21" }, 142cabdff1aSopenharmony_ci { " %Y - %B - %d %H : %M : %S", " 2012 - nOVemBeR - 21 20 : 12 : 21" }, 143cabdff1aSopenharmony_ci { " %Y - %B%d %H : %M : %S", " 2012 - may21 20 : 12 : 21" }, 144cabdff1aSopenharmony_ci { " %Y - %B%d %H : %M : %S", " 2012 - mby21 20 : 12 : 21" }, 145cabdff1aSopenharmony_ci { " %Y - %B - %d %H : %M : %S", " 2012 - JunE - 21 20 : 12 : 21" }, 146cabdff1aSopenharmony_ci { " %Y - %B - %d %H : %M : %S", " 2012 - Jane - 21 20 : 12 : 21" }, 147cabdff1aSopenharmony_ci { " %Y - %B - %d %H : %M : %S", " 2012 - January - 21 20 : 12 : 21" }, 148cabdff1aSopenharmony_ci }; 149cabdff1aSopenharmony_ci 150cabdff1aSopenharmony_ci av_log_set_level(AV_LOG_DEBUG); 151cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(fmt_timespec_entries); i++) { 152cabdff1aSopenharmony_ci char *p; 153cabdff1aSopenharmony_ci struct fmt_timespec_entry *e = &fmt_timespec_entries[i]; 154cabdff1aSopenharmony_ci printf("fmt:'%s' spec:'%s' -> ", e->fmt, e->timespec); 155cabdff1aSopenharmony_ci p = av_small_strptime(e->timespec, e->fmt, &tm); 156cabdff1aSopenharmony_ci if (p) { 157cabdff1aSopenharmony_ci printf("%04d-%02d-%2d %02d:%02d:%02d\n", 158cabdff1aSopenharmony_ci 1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday, 159cabdff1aSopenharmony_ci tm.tm_hour, tm.tm_min, tm.tm_sec); 160cabdff1aSopenharmony_ci } else { 161cabdff1aSopenharmony_ci printf("error\n"); 162cabdff1aSopenharmony_ci } 163cabdff1aSopenharmony_ci } 164cabdff1aSopenharmony_ci} 165cabdff1aSopenharmony_ci 166cabdff1aSopenharmony_cistatic void test_av_parse_time(void) 167cabdff1aSopenharmony_ci{ 168cabdff1aSopenharmony_ci int i; 169cabdff1aSopenharmony_ci int64_t tv; 170cabdff1aSopenharmony_ci time_t tvi; 171cabdff1aSopenharmony_ci struct tm *tm; 172cabdff1aSopenharmony_ci static char tzstr[] = "TZ=CET-1"; 173cabdff1aSopenharmony_ci static const char * const time_string[] = { 174cabdff1aSopenharmony_ci "now", 175cabdff1aSopenharmony_ci "12:35:46", 176cabdff1aSopenharmony_ci "2000-12-20 0:02:47.5z", 177cabdff1aSopenharmony_ci "2012 - 02-22 17:44:07", 178cabdff1aSopenharmony_ci "2000-12-20T010247.6", 179cabdff1aSopenharmony_ci "2000-12-12 1:35:46+05:30", 180cabdff1aSopenharmony_ci "2002-12-12 22:30:40-02", 181cabdff1aSopenharmony_ci }; 182cabdff1aSopenharmony_ci static const char * const duration_string[] = { 183cabdff1aSopenharmony_ci "2:34:56.79", 184cabdff1aSopenharmony_ci "-1:23:45.67", 185cabdff1aSopenharmony_ci "42.1729", 186cabdff1aSopenharmony_ci "-1729.42", 187cabdff1aSopenharmony_ci "12:34", 188cabdff1aSopenharmony_ci "2147483648s", 189cabdff1aSopenharmony_ci "4294967296ms", 190cabdff1aSopenharmony_ci "8589934592us", 191cabdff1aSopenharmony_ci "9223372036854775808us", 192cabdff1aSopenharmony_ci }; 193cabdff1aSopenharmony_ci 194cabdff1aSopenharmony_ci av_log_set_level(AV_LOG_DEBUG); 195cabdff1aSopenharmony_ci putenv(tzstr); 196cabdff1aSopenharmony_ci printf("(now is 2012-03-17 09:14:13.2 +0100, local time is UTC+1)\n"); 197cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(time_string); i++) { 198cabdff1aSopenharmony_ci printf("%-24s -> ", time_string[i]); 199cabdff1aSopenharmony_ci if (av_parse_time(&tv, time_string[i], 0)) { 200cabdff1aSopenharmony_ci printf("error\n"); 201cabdff1aSopenharmony_ci } else { 202cabdff1aSopenharmony_ci tvi = tv / 1000000; 203cabdff1aSopenharmony_ci tm = gmtime(&tvi); 204cabdff1aSopenharmony_ci printf("%14"PRIi64".%06d = %04d-%02d-%02dT%02d:%02d:%02dZ\n", 205cabdff1aSopenharmony_ci tv / 1000000, (int)(tv % 1000000), 206cabdff1aSopenharmony_ci tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, 207cabdff1aSopenharmony_ci tm->tm_hour, tm->tm_min, tm->tm_sec); 208cabdff1aSopenharmony_ci } 209cabdff1aSopenharmony_ci } 210cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(duration_string); i++) { 211cabdff1aSopenharmony_ci printf("%-24s -> ", duration_string[i]); 212cabdff1aSopenharmony_ci if (av_parse_time(&tv, duration_string[i], 1)) { 213cabdff1aSopenharmony_ci printf("error\n"); 214cabdff1aSopenharmony_ci } else { 215cabdff1aSopenharmony_ci printf("%+21"PRIi64"\n", tv); 216cabdff1aSopenharmony_ci } 217cabdff1aSopenharmony_ci } 218cabdff1aSopenharmony_ci} 219cabdff1aSopenharmony_ci 220cabdff1aSopenharmony_cistatic void test_av_get_known_color_name(void) 221cabdff1aSopenharmony_ci{ 222cabdff1aSopenharmony_ci int i; 223cabdff1aSopenharmony_ci const uint8_t *rgba; 224cabdff1aSopenharmony_ci const char *color; 225cabdff1aSopenharmony_ci 226cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(color_table); ++i) { 227cabdff1aSopenharmony_ci color = av_get_known_color_name(i, &rgba); 228cabdff1aSopenharmony_ci if (color) 229cabdff1aSopenharmony_ci printf("%s -> R(%d) G(%d) B(%d) A(%d)\n", 230cabdff1aSopenharmony_ci color, rgba[0], rgba[1], rgba[2], rgba[3]); 231cabdff1aSopenharmony_ci else 232cabdff1aSopenharmony_ci printf("Color ID: %d not found\n", i); 233cabdff1aSopenharmony_ci } 234cabdff1aSopenharmony_ci} 235cabdff1aSopenharmony_ci 236cabdff1aSopenharmony_cistatic void test_av_find_info_tag(void) 237cabdff1aSopenharmony_ci{ 238cabdff1aSopenharmony_ci static const char args[] = "?tag1=val1&tag2=val2&tag3=val3&tag41=value 41&tag42=random1"; 239cabdff1aSopenharmony_ci static const char *tags[] = {"tag1", "tag2", "tag3", "tag4", "tag41", "41", "random1"}; 240cabdff1aSopenharmony_ci char buff[16]; 241cabdff1aSopenharmony_ci int i; 242cabdff1aSopenharmony_ci 243cabdff1aSopenharmony_ci for (i = 0; i < FF_ARRAY_ELEMS(tags); ++i) { 244cabdff1aSopenharmony_ci if (av_find_info_tag(buff, sizeof(buff), tags[i], args)) 245cabdff1aSopenharmony_ci printf("%d. %s found: %s\n", i, tags[i], buff); 246cabdff1aSopenharmony_ci else 247cabdff1aSopenharmony_ci printf("%d. %s not found\n", i, tags[i]); 248cabdff1aSopenharmony_ci } 249cabdff1aSopenharmony_ci} 250cabdff1aSopenharmony_ci 251cabdff1aSopenharmony_ciint main(void) 252cabdff1aSopenharmony_ci{ 253cabdff1aSopenharmony_ci printf("Testing av_parse_video_rate()\n"); 254cabdff1aSopenharmony_ci test_av_parse_video_rate(); 255cabdff1aSopenharmony_ci 256cabdff1aSopenharmony_ci printf("\nTesting av_parse_color()\n"); 257cabdff1aSopenharmony_ci test_av_parse_color(); 258cabdff1aSopenharmony_ci 259cabdff1aSopenharmony_ci printf("\nTesting av_small_strptime()\n"); 260cabdff1aSopenharmony_ci test_av_small_strptime(); 261cabdff1aSopenharmony_ci 262cabdff1aSopenharmony_ci printf("\nTesting av_parse_time()\n"); 263cabdff1aSopenharmony_ci test_av_parse_time(); 264cabdff1aSopenharmony_ci 265cabdff1aSopenharmony_ci printf("\nTesting av_get_known_color_name()\n"); 266cabdff1aSopenharmony_ci test_av_get_known_color_name(); 267cabdff1aSopenharmony_ci 268cabdff1aSopenharmony_ci printf("\nTesting av_find_info_tag()\n"); 269cabdff1aSopenharmony_ci test_av_find_info_tag(); 270cabdff1aSopenharmony_ci return 0; 271cabdff1aSopenharmony_ci} 272