]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/img2dec.c
avcodec/dnxhd_parser: Fix parser when input does not have nicely sized packets
[ffmpeg] / libavformat / img2dec.c
index 795f54d57ff0acad8fdf0c09222af542542f2275..f8b4a655a53cde6b9b8a18da0d576ff4e4997f98 100644 (file)
@@ -160,7 +160,7 @@ fail:
     return -1;
 }
 
-static int img_read_probe(AVProbeData *p)
+static int img_read_probe(const AVProbeData *p)
 {
     if (p->filename && ff_guess_image2_codec(p->filename)) {
         if (av_filename_number_test(p->filename))
@@ -356,6 +356,7 @@ int ff_img_read_header(AVFormatContext *s1)
             }
             if (s1->flags & AVFMT_FLAG_CUSTOM_IO) {
                 avio_seek(s1->pb, 0, SEEK_SET);
+                av_freep(&probe_buffer);
             } else
                 ffio_rewind_with_probe_data(s1->pb, &probe_buffer, probe_buffer_size);
         }
@@ -424,7 +425,7 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
 
         if (par->codec_id == AV_CODEC_ID_NONE) {
             AVProbeData pd = { 0 };
-            AVInputFormat *ifmt;
+            const AVInputFormat *ifmt;
             uint8_t header[PROBE_BUF_MIN + AVPROBE_PADDING_SIZE];
             int ret;
             int score = 0;
@@ -568,11 +569,11 @@ static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
     { "framerate",    "set the video framerate", OFFSET(framerate),    AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, DEC }, \
     { "pixel_format", "set video pixel format",  OFFSET(pixel_format), AV_OPT_TYPE_STRING,     {.str = NULL}, 0, 0,       DEC }, \
     { "video_size",   "set video size",          OFFSET(width),        AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0,       DEC }, \
+    { "loop",         "force loop over input file sequence", OFFSET(loop), AV_OPT_TYPE_BOOL,   {.i64 = 0   }, 0, 1,       DEC }, \
     { NULL },
 
 #if CONFIG_IMAGE2_DEMUXER
 const AVOption ff_img_options[] = {
-    { "loop",         "force loop over input file sequence", OFFSET(loop),         AV_OPT_TYPE_BOOL,   {.i64 = 0   }, 0, 1,       DEC },
     { "pattern_type", "set pattern type",                    OFFSET(pattern_type), AV_OPT_TYPE_INT,    {.i64=PT_DEFAULT}, 0,       INT_MAX, DEC, "pattern_type"},
     { "glob_sequence","select glob/sequence pattern type",   0, AV_OPT_TYPE_CONST,  {.i64=PT_GLOB_SEQUENCE}, INT_MIN, INT_MAX, DEC, "pattern_type" },
     { "glob",         "select glob pattern type",            0, AV_OPT_TYPE_CONST,  {.i64=PT_GLOB         }, INT_MIN, INT_MAX, DEC, "pattern_type" },
@@ -629,7 +630,7 @@ AVInputFormat ff_image2pipe_demuxer = {
 };
 #endif
 
-static int bmp_probe(AVProbeData *p)
+static int bmp_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     int ihsize;
@@ -647,7 +648,7 @@ static int bmp_probe(AVProbeData *p)
     return AVPROBE_SCORE_EXTENSION / 4;
 }
 
-static int dds_probe(AVProbeData *p)
+static int dds_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -658,7 +659,7 @@ static int dds_probe(AVProbeData *p)
     return 0;
 }
 
-static int dpx_probe(AVProbeData *p)
+static int dpx_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     int w, h;
@@ -676,7 +677,7 @@ static int dpx_probe(AVProbeData *p)
     return 0;
 }
 
-static int exr_probe(AVProbeData *p)
+static int exr_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -685,7 +686,7 @@ static int exr_probe(AVProbeData *p)
     return 0;
 }
 
-static int j2k_probe(AVProbeData *p)
+static int j2k_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -695,7 +696,7 @@ static int j2k_probe(AVProbeData *p)
     return 0;
 }
 
-static int jpeg_probe(AVProbeData *p)
+static int jpeg_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     int i, state = SOI;
@@ -770,7 +771,7 @@ static int jpeg_probe(AVProbeData *p)
     return AVPROBE_SCORE_EXTENSION / 8;
 }
 
-static int jpegls_probe(AVProbeData *p)
+static int jpegls_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -779,7 +780,7 @@ static int jpegls_probe(AVProbeData *p)
     return 0;
 }
 
