Browse code

rv20: Fix handling of frame skip.

Fixes division by zero

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

Michael Niedermayer authored on 2013/03/06 11:10:18
Showing 1 changed files
... ...
@@ -419,7 +419,8 @@ static int rv20_decode_picture_header(RVDecContext *rv)
419 419
     if (s->pict_type==AV_PICTURE_TYPE_B) {
420 420
         if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
421 421
             av_log(s->avctx, AV_LOG_DEBUG, "messed up order, possible from seeking? skipping current b frame\n");
422
-            return FRAME_SKIPPED;
422
+#define ERROR_SKIP_FRAME -123
423
+            return ERROR_SKIP_FRAME;
423 424
         }
424 425
         ff_mpeg4_init_direct_mv(s);
425 426
     }
... ...
@@ -542,7 +543,8 @@ static int rv10_decode_packet(AVCodecContext *avctx,
542 542
     else
543 543
         mb_count = rv20_decode_picture_header(rv);
544 544
     if (mb_count < 0) {
545
-        av_log(s->avctx, AV_LOG_ERROR, "HEADER ERROR\n");
545
+        if (mb_count != ERROR_SKIP_FRAME)
546
+            av_log(s->avctx, AV_LOG_ERROR, "HEADER ERROR\n");
546 547
         return -1;
547 548
     }
548 549