[FFmpeg-cvslog] mpegvideo_probe: check slice order

Michael Niedermayer git at videolan.org
Thu Nov 1 15:12:13 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Nov  1 15:00:20 2012 +0100| [e5cf100d3daaf3fa48d44ae575af916473f85544] | committer: Michael Niedermayer

mpegvideo_probe: check slice order

Fixes: Enrique.mp3

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e5cf100d3daaf3fa48d44ae575af916473f85544
---

 libavformat/mpegvideodec.c |   16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/libavformat/mpegvideodec.c b/libavformat/mpegvideodec.c
index 8568ece..471d2f4 100644
--- a/libavformat/mpegvideodec.c
+++ b/libavformat/mpegvideodec.c
@@ -34,8 +34,9 @@
 static int mpegvideo_probe(AVProbeData *p)
 {
     uint32_t code= -1;
-    int pic=0, seq=0, slice=0, pspack=0, vpes=0, apes=0, res=0;
+    int pic=0, seq=0, slice=0, pspack=0, vpes=0, apes=0, res=0, sicle=0;
     int i;
+    uint32_t last = 0;
 
     for(i=0; i<p->buf_size; i++){
         code = (code<<8) + p->buf[i];
@@ -47,12 +48,21 @@ static int mpegvideo_probe(AVProbeData *p)
             case              0x1b6:
                                         res++; break;
             }
-            if (code >= SLICE_START_CODE && code <= 0x1af) slice++;
+            if (code >= SLICE_START_CODE && code <= 0x1af) {
+                if (last >= SLICE_START_CODE && last <= 0x1af) {
+                    if (code >= last) slice++;
+                    else              sicle++;
+                }else{
+                    if (code == SLICE_START_CODE) slice++;
+                    else                          sicle++;
+                }
+            }
             if     ((code & 0x1f0) == VIDEO_ID)   vpes++;
             else if((code & 0x1e0) == AUDIO_ID)   apes++;
+            last = code;
         }
     }
-    if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !apes && !res) {
+    if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !apes && !res && slice > sicle) {
         if(vpes) return AVPROBE_SCORE_MAX/8;
         else     return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
     }



More information about the ffmpeg-cvslog mailing list