|
|
|
@ -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 |
|
|
|
|