[FFmpeg-devel] [PATCH] another stab at improved dv probe

Reimar Döffinger Reimar.Doeffinger
Fri Sep 25 15:31:59 CEST 2009


Hello,
another attempt at dv probe. It is still on the simple side, checking
that the distance between the section header difs is exactly 12000 bytes
or also checking the video header difs etc. is possible, but currently I
am still going for "as stupid as I can get away with".
Index: libavformat/dv.c
===================================================================
--- libavformat/dv.c    (revision 20013)
+++ libavformat/dv.c    (working copy)
@@ -489,6 +489,7 @@
     unsigned state, marker_pos = 0;
     int i;
     int matches = 0;
+    int secondary_matches = 0;
 
     if (p->buf_size < 5)
         return 0;
@@ -497,6 +498,10 @@
     for (i = 4; i < p->buf_size; i++) {
         if ((state & 0xffffff7f) == 0x1f07003f)
             matches++;
+        // any section header, also with seq/chan num != 0,
+        // should appear around every 12000 bytes, at least 10 per frame
+        if ((state & 0xff07ff7f) == 0x1f07003f)
+            secondary_matches++;
         if (state == 0x003f0700 || state == 0xff3f0700)
             marker_pos = i;
         if (state == 0xff3f0701 && i - marker_pos == 80)
@@ -505,7 +510,7 @@
     }
 
     if (matches && p->buf_size / matches < 1024*1024) {
-        if (matches > 4)
+        if (matches > 4 || (secondary_matches >= 10 && p->buf_size / secondary_matches < 24000))
             return AVPROBE_SCORE_MAX*3/4; // not max to avoid dv in mov to match
         return AVPROBE_SCORE_MAX/4;
     }




More information about the ffmpeg-devel mailing list