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
|
#endif
|
||||||
|
|
||||||
#if CONFIG_MJPEG_DEMUXER
|
#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
|
#endif
|
||||||
|
|
||||||
#if CONFIG_MLP_DEMUXER
|
#if CONFIG_MLP_DEMUXER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user