38 #define av_get_random_seed av_get_random_seed_deterministic 41 #define av_gettime() 1331972053200000 46 int log_offset,
void *log_ctx)
51 if (sscanf(str,
"%d:%d%c", &q->
num, &q->
den, &c) != 2) {
55 NULL, log_offset, log_ctx);
79 {
"qntsc", 352, 240 },
81 {
"sntsc", 640, 480 },
84 {
"ntsc-film", 352, 240 },
89 {
"16cif", 1408,1152 },
90 {
"qqvga", 160, 120 },
95 {
"uxga", 1600,1200 },
96 {
"qxga", 2048,1536 },
97 {
"sxga", 1280,1024 },
98 {
"qsxga", 2560,2048 },
99 {
"hsxga", 5120,4096 },
100 {
"wvga", 852, 480 },
101 {
"wxga", 1366, 768 },
102 {
"wsxga", 1600,1024 },
103 {
"wuxga", 1920,1200 },
104 {
"woxga", 2560,1600 },
105 {
"wqsxga", 3200,2048 },
106 {
"wquxga", 3840,2400 },
107 {
"whsxga", 6400,4096 },
108 {
"whuxga", 7680,4800 },
111 {
"hd480", 852, 480 },
112 {
"hd720", 1280, 720 },
113 {
"hd1080", 1920,1080 },
115 {
"2kdci", 2048,1080 },
116 {
"2kflat", 1998,1080 },
117 {
"2kscope", 2048, 858 },
119 {
"4kdci", 4096,2160 },
120 {
"4kflat", 3996,2160 },
121 {
"4kscope", 4096,1716 },
123 {
"hqvga", 240,160 },
124 {
"wqvga", 400,240 },
125 {
"fwqvga", 432,240 },
128 {
"uhd2160", 3840,2160 },
129 {
"uhd4320", 7680,4320 },
133 {
"ntsc", { 30000, 1001 } },
134 {
"pal", { 25, 1 } },
135 {
"qntsc", { 30000, 1001 } },
136 {
"qpal", { 25, 1 } },
137 {
"sntsc", { 30000, 1001 } },
138 {
"spal", { 25, 1 } },
139 {
"film", { 24, 1 } },
140 {
"ntsc-film", { 24000, 1001 } },
144 "january",
"february",
"march",
"april",
"may",
"june",
"july",
"august",
145 "september",
"october",
"november",
"december" 155 for (i = 0; i < n; i++) {
156 if (!strcmp(video_size_abbrs[i].
abbr, str)) {
157 width = video_size_abbrs[
i].
width;
163 width = strtol(str, (
void*)&p, 10);
166 height = strtol(p, (
void*)&p, 10);
172 if (width <= 0 ||
height <= 0)
185 for (i = 0; i < n; ++
i)
186 if (!strcmp(video_rate_abbrs[i].
abbr, arg)) {
187 *rate = video_rate_abbrs[
i].
rate;
194 if (rate->
num <= 0 || rate->
den <= 0)
205 {
"AliceBlue", { 0xF0, 0xF8, 0xFF } },
206 {
"AntiqueWhite", { 0xFA, 0xEB, 0xD7 } },
207 {
"Aqua", { 0x00, 0xFF, 0xFF } },
208 {
"Aquamarine", { 0x7F, 0xFF, 0xD4 } },
209 {
"Azure", { 0xF0, 0xFF, 0xFF } },
210 {
"Beige", { 0xF5, 0xF5, 0xDC } },
211 {
"Bisque", { 0xFF, 0xE4, 0xC4 } },
212 {
"Black", { 0x00, 0x00, 0x00 } },
213 {
"BlanchedAlmond", { 0xFF, 0xEB, 0xCD } },
214 {
"Blue", { 0x00, 0x00, 0xFF } },
215 {
"BlueViolet", { 0x8A, 0x2B, 0xE2 } },
216 {
"Brown", { 0xA5, 0x2A, 0x2A } },
217 {
"BurlyWood", { 0xDE, 0xB8, 0x87 } },
218 {
"CadetBlue", { 0x5F, 0x9E, 0xA0 } },
219 {
"Chartreuse", { 0x7F, 0xFF, 0x00 } },
220 {
"Chocolate", { 0xD2, 0x69, 0x1E } },
221 {
"Coral", { 0xFF, 0x7F, 0x50 } },
222 {
"CornflowerBlue", { 0x64, 0x95, 0xED } },
223 {
"Cornsilk", { 0xFF, 0xF8, 0xDC } },
224 {
"Crimson", { 0xDC, 0x14, 0x3C } },
225 {
"Cyan", { 0x00, 0xFF, 0xFF } },
226 {
"DarkBlue", { 0x00, 0x00, 0x8B } },
227 {
"DarkCyan", { 0x00, 0x8B, 0x8B } },
228 {
"DarkGoldenRod", { 0xB8, 0x86, 0x0B } },
229 {
"DarkGray", { 0xA9, 0xA9, 0xA9 } },
230 {
"DarkGreen", { 0x00, 0x64, 0x00 } },
231 {
"DarkKhaki", { 0xBD, 0xB7, 0x6B } },
232 {
"DarkMagenta", { 0x8B, 0x00, 0x8B } },
233 {
"DarkOliveGreen", { 0x55, 0x6B, 0x2F } },
234 {
"Darkorange", { 0xFF, 0x8C, 0x00 } },
235 {
"DarkOrchid", { 0x99, 0x32, 0xCC } },
236 {
"DarkRed", { 0x8B, 0x00, 0x00 } },
237 {
"DarkSalmon", { 0xE9, 0x96, 0x7A } },
238 {
"DarkSeaGreen", { 0x8F, 0xBC, 0x8F } },
239 {
"DarkSlateBlue", { 0x48, 0x3D, 0x8B } },
240 {
"DarkSlateGray", { 0x2F, 0x4F, 0x4F } },
241 {
"DarkTurquoise", { 0x00, 0xCE, 0xD1 } },
242 {
"DarkViolet", { 0x94, 0x00, 0xD3 } },
243 {
"DeepPink", { 0xFF, 0x14, 0x93 } },
244 {
"DeepSkyBlue", { 0x00, 0xBF, 0xFF } },
245 {
"DimGray", { 0x69, 0x69, 0x69 } },
246 {
"DodgerBlue", { 0x1E, 0x90, 0xFF } },
247 {
"FireBrick", { 0xB2, 0x22, 0x22 } },
248 {
"FloralWhite", { 0xFF, 0xFA, 0xF0 } },
249 {
"ForestGreen", { 0x22, 0x8B, 0x22 } },
250 {
"Fuchsia", { 0xFF, 0x00, 0xFF } },
251 {
"Gainsboro", { 0xDC, 0xDC, 0xDC } },
252 {
"GhostWhite", { 0xF8, 0xF8, 0xFF } },
253 {
"Gold", { 0xFF, 0xD7, 0x00 } },
254 {
"GoldenRod", { 0xDA, 0xA5, 0x20 } },
255 {
"Gray", { 0x80, 0x80, 0x80 } },
256 {
"Green", { 0x00, 0x80, 0x00 } },
257 {
"GreenYellow", { 0xAD, 0xFF, 0x2F } },
258 {
"HoneyDew", { 0xF0, 0xFF, 0xF0 } },
259 {
"HotPink", { 0xFF, 0x69, 0xB4 } },
260 {
"IndianRed", { 0xCD, 0x5C, 0x5C } },
261 {
"Indigo", { 0x4B, 0x00, 0x82 } },
262 {
"Ivory", { 0xFF, 0xFF, 0xF0 } },
263 {
"Khaki", { 0xF0, 0xE6, 0x8C } },
264 {
"Lavender", { 0xE6, 0xE6, 0xFA } },
265 {
"LavenderBlush", { 0xFF, 0xF0, 0xF5 } },
266 {
"LawnGreen", { 0x7C, 0xFC, 0x00 } },
267 {
"LemonChiffon", { 0xFF, 0xFA, 0xCD } },
268 {
"LightBlue", { 0xAD, 0xD8, 0xE6 } },
269 {
"LightCoral", { 0xF0, 0x80, 0x80 } },
270 {
"LightCyan", { 0xE0, 0xFF, 0xFF } },
271 {
"LightGoldenRodYellow", { 0xFA, 0xFA, 0xD2 } },
272 {
"LightGreen", { 0x90, 0xEE, 0x90 } },
273 {
"LightGrey", { 0xD3, 0xD3, 0xD3 } },
274 {
"LightPink", { 0xFF, 0xB6, 0xC1 } },
275 {
"LightSalmon", { 0xFF, 0xA0, 0x7A } },
276 {
"LightSeaGreen", { 0x20, 0xB2, 0xAA } },
277 {
"LightSkyBlue", { 0x87, 0xCE, 0xFA } },
278 {
"LightSlateGray", { 0x77, 0x88, 0x99 } },
279 {
"LightSteelBlue", { 0xB0, 0xC4, 0xDE } },
280 {
"LightYellow", { 0xFF, 0xFF, 0xE0 } },
281 {
"Lime", { 0x00, 0xFF, 0x00 } },
282 {
"LimeGreen", { 0x32, 0xCD, 0x32 } },
283 {
"Linen", { 0xFA, 0xF0, 0xE6 } },
284 {
"Magenta", { 0xFF, 0x00, 0xFF } },
285 {
"Maroon", { 0x80, 0x00, 0x00 } },
286 {
"MediumAquaMarine", { 0x66, 0xCD, 0xAA } },
287 {
"MediumBlue", { 0x00, 0x00, 0xCD } },
288 {
"MediumOrchid", { 0xBA, 0x55, 0xD3 } },
289 {
"MediumPurple", { 0x93, 0x70, 0xD8 } },
290 {
"MediumSeaGreen", { 0x3C, 0xB3, 0x71 } },
291 {
"MediumSlateBlue", { 0x7B, 0x68, 0xEE } },
292 {
"MediumSpringGreen", { 0x00, 0xFA, 0x9A } },
293 {
"MediumTurquoise", { 0x48, 0xD1, 0xCC } },
294 {
"MediumVioletRed", { 0xC7, 0x15, 0x85 } },
295 {
"MidnightBlue", { 0x19, 0x19, 0x70 } },
296 {
"MintCream", { 0xF5, 0xFF, 0xFA } },
297 {
"MistyRose", { 0xFF, 0xE4, 0xE1 } },
298 {
"Moccasin", { 0xFF, 0xE4, 0xB5 } },
299 {
"NavajoWhite", { 0xFF, 0xDE, 0xAD } },
300 {
"Navy", { 0x00, 0x00, 0x80 } },
301 {
"OldLace", { 0xFD, 0xF5, 0xE6 } },
302 {
"Olive", { 0x80, 0x80, 0x00 } },
303 {
"OliveDrab", { 0x6B, 0x8E, 0x23 } },
304 {
"Orange", { 0xFF, 0xA5, 0x00 } },
305 {
"OrangeRed", { 0xFF, 0x45, 0x00 } },
306 {
"Orchid", { 0xDA, 0x70, 0xD6 } },
307 {
"PaleGoldenRod", { 0xEE, 0xE8, 0xAA } },
308 {
"PaleGreen", { 0x98, 0xFB, 0x98 } },
309 {
"PaleTurquoise", { 0xAF, 0xEE, 0xEE } },
310 {
"PaleVioletRed", { 0xD8, 0x70, 0x93 } },
311 {
"PapayaWhip", { 0xFF, 0xEF, 0xD5 } },
312 {
"PeachPuff", { 0xFF, 0xDA, 0xB9 } },
313 {
"Peru", { 0xCD, 0x85, 0x3F } },
314 {
"Pink", { 0xFF, 0xC0, 0xCB } },
315 {
"Plum", { 0xDD, 0xA0, 0xDD } },
316 {
"PowderBlue", { 0xB0, 0xE0, 0xE6 } },
317 {
"Purple", { 0x80, 0x00, 0x80 } },
318 {
"Red", { 0xFF, 0x00, 0x00 } },
319 {
"RosyBrown", { 0xBC, 0x8F, 0x8F } },
320 {
"RoyalBlue", { 0x41, 0x69, 0xE1 } },
321 {
"SaddleBrown", { 0x8B, 0x45, 0x13 } },
322 {
"Salmon", { 0xFA, 0x80, 0x72 } },
323 {
"SandyBrown", { 0xF4, 0xA4, 0x60 } },
324 {
"SeaGreen", { 0x2E, 0x8B, 0x57 } },
325 {
"SeaShell", { 0xFF, 0xF5, 0xEE } },
326 {
"Sienna", { 0xA0, 0x52, 0x2D } },
327 {
"Silver", { 0xC0, 0xC0, 0xC0 } },
328 {
"SkyBlue", { 0x87, 0xCE, 0xEB } },
329 {
"SlateBlue", { 0x6A, 0x5A, 0xCD } },
330 {
"SlateGray", { 0x70, 0x80, 0x90 } },
331 {
"Snow", { 0xFF, 0xFA, 0xFA } },
332 {
"SpringGreen", { 0x00, 0xFF, 0x7F } },
333 {
"SteelBlue", { 0x46, 0x82, 0xB4 } },
334 {
"Tan", { 0xD2, 0xB4, 0x8C } },
335 {
"Teal", { 0x00, 0x80, 0x80 } },
336 {
"Thistle", { 0xD8, 0xBF, 0xD8 } },
337 {
"Tomato", { 0xFF, 0x63, 0x47 } },
338 {
"Turquoise", { 0x40, 0xE0, 0xD0 } },
339 {
"Violet", { 0xEE, 0x82, 0xEE } },
340 {
"Wheat", { 0xF5, 0xDE, 0xB3 } },
341 {
"White", { 0xFF, 0xFF, 0xFF } },
342 {
"WhiteSmoke", { 0xF5, 0xF5, 0xF5 } },
343 {
"Yellow", { 0xFF, 0xFF, 0x00 } },
344 {
"YellowGreen", { 0x9A, 0xCD, 0x32 } },
352 #define ALPHA_SEP '@' 357 char *tail, color_string2[128];
359 int len, hex_offset = 0;
361 if (color_string[0] ==
'#') {
363 }
else if (!strncmp(color_string,
"0x", 2))
367 slen = strlen(color_string);
368 av_strlcpy(color_string2, color_string + hex_offset,
369 FFMIN(slen-hex_offset+1,
sizeof(color_string2)));
370 if ((tail = strchr(color_string2,
ALPHA_SEP)))
372 len = strlen(color_string2);
377 rgba_color[0] = rgba >> 24;
378 rgba_color[1] = rgba >> 16;
379 rgba_color[2] = rgba >> 8;
380 rgba_color[3] = rgba;
381 }
else if (hex_offset ||
382 strspn(color_string2,
"0123456789ABCDEFabcdef") == len) {
384 unsigned int rgba = strtoul(color_string2, &tail, 16);
386 if (*tail || (len != 6 && len != 8)) {
387 av_log(log_ctx,
AV_LOG_ERROR,
"Invalid 0xRRGGBB[AA] color string: '%s'\n", color_string2);
391 rgba_color[3] = rgba;
394 rgba_color[0] = rgba >> 16;
395 rgba_color[1] = rgba >> 8;
396 rgba_color[2] = rgba;
398 entry = bsearch(color_string2,
412 const char *alpha_string = tail;
413 if (!strncmp(alpha_string,
"0x", 2)) {
414 alpha = strtoul(alpha_string, &tail, 16);
416 double norm_alpha =
strtod(alpha_string, &tail);
417 if (norm_alpha < 0.0 || norm_alpha > 1.0)
420 alpha = 255 * norm_alpha;
423 if (tail == alpha_string || *tail || alpha > 255 || alpha < 0) {
425 alpha_string, color_string);
428 rgba_color[3] =
alpha;
441 color = &color_table[color_idx];
451 int n_min,
int n_max,
int len_max)
458 for(i = 0; i < len_max; i++) {
462 val = (val * 10) + c -
'0';
468 if (val < n_min || val > n_max)
476 for (; i < 12; i++) {
478 const char *mo_full =
months[
i] + 3;
479 int len = strlen(mo_full);
493 while((c = *fmt++)) {
507 val =
date_get_num(&p, 0, c ==
'H' ? 23 : INT_MAX, c ==
'H' ? 2 : 4);
529 dt->tm_year = val - 1900;
535 dt->tm_mon = val - 1;
572 int y = tm->tm_year + 1900, m = tm->tm_mon + 1, d = tm->tm_mday;
580 (d + (153 * m - 457) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 719469);
582 t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
592 struct tm dt = { 0 }, tmbuf;
593 int today = 0, negative = 0, microseconds = 0,
suffix = 1000000;
595 static const char *
const date_fmt[] = {
599 static const char *
const time_fmt[] = {
603 static const char *
const tz_fmt[] = {
611 *timeval = INT64_MIN;
614 now = now64 / 1000000;
636 if (*p ==
'T' || *p ==
't')
665 t = strtoll(p, &o, 10);
672 t = dt.tm_hour * 3600 + dt.tm_min * 60 + dt.tm_sec;
684 for (n = 100000; n >= 1; n /= 10, q++) {
687 microseconds += n * (*q -
'0');
694 if (q[0] ==
'm' && q[1] ==
's') {
696 microseconds /= 1000;
698 }
else if (q[0] ==
'u' && q[1] ==
's') {
702 }
else if (*q ==
's')
705 int is_utc = *q ==
'Z' || *q ==
'z';
708 if (!today && !is_utc && (*q ==
'+' || *q ==
'-')) {
709 struct tm tz = { 0 };
710 int sign = (*q ==
'+' ? -1 : 1);
720 tzoffset = sign * (tz.tm_hour * 60 + tz.tm_min) * 60;
725 dt2.tm_hour = dt.tm_hour;
726 dt2.tm_min = dt.tm_min;
727 dt2.tm_sec = dt.tm_sec;
730 dt.tm_isdst = is_utc ? 0 : -1;
731 t = is_utc ?
av_timegm(&dt) : mktime(&dt);
739 if (INT64_MAX /
suffix < t)
742 if (INT64_MAX - microseconds < t)
745 *timeval = negative ? -t : t;
759 while (*p !=
'\0' && *p !=
'=' && *p !=
'&') {
760 if ((q - tag) <
sizeof(tag) - 1)
768 while (*p !=
'&' && *p !=
'\0') {
769 if ((q - arg) < arg_size - 1) {
779 if (!strcmp(tag, tag1))
time_t av_timegm(struct tm *tm)
Convert the decomposed UTC time in tm to a time_t value.
int av_parse_ratio(AVRational *q, const char *str, int max, int log_offset, void *log_ctx)
Parse str and store the parsed ratio in q.
static uint32_t av_get_random_seed_deterministic(void)
static av_const int av_isdigit(int c)
Locale-independent conversion of ASCII isdigit.
int av_parse_video_rate(AVRational *rate, const char *arg)
Parse str and store the detected values in *rate.
int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str)
Parse str and put in width_ptr and height_ptr the detected values.
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
static int date_get_month(const char **pp)
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
const char * name
a string representing the name of the color
int av_strncasecmp(const char *a, const char *b, size_t n)
Locale-independent case-insensitive compare.
Convenience header that includes libavutil's core.
static const uint32_t color[16+AV_CLASS_CATEGORY_NB]
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
char * av_small_strptime(const char *p, const char *fmt, struct tm *dt)
Simplified version of strptime.
double strtod(const char *, char **)
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
Attempt to find a specific tag in a URL.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
uint32_t rgb_color
RGB values for the color.
int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, void *log_ctx)
Put the RGBA values that correspond to color_string in rgba_color.
int av_expr_parse_and_eval(double *d, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
Parse and evaluate an expression.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
const char * av_get_known_color_name(int color_idx, const uint8_t **rgbp)
Get the name of a color from the internal table of hard-coded named colors.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
#define FF_ARRAY_ELEMS(a)
static int color_table_compare(const void *lhs, const void *rhs)
int64_t av_gettime(void)
Get the current time in microseconds.
static const ColorEntry color_table[]
static const VideoRateAbbr video_rate_abbrs[]
static int date_get_num(const char **pp, int n_min, int n_max, int len_max)
static const int16_t alpha[]
Rational number (pair of numerator and denominator).
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational.
static const char * months[12]
static const VideoSizeAbbr video_size_abbrs[]
common internal and external API header
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
static double val(void *priv, double ch)
#define av_parse_ratio_quiet(rate, str, max)
simple arithmetic expression evaluator