diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 02f71d5bf4..725dc33244 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -7855,9 +7855,6 @@ static int decode_frame(AVCodecContext *avctx, out_of_order = !cross_idr && out->poc < h->outputed_poc; - if(pics <= s->avctx->has_b_frames || out_of_order) - out = NULL; - if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) { } else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15) @@ -7867,9 +7864,11 @@ static int decode_frame(AVCodecContext *avctx, { s->low_delay = 0; s->avctx->has_b_frames++; - out= NULL; } + if(pics <= s->avctx->has_b_frames || out_of_order) + out = NULL; + if(out_of_order || pics > s->avctx->has_b_frames){ for(i=out_idx; h->delayed_pic[i]; i++) h->delayed_pic[i] = h->delayed_pic[i+1];