@ -101,8 +101,8 @@ typedef struct VAAPIEncodeH264Context {
int fixed_qp_p ;
int fixed_qp_b ;
int next_frame_num ;
int64_t idr_pic_count ;
int64_t last_idr_frame ;
// Rate control configuration.
struct {
@ -592,12 +592,17 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
if ( pic - > type = = PICTURE_TYPE_IDR ) {
av_assert0 ( pic - > display_order = = pic - > encode_order ) ;
priv - > last_idr_frame = pic - > display_order ;
vpic - > frame_num = 0 ;
priv - > next_frame_num = 1 ;
} else {
av_assert0 ( pic - > display_order > priv - > last_idr_frame ) ;
vpic - > frame_num = priv - > next_frame_num ;
if ( pic - > type ! = PICTURE_TYPE_B ) {
// nal_ref_idc != 0
+ + priv - > next_frame_num ;
}
}
vpic - > frame_num = ( pic - > encode_order - priv - > last_idr_frame ) &
vpic - > frame_num = v pic- > frame_num &
( ( 1 < < ( 4 + vseq - > seq_fields . bits . log2_max_frame_num_minus4 ) ) - 1 ) ;
vpic - > CurrPic . picture_id = pic - > recon_surface ;
@ -608,10 +613,9 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
for ( i = 0 ; i < pic - > nb_refs ; i + + ) {
VAAPIEncodePicture * ref = pic - > refs [ i ] ;
av_assert0 ( ref & & ref - > encode_order > = priv - > last_idr_frame ) ;
av_assert0 ( ref & & ref - > encode_order < pic - > encode_order ) ;
vpic - > ReferenceFrames [ i ] . picture_id = ref - > recon_surface ;
vpic - > ReferenceFrames [ i ] . frame_idx =
ref - > encode_order - priv - > last_idr_frame ;
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 ;