[FFmpeg-devel] [PATCH] avformat/bintext: Implement bin_probe()

Michael Niedermayer michael at niedermayer.cc
Thu Feb 1 03:19:27 EET 2018


On Wed, Jan 31, 2018 at 05:43:24PM +0100, Carl Eugen Hoyos wrote:
> 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.

was thinking the same but that was what the filename based detection
used before.
I kind of just left it where it was, the main goal of the patch was
just to fix the misdetection not to raise the score.
But we can surely raise these.
WHat would you think is a good value ?


> 
> > +
> > +        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.

yes, iam aware, ive added it thinking it would be needed but all my test files
where detected correctly so it wasnt needed
i can remove it if people prefer ?
or it can be left so next time something gets probed wrong the code is
already there to check the next level of information.


> 
> > +            }
> > +        }
> > +
> > +        if (par.width * par.height * 2 / (8*16) == p->buf_size)
> > +            return AVPROBE_SCORE_MAX / 2;
> 
> Shouldn't this also be a higher score?

This one here, no. This is a rather weak test. It looks stronger than it
is
Its weak as width and height are computed currently from the size


> 
> Thank you for looking into this issue, Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180201/484c48b9/attachment.sig>


More information about the ffmpeg-devel mailing list