267 VAEncSequenceParameterBufferHEVC *vseq =
ctx->codec_sequence_params;
268 VAEncPictureParameterBufferHEVC *vpic =
ctx->codec_picture_params;
289#if VA_CHECK_VERSION(1, 13, 0)
292 VAConfigAttribValEncHEVCFeatures features = { .value = priv->
va_features };
295 sps->amp_enabled_flag =
297 sps->sample_adaptive_offset_enabled_flag =
299 sps->sps_temporal_mvp_enabled_flag =
300 !!features.bits.temporal_mvp;
301 sps->pcm_enabled_flag =
306 VAConfigAttribValEncHEVCBlockSizes bs = { .value = priv->
va_bs };
307 sps->log2_min_luma_coding_block_size_minus3 =
309 sps->log2_diff_max_min_luma_coding_block_size =
312 sps->log2_min_luma_transform_block_size_minus2 =
313 bs.bits.log2_min_luma_transform_block_size_minus2;
314 sps->log2_diff_max_min_luma_transform_block_size =
315 bs.bits.log2_max_luma_transform_block_size_minus2 -
316 bs.bits.log2_min_luma_transform_block_size_minus2;
318 sps->max_transform_hierarchy_depth_inter =
319 bs.bits.max_max_transform_hierarchy_depth_inter;
320 sps->max_transform_hierarchy_depth_intra =
321 bs.bits.max_max_transform_hierarchy_depth_intra;
326 VAConfigAttribValEncHEVCFeatures features = { .value = priv->
va_features };
327 if (
ctx->va_rc_mode != VA_RC_CQP)
328 pps->cu_qp_delta_enabled_flag =
329 !!features.bits.cu_qp_delta;
331 pps->transform_skip_enabled_flag =
332 !!features.bits.transform_skip;
335 if (
pps->cu_qp_delta_enabled_flag)
336 pps->diff_cu_qp_delta_depth =
sps->log2_diff_max_min_luma_coding_block_size;
342 *vseq = (VAEncSequenceParameterBufferHEVC) {
343 .general_profile_idc =
vps->profile_tier_level.general_profile_idc,
344 .general_level_idc =
vps->profile_tier_level.general_level_idc,
345 .general_tier_flag =
vps->profile_tier_level.general_tier_flag,
348 .intra_idr_period = base_ctx->
gop_size,
349 .ip_period = base_ctx->
b_per_p + 1,
350 .bits_per_second =
ctx->va_bit_rate,
352 .pic_width_in_luma_samples =
sps->pic_width_in_luma_samples,
353 .pic_height_in_luma_samples =
sps->pic_height_in_luma_samples,
356 .chroma_format_idc =
sps->chroma_format_idc,
357 .separate_colour_plane_flag =
sps->separate_colour_plane_flag,
358 .bit_depth_luma_minus8 =
sps->bit_depth_luma_minus8,
359 .bit_depth_chroma_minus8 =
sps->bit_depth_chroma_minus8,
360 .scaling_list_enabled_flag =
sps->scaling_list_enabled_flag,
361 .strong_intra_smoothing_enabled_flag =
362 sps->strong_intra_smoothing_enabled_flag,
363 .amp_enabled_flag =
sps->amp_enabled_flag,
364 .sample_adaptive_offset_enabled_flag =
365 sps->sample_adaptive_offset_enabled_flag,
366 .pcm_enabled_flag =
sps->pcm_enabled_flag,
367 .pcm_loop_filter_disabled_flag =
sps->pcm_loop_filter_disabled_flag,
368 .sps_temporal_mvp_enabled_flag =
sps->sps_temporal_mvp_enabled_flag,
371 .log2_min_luma_coding_block_size_minus3 =
372 sps->log2_min_luma_coding_block_size_minus3,
373 .log2_diff_max_min_luma_coding_block_size =
374 sps->log2_diff_max_min_luma_coding_block_size,
375 .log2_min_transform_block_size_minus2 =
376 sps->log2_min_luma_transform_block_size_minus2,
377 .log2_diff_max_min_transform_block_size =
378 sps->log2_diff_max_min_luma_transform_block_size,
379 .max_transform_hierarchy_depth_inter =
380 sps->max_transform_hierarchy_depth_inter,
381 .max_transform_hierarchy_depth_intra =
382 sps->max_transform_hierarchy_depth_intra,
384 .pcm_sample_bit_depth_luma_minus1 =
385 sps->pcm_sample_bit_depth_luma_minus1,
386 .pcm_sample_bit_depth_chroma_minus1 =
387 sps->pcm_sample_bit_depth_chroma_minus1,
388 .log2_min_pcm_luma_coding_block_size_minus3 =
389 sps->log2_min_pcm_luma_coding_block_size_minus3,
390 .log2_max_pcm_luma_coding_block_size_minus3 =
391 sps->log2_min_pcm_luma_coding_block_size_minus3 +
392 sps->log2_diff_max_min_pcm_luma_coding_block_size,
394 .vui_parameters_present_flag = 0,
397 *vpic = (VAEncPictureParameterBufferHEVC) {
398 .decoded_curr_pic = {
399 .picture_id = VA_INVALID_ID,
400 .flags = VA_PICTURE_HEVC_INVALID,
403 .coded_buf = VA_INVALID_ID,
405 .collocated_ref_pic_index =
sps->sps_temporal_mvp_enabled_flag ?
409 .pic_init_qp =
pps->init_qp_minus26 + 26,
410 .diff_cu_qp_delta_depth =
pps->diff_cu_qp_delta_depth,
411 .pps_cb_qp_offset =
pps->pps_cb_qp_offset,
412 .pps_cr_qp_offset =
pps->pps_cr_qp_offset,
414 .num_tile_columns_minus1 =
pps->num_tile_columns_minus1,
415 .num_tile_rows_minus1 =
pps->num_tile_rows_minus1,
417 .log2_parallel_merge_level_minus2 =
pps->log2_parallel_merge_level_minus2,
418 .ctu_max_bitsize_allowed = 0,
420 .num_ref_idx_l0_default_active_minus1 =
421 pps->num_ref_idx_l0_default_active_minus1,
422 .num_ref_idx_l1_default_active_minus1 =
423 pps->num_ref_idx_l1_default_active_minus1,
425 .slice_pic_parameter_set_id =
pps->pps_pic_parameter_set_id,
428 .sign_data_hiding_enabled_flag =
pps->sign_data_hiding_enabled_flag,
429 .constrained_intra_pred_flag =
pps->constrained_intra_pred_flag,
430 .transform_skip_enabled_flag =
pps->transform_skip_enabled_flag,
431 .cu_qp_delta_enabled_flag =
pps->cu_qp_delta_enabled_flag,
432 .weighted_pred_flag =
pps->weighted_pred_flag,
433 .weighted_bipred_flag =
pps->weighted_bipred_flag,
434 .transquant_bypass_enabled_flag =
pps->transquant_bypass_enabled_flag,
435 .tiles_enabled_flag =
pps->tiles_enabled_flag,
436 .entropy_coding_sync_enabled_flag =
pps->entropy_coding_sync_enabled_flag,
437 .loop_filter_across_tiles_enabled_flag =
438 pps->loop_filter_across_tiles_enabled_flag,
439 .pps_loop_filter_across_slices_enabled_flag =
440 pps->pps_loop_filter_across_slices_enabled_flag,
441 .scaling_list_data_present_flag = (
sps->sps_scaling_list_data_present_flag |
442 pps->pps_scaling_list_data_present_flag),
443 .screen_content_flag = 0,
444 .enable_gpu_weighted_prediction = 0,
445 .no_output_of_prior_pics_flag = 0,
449 if (
pps->tiles_enabled_flag) {
450 for (
i = 0;
i <= vpic->num_tile_rows_minus1;
i++)
451 vpic->row_height_minus1[
i] =
pps->row_height_minus1[
i];
452 for (
i = 0;
i <= vpic->num_tile_columns_minus1;
i++)
453 vpic->column_width_minus1[
i] =
pps->column_width_minus1[
i];
693 .nuh_temporal_id_plus1 = 1,
707 (1 << (
sps->log2_max_pic_order_cnt_lsb_minus4 + 4)) - 1;
714 int i, j, poc, rps_pics;
719 memset(rps, 0,
sizeof(*rps));
723 for (j = 0; j < pic->
nb_refs[
i]; j++) {
726 rps_used[rps_pics] = 1;
732 if (pic->
dpb[
i] == pic)
735 for (j = 0; j < pic->
nb_refs[0]; j++) {
739 if (j < pic->nb_refs[0])
742 for (j = 0; j < pic->
nb_refs[1]; j++) {
746 if (j < pic->nb_refs[1])
751 rps_used[rps_pics] = 0;
755 for (
i = 1;
i < rps_pics;
i++) {
756 for (j =
i; j > 0; j--) {
757 if (rps_poc[j] > rps_poc[j - 1])
760 FFSWAP(
int, rps_poc[j], rps_poc[j - 1]);
761 FFSWAP(
int, rps_used[j], rps_used[j - 1]);
767 for (
i = 0;
i < rps_pics;
i++) {
769 rps_poc[
i], rps_used[
i]);
773 for (
i = 0;
i < rps_pics;
i++) {
781 for (j =
i - 1; j >= 0; j--) {
789 for (j =
i; j < rps_pics; j++) {
801 sps->sps_temporal_mvp_enabled_flag;
814 sps->sample_adaptive_offset_enabled_flag;
824 *vslice = (VAEncSliceParameterBufferHEVC) {
846 .slice_fields.bits = {
847 .last_slice_of_pic_flag = slice->
index == vaapi_pic->
nb_slices - 1,
850 .slice_temporal_mvp_enabled_flag =
854 .num_ref_idx_active_override_flag =
858 .slice_deblocking_filter_disabled_flag =
860 .slice_loop_filter_across_slices_enabled_flag =
867 vslice->ref_pic_list0[
i].picture_id = VA_INVALID_ID;
868 vslice->ref_pic_list0[
i].flags = VA_PICTURE_HEVC_INVALID;
869 vslice->ref_pic_list1[
i].picture_id = VA_INVALID_ID;
870 vslice->ref_pic_list1[
i].flags = VA_PICTURE_HEVC_INVALID;
877 vslice->ref_pic_list0[0] = vpic->reference_frames[0];
880 vslice->ref_pic_list1[0] = vpic->reference_frames[0];
885 vslice->ref_pic_list1[0] = vpic->reference_frames[1];
891 vslice->ref_pic_list1[
i].picture_id = vslice->ref_pic_list0[
i].picture_id;
892 vslice->ref_pic_list1[
i].flags = vslice->ref_pic_list0[
i].flags;
1012#if VA_CHECK_VERSION(0, 37, 0)
1016#if VA_CHECK_VERSION(1, 2, 0)