Browse code

rv10: always check direct mode interpolation times.

Fixes Division by 0

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2013/01/08 05:16:23
Showing 1 changed files
... ...
@@ -415,13 +415,15 @@ static int rv20_decode_picture_header(RVDecContext *rv)
415 415
         }else{
416 416
             s->time= seq;
417 417
             s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
418
-            if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
419
-                av_log(s->avctx, AV_LOG_DEBUG, "messed up order, possible from seeking? skipping current b frame\n");
420
-                return FRAME_SKIPPED;
421
-            }
422
-            ff_mpeg4_init_direct_mv(s);
423 418
         }
424 419
     }
420
+    if (s->pict_type==AV_PICTURE_TYPE_B) {
421
+        if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
422
+            av_log(s->avctx, AV_LOG_DEBUG, "messed up order, possible from seeking? skipping current b frame\n");
423
+            return FRAME_SKIPPED;
424
+        }
425
+        ff_mpeg4_init_direct_mv(s);
426
+    }
425 427
 
426 428
     s->no_rounding= get_bits1(&s->gb);
427 429