You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-06 08:29:25 +02:00
lavf/img2dec: Auto-detect xwd images.
This commit is contained in:
@@ -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_TIFF_PIPE_DEMUXER) += img2dec.o img2.o
|
||||||
OBJS-$(CONFIG_IMAGE_WEBP_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_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_INGENIENT_DEMUXER) += ingenientdec.o rawdec.o
|
||||||
OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o
|
OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o
|
||||||
OBJS-$(CONFIG_IRCAM_DEMUXER) += ircamdec.o ircam.o pcm.o
|
OBJS-$(CONFIG_IRCAM_DEMUXER) += ircamdec.o ircam.o pcm.o
|
||||||
|
|||||||
@@ -476,6 +476,7 @@ extern AVInputFormat ff_image_sunrast_pipe_demuxer;
|
|||||||
extern AVInputFormat ff_image_tiff_pipe_demuxer;
|
extern AVInputFormat ff_image_tiff_pipe_demuxer;
|
||||||
extern AVInputFormat ff_image_webp_pipe_demuxer;
|
extern AVInputFormat ff_image_webp_pipe_demuxer;
|
||||||
extern AVInputFormat ff_image_xpm_pipe_demuxer;
|
extern AVInputFormat ff_image_xpm_pipe_demuxer;
|
||||||
|
extern AVInputFormat ff_image_xwd_pipe_demuxer;
|
||||||
|
|
||||||
/* external libraries */
|
/* external libraries */
|
||||||
extern AVOutputFormat ff_chromaprint_muxer;
|
extern AVOutputFormat ff_chromaprint_muxer;
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "img2.h"
|
#include "img2.h"
|
||||||
#include "libavcodec/mjpeg.h"
|
#include "libavcodec/mjpeg.h"
|
||||||
|
#include "libavcodec/xwd.h"
|
||||||
#include "subtitles.h"
|
#include "subtitles.h"
|
||||||
|
|
||||||
#if HAVE_GLOB
|
#if HAVE_GLOB
|
||||||
@@ -974,6 +975,36 @@ static int xpm_probe(AVProbeData *p)
|
|||||||
return 0;
|
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)\
|
#define IMAGEAUTO_DEMUXER(imgname, codecid)\
|
||||||
static const AVClass imgname ## _class = {\
|
static const AVClass imgname ## _class = {\
|
||||||
.class_name = AV_STRINGIFY(imgname) " demuxer",\
|
.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(tiff, AV_CODEC_ID_TIFF)
|
||||||
IMAGEAUTO_DEMUXER(webp, AV_CODEC_ID_WEBP)
|
IMAGEAUTO_DEMUXER(webp, AV_CODEC_ID_WEBP)
|
||||||
IMAGEAUTO_DEMUXER(xpm, AV_CODEC_ID_XPM)
|
IMAGEAUTO_DEMUXER(xpm, AV_CODEC_ID_XPM)
|
||||||
|
IMAGEAUTO_DEMUXER(xwd, AV_CODEC_ID_XWD)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
||||||
// Also please add any ticket numbers that you believe might be affected here
|
// Also please add any ticket numbers that you believe might be affected here
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 58
|
#define LIBAVFORMAT_VERSION_MAJOR 58
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 16
|
#define LIBAVFORMAT_VERSION_MINOR 17
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
|
|||||||
Reference in New Issue
Block a user