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