[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