mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 18:40:13 +01:00
vulkan: Add default scaling lists for H265
H265 specification defines default scaling lists to use whenever scaling lists are not specified in neither sps nor pps. Currently drivers ignore this requirement and set the lists to zero. This commits adds a helper function vk_video_derive_h265_scaling_list (similar to its h264 counterpart) that selects either sps or pps lists and falls back to default values if neither were specified. The default values were taken from ITU-T H265 specification (revision 8), section 7.4.5. Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34096>
This commit is contained in:
parent
a1bf7192e5
commit
4072286f07
2 changed files with 100 additions and 0 deletions
|
|
@ -977,6 +977,102 @@ vk_video_derive_h264_scaling_list(const StdVideoH264SequenceParameterSet *sps,
|
|||
}
|
||||
}
|
||||
|
||||
const static struct StdVideoH265ScalingLists h265_scaling_list_default =
|
||||
{
|
||||
.ScalingList4x4 =
|
||||
{
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
|
||||
},
|
||||
.ScalingList8x8 =
|
||||
{
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
},
|
||||
.ScalingList16x16 =
|
||||
{
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91},
|
||||
},
|
||||
.ScalingList32x32 =
|
||||
{
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 16, 17, 18,
|
||||
17, 18, 18, 17, 18, 21, 19, 20, 21, 20, 19, 21, 24, 22, 22, 24,
|
||||
24, 22, 22, 24, 25, 25, 27, 30, 27, 25, 25, 29, 31, 35, 35, 31,
|
||||
29, 36, 41, 44, 41, 36, 47, 54, 54, 47, 65, 70, 65, 88, 88, 115},
|
||||
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18,
|
||||
18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24,
|
||||
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 28, 28, 28, 28, 28,
|
||||
28, 33, 33, 33, 33, 33, 41, 41, 41, 41, 54, 54, 54, 71, 71, 91}
|
||||
},
|
||||
.ScalingListDCCoef16x16 = {16, 16, 16, 16, 16, 16},
|
||||
.ScalingListDCCoef32x32 = {16, 16},
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
vk_video_derive_h265_scaling_list(const StdVideoH265SequenceParameterSet *sps,
|
||||
const StdVideoH265PictureParameterSet *pps,
|
||||
const StdVideoH265ScalingLists **list)
|
||||
{
|
||||
if (pps->flags.pps_scaling_list_data_present_flag)
|
||||
*list = pps->pScalingLists;
|
||||
else if (sps->flags.sps_scaling_list_data_present_flag)
|
||||
*list = sps->pScalingLists;
|
||||
else if (sps->flags.scaling_list_enabled_flag)
|
||||
*list = &h265_scaling_list_default;
|
||||
else
|
||||
*list = NULL;
|
||||
}
|
||||
|
||||
const StdVideoH264SequenceParameterSet *
|
||||
vk_video_find_h264_dec_std_sps(const struct vk_video_session_parameters *params,
|
||||
uint32_t id)
|
||||
|
|
|
|||
|
|
@ -183,6 +183,10 @@ void vk_video_derive_h264_scaling_list(const StdVideoH264SequenceParameterSet *s
|
|||
const StdVideoH264PictureParameterSet *pps,
|
||||
StdVideoH264ScalingLists *list);
|
||||
|
||||
void vk_video_derive_h265_scaling_list(const StdVideoH265SequenceParameterSet *sps,
|
||||
const StdVideoH265PictureParameterSet *pps,
|
||||
const StdVideoH265ScalingLists **list);
|
||||
|
||||
const StdVideoH264SequenceParameterSet *
|
||||
vk_video_find_h264_dec_std_sps(const struct vk_video_session_parameters *params,
|
||||
uint32_t id);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue