Drop out of order pics even if bitstream_restriction_flag is set.
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 19 Jul 2008 02:44:17 +0000 (02:44 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 19 Jul 2008 02:44:17 +0000 (02:44 +0000)
Originally committed as revision 14288 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/h264.c

index 862e7a0..a40d4d7 100644 (file)
@@ -7861,10 +7861,12 @@ static int decode_frame(AVCodecContext *avctx,
                 }
 
             out_of_order = !cross_idr && prev && out->poc < prev->poc;
+
+            if(prev && pics <= s->avctx->has_b_frames || out_of_order)
+                out = prev;
+
             if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames)
                 { }
-            else if(prev && pics <= s->avctx->has_b_frames)
-                out = prev;
             else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15)
                || (s->low_delay &&
                 ((!cross_idr && prev && out->poc > prev->poc + 2)
@@ -7874,8 +7876,6 @@ static int decode_frame(AVCodecContext *avctx,
                 s->avctx->has_b_frames++;
                 out = prev;
             }
-            else if(out_of_order)
-                out = prev;
 
             if(out_of_order || pics > s->avctx->has_b_frames){
                 for(i=out_idx; h->delayed_pic[i]; i++)