summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThijs Vermeir <thijs.vermeir@barco.com>2006-11-08 01:21:23 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-11-08 01:21:23 +0000
commit8f57cc5a328d492b132a3ced7d245093431f2721 (patch)
tree8ef07b249226466fe086740b3fe70d5cd9902455
parent79e5a53c0a117c46e312a2d7410fa83ccfcbc111 (diff)
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
-rw-r--r--libavformat/raw.c32
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,