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 }