|  |  | @@ -146,6 +146,7 @@ typedef struct VAAPIEncodeH264Context { | 
		
	
		
			
			|  |  |  | int fixed_qp_b; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int next_frame_num; | 
		
	
		
			
			|  |  |  | int64_t last_idr_frame; | 
		
	
		
			
			|  |  |  | int64_t idr_pic_count; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int cpb_delay; | 
		
	
	
		
			
				|  |  | @@ -960,6 +961,7 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, | 
		
	
		
			
			|  |  |  | vpic->frame_num = 0; | 
		
	
		
			
			|  |  |  | priv->next_frame_num = 1; | 
		
	
		
			
			|  |  |  | priv->cpb_delay = 0; | 
		
	
		
			
			|  |  |  | priv->last_idr_frame = pic->display_order; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | vpic->frame_num = priv->next_frame_num; | 
		
	
		
			
			|  |  |  | if (pic->type != PICTURE_TYPE_B) { | 
		
	
	
		
			
				|  |  | @@ -976,8 +978,8 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, | 
		
	
		
			
			|  |  |  | vpic->CurrPic.picture_id          = pic->recon_surface; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.frame_idx           = vpic->frame_num; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.flags               = 0; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.TopFieldOrderCnt    = pic->display_order; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.BottomFieldOrderCnt = pic->display_order; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.TopFieldOrderCnt    = pic->display_order - priv->last_idr_frame; | 
		
	
		
			
			|  |  |  | vpic->CurrPic.BottomFieldOrderCnt = pic->display_order - priv->last_idr_frame; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (i = 0; i < pic->nb_refs; i++) { | 
		
	
		
			
			|  |  |  | VAAPIEncodePicture *ref = pic->refs[i]; | 
		
	
	
		
			
				|  |  | @@ -985,8 +987,8 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].picture_id = ref->recon_surface; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].frame_idx  = ref->encode_order; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].TopFieldOrderCnt    = ref->display_order; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].BottomFieldOrderCnt = ref->display_order; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].TopFieldOrderCnt    = ref->display_order - priv->last_idr_frame; | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].BottomFieldOrderCnt = ref->display_order - priv->last_idr_frame; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | for (; i < FF_ARRAY_ELEMS(vpic->ReferenceFrames); i++) { | 
		
	
		
			
			|  |  |  | vpic->ReferenceFrames[i].picture_id = VA_INVALID_ID; | 
		
	
	
		
			
				|  |  | @@ -1057,7 +1059,7 @@ static int vaapi_encode_h264_init_slice_params(AVCodecContext *avctx, | 
		
	
		
			
			|  |  |  | vslice->pic_parameter_set_id = vpic->pic_parameter_set_id; | 
		
	
		
			
			|  |  |  | vslice->idr_pic_id = priv->idr_pic_count++; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | vslice->pic_order_cnt_lsb = pic->display_order & | 
		
	
		
			
			|  |  |  | vslice->pic_order_cnt_lsb = (pic->display_order - priv->last_idr_frame) & | 
		
	
		
			
			|  |  |  | ((1 << (4 + vseq->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4)) - 1); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (i = 0; i < FF_ARRAY_ELEMS(vslice->RefPicList0); i++) { | 
		
	
	
		
			
				|  |  | 
 |