41 va_pic->picture_id = VA_INVALID_ID;
42 va_pic->flags = VA_PICTURE_H264_INVALID;
43 va_pic->TopFieldOrderCnt = 0;
44 va_pic->BottomFieldOrderCnt = 0;
59 if (pic_structure == 0)
68 va_pic->flags |= (pic_structure &
PICT_TOP_FIELD) ? VA_PICTURE_H264_TOP_FIELD : VA_PICTURE_H264_BOTTOM_FIELD;
70 va_pic->flags |= pic->
long_ref ? VA_PICTURE_H264_LONG_TERM_REFERENCE : VA_PICTURE_H264_SHORT_TERM_REFERENCE;
72 va_pic->TopFieldOrderCnt = 0;
74 va_pic->TopFieldOrderCnt = pic->
field_poc[0];
76 va_pic->BottomFieldOrderCnt = 0;
78 va_pic->BottomFieldOrderCnt = pic->
field_poc[1];
96 int i, pic_frame_idx, merged = 0;
103 for (
i = 0;
i < dpb->
size;
i++) {
104 VAPictureH264 *
const va_pic = &dpb->
va_pics[
i];
105 int va_pic_long_ref = !!(va_pic->flags & VA_PICTURE_H264_LONG_TERM_REFERENCE);
108 va_pic->frame_idx == pic_frame_idx) {
109 VAPictureH264 temp_va_pic;
112 if ((temp_va_pic.flags ^ va_pic->flags) & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)) {
113 va_pic->flags |= temp_va_pic.flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD);
115 if (temp_va_pic.flags & VA_PICTURE_H264_TOP_FIELD) {
116 va_pic->TopFieldOrderCnt = temp_va_pic.TopFieldOrderCnt;
118 va_pic->BottomFieldOrderCnt = temp_va_pic.BottomFieldOrderCnt;
141 dpb.
va_pics = pic_param->ReferenceFrames;
145 for (
i = 0;
i <
h->short_ref_count;
i++) {
151 for (
i = 0;
i < 16;
i++) {
169 unsigned int ref_count)
171 unsigned int i, n = 0;
172 for (
i = 0;
i < ref_count;
i++)
173 if (ref_list[
i].reference)
175 ref_list[
i].reference);
198 unsigned char *luma_weight_flag,
199 short luma_weight[32],
200 short luma_offset[32],
201 unsigned char *chroma_weight_flag,
202 short chroma_weight[32][2],
203 short chroma_offset[32][2])
221 for (j = 0; j < 2; j++) {
227 chroma_offset[
i][j] = 0;
242 VAPictureParameterBufferH264 pic_param;
243 VAIQMatrixBufferH264 iq_matrix;
248 pic_param = (VAPictureParameterBufferH264) {
249 .picture_width_in_mbs_minus1 =
h->mb_width - 1,
250 .picture_height_in_mbs_minus1 =
h->mb_height - 1,
251 .bit_depth_luma_minus8 =
sps->bit_depth_luma - 8,
252 .bit_depth_chroma_minus8 =
sps->bit_depth_chroma - 8,
253 .num_ref_frames =
sps->ref_frame_count,
255 .chroma_format_idc =
sps->chroma_format_idc,
256 .residual_colour_transform_flag =
sps->residual_color_transform_flag,
257 .gaps_in_frame_num_value_allowed_flag =
sps->gaps_in_frame_num_allowed_flag,
258 .frame_mbs_only_flag =
sps->frame_mbs_only_flag,
259 .mb_adaptive_frame_field_flag =
sps->mb_aff,
260 .direct_8x8_inference_flag =
sps->direct_8x8_inference_flag,
261 .MinLumaBiPredSize8x8 =
sps->level_idc >= 31,
262 .log2_max_frame_num_minus4 =
sps->log2_max_frame_num - 4,
263 .pic_order_cnt_type =
sps->poc_type,
264 .log2_max_pic_order_cnt_lsb_minus4 =
sps->log2_max_poc_lsb - 4,
265 .delta_pic_order_always_zero_flag =
sps->delta_pic_order_always_zero_flag,
267 .pic_init_qp_minus26 =
pps->init_qp - 26,
268 .pic_init_qs_minus26 =
pps->init_qs - 26,
269 .chroma_qp_index_offset =
pps->chroma_qp_index_offset[0],
270 .second_chroma_qp_index_offset =
pps->chroma_qp_index_offset[1],
272 .entropy_coding_mode_flag =
pps->cabac,
273 .weighted_pred_flag =
pps->weighted_pred,
274 .weighted_bipred_idc =
pps->weighted_bipred_idc,
275 .transform_8x8_mode_flag =
pps->transform_8x8_mode,
276 .field_pic_flag =
h->picture_structure !=
PICT_FRAME,
277 .constrained_intra_pred_flag =
pps->constrained_intra_pred,
278 .pic_order_present_flag =
pps->pic_order_present,
279 .deblocking_filter_control_present_flag =
pps->deblocking_filter_parameters_present,
280 .redundant_pic_cnt_present_flag =
pps->redundant_pic_cnt_present,
281 .reference_pic_flag =
h->nal_ref_idc != 0,
283 .frame_num =
h->poc.frame_num,
292 VAPictureParameterBufferType,
293 &pic_param,
sizeof(pic_param));
297 memcpy(iq_matrix.ScalingList4x4,
298 pps->scaling_matrix4,
sizeof(iq_matrix.ScalingList4x4));
299 memcpy(iq_matrix.ScalingList8x8[0],
300 pps->scaling_matrix8[0],
sizeof(iq_matrix.ScalingList8x8[0]));
301 memcpy(iq_matrix.ScalingList8x8[1],
302 pps->scaling_matrix8[3],
sizeof(iq_matrix.ScalingList8x8[0]));
305 VAIQMatrixBufferType,
306 &iq_matrix,
sizeof(iq_matrix));
343 VASliceParameterBufferH264 slice_param;
346 slice_param = (VASliceParameterBufferH264) {
347 .slice_data_size =
size,
348 .slice_data_offset = 0,
349 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
357 .slice_qp_delta = sl->
qscale -
h->ps.pps->init_qp,
371 &slice_param.luma_weight_l0_flag,
372 slice_param.luma_weight_l0,
373 slice_param.luma_offset_l0,
374 &slice_param.chroma_weight_l0_flag,
375 slice_param.chroma_weight_l0,
376 slice_param.chroma_offset_l0);
378 &slice_param.luma_weight_l1_flag,
379 slice_param.luma_weight_l1,
380 slice_param.luma_offset_l1,
381 &slice_param.chroma_weight_l1_flag,
382 slice_param.chroma_weight_l1,
383 slice_param.chroma_offset_l1);
386 &slice_param, 1,
sizeof(slice_param),
397 .
p.
name =
"h264_vaapi",