[FFmpeg-cvslog] lavf/img2dec: Auto-detect xwd images.
Carl Eugen Hoyos
git at videolan.org
Fri May 25 21:07:09 EEST 2018
ffmpeg | branch: master | Carl Eugen Hoyos <ceffmpeg at gmail.com> | Fri May 25 20:06:34 2018 +0200| [42b43513333275afbecfb8b57fac96f59264ab6d] | committer: Carl Eugen Hoyos
lavf/img2dec: Auto-detect xwd images.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=42b43513333275afbecfb8b57fac96f59264ab6d
---
libavformat/Makefile | 1 +
libavformat/allformats.c | 1 +
libavformat/img2dec.c | 32 ++++++++++++++++++++++++++++++++
libavformat/version.h | 2 +-
4 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/libavformat/Makefile b/libavformat/Makefile
index a5585dcc7b..8fb075f06f 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -258,6 +258,7 @@ OBJS-$(CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER) += img2dec.o img2.o
OBJS-$(CONFIG_IMAGE_TIFF_PIPE_DEMUXER) += img2dec.o img2.o
OBJS-$(CONFIG_IMAGE_WEBP_PIPE_DEMUXER) += img2dec.o img2.o
OBJS-$(CONFIG_IMAGE_XPM_PIPE_DEMUXER) += img2dec.o img2.o
+OBJS-$(CONFIG_IMAGE_XWD_PIPE_DEMUXER) += img2dec.o img2.o
OBJS-$(CONFIG_INGENIENT_DEMUXER) += ingenientdec.o rawdec.o
OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o
OBJS-$(CONFIG_IRCAM_DEMUXER) += ircamdec.o ircam.o pcm.o
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index a94364f41d..adcc8d90a7 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -476,6 +476,7 @@ extern AVInputFormat ff_image_sunrast_pipe_demuxer;
extern AVInputFormat ff_image_tiff_pipe_demuxer;
extern AVInputFormat ff_image_webp_pipe_demuxer;
extern AVInputFormat ff_image_xpm_pipe_demuxer;
+extern AVInputFormat ff_image_xwd_pipe_demuxer;
/* external libraries */
extern AVOutputFormat ff_chromaprint_muxer;
diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c
index ffbc9a66d8..ff4757e532 100644
--- a/libavformat/img2dec.c
+++ b/libavformat/img2dec.c
@@ -34,6 +34,7 @@
#include "internal.h"
#include "img2.h"
#include "libavcodec/mjpeg.h"
+#include "libavcodec/xwd.h"
#include "subtitles.h"
#if HAVE_GLOB
@@ -974,6 +975,36 @@ static int xpm_probe(AVProbeData *p)
return 0;
}
+static int xwd_probe(AVProbeData *p)
+{
+ const uint8_t *b = p->buf;
+ unsigned width, bpp, bpad, lsize;
+
+ if ( p->buf_size < XWD_HEADER_SIZE
+ || AV_RB32(b ) < XWD_HEADER_SIZE // header size
+ || AV_RB32(b + 4) != XWD_VERSION // version
+ || AV_RB32(b + 8) != XWD_Z_PIXMAP // format
+ || AV_RB32(b + 12) > 32 || !AV_RB32(b + 12) // depth
+ || AV_RB32(b + 16) == 0 // width
+ || AV_RB32(b + 20) == 0 // height
+ || AV_RB32(b + 28) > 1 // byteorder
+ || AV_RB32(b + 32) & ~56 || av_popcount(AV_RB32(b + 32)) != 1 // bitmap unit
+ || AV_RB32(b + 36) > 1 // bitorder
+ || AV_RB32(b + 40) & ~56 || av_popcount(AV_RB32(b + 40)) != 1 // padding
+ || AV_RB32(b + 44) > 32 || !AV_RB32(b + 44) // bpp
+ || AV_RB32(b + 68) > 256) // colours
+ return 0;
+
+ width = AV_RB32(b + 16);
+ bpad = AV_RB32(b + 40);
+ bpp = AV_RB32(b + 44);
+ lsize = AV_RB32(b + 48);
+ if (lsize < FFALIGN(width * bpp, bpad) >> 3)
+ return 0;
+
+ return AVPROBE_SCORE_MAX / 2 + 1;
+}
+
#define IMAGEAUTO_DEMUXER(imgname, codecid)\
static const AVClass imgname ## _class = {\
.class_name = AV_STRINGIFY(imgname) " demuxer",\
@@ -1016,3 +1047,4 @@ IMAGEAUTO_DEMUXER(svg, AV_CODEC_ID_SVG)
IMAGEAUTO_DEMUXER(tiff, AV_CODEC_ID_TIFF)
IMAGEAUTO_DEMUXER(webp, AV_CODEC_ID_WEBP)
IMAGEAUTO_DEMUXER(xpm, AV_CODEC_ID_XPM)
+IMAGEAUTO_DEMUXER(xwd, AV_CODEC_ID_XWD)
diff --git a/libavformat/version.h b/libavformat/version.h
index e3975f50ca..b0507474c1 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -32,7 +32,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58
-#define LIBAVFORMAT_VERSION_MINOR 16
+#define LIBAVFORMAT_VERSION_MINOR 17
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
More information about the ffmpeg-cvslog
mailing list