mirror of https://git.ffmpeg.org/ffmpeg.git
nsv: Fix misdetection of MP3 files as NSV.
If an MP3 file contains the string NSVs, the NSV probe will confuse it for an NSV file. Check for 0xBEEF after a Video/Audio chunk to achieve more accuracy. Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
parent
b3bbc6fdc5
commit
45faf7fcd3
|
@ -737,6 +737,9 @@ static int nsv_read_close(AVFormatContext *s)
|
|||
static int nsv_probe(AVProbeData *p)
|
||||
{
|
||||
int i;
|
||||
int score;
|
||||
int vsize, asize, auxcount;
|
||||
score = 0;
|
||||
av_dlog(NULL, "nsv_probe(), buf_size %d\n", p->buf_size);
|
||||
/* check file header */
|
||||
/* streamed files might not have any header */
|
||||
|
@ -749,14 +752,25 @@ static int nsv_probe(AVProbeData *p)
|
|||
/* sometimes even the first header is at 9KB or something :^) */
|
||||
for (i = 1; i < p->buf_size - 3; i++) {
|
||||
if (p->buf[i+0] == 'N' && p->buf[i+1] == 'S' &&
|
||||
p->buf[i+2] == 'V' && p->buf[i+3] == 's')
|
||||
return AVPROBE_SCORE_MAX-20;
|
||||
p->buf[i+2] == 'V' && p->buf[i+3] == 's') {
|
||||
score = AVPROBE_SCORE_MAX/5;
|
||||
/* Get the chunk size and check if at the end we are getting 0xBEEF */
|
||||
auxcount = p->buf[i+19];
|
||||
vsize = p->buf[i+20] | p->buf[i+21] << 8;
|
||||
asize = p->buf[i+22] | p->buf[i+23] << 8;
|
||||
vsize = (vsize << 4) | (auxcount >> 4);
|
||||
if ((asize + vsize + i + 23) < p->buf_size - 2) {
|
||||
if (p->buf[i+23+asize+vsize+1] == 0xEF &&
|
||||
p->buf[i+23+asize+vsize+2] == 0xBE)
|
||||
return AVPROBE_SCORE_MAX-20;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* so we'll have more luck on extension... */
|
||||
if (av_match_ext(p->filename, "nsv"))
|
||||
return AVPROBE_SCORE_MAX/2;
|
||||
/* FIXME: add mime-type check */
|
||||
return 0;
|
||||
return score;
|
||||
}
|
||||
|
||||
AVInputFormat ff_nsv_demuxer = {
|
||||
|
|
Loading…
Reference in New Issue