[FFmpeg-devel] [PATCH]lavf/img2dec: Auto-detect svg images

Clément Bœsch u at pkh.me
Mon Oct 2 08:52:51 EEST 2017


On Mon, Oct 02, 2017 at 01:20:15AM +0200, Carl Eugen Hoyos wrote:
> Hi!
> 
> Attached patch implements auto-detection of svg images.
> 
> Please review, Carl Eugen

> From f06137f38f166740565e58d5c7c88777508f59ec Mon Sep 17 00:00:00 2001
> From: Carl Eugen Hoyos <ceffmpeg at gmail.com>
> Date: Mon, 2 Oct 2017 01:13:29 +0200
> Subject: [PATCH] lavf/img2dec: Auto-detect svg images.
> 
> ---
>  libavformat/img2dec.c |   17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c
> index 19cae87..468c820 100644
> --- a/libavformat/img2dec.c
> +++ b/libavformat/img2dec.c
> @@ -34,6 +34,7 @@
>  #include "internal.h"
>  #include "img2.h"
>  #include "libavcodec/mjpeg.h"
> +#include "subtitles.h"
>  
>  #if HAVE_GLOB
>  /* Locally define as 0 (bitwise-OR no-op) any missing glob options that
> @@ -875,8 +876,20 @@ static int sunrast_probe(AVProbeData *p)
>  
>  static int svg_probe(AVProbeData *p)
>  {
> -    if (av_match_ext(p->filename, "svg") || av_match_ext(p->filename, "svgz"))
> -        return AVPROBE_SCORE_EXTENSION + 1;
> +    const uint8_t *b = p->buf;
> +    const uint8_t *end = p->buf + p->buf_size;
> +    if (memcmp(p->buf, "<?xml", 5))
> +        return 0;
> +    while (b < end) {
> +        b += ff_subtitles_next_line(b);
> +        if (b >= end)
> +            return 0;

> +        if (!strstr(b, "<!DOCTYPE "))
> +            continue;

at least the svg from inkscape do not have a doctype

> +        b += 9;
> +        if (strstr(b, "svg"))
> +            return AVPROBE_SCORE_MAX;
> +    }A

don't you want to keep an extension fallback?

also, I would guess strstr() is going to be slow, so maybe just look for a
line starting with "<svg".

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20171002/648e9008/attachment.sig>


More information about the ffmpeg-devel mailing list