Mercurial > libavcodec.hg
comparison h264.c @ 7309:4d3c6cd51003 libavcodec
Drop out of order pics even if bitstream_restriction_flag is set.
author | michael |
---|---|
date | Sat, 19 Jul 2008 02:44:17 +0000 |
parents | f80042115f20 |
children | 033d10927d45 |
comparison
equal
deleted
inserted
replaced
7308:29319d07aeb4 | 7309:4d3c6cd51003 |
---|---|
7859 out = h->delayed_pic[i]; | 7859 out = h->delayed_pic[i]; |
7860 out_idx = i; | 7860 out_idx = i; |
7861 } | 7861 } |
7862 | 7862 |
7863 out_of_order = !cross_idr && prev && out->poc < prev->poc; | 7863 out_of_order = !cross_idr && prev && out->poc < prev->poc; |
7864 | |
7865 if(prev && pics <= s->avctx->has_b_frames || out_of_order) | |
7866 out = prev; | |
7867 | |
7864 if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) | 7868 if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) |
7865 { } | 7869 { } |
7866 else if(prev && pics <= s->avctx->has_b_frames) | |
7867 out = prev; | |
7868 else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15) | 7870 else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15) |
7869 || (s->low_delay && | 7871 || (s->low_delay && |
7870 ((!cross_idr && prev && out->poc > prev->poc + 2) | 7872 ((!cross_idr && prev && out->poc > prev->poc + 2) |
7871 || cur->pict_type == FF_B_TYPE))) | 7873 || cur->pict_type == FF_B_TYPE))) |
7872 { | 7874 { |
7873 s->low_delay = 0; | 7875 s->low_delay = 0; |
7874 s->avctx->has_b_frames++; | 7876 s->avctx->has_b_frames++; |
7875 out = prev; | 7877 out = prev; |
7876 } | 7878 } |
7877 else if(out_of_order) | |
7878 out = prev; | |
7879 | 7879 |
7880 if(out_of_order || pics > s->avctx->has_b_frames){ | 7880 if(out_of_order || pics > s->avctx->has_b_frames){ |
7881 for(i=out_idx; h->delayed_pic[i]; i++) | 7881 for(i=out_idx; h->delayed_pic[i]; i++) |
7882 h->delayed_pic[i] = h->delayed_pic[i+1]; | 7882 h->delayed_pic[i] = h->delayed_pic[i+1]; |
7883 } | 7883 } |