-static int pcx_probe(AVProbeData *p)
+static int pcx_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -800,7 +801,7 @@ static int pcx_probe(AVProbeData *p)
     return AVPROBE_SCORE_EXTENSION + 1;
 }
 
-static int qdraw_probe(AVProbeData *p)
+static int qdraw_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -816,7 +817,7 @@ static int qdraw_probe(AVProbeData *p)
     return 0;
 }
 
-static int pictor_probe(AVProbeData *p)
+static int pictor_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -825,7 +826,7 @@ static int pictor_probe(AVProbeData *p)
     return 0;
 }
 
-static int png_probe(AVProbeData *p)
+static int png_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -834,7 +835,7 @@ static int png_probe(AVProbeData *p)
     return 0;
 }
 
-static int psd_probe(AVProbeData *p)
+static int psd_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     int ret = 0;
@@ -862,7 +863,7 @@ static int psd_probe(AVProbeData *p)
     return AVPROBE_SCORE_EXTENSION + ret;
 }
 
-static int sgi_probe(AVProbeData *p)
+static int sgi_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -874,7 +875,7 @@ static int sgi_probe(AVProbeData *p)
     return 0;
 }
 
-static int sunrast_probe(AVProbeData *p)
+static int sunrast_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -883,7 +884,7 @@ static int sunrast_probe(AVProbeData *p)
     return 0;
 }
 
-static int svg_probe(AVProbeData *p)
+static int svg_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     const uint8_t *end = p->buf + p->buf_size;
@@ -903,7 +904,7 @@ static int svg_probe(AVProbeData *p)
     return 0;
 }
 
-static int tiff_probe(AVProbeData *p)
+static int tiff_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -913,7 +914,7 @@ static int tiff_probe(AVProbeData *p)
     return 0;
 }
 
-static int webp_probe(AVProbeData *p)
+static int webp_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -941,39 +942,39 @@ static inline int pnm_probe(const AVProbeData *p)
     return 0;
 }
 
-static int pbm_probe(AVProbeData *p)
+static int pbm_probe(const AVProbeData *p)
 {
     return pnm_magic_check(p, 1) || pnm_magic_check(p, 4) ? pnm_probe(p) : 0;
 }
 
-static inline int pgmx_probe(AVProbeData *p)
+static inline int pgmx_probe(const AVProbeData *p)
 {
     return pnm_magic_check(p, 2) || pnm_magic_check(p, 5) ? pnm_probe(p) : 0;
 }
 
-static int pgm_probe(AVProbeData *p)
+static int pgm_probe(const AVProbeData *p)
 {
     int ret = pgmx_probe(p);
     return ret && !av_match_ext(p->filename, "pgmyuv") ? ret : 0;
 }
 
-static int pgmyuv_probe(AVProbeData *p) // custom FFmpeg format recognized by file extension
+static int pgmyuv_probe(const AVProbeData *p) // custom FFmpeg format recognized by file extension
 {
     int ret = pgmx_probe(p);
     return ret && av_match_ext(p->filename, "pgmyuv") ? ret : 0;
 }
 
-static int ppm_probe(AVProbeData *p)
+static int ppm_probe(const AVProbeData *p)
 {
     return pnm_magic_check(p, 3) || pnm_magic_check(p, 6) ? pnm_probe(p) : 0;
 }
 
-static int pam_probe(AVProbeData *p)
+static int pam_probe(const AVProbeData *p)
 {
     return pnm_magic_check(p, 7) ? pnm_probe(p) : 0;
 }
 
-static int xpm_probe(AVProbeData *p)
+static int xpm_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
 
@@ -982,7 +983,7 @@ static int xpm_probe(AVProbeData *p)
     return 0;
 }
 
-static int xwd_probe(AVProbeData *p)
+static int xwd_probe(const AVProbeData *p)
 {
     const uint8_t *b = p->buf;
     unsigned width, bpp, bpad, lsize;
@@ -1012,7 +1013,7 @@ static int xwd_probe(AVProbeData *p)
     return AVPROBE_SCORE_MAX / 2 + 1;
 }
 
-static int gif_probe(AVProbeData *p)
+static int gif_probe(const AVProbeData *p)
 {
     /* check magick */
     if (memcmp(p->buf, gif87a_sig, 6) && memcmp(p->buf, gif89a_sig, 6))