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 "libavutil/avstring.h"
24 #include "libavutil/log.h"
25 #include "libavutil/opt.h"
26 #include "libavutil/pixdesc.h"
27 #include "libavutil/parseutils.h"
28 #include "avformat.h"
29 #include "internal.h"
30 #if HAVE_GLOB
31 #include <glob.h>
32 
33 /* Locally define as 0 (bitwise-OR no-op) any missing glob options that
34  are non-posix glibc/bsd extensions. */
35 #ifndef GLOB_NOMAGIC
36 #define GLOB_NOMAGIC 0
37 #endif
38 #ifndef GLOB_BRACE
39 #define GLOB_BRACE 0
40 #endif
41 
42 #endif /* HAVE_GLOB */
43 
44 typedef struct {
45  const AVClass *class; /**< Class for private options. */
46  int img_first;
47  int img_last;
49  int64_t pts;
50  int img_count;
51  int is_pipe;
52  int split_planes; /**< use independent file for each Y, U, V plane */
53  char path[1024];
54  char *pixel_format; /**< Set by a private option. */
55  int width, height; /**< Set by a private option. */
56  AVRational framerate; /**< Set by a private option. */
57  int loop;
58  enum { PT_GLOB_SEQUENCE, PT_GLOB, PT_SEQUENCE } pattern_type;
59  int use_glob;
60 #if HAVE_GLOB
61  glob_t globstate;
62 #endif
67 
68 static const int sizes[][2] = {
69  { 640, 480 },
70  { 720, 480 },
71  { 720, 576 },
72  { 352, 288 },
73  { 352, 240 },
74  { 160, 128 },
75  { 512, 384 },
76  { 640, 352 },
77  { 640, 240 },
78 };
79 
80 static int infer_size(int *width_ptr, int *height_ptr, int size)
81 {
82  int i;
83 
84  for (i = 0; i < FF_ARRAY_ELEMS(sizes); i++) {
85  if ((sizes[i][0] * sizes[i][1]) == size) {
86  *width_ptr = sizes[i][0];
87  *height_ptr = sizes[i][1];
88  return 0;
89  }
90  }
91 
92  return -1;
93 }
94 
95 static int is_glob(const char *path)
96 {
97 #if HAVE_GLOB
98  size_t span = 0;
99  const char *p = path;
100 
101  while (p = strchr(p, '%')) {
102  if (*(++p) == '%') {
103  ++p;
104  continue;
105  }
106  if (span = strspn(p, "*?[]{}"))
107  break;
108  }
109  /* Did we hit a glob char or get to the end? */
110  return span != 0;
111 #else
112  return 0;
113 #endif
114 }
115 
116 /**
117  * Get index range of image files matched by path.
118  *
119  * @param pfirst_index pointer to index updated with the first number in the range
120  * @param plast_index pointer to index updated with the last number in the range
121  * @param path path which has to be matched by the image files in the range
122  * @param start_index minimum accepted value for the first index in the range
123  * @return -1 if no image file could be found
124  */
125 static int find_image_range(int *pfirst_index, int *plast_index,
126  const char *path, int start_index, int start_index_range)
127 {
128  char buf[1024];
129  int range, last_index, range1, first_index;
130 
131  /* find the first image */
132  for (first_index = start_index; first_index < start_index + start_index_range; first_index++) {
133  if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0) {
134  *pfirst_index =
135  *plast_index = 1;
136  if (avio_check(buf, AVIO_FLAG_READ) > 0)
137  return 0;
138  return -1;
139  }
140  if (avio_check(buf, AVIO_FLAG_READ) > 0)
141  break;
142  }
143  if (first_index == start_index + start_index_range)
144  goto fail;
145 
146  /* find the last image */
147  last_index = first_index;
148  for (;;) {
149  range = 0;
150  for (;;) {
151  if (!range)
152  range1 = 1;
153  else
154  range1 = 2 * range;
155  if (av_get_frame_filename(buf, sizeof(buf), path,
156  last_index + range1) < 0)
157  goto fail;
158  if (avio_check(buf, AVIO_FLAG_READ) <= 0)
159  break;
160  range = range1;
161  /* just in case... */
162  if (range >= (1 << 30))
163  goto fail;
164  }
165  /* we are sure than image last_index + range exists */
166  if (!range)
167  break;
168  last_index += range;
169  }
170  *pfirst_index = first_index;
171  *plast_index = last_index;
172  return 0;
173 
174 fail:
175  return -1;
176 }
177 
179 {
180  if (p->filename && ff_guess_image2_codec(p->filename)) {
182  return AVPROBE_SCORE_MAX;
183  else if (is_glob(p->filename))
184  return AVPROBE_SCORE_MAX;
185  else if (av_match_ext(p->filename, "raw") || av_match_ext(p->filename, "gif"))
186  return 5;
187  else
188  return AVPROBE_SCORE_MAX / 2;
189  }
190  return 0;
191 }
192 
194 {
195  VideoDemuxData *s = s1->priv_data;
196  int first_index, last_index;
197  AVStream *st;
199 
201 
202  st = avformat_new_stream(s1, NULL);
203  if (!st) {
204  return AVERROR(ENOMEM);
205  }
206 
207  if (s->pixel_format &&
208  (pix_fmt = av_get_pix_fmt(s->pixel_format)) == AV_PIX_FMT_NONE) {
209  av_log(s1, AV_LOG_ERROR, "No such pixel format: %s.\n",
210  s->pixel_format);
211  return AVERROR(EINVAL);
212  }
213 
214  av_strlcpy(s->path, s1->filename, sizeof(s->path));
215  s->img_number = 0;
216  s->img_count = 0;
217 
218  /* find format */
219  if (s1->iformat->flags & AVFMT_NOFILE)
220  s->is_pipe = 0;
221  else {
222  s->is_pipe = 1;
224  }
225 
227 
228  if (s->width && s->height) {
229  st->codec->width = s->width;
230  st->codec->height = s->height;
231  }
232 
233  if (!s->is_pipe) {
234  if (s->pattern_type == PT_GLOB_SEQUENCE) {
235  s->use_glob = is_glob(s->path);
236  if (s->use_glob) {
237  char *p = s->path, *q, *dup;
238  int gerr;
239 
240  av_log(s1, AV_LOG_WARNING, "Pattern type 'glob_sequence' is deprecated: "
241  "use pattern_type 'glob' instead\n");
242 #if HAVE_GLOB
243  dup = q = av_strdup(p);
244  while (*q) {
245  /* Do we have room for the next char and a \ insertion? */
246  if ((p - s->path) >= (sizeof(s->path) - 2))
247  break;
248  if (*q == '%' && strspn(q + 1, "%*?[]{}"))
249  ++q;
250  else if (strspn(q, "\\*?[]{}"))
251  *p++ = '\\';
252  *p++ = *q++;
253  }
254  *p = 0;
255  av_free(dup);
256 
257  gerr = glob(s->path, GLOB_NOCHECK|GLOB_BRACE|GLOB_NOMAGIC, NULL, &s->globstate);
258  if (gerr != 0) {
259  return AVERROR(ENOENT);
260  }
261  first_index = 0;
262  last_index = s->globstate.gl_pathc - 1;
263 #endif
264  }
265  }
266  if ((s->pattern_type == PT_GLOB_SEQUENCE && !s->use_glob) || s->pattern_type == PT_SEQUENCE) {
267  if (find_image_range(&first_index, &last_index, s->path,
268  s->start_number, s->start_number_range) < 0) {
269  av_log(s1, AV_LOG_ERROR,
270  "Could find no file with with path '%s' and index in the range %d-%d\n",
271  s->path, s->start_number, s->start_number + s->start_number_range - 1);
272  return AVERROR(ENOENT);
273  }
274  } else if (s->pattern_type == PT_GLOB) {
275 #if HAVE_GLOB
276  int gerr;
277  gerr = glob(s->path, GLOB_NOCHECK|GLOB_BRACE|GLOB_NOMAGIC, NULL, &s->globstate);
278  if (gerr != 0) {
279  return AVERROR(ENOENT);
280  }
281  first_index = 0;
282  last_index = s->globstate.gl_pathc - 1;
283  s->use_glob = 1;
284 #else
285  av_log(s1, AV_LOG_ERROR,
286  "Pattern type 'glob' was selected but globbing "
287  "is not supported by this libavformat build\n");
288  return AVERROR(ENOSYS);
289 #endif
290  } else if (s->pattern_type != PT_GLOB_SEQUENCE) {
291  av_log(s1, AV_LOG_ERROR,
292  "Unknown value '%d' for pattern_type option\n", s->pattern_type);
293  return AVERROR(EINVAL);
294  }
295  s->img_first = first_index;
296  s->img_last = last_index;
297  s->img_number = first_index;
298  /* compute duration */
299  st->start_time = 0;
300  st->duration = last_index - first_index + 1;
301  }
302 
303  if (s1->video_codec_id) {
305  st->codec->codec_id = s1->video_codec_id;
306  } else if (s1->audio_codec_id) {
308  st->codec->codec_id = s1->audio_codec_id;
309  } else {
310  const char *str = strrchr(s->path, '.');
311  s->split_planes = str && !av_strcasecmp(str + 1, "y");
314  if (st->codec->codec_id == AV_CODEC_ID_LJPEG)
316  }
317  if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
318  pix_fmt != AV_PIX_FMT_NONE)
319  st->codec->pix_fmt = pix_fmt;
320 
321  return 0;
322 }
323 
325 {
326  VideoDemuxData *s = s1->priv_data;
327  char filename_bytes[1024];
328  char *filename = filename_bytes;
329  int i;
330  int size[3] = { 0 }, ret[3] = { 0 };
331  AVIOContext *f[3] = { NULL };
332  AVCodecContext *codec = s1->streams[0]->codec;
333 
334  if (!s->is_pipe) {
335  /* loop over input */
336  if (s->loop && s->img_number > s->img_last) {
337  s->img_number = s->img_first;
338  }
339  if (s->img_number > s->img_last)
340  return AVERROR_EOF;
341  if (s->use_glob) {
342 #if HAVE_GLOB
343  filename = s->globstate.gl_pathv[s->img_number];
344 #endif
345  } else {
346  if (av_get_frame_filename(filename_bytes, sizeof(filename_bytes),
347  s->path,
348  s->img_number) < 0 && s->img_number > 1)
349  return AVERROR(EIO);
350  }
351  for (i = 0; i < 3; i++) {
352  if (avio_open2(&f[i], filename, AVIO_FLAG_READ,
353  &s1->interrupt_callback, NULL) < 0) {
354  if (i >= 1)
355  break;
356  av_log(s1, AV_LOG_ERROR, "Could not open file : %s\n",
357  filename);
358  return AVERROR(EIO);
359  }
360  size[i] = avio_size(f[i]);
361 
362  if (!s->split_planes)
363  break;
364  filename[strlen(filename) - 1] = 'U' + i;
365  }
366 
367  if (codec->codec_id == AV_CODEC_ID_RAWVIDEO && !codec->width)
368  infer_size(&codec->width, &codec->height, size[0]);
369  } else {
370  f[0] = s1->pb;
371  if (url_feof(f[0]))
372  return AVERROR(EIO);
373  if (s->frame_size > 0) {
374  size[0] = s->frame_size;
375  } else {
376  size[0] = 4096;
377  }
378  }
379 
380  if (av_new_packet(pkt, size[0] + size[1] + size[2]) < 0)
381  return AVERROR(ENOMEM);
382  pkt->stream_index = 0;
383  pkt->flags |= AV_PKT_FLAG_KEY;
384  if (!s->is_pipe)
385  pkt->pts = s->pts;
386 
387  pkt->size = 0;
388  for (i = 0; i < 3; i++) {
389  if (f[i]) {
390  ret[i] = avio_read(f[i], pkt->data + pkt->size, size[i]);
391  if (!s->is_pipe)
392  avio_close(f[i]);
393  if (ret[i] > 0)
394  pkt->size += ret[i];
395  }
396  }
397 
398  if (ret[0] <= 0 || ret[1] < 0 || ret[2] < 0) {
399  av_free_packet(pkt);
400  return AVERROR(EIO); /* signal EOF */
401  } else {
402  s->img_count++;
403  s->img_number++;
404  s->pts++;
405  return 0;
406  }
407 }
408 
409 static int img_read_close(struct AVFormatContext* s1)
410 {
411  VideoDemuxData *s = s1->priv_data;
412 #if HAVE_GLOB
413  if (s->use_glob) {
414  globfree(&s->globstate);
415  }
416 #endif
417  return 0;
418 }
419 
420 static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
421 {
423 
424  if (timestamp < 0 || !s1->loop && timestamp > s1->img_last - s1->img_first)
425  return -1;
426  s1->img_number = timestamp%(s1->img_last - s1->img_first + 1) + s1->img_first;
427  s1->pts = timestamp;
428  return 0;
429 }
430 
431 #define OFFSET(x) offsetof(VideoDemuxData, x)
432 #define DEC AV_OPT_FLAG_DECODING_PARAM
433 static const AVOption options[] = {
434  { "framerate", "set the video framerate", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, 0, DEC },
435  { "loop", "force loop over input file sequence", OFFSET(loop), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, DEC },
436 
437  { "pattern_type", "set pattern type", OFFSET(pattern_type), AV_OPT_TYPE_INT, {.i64=PT_GLOB_SEQUENCE}, 0, INT_MAX, DEC, "pattern_type"},
438  { "glob_sequence","select glob/sequence pattern type", 0, AV_OPT_TYPE_CONST, {.i64=PT_GLOB_SEQUENCE}, INT_MIN, INT_MAX, DEC, "pattern_type" },
439  { "glob", "select glob pattern type", 0, AV_OPT_TYPE_CONST, {.i64=PT_GLOB }, INT_MIN, INT_MAX, DEC, "pattern_type" },
440  { "sequence", "select sequence pattern type", 0, AV_OPT_TYPE_CONST, {.i64=PT_SEQUENCE }, INT_MIN, INT_MAX, DEC, "pattern_type" },
441 
442  { "pixel_format", "set video pixel format", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
443  { "start_number", "set first number in the sequence", OFFSET(start_number), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, DEC },
444  { "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 },
445  { "video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC },
446  { "frame_size", "force frame size in bytes", OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, DEC },
447  { NULL },
448 };
449 
450 #if CONFIG_IMAGE2_DEMUXER
451 static const AVClass img2_class = {
452  .class_name = "image2 demuxer",
453  .item_name = av_default_item_name,
454  .option = options,
455  .version = LIBAVUTIL_VERSION_INT,
456 };
457 AVInputFormat ff_image2_demuxer = {
458  .name = "image2",
459  .long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
460  .priv_data_size = sizeof(VideoDemuxData),
466  .flags = AVFMT_NOFILE,
467  .priv_class = &img2_class,
468 };
469 #endif
470 #if CONFIG_IMAGE2PIPE_DEMUXER
471 static const AVClass img2pipe_class = {
472  .class_name = "image2pipe demuxer",
473  .item_name = av_default_item_name,
474  .option = options,
475  .version = LIBAVUTIL_VERSION_INT,
476 };
477 AVInputFormat ff_image2pipe_demuxer = {
478  .name = "image2pipe",
479  .long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
480  .priv_data_size = sizeof(VideoDemuxData),
483  .priv_class = &img2pipe_class,
484 };
485 #endif
int img_number
Definition: img2dec.c:48
const char * s
Definition: avisynth_c.h:668
Bytestream IO Context.
Definition: avio.h:68
int height
Set by a private option.
Definition: img2dec.c:55
static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition: img2dec.c:420
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition: aviobuf.c:261
void av_free_packet(AVPacket *pkt)
Free a packet.
Definition: avpacket.c:242
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition: avformat.h:1125
AVOption.
Definition: opt.h:251
#define OFFSET(x)
Definition: img2dec.c:431
av_default_item_name
const char * filename
Definition: avformat.h:335
void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
char path[1024]
Definition: img2dec.c:53
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition: libcdio.c:153
static int img_read_close(struct AVFormatContext *s1)
Definition: img2dec.c:409
int num
numerator
Definition: rational.h:44
#define AVIO_FLAG_READ
read-only
Definition: avio.h:332
Sinusoidal phase f
location of range
int start_number_range
Definition: img2dec.c:64
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
#define FF_ARRAY_ELEMS(a)
int ctx_flags
Format-specific flags, see AVFMTCTX_xx.
Definition: avformat.h:980
int img_count
Definition: img2dec.c:50
char * pixel_format
Set by a private option.
Definition: img2dec.c:54
Format I/O context.
Definition: avformat.h:944
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:365
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:55
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition: avformat.h:914
AVOptions.
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.
Definition: avformat.h:475
static AVPacket pkt
Definition: demuxing.c:56
enum AVStreamParseType need_parsing
Definition: avformat.h:811
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
static int img_read_header(AVFormatContext *s1)
Definition: img2dec.c:193
AVStream ** streams
Definition: avformat.h:992
uint8_t * data
static int img_read_probe(AVProbeData *p)
Definition: img2dec.c:178
#define AVERROR_EOF
End of file.
Definition: error.h:55
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:145
enum AVPixelFormat pix_fmt
Definition: v4l.c:63
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 const AVOption options[]
Definition: img2dec.c:433
enum AVCodecID video_codec_id
Forced video codec_id.
Definition: avformat.h:1057
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:478
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int is_glob(const char *path)
Definition: img2dec.c:95
static const uint8_t frame_size[4]
Definition: g723_1_data.h:58
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
Definition: avpacket.c:73
int64_t pts
Definition: img2dec.c:49
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
static const int sizes[][2]
Definition: img2dec.c:68
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: aviobuf.c:821
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
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.
Definition: avstring.c:82
int size
int flags
A combination of AV_PKT_FLAG values.
AVCodecContext * codec
Codec context associated with this stream.
Definition: avformat.h:662
char filename[1024]
input or output filename
Definition: avformat.h:994
enum AVCodecID audio_codec_id
Forced audio codec_id.
Definition: avformat.h:1063
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:212
static int read_probe(AVProbeData *pd)
ret
Definition: avfilter.c:821
int width
picture width / height.
int url_feof(AVIOContext *s)
feof() equivalent for AVIOContext.
Definition: aviobuf.c:280
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
int start_number
Definition: img2dec.c:63
int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
Return in &#39;buf&#39; the path with &#39;d&#39; replaced by a number.
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:517
Stream structure.
Definition: avformat.h:643
#define DEC
Definition: img2dec.c:432
int frame_size
Definition: img2dec.c:65
NULL
Definition: eval.c:55
static int width
Definition: tests/utils.c:158
enum AVMediaType codec_type
enum AVCodecID codec_id
char * av_strdup(const char *s)
Duplicate the string s.
Definition: mem.c:220
AVIOContext * pb
I/O context.
Definition: avformat.h:977
static int loop
Definition: ffplay.c:305
int split_planes
use independent file for each Y, U, V plane
Definition: img2dec.c:52
main external API structure.
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
void * buf
Definition: avisynth_c.h:594
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
Definition: libcdio.c:114
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
Describe the class of an AVClass context structure.
Definition: log.h:50
synthesis window for stochastic i
rational number numerator/denominator
Definition: rational.h:43
static int infer_size(int *width_ptr, int *height_ptr, int size)
Definition: img2dec.c:80
offset must point to AVRational
Definition: opt.h:233
int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
Definition: aviobuf.c:804
#define s1
Definition: regdef.h:38
offset must point to two consecutive integers
Definition: opt.h:230
This structure contains the data a format has to probe a file.
Definition: avformat.h:334
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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.Buffer references ownership and permissions
misc parsing utilities
int img_last
Definition: img2dec.c:47
static int flags
Definition: cpu.c:23
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:696
#define AVPROBE_SCORE_MAX
maximum score, half of that is used for file-extension-based detection
Definition: avformat.h:340
full parsing and repack
Definition: avformat.h:582
Main libavformat public API header.
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:345
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:125
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
Definition: avformat.h:689
static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
Definition: img2dec.c:324
int den
denominator
Definition: rational.h:45
struct AVInputFormat * iformat
Can only be iformat or oformat, not both at the same time.
Definition: avformat.h:957
enum AVCodecID ff_guess_image2_codec(const char *filename)
Definition: img2.c:99
AVRational framerate
Set by a private option.
Definition: img2dec.c:56
void * priv_data
Format private data.
Definition: avformat.h:964
int use_glob
Definition: img2dec.c:59
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:461
enum VideoDemuxData::@142 pattern_type
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
Definition: pixdesc.c:1712
int img_first
Definition: img2dec.c:46
AVPixelFormat
Pixel format.
Definition: pixfmt.h:66
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...