FFmpeg
Loading...
Searching...
No Matches
img2dec.c
Go to the documentation of this file.
1/*
2 * Image format
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4 * Copyright (c) 2004 Michael Niedermayer
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23#include "config_components.h"
25
26#define _DEFAULT_SOURCE
27#define _BSD_SOURCE
28#include <sys/stat.h>
29#include "libavutil/avassert.h"
30#include "libavutil/avstring.h"
31#include "libavutil/bprint.h"
32#include "libavutil/log.h"
33#include "libavutil/mem.h"
34#include "libavutil/opt.h"
35#include "libavutil/pixdesc.h"
37#include "libavcodec/gif.h"
38#include "avformat.h"
39#include "avio_internal.h"
40#include "demux.h"
41#include "internal.h"
42#include "img2.h"
43#include "os_support.h"
45#include "libavcodec/mjpeg.h"
46#include "libavcodec/vbn.h"
47#include "libavcodec/xwd.h"
48#include "subtitles.h"
49
50#if HAVE_GLOB
51/* Locally define as 0 (bitwise-OR no-op) any missing glob options that
52 are non-posix glibc/bsd extensions. */
53#ifndef GLOB_NOMAGIC
54#define GLOB_NOMAGIC 0
55#endif
56#ifndef GLOB_BRACE
57#define GLOB_BRACE 0
58#endif
59
60#endif /* HAVE_GLOB */
61
62static const int sizes[][2] = {
63 { 640, 480 },
64 { 720, 480 },
65 { 720, 576 },
66 { 352, 288 },
67 { 352, 240 },
68 { 160, 128 },
69 { 512, 384 },
70 { 640, 352 },
71 { 640, 240 },
72};
73
74static int infer_size(int *width_ptr, int *height_ptr, int size)
75{
76 int i;
77
78 for (i = 0; i < FF_ARRAY_ELEMS(sizes); i++) {
79 if ((sizes[i][0] * sizes[i][1]) == size) {
80 *width_ptr = sizes[i][0];
81 *height_ptr = sizes[i][1];
82 return 0;
83 }
84 }
85
86 return -1;
87}
88
89/**
90 * Get index range of image files matched by path.
91 *
92 * @param pfirst_index pointer to index updated with the first number in the range
93 * @param plast_index pointer to index updated with the last number in the range
94 * @param path path which has to be matched by the image files in the range
95 * @param start_index minimum accepted value for the first index in the range
96 * @return -1 if no image file could be found
97 */
98static int find_image_range(int *pfirst_index, int *plast_index,
99 const char *path, int start_index, int start_index_range)
100{
101 int range, last_index, range1, first_index, ret;
102 AVBPrint filename;
103
105 /* find the first image */
106 for (first_index = start_index; first_index < start_index + start_index_range; first_index++) {
107 av_bprint_clear(&filename);
108 ret = ff_bprint_get_frame_filename(&filename, path, first_index, 0);
109 if (ret < 0)
110 goto fail;
111 if (avio_check(filename.str, AVIO_FLAG_READ) > 0)
112 break;
113 }
114 if (first_index == start_index + start_index_range) {
115 ret = AVERROR(EINVAL);
116 goto fail;
117 }
118
119 /* find the last image */
120 last_index = first_index;
121 for (;;) {
122 range = 0;
123 for (;;) {
124 if (!range)
125 range1 = 1;
126 else
127 range1 = 2 * range;
128 av_bprint_clear(&filename);
129 ret = ff_bprint_get_frame_filename(&filename, path, last_index + range1, 0);
130 if (ret < 0)
131 goto fail;
132 if (avio_check(filename.str, AVIO_FLAG_READ) <= 0)
133 break;
134 range = range1;
135 /* just in case... */
136 if (range >= (1 << 30)) {
137 ret = AVERROR(EINVAL);
138 goto fail;
139 }
140 }
141 /* we are sure than image last_index + range exists */
142 if (!range)
143 break;
144 last_index += range;
145 }
146 *pfirst_index = first_index;
147 *plast_index = last_index;
148 ret = 0;
149fail:
150 av_bprint_finalize(&filename, NULL);
151 return ret;
152}
153
154static int img_read_probe(const AVProbeData *p)
155{
156 if (p->filename && ff_guess_image2_codec(p->filename)) {
157 if (av_filename_number_test(p->filename))
158 return AVPROBE_SCORE_MAX;
159 else if (p->filename[strcspn(p->filename, "*?{")]) // probably PT_GLOB
160 return AVPROBE_SCORE_EXTENSION + 2; // score chosen to be a tad above the image pipes
161 else if (p->buf_size == 0)
162 return 0;
163 else if (av_match_ext(p->filename, "raw") || av_match_ext(p->filename, "gif"))
164 return 5;
165 else
167 }
168 return 0;
169}
170
172{
174 int first_index = 1, last_index = 1;
175 AVStream *st;
177
179
180 st = avformat_new_stream(s1, NULL);
181 if (!st) {
182 return AVERROR(ENOMEM);
183 }
184
185 if (s->pixel_format &&
186 (pix_fmt = av_get_pix_fmt(s->pixel_format)) == AV_PIX_FMT_NONE) {
187 av_log(s1, AV_LOG_ERROR, "No such pixel format: %s.\n",
188 s->pixel_format);
189 return AVERROR(EINVAL);
190 }
191
192 s->img_number = 0;
193 s->img_count = 0;
194
195 /* find format */
196 if (s1->iformat->flags & AVFMT_NOFILE)
197 s->is_pipe = 0;
198 else {
199 s->is_pipe = 1;
201 }
202
203 if (s->ts_from_file == 2) {
204#if !HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
205 av_log(s1, AV_LOG_ERROR, "POSIX.1-2008 not supported, nanosecond file timestamps unavailable\n");
206 return AVERROR(ENOSYS);
207#endif
208 avpriv_set_pts_info(st, 64, 1, 1000000000);
209 } else if (s->ts_from_file)
210 avpriv_set_pts_info(st, 64, 1, 1);
211 else {
212 avpriv_set_pts_info(st, 64, s->framerate.den, s->framerate.num);
213 st->avg_frame_rate = st->r_frame_rate = s->framerate;
214 }
215
216 if (s->width && s->height) {
217 st->codecpar->width = s->width;
218 st->codecpar->height = s->height;
219 }
220
221 if (!s->is_pipe) {
222 if (s->pattern_type == PT_DEFAULT) {
223 if (s1->pb) {
224 s->pattern_type = PT_NONE;
225 } else
226 s->pattern_type = PT_SEQUENCE;
227 }
228 if (s->pattern_type == PT_SEQUENCE) {
229 if (find_image_range(&first_index, &last_index, s1->url,
230 s->start_number, s->start_number_range) < 0) {
231 if (s1->pb || avio_check(s1->url, AVIO_FLAG_READ) > 0) {
232 // Fallback to normal mode
233 s->pattern_type = PT_NONE;
234 } else {
236 "Could find no file or sequence with path '%s' and index in the range %d-%d\n",
237 s1->url, s->start_number, s->start_number + s->start_number_range - 1);
238 return AVERROR(ENOENT);
239 }
240 }
241 } else if (s->pattern_type == PT_GLOB) {
242#if HAVE_GLOB
243 int gerr;
244 gerr = glob(s1->url, GLOB_NOCHECK|GLOB_BRACE|GLOB_NOMAGIC, NULL, &s->globstate);
245 if (gerr != 0) {
246 return AVERROR(ENOENT);
247 }
248 first_index = 0;
249 last_index = s->globstate.gl_pathc - 1;
250 s->use_glob = 1;
251#else
253 "Pattern type 'glob' was selected but globbing "
254 "is not supported by this libavformat build\n");
255 return AVERROR(ENOSYS);
256#endif
257 } else if (s->pattern_type != PT_NONE) {
259 "Unknown value '%d' for pattern_type option\n", s->pattern_type);
260 return AVERROR(EINVAL);
261 }
262 s->img_first = first_index;
263 s->img_last = last_index;
264 s->img_number = first_index;
265 /* compute duration */
266 if (!s->ts_from_file) {
267 st->start_time = 0;
268 st->duration = last_index - first_index + 1;
269 }
270 }
271
272 if (s1->video_codec_id) {
275 } else if (s1->audio_codec_id) {
278 } else if (ffifmt(s1->iformat)->raw_codec_id) {
281 } else {
282 const char *str = strrchr(s1->url, '.');
283 s->split_planes = str && !av_strcasecmp(str + 1, "y");
285 if (s1->pb) {
286 int probe_buffer_size = 2048;
287 uint8_t *probe_buffer = av_realloc(NULL, probe_buffer_size + AVPROBE_PADDING_SIZE);
288 const AVInputFormat *fmt = NULL;
289 void *fmt_iter = NULL;
290 AVProbeData pd = { 0 };
291
292 if (!probe_buffer)
293 return AVERROR(ENOMEM);
294
295 probe_buffer_size = avio_read(s1->pb, probe_buffer, probe_buffer_size);
296 if (probe_buffer_size < 0) {
297 av_free(probe_buffer);
298 return probe_buffer_size;
299 }
300 memset(probe_buffer + probe_buffer_size, 0, AVPROBE_PADDING_SIZE);
301
302 pd.buf = probe_buffer;
303 pd.buf_size = probe_buffer_size;
304 pd.filename = s1->url;
305
306 while ((fmt = av_demuxer_iterate(&fmt_iter))) {
307 const FFInputFormat *fmt2 = ffifmt(fmt);
308 if (fmt2->read_header != ff_img_read_header ||
309 !fmt2->read_probe ||
310 (fmt->flags & AVFMT_NOFILE) ||
311 !fmt2->raw_codec_id)
312 continue;
313 if (fmt2->read_probe(&pd) > 0) {
314 st->codecpar->codec_id = fmt2->raw_codec_id;
315 break;
316 }
317 }
318 if (s1->flags & AVFMT_FLAG_CUSTOM_IO) {
319 avio_seek(s1->pb, 0, SEEK_SET);
320 av_freep(&probe_buffer);
321 } else
322 ffio_rewind_with_probe_data(s1->pb, &probe_buffer, probe_buffer_size);
323 }
328 if (st->codecpar->codec_id == AV_CODEC_ID_ALIAS_PIX) // we cannot distinguish this from BRENDER_PIX
330 }
333 st->codecpar->format = pix_fmt;
334
335 return 0;
336}
337
338/**
339 * Add this frame's source path and basename to packet's sidedata
340 * as a dictionary, so it can be used by filters like 'drawtext'.
341 */
342static int add_filename_as_pkt_side_data(char *filename, AVPacket *pkt) {
343 AVDictionary *d = NULL;
344 char *packed_metadata = NULL;
345 size_t metadata_len;
346 int ret;
347
348 av_dict_set(&d, "lavf.image2dec.source_path", filename, 0);
349 av_dict_set(&d, "lavf.image2dec.source_basename", av_basename(filename), 0);
350
351 packed_metadata = av_packet_pack_dictionary(d, &metadata_len);
352 av_dict_free(&d);
353 if (!packed_metadata)
354 return AVERROR(ENOMEM);
356 packed_metadata, metadata_len);
357 if (ret < 0) {
358 av_freep(&packed_metadata);
359 return ret;
360 }
361 return 0;
362}
363
365{
367 AVBPrint filename;
368 int i, res;
369 int ret[3] = { 0 };
370 int64_t size[3] = { 0 };
371 AVIOContext *f[3] = { NULL };
372 AVCodecParameters *par = s1->streams[0]->codecpar;
373
375 if (!s->is_pipe) {
376 /* loop over input */
377 if (s->loop && s->img_number > s->img_last) {
378 s->img_number = s->img_first;
379 }
380 if (s->img_number > s->img_last)
381 return AVERROR_EOF;
382 if (s->pattern_type == PT_NONE) {
383 av_bprintf(&filename, "%s", s1->url);
384 } else if (s->use_glob) {
385#if HAVE_GLOB
386 av_bprintf(&filename, "%s", s->globstate.gl_pathv[s->img_number]);
387#endif
388 } else {
389 int ret = ff_bprint_get_frame_filename(&filename, s1->url, s->img_number, 0);
390 if (ret < 0) {
391 av_bprint_finalize(&filename, NULL);
392 return ret;
393 }
394 }
395 if (!av_bprint_is_complete(&filename)) {
396 av_bprint_finalize(&filename, NULL);
397 return AVERROR(ENOMEM);
398 }
399 for (i = 0; i < 3; i++) {
400 if (s1->pb &&
401 !strcmp(filename.str, s1->url) &&
402 !s->loop &&
403 !s->split_planes) {
404 f[i] = s1->pb;
405 } else if ((res = s1->io_open(s1, &f[i], filename.str, AVIO_FLAG_READ, NULL)) < 0) {
406 if (i >= 1)
407 break;
408 av_log(s1, AV_LOG_ERROR, "Could not open file : %s\n",
409 filename.str);
410 av_bprint_finalize(&filename, NULL);
411 return res;
412 }
413 size[i] = avio_size(f[i]);
414
415 if (!s->split_planes)
416 break;
417 filename.str[filename.len - 1] = 'U' + i;
418 }
419 av_bprint_finalize(&filename, NULL);
420
421 if (par->codec_id == AV_CODEC_ID_NONE) {
422 AVProbeData pd = { 0 };
423 const FFInputFormat *ifmt;
425 int ret;
426 int score = 0;
427
428 ret = avio_read(f[0], header, PROBE_BUF_MIN);
429 if (ret < 0) {
430 av_bprint_finalize(&filename, NULL);
431 return ret;
432 }
433 memset(header + ret, 0, sizeof(header) - ret);
434 avio_skip(f[0], -ret);
435 pd.buf = header;
436 pd.buf_size = ret;
437 pd.filename = filename.str;
438
439 ifmt = ffifmt(av_probe_input_format3(&pd, 1, &score));
440 if (ifmt && ifmt->read_packet == ff_img_read_packet && ifmt->raw_codec_id)
441 par->codec_id = ifmt->raw_codec_id;
442 }
443
444 if (par->codec_id == AV_CODEC_ID_RAWVIDEO && !par->width)
445 infer_size(&par->width, &par->height, size[0]);
446 } else {
447 f[0] = s1->pb;
448 if (avio_feof(f[0]) && s->loop && s->is_pipe)
449 avio_seek(f[0], 0, SEEK_SET);
450 if (avio_feof(f[0]))
451 return AVERROR_EOF;
452 if (s->frame_size > 0) {
453 size[0] = s->frame_size;
454 } else if (!ffstream(s1->streams[0])->parser) {
455 size[0] = avio_size(s1->pb);
456 } else {
457 size[0] = 4096;
458 }
459 }
460
461 int total_size = 0;
462 for (int i = 0; i < 3; i++) {
463 if ((uint64_t)size[i] > INT_MAX - total_size)
464 return AVERROR_INVALIDDATA;
465
466 total_size += size[i];
467 }
468
469 res = av_new_packet(pkt, total_size);
470 if (res < 0) {
471 goto fail;
472 }
473 pkt->stream_index = 0;
474 pkt->flags |= AV_PKT_FLAG_KEY;
475 if (s->ts_from_file) {
476 struct stat img_stat;
477 av_assert0(!s->is_pipe); // The ts_from_file option is not supported by piped input demuxers
478 if (stat(filename.str, &img_stat)) {
479 res = AVERROR(errno);
480 goto fail;
481 }
482 pkt->pts = (int64_t)img_stat.st_mtime;
483#if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
484 if (s->ts_from_file == 2)
485 pkt->pts = 1000000000*pkt->pts + img_stat.st_mtim.tv_nsec;
486#endif
487 av_add_index_entry(s1->streams[0], s->img_number, pkt->pts, 0, 0, AVINDEX_KEYFRAME);
488 } else if (!s->is_pipe) {
489 pkt->pts = s->pts;
490 }
491
492 if (s->is_pipe)
493 pkt->pos = avio_tell(f[0]);
494
495 /*
496 * export_path_metadata must be explicitly enabled via
497 * command line options for path metadata to be exported
498 * as packet side_data.
499 */
500 if (!s->is_pipe && s->export_path_metadata == 1) {
501 res = add_filename_as_pkt_side_data(filename.str, pkt);
502 if (res < 0)
503 goto fail;
504 }
505 av_bprint_finalize(&filename, NULL);
506
507 pkt->size = 0;
508 for (i = 0; i < 3; i++) {
509 if (f[i]) {
510 ret[i] = avio_read(f[i], pkt->data + pkt->size, size[i]);
511 if (s->loop && s->is_pipe && ret[i] == AVERROR_EOF) {
512 if (avio_seek(f[i], 0, SEEK_SET) >= 0) {
513 pkt->pos = 0;
514 ret[i] = avio_read(f[i], pkt->data + pkt->size, size[i]);
515 }
516 }
517 if (!s->is_pipe && f[i] != s1->pb)
518 ff_format_io_close(s1, &f[i]);
519 if (ret[i] > 0)
520 pkt->size += ret[i];
521 }
522 }
523
524 if (ret[0] <= 0 || ret[1] < 0 || ret[2] < 0) {
525 if (ret[0] < 0) {
526 res = ret[0];
527 } else if (ret[1] < 0) {
528 res = ret[1];
529 } else if (ret[2] < 0) {
530 res = ret[2];
531 } else {
532 res = AVERROR_EOF;
533 }
534 goto fail;
535 } else {
536 memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
537 s->img_count++;
538 s->img_number++;
539 s->pts++;
540 return 0;
541 }
542
543fail:
544 av_bprint_finalize(&filename, NULL);
545 if (!s->is_pipe) {
546 for (i = 0; i < 3; i++) {
547 if (f[i] != s1->pb)
548 ff_format_io_close(s1, &f[i]);
549 }
550 }
551 return res;
552}
553
554static int img_read_close(struct AVFormatContext* s1)
555{
556#if HAVE_GLOB
558 if (s->use_glob) {
559 globfree(&s->globstate);
560 }
561#endif
562 return 0;
563}
564
565static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
566{
567 VideoDemuxData *s1 = s->priv_data;
568 AVStream *st = s->streams[0];
569
570 if (s1->ts_from_file) {
571 int index = av_index_search_timestamp(st, timestamp, flags);
572 if(index < 0)
573 return -1;
575 return 0;
576 }
577
578 if (timestamp < 0 || !s1->loop && timestamp > s1->img_last - s1->img_first)
579 return -1;
580 s1->img_number = timestamp%(s1->img_last - s1->img_first + 1) + s1->img_first;
581 s1->pts = timestamp;
582 return 0;
583}
584
585#define OFFSET(x) offsetof(VideoDemuxData, x)
586#define DEC AV_OPT_FLAG_DECODING_PARAM
587#define COMMON_OPTIONS \
588 { "framerate", "set the video framerate", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, DEC }, \
589 { "pixel_format", "set video pixel format", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, \
590 { "video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC }, \
591 { "loop", "force loop over input file sequence", OFFSET(loop), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC }, \
592 { NULL },
593
594#if CONFIG_IMAGE2_DEMUXER
595const AVOption ff_img_options[] = {
596 { "pattern_type", "set pattern type", OFFSET(pattern_type), AV_OPT_TYPE_INT, {.i64=PT_DEFAULT}, 0, INT_MAX, DEC, .unit = "pattern_type"},
597 { "glob", "select glob pattern type", 0, AV_OPT_TYPE_CONST, {.i64=PT_GLOB }, INT_MIN, INT_MAX, DEC, .unit = "pattern_type" },
598 { "sequence", "select sequence pattern type", 0, AV_OPT_TYPE_CONST, {.i64=PT_SEQUENCE }, INT_MIN, INT_MAX, DEC, .unit = "pattern_type" },
599 { "none", "disable pattern matching", 0, AV_OPT_TYPE_CONST, {.i64=PT_NONE }, INT_MIN, INT_MAX, DEC, .unit = "pattern_type" },
600 { "start_number", "set first number in the sequence", OFFSET(start_number), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, DEC },
601 { "start_number_range", "set range for looking at the first sequence number", OFFSET(start_number_range), AV_OPT_TYPE_INT, {.i64 = 5}, 1, INT_MAX, DEC },
602 { "ts_from_file", "set frame timestamp from file's one", OFFSET(ts_from_file), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, DEC, .unit = "ts_type" },
603 { "none", "none", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, 0, 2, DEC, .unit = "ts_type" },
604 { "sec", "second precision", 0, AV_OPT_TYPE_CONST, {.i64 = 1 }, 0, 2, DEC, .unit = "ts_type" },
605 { "ns", "nanosecond precision", 0, AV_OPT_TYPE_CONST, {.i64 = 2 }, 0, 2, DEC, .unit = "ts_type" },
606 { "export_path_metadata", "enable metadata containing input path information", OFFSET(export_path_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC }, \
608};
609
610static const AVClass img2_class = {
611 .class_name = "image2 demuxer",
612 .item_name = av_default_item_name,
613 .option = ff_img_options,
614 .version = LIBAVUTIL_VERSION_INT,
615};
617 .p.name = "image2",
618 .p.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
619 .p.flags = AVFMT_NOFILE,
620 .p.priv_class = &img2_class,
621 .priv_data_size = sizeof(VideoDemuxData),
627};
628#endif
629
630static const AVOption img2pipe_options[] = {
631 { "frame_size", "force frame size in bytes", OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, DEC },
633};
634static const AVClass imagepipe_class = {
635 .class_name = "imagepipe demuxer",
636 .item_name = av_default_item_name,
637 .option = img2pipe_options,
638 .version = LIBAVUTIL_VERSION_INT,
639};
640
641#if CONFIG_IMAGE2PIPE_DEMUXER
643 .p.name = "image2pipe",
644 .p.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
645 .p.priv_class = &imagepipe_class,
646 .priv_data_size = sizeof(VideoDemuxData),
649};
650#endif
651
652static int bmp_probe(const AVProbeData *p)
653{
654 const uint8_t *b = p->buf;
655 int ihsize;
656
657 if (AV_RB16(b) != 0x424d)
658 return 0;
659
660 ihsize = AV_RL32(b+14);
661 if (ihsize < 12 || ihsize > 255)
662 return 0;
663
664 if (!AV_RN32(b + 6)) {
665 return AVPROBE_SCORE_EXTENSION + 1;
666 }
667 return AVPROBE_SCORE_EXTENSION / 4;
668}
669
670static int cri_probe(const AVProbeData *p)
671{
672 const uint8_t *b = p->buf;
673
674 if ( AV_RL32(b) == 1
675 && AV_RL32(b + 4) == 4
676 && AV_RN32(b + 8) == AV_RN32("DVCC"))
677 return AVPROBE_SCORE_MAX - 1;
678 return 0;
679}
680
681static int dds_probe(const AVProbeData *p)
682{
683 const uint8_t *b = p->buf;
684
685 if ( AV_RB64(b) == 0x444453207c000000
686 && AV_RL32(b + 8)
687 && AV_RL32(b + 12))
688 return AVPROBE_SCORE_MAX - 1;
689 return 0;
690}
691
692static int dpx_probe(const AVProbeData *p)
693{
694 const uint8_t *b = p->buf;
695 int w, h;
696 int is_big = (AV_RN32(b) == AV_RN32("SDPX"));
697
698 if (p->buf_size < 0x304+8)
699 return 0;
700 w = is_big ? AV_RB32(p->buf + 0x304) : AV_RL32(p->buf + 0x304);
701 h = is_big ? AV_RB32(p->buf + 0x308) : AV_RL32(p->buf + 0x308);
702 if (w <= 0 || h <= 0)
703 return 0;
704
705 if (is_big || AV_RN32(b) == AV_RN32("XPDS"))
706 return AVPROBE_SCORE_EXTENSION + 1;
707 return 0;
708}
709
710static int exr_probe(const AVProbeData *p)
711{
712 const uint8_t *b = p->buf;
713
714 if (AV_RL32(b) == 20000630)
715 return AVPROBE_SCORE_EXTENSION + 1;
716 return 0;
717}
718
719static int j2k_probe(const AVProbeData *p)
720{
721 const uint8_t *b = p->buf;
722
723 if (AV_RB64(b) == 0x0000000c6a502020 ||
724 AV_RB32(b) == 0xff4fff51)
725 return AVPROBE_SCORE_EXTENSION + 1;
726 return 0;
727}
728
729static int jpeg_probe(const AVProbeData *p)
730{
731 const uint8_t *b = p->buf;
732 int i, state = SOI, got_header = 0;
733
734 if (AV_RB16(b) != 0xFFD8 ||
735 AV_RB32(b) == 0xFFD8FFF7)
736 return 0;
737
738 b += 2;
739 for (i = 0; i < p->buf_size - 3; i++) {
740 int c;
741 if (b[i] != 0xFF)
742 continue;
743 c = b[i + 1];
744 switch (c) {
745 case SOI:
746 return 0;
747 case SOF0:
748 case SOF1:
749 case SOF2:
750 case SOF3:
751 case SOF5:
752 case SOF6:
753 case SOF7:
754 i += AV_RB16(&b[i + 2]) + 1;
755 if (state != SOI)
756 return 0;
757 state = SOF0;
758 break;
759 case SOS:
760 i += AV_RB16(&b[i + 2]) + 1;
761 if (state != SOF0 && state != SOS)
762 return 0;
763 state = SOS;
764 break;
765 case EOI:
766 if (state != SOS)
767 return 0;
768 state = EOI;
769 break;
770 case APP0:
771 if (c == APP0 && AV_RL32(&b[i + 4]) == MKTAG('J','F','I','F'))
772 got_header = 1;
774 case APP1:
775 if (c == APP1 && AV_RL32(&b[i + 4]) == MKTAG('E','x','i','f'))
776 got_header = 1;
778 case APP2:
779 case APP3:
780 case APP4:
781 case APP5:
782 case APP6:
783 case APP7:
784 case APP8:
785 case APP9:
786 case APP10:
787 case APP11:
788 case APP12:
789 case APP13:
790 case APP14:
791 case APP15:
792 case DQT: /* fallthrough */
793 case COM:
794 i += AV_RB16(&b[i + 2]) + 1;
795 break;
796 default:
797 if ( (c > TEM && c < SOF0)
798 || c == JPG)
799 return 0;
800 }
801 }
802
803 if (state == EOI)
804 return AVPROBE_SCORE_EXTENSION + 1;
805 if (state == SOS)
806 return AVPROBE_SCORE_EXTENSION / 2 + got_header;
807 return AVPROBE_SCORE_EXTENSION / 8 + 1;
808}
809
810static int jpegls_probe(const AVProbeData *p)
811{
812 const uint8_t *b = p->buf;
813
814 if (AV_RB32(b) == 0xffd8fff7)
815 return AVPROBE_SCORE_EXTENSION + 1;
816 return 0;
817}
818
819static int jpegxl_probe(const AVProbeData *p)
820{
821 const uint8_t *b = p->buf;
822
823 /* ISOBMFF-based container */
824 /* 0x4a584c20 == "JXL " */
826 return AVPROBE_SCORE_EXTENSION + 1;
827 /* Raw codestreams all start with 0xff0a */
829 return 0;
830#if CONFIG_IMAGE_JPEGXL_PIPE_DEMUXER
831 if (ff_jpegxl_parse_codestream_header(p->buf, p->buf_size, NULL, 5) >= 0)
832 return AVPROBE_SCORE_MAX - 2;
833#endif
834 return 0;
835}
836
837static int jpegxs_probe(const AVProbeData *p)
838{
839 const uint8_t *b = p->buf;
840
841 if (AV_RB32(b) == 0xff10ff50)
842 return AVPROBE_SCORE_EXTENSION + 1;
843 return 0;
844}
845
846static int pcx_probe(const AVProbeData *p)
847{
848 const uint8_t *b = p->buf;
849
850 if ( p->buf_size < 128
851 || b[0] != 10
852 || b[1] > 5
853 || b[2] > 1
854 || av_popcount(b[3]) != 1 || b[3] > 8
855 || AV_RL16(&b[4]) > AV_RL16(&b[8])
856 || AV_RL16(&b[6]) > AV_RL16(&b[10])
857 || b[64])
858 return 0;
859 b += 73;
860 while (++b < p->buf + 128)
861 if (*b)
862 return AVPROBE_SCORE_EXTENSION / 4;
863
864 return AVPROBE_SCORE_EXTENSION + 1;
865}
866
867static int qdraw_probe(const AVProbeData *p)
868{
869 const uint8_t *b = p->buf;
870
871 if ( p->buf_size >= 528
872 && (AV_RB64(b + 520) & 0xFFFFFFFFFFFF) == 0x001102ff0c00
873 && AV_RB16(b + 520)
874 && AV_RB16(b + 518))
875 return AVPROBE_SCORE_MAX * 3 / 4;
876 if ( (AV_RB64(b + 8) & 0xFFFFFFFFFFFF) == 0x001102ff0c00
877 && AV_RB16(b + 8)
878 && AV_RB16(b + 6))
879 return AVPROBE_SCORE_EXTENSION / 4;
880 return 0;
881}
882
883static int pictor_probe(const AVProbeData *p)
884{
885 const uint8_t *b = p->buf;
886
887 if (AV_RL16(b) == 0x1234)
888 return AVPROBE_SCORE_EXTENSION / 4;
889 return 0;
890}
891
892static int png_probe(const AVProbeData *p)
893{
894 const uint8_t *b = p->buf;
895
896 if (AV_RB64(b) == 0x89504e470d0a1a0a)
897 return AVPROBE_SCORE_MAX - 1;
898 return 0;
899}
900
901static int psd_probe(const AVProbeData *p)
902{
903 const uint8_t *b = p->buf;
904 int ret = 0;
905 uint16_t color_mode;
906
907 if (AV_RL32(b) == MKTAG('8','B','P','S')) {
908 ret += 1;
909 } else {
910 return 0;
911 }
912
913 if ((b[4] == 0) && (b[5] == 1)) {/* version 1 is PSD, version 2 is PSB */
914 ret += 1;
915 } else {
916 return 0;
917 }
918
919 if ((AV_RL32(b+6) == 0) && (AV_RL16(b+10) == 0))/* reserved must be 0 */
920 ret += 1;
921
922 color_mode = AV_RB16(b+24);
923 if ((color_mode <= 9) && (color_mode != 5) && (color_mode != 6))
924 ret += 1;
925
926 return AVPROBE_SCORE_EXTENSION + ret;
927}
928
929static int sgi_probe(const AVProbeData *p)
930{
931 const uint8_t *b = p->buf;
932
933 if (AV_RB16(b) == 474 &&
934 (b[2] & ~1) == 0 &&
935 (b[3] & ~3) == 0 && b[3] &&
936 (AV_RB16(b + 4) & ~7) == 0 && AV_RB16(b + 4))
937 return AVPROBE_SCORE_EXTENSION + 1;
938 return 0;
939}
940
941static int sunrast_probe(const AVProbeData *p)
942{
943 const uint8_t *b = p->buf;
944
945 if (AV_RB32(b) == 0x59a66a95)
946 return AVPROBE_SCORE_EXTENSION + 1;
947 return 0;
948}
949
950static int svg_probe(const AVProbeData *p)
951{
952 const uint8_t *b = p->buf;
953 const uint8_t *end = p->buf + p->buf_size;
954 while (b < end && av_isspace(*b))
955 b++;
956 if (b >= end - 5)
957 return 0;
958 if (!memcmp(b, "<svg", 4))
959 return AVPROBE_SCORE_EXTENSION + 1;
960 if (memcmp(p->buf, "<?xml", 5) && memcmp(b, "<!--", 4))
961 return 0;
962 while (b < end) {
964 if (!inc)
965 break;
966 b += inc;
967 if (b >= end - 4)
968 return 0;
969 if (!memcmp(b, "<svg", 4))
970 return AVPROBE_SCORE_EXTENSION + 1;
971 }
972 return 0;
973}
974
975static int tiff_probe(const AVProbeData *p)
976{
977 const uint8_t *b = p->buf;
978
979 if (AV_RB32(b) == 0x49492a00 ||
980 AV_RB32(b) == 0x4D4D002a)
981 return AVPROBE_SCORE_EXTENSION + 1;
982 return 0;
983}
984
985static int webp_probe(const AVProbeData *p)
986{
987 const uint8_t *b = p->buf;
988
989 if (AV_RB32(b) == 0x52494646 &&
990 AV_RB32(b + 8) == 0x57454250)
991 return AVPROBE_SCORE_MAX - 1;
992 return 0;
993}
994
995static int pnm_magic_check(const AVProbeData *p, int magic)
996{
997 const uint8_t *b = p->buf;
998
999 return b[0] == 'P' && b[1] == magic + '0';
1000}
1001
1002static inline int pnm_probe(const AVProbeData *p)
1003{
1004 const uint8_t *b = p->buf;
1005
1006 while (b[2] == '\r')
1007 b++;
1008 if (b[2] == '\n' && (b[3] == '#' || (b[3] >= '0' && b[3] <= '9')))
1009 return AVPROBE_SCORE_EXTENSION + 2;
1010 return 0;
1011}
1012
1013static int pbm_probe(const AVProbeData *p)
1014{
1015 return pnm_magic_check(p, 1) || pnm_magic_check(p, 4) ? pnm_probe(p) : 0;
1016}
1017
1018static int pfm_probe(const AVProbeData *p)
1019{
1020 return pnm_magic_check(p, 'F' - '0') ||
1021 pnm_magic_check(p, 'f' - '0') ? pnm_probe(p) : 0;
1022}
1023
1024static int phm_probe(const AVProbeData *p)
1025{
1026 return pnm_magic_check(p, 'H' - '0') ||
1027 pnm_magic_check(p, 'h' - '0') ? pnm_probe(p) : 0;
1028}
1029
1030static inline int pgmx_probe(const AVProbeData *p)
1031{
1032 return pnm_magic_check(p, 2) || pnm_magic_check(p, 5) ? pnm_probe(p) : 0;
1033}
1034
1035static int pgm_probe(const AVProbeData *p)
1036{
1037 int ret = pgmx_probe(p);
1038 return ret && !av_match_ext(p->filename, "pgmyuv") ? ret : 0;
1039}
1040
1041static int pgmyuv_probe(const AVProbeData *p) // custom FFmpeg format recognized by file extension
1042{
1043 int ret = pgmx_probe(p);
1044 return ret && av_match_ext(p->filename, "pgmyuv") ? ret : 0;
1045}
1046
1047static int pgx_probe(const AVProbeData *p)
1048{
1049 const uint8_t *b = p->buf;
1050 if (!memcmp(b, "PG ML ", 6))
1051 return AVPROBE_SCORE_EXTENSION + 1;
1052 return 0;
1053}
1054
1055static int ppm_probe(const AVProbeData *p)
1056{
1057 return pnm_magic_check(p, 3) || pnm_magic_check(p, 6) ? pnm_probe(p) : 0;
1058}
1059
1060static int pam_probe(const AVProbeData *p)
1061{
1062 return pnm_magic_check(p, 7) ? pnm_probe(p) : 0;
1063}
1064
1065static int hdr_probe(const AVProbeData *p)
1066{
1067 if (!memcmp(p->buf, "#?RADIANCE\n", 11) || !memcmp(p->buf, "#?RGBE\n", 7))
1068 return AVPROBE_SCORE_MAX;
1069 return 0;
1070}
1071
1072static int xbm_probe(const AVProbeData *p)
1073{
1074 if (!memcmp(p->buf, "/* XBM X10 format */", 20))
1075 return AVPROBE_SCORE_MAX;
1076
1077 if (!memcmp(p->buf, "#define", 7))
1078 return AVPROBE_SCORE_MAX - 1;
1079 return 0;
1080}
1081
1082static int xpm_probe(const AVProbeData *p)
1083{
1084 const uint8_t *b = p->buf;
1085
1086 if (AV_RB64(b) == 0x2f2a2058504d202a && *(b+8) == '/')
1087 return AVPROBE_SCORE_MAX - 1;
1088 return 0;
1089}
1090
1091static int xwd_probe(const AVProbeData *p)
1092{
1093 const uint8_t *b = p->buf;
1094 unsigned width, bpp, bpad, lsize;
1095
1096 if ( p->buf_size < XWD_HEADER_SIZE
1097 || AV_RB32(b ) < XWD_HEADER_SIZE // header size
1098 || AV_RB32(b + 4) != XWD_VERSION // version
1099 || AV_RB32(b + 8) != XWD_Z_PIXMAP // format
1100 || AV_RB32(b + 12) > 32 || !AV_RB32(b + 12) // depth
1101 || AV_RB32(b + 16) == 0 // width
1102 || AV_RB32(b + 20) == 0 // height
1103 || AV_RB32(b + 28) > 1 // byteorder
1104 || AV_RB32(b + 32) & ~56 || av_popcount(AV_RB32(b + 32)) != 1 // bitmap unit
1105 || AV_RB32(b + 36) > 1 // bitorder
1106 || AV_RB32(b + 40) & ~56 || av_popcount(AV_RB32(b + 40)) != 1 // padding
1107 || AV_RB32(b + 44) > 32 || !AV_RB32(b + 44) // bpp
1108 || AV_RB32(b + 68) > 256) // colours
1109 return 0;
1110
1111 width = AV_RB32(b + 16);
1112 bpad = AV_RB32(b + 40);
1113 bpp = AV_RB32(b + 44);
1114 lsize = AV_RB32(b + 48);
1115 if (lsize < FFALIGN(width * bpp, bpad) >> 3)
1116 return 0;
1117
1118 return AVPROBE_SCORE_MAX / 2 + 1;
1119}
1120
1121static int gif_probe(const AVProbeData *p)
1122{
1123 /* check magick */
1124 if (memcmp(p->buf, gif87a_sig, 6) && memcmp(p->buf, gif89a_sig, 6))
1125 return 0;
1126
1127 /* width or height contains zero? */
1128 if (!AV_RL16(&p->buf[6]) || !AV_RL16(&p->buf[8]))
1129 return 0;
1130
1131 return AVPROBE_SCORE_MAX - 1;
1132}
1133
1134static int photocd_probe(const AVProbeData *p)
1135{
1136 if (!memcmp(p->buf, "PCD_OPA", 7))
1137 return AVPROBE_SCORE_MAX - 1;
1138
1139 if (p->buf_size < 0x807 || memcmp(p->buf + 0x800, "PCD_IPI", 7))
1140 return 0;
1141
1142 return AVPROBE_SCORE_MAX - 1;
1143}
1144
1145static int qoi_probe(const AVProbeData *p)
1146{
1147 if (memcmp(p->buf, "qoif", 4))
1148 return 0;
1149
1150 if (AV_RB32(p->buf + 4) == 0 || AV_RB32(p->buf + 8) == 0)
1151 return 0;
1152
1153 if (p->buf[12] != 3 && p->buf[12] != 4)
1154 return 0;
1155
1156 if (p->buf[13] > 1)
1157 return 0;
1158
1159 return AVPROBE_SCORE_MAX - 1;
1160}
1161
1162static int gem_probe(const AVProbeData *p)
1163{
1164 const uint8_t *b = p->buf;
1165 if ( AV_RB16(b ) >= 1 && AV_RB16(b ) <= 3 &&
1166 AV_RB16(b + 2) >= 8 && AV_RB16(b + 2) <= 779 &&
1167 (AV_RB16(b + 4) > 0 && AV_RB16(b + 4) <= 32) && /* planes */
1168 (AV_RB16(b + 6) > 0 && AV_RB16(b + 6) <= 8) && /* pattern_size */
1169 AV_RB16(b + 8) &&
1170 AV_RB16(b + 10) &&
1171 AV_RB16(b + 12) &&
1172 AV_RB16(b + 14)) {
1173 if (AV_RN32(b + 16) == AV_RN32("STTT") ||
1174 AV_RN32(b + 16) == AV_RN32("TIMG") ||
1175 AV_RN32(b + 16) == AV_RN32("XIMG"))
1176 return AVPROBE_SCORE_EXTENSION + 1;
1177 return AVPROBE_SCORE_EXTENSION / 4;
1178 }
1179 return 0;
1180}
1181
1182static int vbn_probe(const AVProbeData *p)
1183{
1184 const uint8_t *b = p->buf;
1185 if (AV_RL32(b ) == VBN_MAGIC &&
1186 AV_RL32(b + 4) == VBN_MAJOR &&
1187 AV_RL32(b + 8) == VBN_MINOR)
1188 return AVPROBE_SCORE_MAX - 1;
1189 return 0;
1190}
1191
1192#define IMAGEAUTO_DEMUXER_0(imgname, codecid)
1193#define IMAGEAUTO_DEMUXER_1(imgname, codecid)\
1194const FFInputFormat ff_image_ ## imgname ## _pipe_demuxer = {\
1195 .p.name = AV_STRINGIFY(imgname) "_pipe",\
1196 .p.long_name = NULL_IF_CONFIG_SMALL("piped " AV_STRINGIFY(imgname) " sequence"),\
1197 .p.priv_class = &imagepipe_class,\
1198 .p.flags = AVFMT_GENERIC_INDEX,\
1199 .priv_data_size = sizeof(VideoDemuxData),\
1200 .read_probe = imgname ## _probe,\
1201 .read_header = ff_img_read_header,\
1202 .read_packet = ff_img_read_packet,\
1203 .raw_codec_id = codecid,\
1204};
1205
1206#define IMAGEAUTO_DEMUXER_2(imgname, codecid, enabled) \
1207 IMAGEAUTO_DEMUXER_ ## enabled(imgname, codecid)
1208#define IMAGEAUTO_DEMUXER_3(imgname, codecid, config) \
1209 IMAGEAUTO_DEMUXER_2(imgname, codecid, config)
1210#define IMAGEAUTO_DEMUXER_EXT(imgname, codecid, uppercase_name) \
1211 IMAGEAUTO_DEMUXER_3(imgname, AV_CODEC_ID_ ## codecid, \
1212 CONFIG_IMAGE_ ## uppercase_name ## _PIPE_DEMUXER)
1213#define IMAGEAUTO_DEMUXER(imgname, codecid) \
1214 IMAGEAUTO_DEMUXER_EXT(imgname, codecid, codecid)
1215
1216IMAGEAUTO_DEMUXER(bmp, BMP)
1217IMAGEAUTO_DEMUXER(cri, CRI)
1218IMAGEAUTO_DEMUXER(dds, DDS)
1219IMAGEAUTO_DEMUXER(dpx, DPX)
1220IMAGEAUTO_DEMUXER(exr, EXR)
1221IMAGEAUTO_DEMUXER(gem, GEM)
1222IMAGEAUTO_DEMUXER(gif, GIF)
1223IMAGEAUTO_DEMUXER_EXT(hdr, RADIANCE_HDR, HDR)
1224IMAGEAUTO_DEMUXER_EXT(j2k, JPEG2000, J2K)
1225IMAGEAUTO_DEMUXER_EXT(jpeg, MJPEG, JPEG)
1226IMAGEAUTO_DEMUXER(jpegxs, JPEGXS)
1227IMAGEAUTO_DEMUXER(jpegls, JPEGLS)
1228IMAGEAUTO_DEMUXER(jpegxl, JPEGXL)
1229IMAGEAUTO_DEMUXER(pam, PAM)
1230IMAGEAUTO_DEMUXER(pbm, PBM)
1231IMAGEAUTO_DEMUXER(pcx, PCX)
1232IMAGEAUTO_DEMUXER(pfm, PFM)
1233IMAGEAUTO_DEMUXER(pgm, PGM)
1234IMAGEAUTO_DEMUXER(pgmyuv, PGMYUV)
1235IMAGEAUTO_DEMUXER(pgx, PGX)
1236IMAGEAUTO_DEMUXER(phm, PHM)
1237IMAGEAUTO_DEMUXER(photocd, PHOTOCD)
1238IMAGEAUTO_DEMUXER(pictor, PICTOR)
1239IMAGEAUTO_DEMUXER(png, PNG)
1240IMAGEAUTO_DEMUXER(ppm, PPM)
1241IMAGEAUTO_DEMUXER(psd, PSD)
1242IMAGEAUTO_DEMUXER(qdraw, QDRAW)
1243IMAGEAUTO_DEMUXER(qoi, QOI)
1244IMAGEAUTO_DEMUXER(sgi, SGI)
1245IMAGEAUTO_DEMUXER(sunrast, SUNRAST)
1246IMAGEAUTO_DEMUXER(svg, SVG)
1247IMAGEAUTO_DEMUXER(tiff, TIFF)
1248IMAGEAUTO_DEMUXER(vbn, VBN)
1249IMAGEAUTO_DEMUXER(webp, WEBP)
1250IMAGEAUTO_DEMUXER(xbm, XBM)
1251IMAGEAUTO_DEMUXER(xpm, XPM)
1252IMAGEAUTO_DEMUXER(xwd, XWD)
const FFInputFormat ff_image2_demuxer
const FFInputFormat ff_image2pipe_demuxer
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition avformat.c:961
void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition avformat.c:834
Main libavformat public API header.
#define AVINDEX_KEYFRAME
Definition avformat.h:628
#define AVPROBE_SCORE_MAX
maximum score
Definition avformat.h:483
#define AVPROBE_PADDING_SIZE
extra allocated bytes at the end of the probe buffer
Definition avformat.h:485
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition avformat.h:1284
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488
#define AVPROBE_SCORE_EXTENSION
score for file extension
Definition avformat.h:481
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition avformat.h:1492
@ AVSTREAM_PARSE_FULL
full parsing and repack
Definition avformat.h:611
int avio_check(const char *url, int flags)
Return AVIO_FLAG_* access flags corresponding to the access permissions of the resource in url,...
Definition avio.c:732
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
Definition aviobuf.c:236
#define AVIO_FLAG_READ
read-only
Definition avio.h:617
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition aviobuf.c:326
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
Definition aviobuf.c:349
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
Definition avio.h:494
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition aviobuf.c:321
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition aviobuf.c:615
int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **buf, int buf_size)
Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file.
Definition aviobuf.c:1151
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition bprint.c:122
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition bprint.c:69
AVBPrint public header.
#define AV_BPRINT_SIZE_UNLIMITED
#define flags(name, subs,...)
Definition cbs_h264.c:74
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define f(width, name)
Definition cbs_vp8.c:236
#define s(width, name)
Definition cbs_vp9.c:198
static int read_probe(const AVProbeData *p)
Definition cdg.c:30
#define av_popcount
Definition common.h:154
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
#define EOI
End Of Image marker.
Definition cpia.c:43
static const FFInputFormat * ffifmt(const AVInputFormat *fmt)
Definition demux.h:186
static AVPacket * pkt
static enum AVPixelFormat pix_fmt
static struct @346255127015250356166251341105367306144006377143 state
static int loop
Definition ffplay.c:338
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
static const uint8_t frame_size[4]
Definition g723_1.h:222
GIF format definitions.
static attribute_nonstring const uint8_t gif89a_sig[6]
Definition gif.h:37
static attribute_nonstring const uint8_t gif87a_sig[6]
Definition gif.h:36
#define fail
Definition test.h:479
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition opt.h:298
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326
@ AV_CODEC_ID_RAWVIDEO
Definition codec_id.h:63
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_ID_ALIAS_PIX
Definition codec_id.h:226
@ AV_CODEC_ID_LJPEG
Definition codec_id.h:59
@ AV_CODEC_ID_MJPEG
Definition codec_id.h:57
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
Definition defs.h:40
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
Definition packet.h:169
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition packet.h:650
uint8_t * av_packet_pack_dictionary(const AVDictionary *dict, size_t *size)
Pack a dictionary for use in side_data.
Definition packet.c:319
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
Definition packet.c:197
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
Definition packet.c:98
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
const AVInputFormat * av_demuxer_iterate(void **opaque)
Iterate over all registered demuxers.
Definition allformats.c:618
const AVInputFormat * av_probe_input_format3(const AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
Definition format.c:156
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list.
Definition seek.c:122
int av_match_ext(const char *filename, const char *extensions)
Return a positive value if the given filename has one of the given extensions, 0 otherwise.
Definition format.c:41
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition utils.c:121
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp.
Definition seek.c:245
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition bprint.h:218
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition bprint.c:235
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
Definition bprint.c:227
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:233
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition dict.c:86
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR_EOF
End of file.
Definition error.h:57
#define AVERROR(e)
Definition error.h:45
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition avstring.c:208
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
Definition avstring.h:218
const char * av_basename(const char *path)
Thread safe basename.
Definition avstring.c:253
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
int index
Definition gxfenc.c:90
enum AVCodecID ff_guess_image2_codec(const char *filename)
Definition img2.c:126
@ PT_NONE
Definition img2.h:36
@ PT_DEFAULT
Definition img2.h:37
@ PT_SEQUENCE
Definition img2.h:35
@ PT_GLOB
Definition img2.h:34
const AVOption ff_img_options[]
int ff_img_read_header(AVFormatContext *s1)
Definition img2dec.c:171
int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
Definition img2dec.c:364
#define IMAGEAUTO_DEMUXER(imgname, codecid)
Definition img2dec.c:1213
static int jpegxs_probe(const AVProbeData *p)
Definition img2dec.c:837
static int pbm_probe(const AVProbeData *p)
Definition img2dec.c:1013
static int jpegls_probe(const AVProbeData *p)
Definition img2dec.c:810
static int pfm_probe(const AVProbeData *p)
Definition img2dec.c:1018
static int hdr_probe(const AVProbeData *p)
Definition img2dec.c:1065
static int photocd_probe(const AVProbeData *p)
Definition img2dec.c:1134
static int phm_probe(const AVProbeData *p)
Definition img2dec.c:1024
static int xwd_probe(const AVProbeData *p)
Definition img2dec.c:1091
static int jpegxl_probe(const AVProbeData *p)
Definition img2dec.c:819
static int xbm_probe(const AVProbeData *p)
Definition img2dec.c:1072
static int sgi_probe(const AVProbeData *p)
Definition img2dec.c:929
static int img_read_close(struct AVFormatContext *s1)
Definition img2dec.c:554
static int cri_probe(const AVProbeData *p)
Definition img2dec.c:670
static int exr_probe(const AVProbeData *p)
Definition img2dec.c:710
static int tiff_probe(const AVProbeData *p)
Definition img2dec.c:975
static int ppm_probe(const AVProbeData *p)
Definition img2dec.c:1055
static int pnm_probe(const AVProbeData *p)
Definition img2dec.c:1002
static int find_image_range(int *pfirst_index, int *plast_index, const char *path, int start_index, int start_index_range)
Get index range of image files matched by path.
Definition img2dec.c:98
static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition img2dec.c:565
static int xpm_probe(const AVProbeData *p)
Definition img2dec.c:1082
static int j2k_probe(const AVProbeData *p)
Definition img2dec.c:719
static int pgx_probe(const AVProbeData *p)
Definition img2dec.c:1047
static int psd_probe(const AVProbeData *p)
Definition img2dec.c:901
static int sunrast_probe(const AVProbeData *p)
Definition img2dec.c:941
static int dpx_probe(const AVProbeData *p)
Definition img2dec.c:692
static int vbn_probe(const AVProbeData *p)
Definition img2dec.c:1182
static int pgm_probe(const AVProbeData *p)
Definition img2dec.c:1035
static const int sizes[][2]
Definition img2dec.c:62
static int pcx_probe(const AVProbeData *p)
Definition img2dec.c:846
static int qdraw_probe(const AVProbeData *p)
Definition img2dec.c:867
#define IMAGEAUTO_DEMUXER_EXT(imgname, codecid, uppercase_name)
Definition img2dec.c:1210
static int infer_size(int *width_ptr, int *height_ptr, int size)
Definition img2dec.c:74
static const AVOption img2pipe_options[]
Definition img2dec.c:630
static int add_filename_as_pkt_side_data(char *filename, AVPacket *pkt)
Add this frame's source path and basename to packet's sidedata as a dictionary, so it can be used by ...
Definition img2dec.c:342
static int bmp_probe(const AVProbeData *p)
Definition img2dec.c:652
static int pgmyuv_probe(const AVProbeData *p)
Definition img2dec.c:1041
static int dds_probe(const AVProbeData *p)
Definition img2dec.c:681
static int svg_probe(const AVProbeData *p)
Definition img2dec.c:950
static int qoi_probe(const AVProbeData *p)
Definition img2dec.c:1145
int ff_img_read_header(AVFormatContext *s1)
Definition img2dec.c:171
static int pnm_magic_check(const AVProbeData *p, int magic)
Definition img2dec.c:995
static int gif_probe(const AVProbeData *p)
Definition img2dec.c:1121
static int webp_probe(const AVProbeData *p)
Definition img2dec.c:985
static int pam_probe(const AVProbeData *p)
Definition img2dec.c:1060
static int gem_probe(const AVProbeData *p)
Definition img2dec.c:1162
#define OFFSET(x)
Definition img2dec.c:585
int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
Definition img2dec.c:364
static const AVClass imagepipe_class
Definition img2dec.c:634
static int pgmx_probe(const AVProbeData *p)
Definition img2dec.c:1030
static int pictor_probe(const AVProbeData *p)
Definition img2dec.c:883
static int img_read_probe(const AVProbeData *p)
Definition img2dec.c:154
static int jpeg_probe(const AVProbeData *p)
Definition img2dec.c:729
static int png_probe(const AVProbeData *p)
Definition img2dec.c:892
#define b
Definition input.c:43
#define AV_RN32(p)
#define AV_RL64(p)
#define AV_RL32(p)
#define AV_RB32(p)
#define AV_RB64(p)
#define AV_RL16(p)
#define AV_RB16(p)
#define FF_JPEGXL_CONTAINER_SIGNATURE_LE
Definition jpegxl.h:26
#define FF_JPEGXL_CODESTREAM_SIGNATURE_LE
Definition jpegxl.h:25
int ff_jpegxl_parse_codestream_header(const uint8_t *buf, int buflen, FFJXLMetadata *meta, int validate)
int ff_bprint_get_frame_filename(struct AVBPrint *buf, const char *path, int64_t number, int flags)
Return in 'buf' the path with 'd' replaced by a number.
Definition utils.c:293
static av_always_inline FFStream * ffstream(AVStream *st)
Definition internal.h:365
#define PROBE_BUF_MIN
size of probe buffer, for guessing file type from file contents
Definition internal.h:33
Macro definitions for various function/variable attributes.
#define av_fallthrough
Definition attributes.h:67
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition libcdio.c:151
#define DEC
Definition librsvgdec.c:149
#define COMMON_OPTIONS
Definition libvpxenc.c:1986
uint8_t w
Definition llvidencdsp.c:39
#define MKTAG(a, b, c, d)
Definition macros.h:55
#define FFALIGN(x, a)
Definition macros.h:78
enum AVColorRange range
Memory handling functions.
MJPEG encoder and decoder.
@ APP5
Definition mjpeg.h:84
@ APP15
Definition mjpeg.h:94
@ APP9
Definition mjpeg.h:88
@ JPG
Definition mjpeg.h:47
@ DQT
Definition mjpeg.h:73
@ SOF5
Definition mjpeg.h:44
@ SOF2
Definition mjpeg.h:41
@ APP6
Definition mjpeg.h:85
@ APP10
Definition mjpeg.h:89
@ APP1
Definition mjpeg.h:80
@ SOF1
Definition mjpeg.h:40
@ SOF6
Definition mjpeg.h:45
@ APP2
Definition mjpeg.h:81
@ APP8
Definition mjpeg.h:87
@ SOS
Definition mjpeg.h:72
@ SOF7
Definition mjpeg.h:46
@ APP11
Definition mjpeg.h:90
@ APP0
Definition mjpeg.h:79
@ APP13
Definition mjpeg.h:92
@ TEM
Definition mjpeg.h:113
@ APP14
Definition mjpeg.h:93
@ SOI
Definition mjpeg.h:70
@ APP3
Definition mjpeg.h:82
@ COM
Definition mjpeg.h:111
@ APP4
Definition mjpeg.h:83
@ APP7
Definition mjpeg.h:86
@ SOF3
Definition mjpeg.h:42
@ SOF0
Definition mjpeg.h:39
@ APP12
Definition mjpeg.h:91
#define av_realloc(p, s)
Definition ops_static.c:54
AVOptions.
miscellaneous OS support macros and functions.
static int inc(int num, int period)
Definition perlin.c:34
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
Definition pixdesc.c:3392
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
static const uint8_t header[24]
Definition sdr2.c:68
#define FF_ARRAY_ELEMS(a)
Describe the class of an AVClass context structure.
Definition log.h:76
This struct describes the properties of an encoded stream.
Definition codec_par.h:49
int height
The height of the video frame in pixels.
Definition codec_par.h:150
int width
The width of the video frame in pixels.
Definition codec_par.h:143
enum AVMediaType codec_type
General type of the encoded data.
Definition codec_par.h:53
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition codec_par.h:57
Format I/O context.
Definition avformat.h:1333
enum AVCodecID audio_codec_id
Forced audio codec_id.
Definition avformat.h:1558
AVIOContext * pb
I/O context.
Definition avformat.h:1375
int flags
Flags modifying the (de)muxer behaviour.
Definition avformat.h:1484
int ctx_flags
Flags signalling stream properties.
Definition avformat.h:1382
char * url
input or output URL.
Definition avformat.h:1449
const struct AVInputFormat * iformat
The input container format.
Definition avformat.h:1345
enum AVCodecID video_codec_id
Forced video codec_id.
Definition avformat.h:1552
void * priv_data
Format private data.
Definition avformat.h:1361
AVStream ** streams
A list of all streams in the file.
Definition avformat.h:1401
int(* io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
A callback for opening new IO streams.
Definition avformat.h:1953
Bytestream IO Context.
Definition avio.h:160
int64_t pos
Definition avformat.h:621
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_EXPERIMENTAL, AVFMT_SHOW_IDS,...
Definition avformat.h:585
AVOption.
Definition opt.h:428
This structure stores compressed data.
Definition packet.h:580
This structure contains the data a format has to probe a file.
Definition avformat.h:471
const char * filename
Definition avformat.h:472
int buf_size
Size of buf except extra allocated bytes.
Definition avformat.h:474
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition avformat.h:473
Stream structure.
Definition avformat.h:766
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition avformat.h:789
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition avformat.h:825
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition avformat.h:815
AVRational avg_frame_rate
Average framerate.
Definition avformat.h:855
AVRational r_frame_rate
Real base framerate of the stream.
Definition avformat.h:900
enum AVCodecID raw_codec_id
Raw demuxers store their codec ID here.
Definition demux.h:75
int(* read_packet)(struct AVFormatContext *, AVPacket *pkt)
Read one packet and put it in 'pkt'.
Definition demux.h:109
int(* read_probe)(const AVProbeData *)
Tell if a given file has a chance of being parsed as this format.
Definition demux.h:92
int(* read_header)(struct AVFormatContext *)
Read the format header and initialize the AVFormatContext structure.
Definition demux.h:99
struct AVCodecParserContext * parser
Definition internal.h:322
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition internal.h:191
enum AVStreamParseType need_parsing
Definition internal.h:321
int img_number
Definition img2.h:44
int ts_from_file
Definition img2.h:61
int img_last
Definition img2.h:43
int64_t pts
Definition img2.h:45
int img_first
Definition img2.h:42
static av_always_inline int ff_subtitles_next_line(const char *ptr)
Get the number of characters to increment to jump to the next line, or to the end of the string.
Definition subtitles.h:205
#define av_free(p)
#define av_freep(p)
#define av_log(a,...)
#define width
Definition dsp.h:89
int size
VBN format definitions.
#define VBN_MAJOR
Definition vbn.h:30
#define VBN_MINOR
Definition vbn.h:31
#define VBN_MAGIC
Definition vbn.h:29
static double c[64]
#define XWD_VERSION
Definition xwd.h:26
#define XWD_Z_PIXMAP
Definition xwd.h:32
#define XWD_HEADER_SIZE
Definition xwd.h:27