23 #define _DEFAULT_SOURCE 45 #define GLOB_NOMAGIC 0 86 while (p = strchr(p,
'%')) {
91 if (span = strspn(p,
"*?[]{}"))
111 const char *path,
int start_index,
int start_index_range)
114 int range, last_index, range1, first_index;
117 for (first_index = start_index; first_index < start_index + start_index_range; first_index++) {
128 if (first_index == start_index + start_index_range)
132 last_index = first_index;
141 last_index + range1) < 0)
147 if (range >= (1 << 30))
155 *pfirst_index = first_index;
156 *plast_index = last_index;
185 int first_index = 1, last_index = 1;
216 #if !HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 217 av_log(s1,
AV_LOG_ERROR,
"POSIX.1-2008 not supported, nanosecond file timestamps unavailable\n");
245 char *p = s->
path, *q, *dup;
250 "use pattern_type 'glob' instead\n");
255 if ((p - s->
path) >= (
sizeof(s->
path) - 2))
257 if (*q ==
'%' && strspn(q + 1,
"%*?[]{}"))
259 else if (strspn(q,
"\\*?[]{}"))
266 gerr = glob(s->
path, GLOB_NOCHECK|GLOB_BRACE|GLOB_NOMAGIC,
NULL, &s->globstate);
271 last_index = s->globstate.gl_pathc - 1;
279 "Could find no file with path '%s' and index in the range %d-%d\n",
286 gerr = glob(s->
path, GLOB_NOCHECK|GLOB_BRACE|GLOB_NOMAGIC,
NULL, &s->globstate);
291 last_index = s->globstate.gl_pathc - 1;
295 "Pattern type 'glob' was selected but globbing " 296 "is not supported by this libavformat build\n");
301 "Unknown value '%d' for pattern_type option\n", s->
pattern_type);
310 st->
duration = last_index - first_index + 1;
324 const char *
str = strrchr(s->
path,
'.');
328 int probe_buffer_size = 2048;
331 void *fmt_iter =
NULL;
337 probe_buffer_size =
avio_read(s1->
pb, probe_buffer, probe_buffer_size);
338 if (probe_buffer_size < 0) {
340 return probe_buffer_size;
344 pd.
buf = probe_buffer;
384 int metadata_len,
ret;
386 char *packed_metadata =
NULL;
388 av_dict_set(&d,
"lavf.image2dec.source_path", filename, 0);
393 if (!packed_metadata)
396 packed_metadata, metadata_len);
407 char filename_bytes[1024];
408 char *filename = filename_bytes;
410 int size[3] = { 0 },
ret[3] = { 0 };
425 filename = s->globstate.gl_pathv[s->
img_number];
433 for (i = 0; i < 3; i++) {
435 !strcmp(filename_bytes, s->
path) &&
450 filename[strlen(filename) - 1] =
'U' +
i;
463 memset(header + ret, 0,
sizeof(header) - ret);
498 struct stat img_stat;
499 if (stat(filename, &img_stat)) {
503 pkt->
pts = (int64_t)img_stat.st_mtime;
504 #
if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
506 pkt->
pts = 1000000000*pkt->
pts + img_stat.st_mtim.tv_nsec;
528 for (i = 0; i < 3; i++) {
544 if (
ret[0] <= 0 ||
ret[1] < 0 ||
ret[2] < 0) {
547 }
else if (
ret[1] < 0) {
549 }
else if (
ret[2] < 0) {
564 for (i = 0; i < 3; i++) {
577 globfree(&s->globstate);
603 #define OFFSET(x) offsetof(VideoDemuxData, x) 604 #define DEC AV_OPT_FLAG_DECODING_PARAM 605 #define COMMON_OPTIONS \ 606 { "framerate", "set the video framerate", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, DEC }, \ 607 { "pixel_format", "set video pixel format", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, \ 608 { "video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC }, \ 609 { "loop", "force loop over input file sequence", OFFSET(loop), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC }, \ 612 #if CONFIG_IMAGE2_DEMUXER 619 {
"start_number",
"set first number in the sequence",
OFFSET(start_number),
AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX,
DEC },
620 {
"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 },
621 {
"ts_from_file",
"set frame timestamp from file's one",
OFFSET(ts_from_file),
AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2,
DEC,
"ts_type" },
625 {
"export_path_metadata",
"enable metadata containing input path information",
OFFSET(export_path_metadata),
AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC },
\ 629 static const AVClass img2_class = {
645 .priv_class = &img2_class,
654 #if CONFIG_IMAGE2PIPE_DEMUXER 655 static const AVClass img2pipe_class = {
662 .
name =
"image2pipe",
667 .priv_class = &img2pipe_class,
680 if (ihsize < 12 || ihsize > 255)
704 if (
AV_RB64(b) == 0x444453207c000000
721 if (w <= 0 || h <= 0)
742 if (
AV_RB64(b) == 0x0000000c6a502020 ||
758 for (i = 0; i < p->
buf_size - 3; i++) {
780 if (state !=
SOF0 && state !=
SOS)
846 while (++b < p->buf + 128)
858 && (
AV_RB64(b + 520) & 0xFFFFFFFFFFFF) == 0x001102ff0c00
862 if ( (
AV_RB64(b + 8) & 0xFFFFFFFFFFFF) == 0x001102ff0c00
882 if (
AV_RB64(b) == 0x89504e470d0a1a0a)
899 if ((b[4] == 0) && (b[5] == 1)) {
909 if ((color_mode <= 9) && (color_mode != 5) && (color_mode != 6))
921 (b[3] & ~3) == 0 && b[3] &&
941 if (memcmp(p->
buf,
"<?xml", 5))
950 if (!memcmp(b,
"<svg", 4))
960 if (
AV_RB32(b) == 0x49492a00 ||
970 if (
AV_RB32(b) == 0x52494646 &&
980 return b[0] ==
'P' && b[1] == magic +
'0';
989 if (b[2] ==
'\n' && (b[3] ==
'#' || (b[3] >=
'0' && b[3] <=
'9')))
1019 if (!memcmp(b,
"PG ML ", 6))
1036 if (!memcmp(p->
buf,
"/* XBM X10 format */", 20))
1039 if (!memcmp(p->
buf,
"#define", 7))
1048 if (
AV_RB64(b) == 0x2f2a2058504d202a && *(b+8) ==
'/')
1056 unsigned width, bpp, bpad, lsize;
1077 if (lsize <
FFALIGN(width * bpp, bpad) >> 3)
1098 if (!memcmp(p->
buf,
"PCD_OPA", 7))
1101 if (p->
buf_size < 0x807 || memcmp(p->
buf + 0x800,
"PCD_IPI", 7))
1107 #define IMAGEAUTO_DEMUXER(imgname, codecid)\ 1108 static const AVClass imgname ## _class = {\ 1109 .class_name = AV_STRINGIFY(imgname) " demuxer",\ 1110 .item_name = av_default_item_name,\ 1111 .option = ff_img2pipe_options,\ 1112 .version = LIBAVUTIL_VERSION_INT,\ 1114 AVInputFormat ff_image_ ## imgname ## _pipe_demuxer = {\ 1115 .name = AV_STRINGIFY(imgname) "_pipe",\ 1116 .long_name = NULL_IF_CONFIG_SMALL("piped " AV_STRINGIFY(imgname) " sequence"),\ 1117 .priv_data_size = sizeof(VideoDemuxData),\ 1118 .read_probe = imgname ## _probe,\ 1119 .read_header = ff_img_read_header,\ 1120 .read_packet = ff_img_read_packet,\ 1121 .priv_class = & imgname ## _class,\ 1122 .flags = AVFMT_GENERIC_INDEX, \ 1123 .raw_codec_id = codecid,\
int(* io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
A callback for opening new IO streams.
static enum AVPixelFormat pix_fmt
int height
Set by a private option.
static int cri_probe(const AVProbeData *p)
static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
int64_t avio_size(AVIOContext *s)
Get the filesize.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
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.
static int svg_probe(const AVProbeData *p)
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
int64_t pos
byte position in stream, -1 if unknown
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...
static int psd_probe(const AVProbeData *p)
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
static int img_read_close(struct AVFormatContext *s1)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
const char * av_default_item_name(void *ptr)
Return the context name.
#define AVIO_FLAG_READ
read-only
static const uint8_t gif87a_sig[6]
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
#define FF_ARRAY_ELEMS(a)
const AVOption ff_img_options[]
int ctx_flags
Flags signalling stream properties.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
MJPEG encoder and decoder.
This struct describes the properties of an encoded stream.
static int dds_probe(const AVProbeData *p)
char * pixel_format
Set by a private option.
static int pgmyuv_probe(const AVProbeData *p)
#define IMAGEAUTO_DEMUXER(imgname, codecid)
int avio_check(const char *url, int flags)
Return AVIO_FLAG_* access flags corresponding to the access permissions of the resource in url...
static int pam_probe(const AVProbeData *p)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static int bmp_probe(const AVProbeData *p)
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 ...
const char * av_basename(const char *path)
Thread safe basename.
int pattern_type
PatternType.
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
enum AVStreamParseType need_parsing
static int pictor_probe(const AVProbeData *p)
int export_path_metadata
enabled when set to 1.
int ff_img_read_header(AVFormatContext *s1)
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
AVStream ** streams
A list of all streams in the file.
int flags
Flags modifying the (de)muxer behaviour.
static int pcx_probe(const AVProbeData *p)
#define AVERROR_EOF
End of file.
static av_cold int read_close(AVFormatContext *ctx)
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.
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
static const uint8_t header[24]
static int xbm_probe(const AVProbeData *p)
enum AVCodecID video_codec_id
Forced video codec_id.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int is_glob(const char *path)
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp.
static const int sizes[][2]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
ff_const59 struct AVInputFormat * iformat
The input container format.
char * url
input or output URL.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
enum AVMediaType codec_type
General type of the encoded data.
static int dpx_probe(const AVProbeData *p)
static int xpm_probe(const AVProbeData *p)
static int pgmx_probe(const AVProbeData *p)
AVRational avg_frame_rate
Average framerate.
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.
static int j2k_probe(const AVProbeData *p)
int flags
A combination of AV_PKT_FLAG values.
int buf_size
Size of buf except extra allocated bytes.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
static int img_read_probe(const AVProbeData *p)
static int find_image_range(AVIOContext *pb, 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.
static int photocd_probe(const AVProbeData *p)
enum AVCodecID audio_codec_id
Forced audio codec_id.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
ff_const59 AVInputFormat * av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
const AVInputFormat * av_demuxer_iterate(void **opaque)
Iterate over all registered demuxers.
static int sunrast_probe(const AVProbeData *p)
int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
static int read_header(FFV1Context *f)
static int sgi_probe(const AVProbeData *p)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int xwd_probe(const AVProbeData *p)
static int jpeg_probe(const AVProbeData *p)
char * av_strdup(const char *s)
Duplicate a string.
AVStreamInternal * internal
An opaque field for libavformat internal usage.
A list of zero terminated key/value strings.
AVIOContext * pb
I/O context.
int split_planes
use independent file for each Y, U, V plane
uint8_t * av_packet_pack_dictionary(AVDictionary *dict, int *size)
Pack a dictionary for use in side_data.
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
static int pgm_probe(const AVProbeData *p)
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Describe the class of an AVClass context structure.
FF_ENABLE_DEPRECATION_WARNINGS 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.
static int infer_size(int *width_ptr, int *height_ptr, int size)
static int pgx_probe(const AVProbeData *p)
This structure contains the data a format has to probe a file.
static int pnm_probe(const AVProbeData *p)
#define flags(name, subs,...)
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...
static int exr_probe(const AVProbeData *p)
int64_t duration
Decoding: duration of the stream, in stream time base.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_RB64
static int qdraw_probe(const AVProbeData *p)
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
static const uint8_t gif89a_sig[6]
enum AVCodecID ff_guess_image2_codec(const char *filename)
static int gif_probe(const AVProbeData *p)
static int tiff_probe(const AVProbeData *p)
AVRational framerate
Set by a private option.
static int ppm_probe(const AVProbeData *p)
struct AVCodecParserContext * parser
void * priv_data
Format private data.
const AVOption ff_img2pipe_options[]
static int pbm_probe(const AVProbeData *p)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
static int pnm_magic_check(const AVProbeData *p, int magic)
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
#define MKTAG(a, b, c, d)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
AVPixelFormat
Pixel format.
This structure stores compressed data.
static int png_probe(const AVProbeData *p)
static int jpegls_probe(const AVProbeData *p)
static int webp_probe(const AVProbeData *p)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)