Browse Source

avformat: add mjpeg_probe()

Fixes Ticket3679

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.3
Michael Niedermayer 11 years ago
parent
commit
2d3842f541
1 changed files with 59 additions and 1 deletions
  1. +59
    -1
      libavformat/rawdec.c

+ 59
- 1
libavformat/rawdec.c 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


Loading…
Cancel
Save