Module: Mesa Branch: main Commit: a26119e124065f79aa727f88938b336d64da9170 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a26119e124065f79aa727f88938b336d64da9170
Author: Colin Marc <h...@colinmarc.com> Date: Mon Dec 11 22:27:04 2023 +0100 vulkan video: correctly set SPS VUI bits According to the spec section E.1 flags such as overscan_info_present_flag are independent of aspect_ratio_info_present_flag. Reviewed-by: Hyunjun Ko <zz...@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26669> --- src/vulkan/runtime/vk_video.c | 89 ++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/src/vulkan/runtime/vk_video.c b/src/vulkan/runtime/vk_video.c index 61e4e809daf..854a8a7b9a4 100644 --- a/src/vulkan/runtime/vk_video.c +++ b/src/vulkan/runtime/vk_video.c @@ -1456,63 +1456,66 @@ vk_video_encode_h264_sps(StdVideoH264SequenceParameterSet *sps, vl_bitstream_exp_golomb_ue(&enc, sps->frame_crop_bottom_offset); } - vl_bitstream_put_bits(&enc, 1, sps->flags.vui_parameters_present_flag); /* vui parameters preseent flag */ + vl_bitstream_put_bits(&enc, 1, sps->flags.vui_parameters_present_flag); /* vui parameters present flag */ if (sps->flags.vui_parameters_present_flag) { const StdVideoH264SequenceParameterSetVui *vui = sps->pSequenceParameterSetVui; vl_bitstream_put_bits(&enc, 1, vui->flags.aspect_ratio_info_present_flag); + if (vui->flags.aspect_ratio_info_present_flag) { vl_bitstream_put_bits(&enc, 8, vui->aspect_ratio_idc); if (vui->aspect_ratio_idc == STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR) { vl_bitstream_put_bits(&enc, 16, vui->sar_width); vl_bitstream_put_bits(&enc, 16, vui->sar_height); } - vl_bitstream_put_bits(&enc, 1, vui->flags.overscan_info_present_flag); - if (vui->flags.overscan_info_present_flag) - vl_bitstream_put_bits(&enc, 1, vui->flags.overscan_appropriate_flag); - vl_bitstream_put_bits(&enc, 1, vui->flags.video_signal_type_present_flag); - if (vui->flags.video_signal_type_present_flag) { - vl_bitstream_put_bits(&enc, 3, vui->video_format); - vl_bitstream_put_bits(&enc, 1, vui->flags.video_full_range_flag); - vl_bitstream_put_bits(&enc, 1, vui->flags.color_description_present_flag); - if (vui->flags.color_description_present_flag) { - vl_bitstream_put_bits(&enc, 8, vui->colour_primaries); - vl_bitstream_put_bits(&enc, 8, vui->transfer_characteristics); - vl_bitstream_put_bits(&enc, 8, vui->matrix_coefficients); - } - } + } - vl_bitstream_put_bits(&enc, 1, vui->flags.chroma_loc_info_present_flag); - if (vui->flags.chroma_loc_info_present_flag) { - vl_bitstream_exp_golomb_ue(&enc, vui->chroma_sample_loc_type_top_field); - vl_bitstream_exp_golomb_ue(&enc, vui->chroma_sample_loc_type_bottom_field); - } - vl_bitstream_put_bits(&enc, 1, vui->flags.timing_info_present_flag); - if (vui->flags.timing_info_present_flag) { - vl_bitstream_put_bits(&enc, 32, vui->num_units_in_tick); - vl_bitstream_put_bits(&enc, 32, vui->time_scale); - vl_bitstream_put_bits(&enc, 32, vui->flags.fixed_frame_rate_flag); + vl_bitstream_put_bits(&enc, 1, vui->flags.overscan_info_present_flag); + if (vui->flags.overscan_info_present_flag) + vl_bitstream_put_bits(&enc, 1, vui->flags.overscan_appropriate_flag); + vl_bitstream_put_bits(&enc, 1, vui->flags.video_signal_type_present_flag); + if (vui->flags.video_signal_type_present_flag) { + vl_bitstream_put_bits(&enc, 3, vui->video_format); + vl_bitstream_put_bits(&enc, 1, vui->flags.video_full_range_flag); + vl_bitstream_put_bits(&enc, 1, vui->flags.color_description_present_flag); + if (vui->flags.color_description_present_flag) { + vl_bitstream_put_bits(&enc, 8, vui->colour_primaries); + vl_bitstream_put_bits(&enc, 8, vui->transfer_characteristics); + vl_bitstream_put_bits(&enc, 8, vui->matrix_coefficients); } - vl_bitstream_put_bits(&enc, 1, vui->flags.nal_hrd_parameters_present_flag); - if (vui->flags.nal_hrd_parameters_present_flag) - encode_hrd_params(&enc, vui->pHrdParameters); - vl_bitstream_put_bits(&enc, 1, vui->flags.vcl_hrd_parameters_present_flag); - if (vui->flags.vcl_hrd_parameters_present_flag) - encode_hrd_params(&enc, vui->pHrdParameters); - if (vui->flags.nal_hrd_parameters_present_flag || vui->flags.vcl_hrd_parameters_present_flag) - vl_bitstream_put_bits(&enc, 1, 0); + } + + vl_bitstream_put_bits(&enc, 1, vui->flags.chroma_loc_info_present_flag); + if (vui->flags.chroma_loc_info_present_flag) { + vl_bitstream_exp_golomb_ue(&enc, vui->chroma_sample_loc_type_top_field); + vl_bitstream_exp_golomb_ue(&enc, vui->chroma_sample_loc_type_bottom_field); + } + vl_bitstream_put_bits(&enc, 1, vui->flags.timing_info_present_flag); + if (vui->flags.timing_info_present_flag) { + vl_bitstream_put_bits(&enc, 32, vui->num_units_in_tick); + vl_bitstream_put_bits(&enc, 32, vui->time_scale); + vl_bitstream_put_bits(&enc, 32, vui->flags.fixed_frame_rate_flag); + } + vl_bitstream_put_bits(&enc, 1, vui->flags.nal_hrd_parameters_present_flag); + if (vui->flags.nal_hrd_parameters_present_flag) + encode_hrd_params(&enc, vui->pHrdParameters); + vl_bitstream_put_bits(&enc, 1, vui->flags.vcl_hrd_parameters_present_flag); + if (vui->flags.vcl_hrd_parameters_present_flag) + encode_hrd_params(&enc, vui->pHrdParameters); + if (vui->flags.nal_hrd_parameters_present_flag || vui->flags.vcl_hrd_parameters_present_flag) vl_bitstream_put_bits(&enc, 1, 0); - vl_bitstream_put_bits(&enc, 1, vui->flags.bitstream_restriction_flag); - if (vui->flags.bitstream_restriction_flag) { - vl_bitstream_put_bits(&enc, 1, 0); - vl_bitstream_exp_golomb_ue(&enc, 0); - vl_bitstream_exp_golomb_ue(&enc, 0); - vl_bitstream_exp_golomb_ue(&enc, 0); - vl_bitstream_exp_golomb_ue(&enc, 0); - vl_bitstream_exp_golomb_ue(&enc, vui->max_num_reorder_frames); - vl_bitstream_exp_golomb_ue(&enc, vui->max_dec_frame_buffering); - } + vl_bitstream_put_bits(&enc, 1, 0); + vl_bitstream_put_bits(&enc, 1, vui->flags.bitstream_restriction_flag); + if (vui->flags.bitstream_restriction_flag) { + vl_bitstream_put_bits(&enc, 1, 0); + vl_bitstream_exp_golomb_ue(&enc, 0); + vl_bitstream_exp_golomb_ue(&enc, 0); + vl_bitstream_exp_golomb_ue(&enc, 0); + vl_bitstream_exp_golomb_ue(&enc, 0); + vl_bitstream_exp_golomb_ue(&enc, vui->max_num_reorder_frames); + vl_bitstream_exp_golomb_ue(&enc, vui->max_dec_frame_buffering); } } + vl_bitstream_rbsp_trailing(&enc); vl_bitstream_flush(&enc);