[FFmpeg-devel] [PATCH] avformat/bintext: Implement bin_probe()
Carl Eugen Hoyos
ceffmpeg at gmail.com
Wed Jan 31 18:43:24 EET 2018
2018-01-31 15:22 GMT+01:00 Michael Niedermayer <michael at niedermayer.cc>:
> Fixes misdetection of sbQ9.bin
>
> Signed-off-by: Michael Niedermayer <michael at 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
More information about the ffmpeg-devel
mailing list