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