2018-01-31 15:22 GMT+01:00 Michael Niedermayer <mich...@niedermayer.cc>: > Fixes misdetection of sbQ9.bin > > Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> > --- > libavformat/bintext.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 48 insertions(+), 1 deletion(-) > > diff --git a/libavformat/bintext.c b/libavformat/bintext.c > index 12e3bfde4d..722a40c3e5 100644 > --- a/libavformat/bintext.c > +++ b/libavformat/bintext.c > @@ -126,6 +126,53 @@ static void predict_width(AVCodecParameters *par, > uint64_t fsize, int got_width) > par->width = fsize > 4000 ? (160<<3) : (80<<3); > } > > +static int bin_probe(AVProbeData *p) > +{ > + const uint8_t *d = p->buf; > + int magic = 0, sauce = 0; > + int invisible = 0; > + int i; > + > + if (p->buf_size > 256) > + magic = !memcmp(d + p->buf_size - 256, next_magic, > sizeof(next_magic)); > + if (p->buf_size > 128) > + sauce = !memcmp(d + p->buf_size - 128, "SAUCE00", 7); > + > + if (magic) > + return AVPROBE_SCORE_MAX / 2;
This seems too low to me or am I wrong? > + > + if (av_match_ext(p->filename, "bin")) { > + AVCodecParameters par; > + int got_width = 0; > + par.width = par.height = 0; > + if (sauce) > + return AVPROBE_SCORE_MAX / 2; Same here. > + > + predict_width(&par, p->buf_size, got_width); > + if (par.width <= 0) > + return 0; > + calculate_height(&par, p->buf_size); > + if (par.height <= 0) > + return 0; > + > + for (i = 0; i < p->buf_size - 256; i+=2) { > + if ((d[i+1] & 15) == (d[i+1] >> 4) && d[i] && d[i] != 0xFF && > d[i] != ' ') { > + invisible ++; This looks unused. > + } > + } > + > + if (par.width * par.height * 2 / (8*16) == p->buf_size) > + return AVPROBE_SCORE_MAX / 2; Shouldn't this also be a higher score? Thank you for looking into this issue, Carl Eugen _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel