avformat: add mjpeg_probe()
Fixes Ticket3679 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
2ffe55a64f
commit
2d3842f541
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user