Message ID | CAB0OVGo4_zParNpjUPEH6eAukjkB__FVzgms-pecTrTLX++eLw@mail.gmail.com |
---|---|
State | Withdrawn |
Headers | show |
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@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".
On Mon, 2 Oct 2017 01:20:15 +0200 Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote: > Hi! > > Attached patch implements auto-detection of svg images. > > Please review, Carl Eugen That looks like it'd be extremely fragile and react to anything that is XML and happens to have the string "svg" and "<!DOCTYPE" on the same line in the probe buffer. Also nonsensical "b += 9;".
2017-10-02 11:43 GMT+02:00 wm4 <nfxjfg@googlemail.com>: > On Mon, 2 Oct 2017 01:20:15 +0200 > Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote: > >> Hi! >> >> Attached patch implements auto-detection of svg images. >> >> Please review, Carl Eugen > > That looks like it'd be extremely fragile and react to anything that is > XML and happens to have the string "svg" and "<!DOCTYPE" on the same > line in the probe buffer. Which would most likely be an svg file, no? > Also nonsensical "b += 9;". The same memory location could be "DOCTYPE" and "svg" at the same time? Anyway, this patch was superseded. Carl Eugen
From f06137f38f166740565e58d5c7c88777508f59ec Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos <ceffmpeg@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; + b += 9; + if (strstr(b, "svg")) + return AVPROBE_SCORE_MAX; + } return 0; } -- 1.7.10.4