diff options
author | Thijs Vermeir <thijs.vermeir@barco.com> | 2006-11-08 01:21:23 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-11-08 01:21:23 +0000 |
commit | 8f57cc5a328d492b132a3ced7d245093431f2721 (patch) | |
tree | 8ef07b249226466fe086740b3fe70d5cd9902455 /libavformat/raw.c | |
parent | 79e5a53c0a117c46e312a2d7410fa83ccfcbc111 (diff) | |
download | ffmpeg-8f57cc5a328d492b132a3ced7d245093431f2721.tar.gz |
mpeg4probe patch by (Thijs Vermeir ; thijs vermeir barco com)
tabs removed by me
VOL vs. VOP check fixed by me
Originally committed as revision 6940 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/raw.c')
-rw-r--r-- | libavformat/raw.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/libavformat/raw.c b/libavformat/raw.c index bb706376ac..e1ccbcd6d9 100644 --- a/libavformat/raw.c +++ b/libavformat/raw.c @@ -346,6 +346,36 @@ static int mpegvideo_probe(AVProbeData *p) return 0; } +#define VIDEO_OBJECT_START_CODE 0x00000100 +#define VIDEO_OBJECT_LAYER_START_CODE 0x00000120 +#define VISUAL_OBJECT_START_CODE 0x000001b5 +#define VOP_START_CODE 0x000001b6 + +static int mpeg4video_probe(AVProbeData *probe_packet) +{ + uint32_t temp_buffer= -1; + int VO=0, VOL=0, VOP = 0, VISO = 0; + int i; + + for(i=0; i<probe_packet->buf_size; i++){ + temp_buffer = (temp_buffer<<8) + probe_packet->buf[i]; + if ((temp_buffer & 0xffffff00) == 0x100) { + switch(temp_buffer){ + case VOP_START_CODE: VOP++; break; + case VISUAL_OBJECT_START_CODE: VISO++; break; + } + switch(temp_buffer & 0xfffffff0){ + case VIDEO_OBJECT_START_CODE: VO++; break; + case VIDEO_OBJECT_LAYER_START_CODE: VOL++; break; + } + } + } + + if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0) + return AVPROBE_SCORE_MAX/2; + return 0; +} + static int h263_probe(AVProbeData *p) { int code; @@ -523,7 +553,7 @@ AVInputFormat m4v_demuxer = { "m4v", "raw MPEG4 video format", 0, - NULL /*mpegvideo_probe*/, + mpeg4video_probe, /** probing for mpeg4 data */ video_read_header, raw_read_partial_packet, raw_read_close, |