avformat: add mjpeg_probe()

Fixes Ticket3679

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-06-09 17:52:44 +02:00
parent 2ffe55a64f
commit 2d3842f541

View File

@ -135,7 +135,65 @@ AVInputFormat ff_latm_demuxer = {
#endif
#if CONFIG_MJPEG_DEMUXER
FF_DEF_RAWVIDEO_DEMUXER(mjpeg, "raw MJPEG video", NULL, "mjpg,mjpeg,mpo", AV_CODEC_ID_MJPEG)
static int mjpeg_probe(AVProbeData *p)
{
int i;
int state = -1;
int nb_invalid = 0;
int nb_frames = 0;
for (i=0; i<p->buf_size-2; i++) {
int c;
if (p->buf[i] != 0xFF)
continue;
c = p->buf[i+1];
switch (c) {
case 0xD8:
state = 0xD8;
break;
case 0xC0:
case 0xC1:
case 0xC2:
case 0xC3:
case 0xC5:
case 0xC6:
case 0xC7:
case 0xF7:
if (state == 0xD8) {
state = 0xC0;
} else
nb_invalid++;
break;
case 0xDA:
if (state == 0xC0) {
state = 0xDA;
} else
nb_invalid++;
break;
case 0xD9:
if (state == 0xDA) {
state = 0xD9;
nb_frames++;
} else
nb_invalid++;
break;
default:
if ( (c >= 0x02 && c <= 0xBF)
|| c == 0xC8) {
nb_invalid++;
}
}
}
if (nb_invalid == 0 && nb_frames > 2)
return AVPROBE_SCORE_EXTENSION / 2;
if (nb_invalid*4 + 1 < nb_frames)
return AVPROBE_SCORE_EXTENSION / 4;
return 0;
}
FF_DEF_RAWVIDEO_DEMUXER(mjpeg, "raw MJPEG video", mjpeg_probe, "mjpg,mjpeg,mpo", AV_CODEC_ID_MJPEG)
#endif
#if CONFIG_MLP_DEMUXER