vulkan/video: generate profile_tier_level structure correctly

Per section 7.7.3, the structure includes additional optional layer-specific
information, which is padded if left unset, based on the value of
max_sub_layers_minus1. The vulkan input structs have no way to specify this
per-layer information, so we just need the padding.

Reviewed-by: Hyunjun Ko <zzoon@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29001>
This commit is contained in:
Colin Marc 2024-05-01 12:51:26 +02:00 committed by Marge Bot
parent 8d983b3425
commit b613566faf

View file

@ -1731,7 +1731,8 @@ emit_nalu_h265_header(struct vl_bitstream_encoder *enc,
static void
encode_h265_profile_tier_level(struct vl_bitstream_encoder *enc,
const StdVideoH265ProfileTierLevel *ptl)
const StdVideoH265ProfileTierLevel *ptl,
unsigned int max_sub_layers_minus1)
{
vl_bitstream_put_bits(enc, 2, 0);
vl_bitstream_put_bits(enc, 1, ptl->flags.general_tier_flag);
@ -1747,6 +1748,11 @@ encode_h265_profile_tier_level(struct vl_bitstream_encoder *enc,
vl_bitstream_put_bits(enc, 31, 0);
vl_bitstream_put_bits(enc, 13, 0);
vl_bitstream_put_bits(enc, 8, vk_video_get_h265_level(ptl->general_level_idc));
if (max_sub_layers_minus1 > 0) {
/* sub_layer_(profile|level)_present_flag, plus padding */
vl_bitstream_put_bits(enc, 16, 0);
}
}
void
@ -1769,7 +1775,7 @@ vk_video_encode_h265_vps(const StdVideoH265VideoParameterSet *vps,
vl_bitstream_put_bits(&enc, 1, vps->flags.vps_temporal_id_nesting_flag);
vl_bitstream_put_bits(&enc, 16, 0xffff);
encode_h265_profile_tier_level(&enc, vps->pProfileTierLevel);
encode_h265_profile_tier_level(&enc, vps->pProfileTierLevel, vps->vps_max_sub_layers_minus1);
vl_bitstream_put_bits(&enc, 1, vps->flags.vps_sub_layer_ordering_info_present_flag);
@ -1856,7 +1862,7 @@ vk_video_encode_h265_sps(const StdVideoH265SequenceParameterSet *sps,
vl_bitstream_put_bits(&enc, 3, sps->sps_max_sub_layers_minus1);
vl_bitstream_put_bits(&enc, 1, sps->flags.sps_temporal_id_nesting_flag);
encode_h265_profile_tier_level(&enc, sps->pProfileTierLevel);
encode_h265_profile_tier_level(&enc, sps->pProfileTierLevel, sps->sps_max_sub_layers_minus1);
vl_bitstream_exp_golomb_ue(&enc, sps->sps_seq_parameter_set_id);
vl_bitstream_exp_golomb_ue(&enc, sps->chroma_format_idc);