• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 ** Copyright (c) 2019-2021 The Khronos Group Inc.
3 **
4 ** SPDX-License-Identifier: Apache-2.0
5 */
6 
7 #ifndef VULKAN_VIDEO_CODEC_H265STD_H_
8 #define VULKAN_VIDEO_CODEC_H265STD_H_ 1
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "vk_video/vulkan_video_codecs_common.h"
15 
16 // Vulkan 0.5 version number WIP
17 #define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5 VK_MAKE_VIDEO_STD_VERSION(0, 9, 5) // Patch version should always be set to 0
18 
19 // Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
20 #define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5
21 #define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
22 
23 #define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
24 #define STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE 7
25 #define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6
26 #define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16
27 #define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6
28 #define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64
29 #define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6
30 #define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64
31 #define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2
32 #define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
33 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
34 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
35 #define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
36 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
37 #define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
38 
39 typedef enum StdVideoH265ChromaFormatIdc {
40     STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME  = 0,
41     STD_VIDEO_H265_CHROMA_FORMAT_IDC_420         = 1,
42     STD_VIDEO_H265_CHROMA_FORMAT_IDC_422         = 2,
43     STD_VIDEO_H265_CHROMA_FORMAT_IDC_444         = 3,
44     STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID     = 0x7FFFFFFF
45 } StdVideoH265ChromaFormatIdc;
46 
47 typedef enum StdVideoH265ProfileIdc {
48     STD_VIDEO_H265_PROFILE_IDC_MAIN                     = 1,
49     STD_VIDEO_H265_PROFILE_IDC_MAIN_10                  = 2,
50     STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE       = 3,
51     STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS  = 4,
52     STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS           = 9,
53     STD_VIDEO_H265_PROFILE_IDC_INVALID                  = 0x7FFFFFFF
54 } StdVideoH265ProfileIdc;
55 
56 typedef enum StdVideoH265Level {
57     STD_VIDEO_H265_LEVEL_1_0 = 0,
58     STD_VIDEO_H265_LEVEL_2_0 = 1,
59     STD_VIDEO_H265_LEVEL_2_1 = 2,
60     STD_VIDEO_H265_LEVEL_3_0 = 3,
61     STD_VIDEO_H265_LEVEL_3_1 = 4,
62     STD_VIDEO_H265_LEVEL_4_0 = 5,
63     STD_VIDEO_H265_LEVEL_4_1 = 6,
64     STD_VIDEO_H265_LEVEL_5_0 = 7,
65     STD_VIDEO_H265_LEVEL_5_1 = 8,
66     STD_VIDEO_H265_LEVEL_5_2 = 9,
67     STD_VIDEO_H265_LEVEL_6_0 = 10,
68     STD_VIDEO_H265_LEVEL_6_1 = 11,
69     STD_VIDEO_H265_LEVEL_6_2 = 12,
70     STD_VIDEO_H265_LEVEL_INVALID = 0x7FFFFFFF
71 } StdVideoH265Level;
72 
73 typedef enum StdVideoH265SliceType {
74     STD_VIDEO_H265_SLICE_TYPE_B = 0,
75     STD_VIDEO_H265_SLICE_TYPE_P = 1,
76     STD_VIDEO_H265_SLICE_TYPE_I = 2,
77     STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF
78 } StdVideoH265SliceType;
79 
80 typedef enum StdVideoH265PictureType {
81     STD_VIDEO_H265_PICTURE_TYPE_P   = 0,
82     STD_VIDEO_H265_PICTURE_TYPE_B   = 1,
83     STD_VIDEO_H265_PICTURE_TYPE_I   = 2,
84     STD_VIDEO_H265_PICTURE_TYPE_IDR = 3,
85     STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF
86 } StdVideoH265PictureType;
87 
88 typedef struct StdVideoH265DecPicBufMgr
89 {
90     uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
91     uint8_t  max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
92     uint8_t  max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
93 } StdVideoH265DecPicBufMgr;
94 
95 typedef struct StdVideoH265SubLayerHrdParameters { // sub_layer_hrd_parameters
96     uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
97     uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
98     uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
99     uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
100     uint32_t cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer
101 } StdVideoH265SubLayerHrdParameters;
102 
103 typedef struct StdVideoH265HrdFlags {
104     uint32_t nal_hrd_parameters_present_flag : 1;
105     uint32_t vcl_hrd_parameters_present_flag : 1;
106     uint32_t sub_pic_hrd_params_present_flag : 1;
107     uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
108     uint32_t fixed_pic_rate_general_flag : 8;    // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
109     uint32_t fixed_pic_rate_within_cvs_flag : 8; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
110     uint32_t low_delay_hrd_flag : 8;             // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
111 } StdVideoH265HrdFlags;
112 
113 typedef struct StdVideoH265HrdParameters {
114     uint8_t                            tick_divisor_minus2;
115     uint8_t                            du_cpb_removal_delay_increment_length_minus1;
116     uint8_t                            dpb_output_delay_du_length_minus1;
117     uint8_t                            bit_rate_scale;
118     uint8_t                            cpb_size_scale;
119     uint8_t                            cpb_size_du_scale;
120     uint8_t                            initial_cpb_removal_delay_length_minus1;
121     uint8_t                            au_cpb_removal_delay_length_minus1;
122     uint8_t                            dpb_output_delay_length_minus1;
123     uint8_t                            cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
124     uint16_t                           elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
125     StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; // NAL per layer ptr to sub_layer_hrd_parameters
126     StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; // VCL per layer ptr to sub_layer_hrd_parameters
127     StdVideoH265HrdFlags               flags;
128 } StdVideoH265HrdParameters;
129 
130 typedef struct StdVideoH265VpsFlags {
131     uint32_t vps_temporal_id_nesting_flag : 1;
132     uint32_t vps_sub_layer_ordering_info_present_flag : 1;
133     uint32_t vps_timing_info_present_flag : 1;
134     uint32_t vps_poc_proportional_to_timing_flag : 1;
135 } StdVideoH265VpsFlags;
136 
137 typedef struct StdVideoH265VideoParameterSet
138 {
139     uint8_t                      vps_video_parameter_set_id;
140     uint8_t                      vps_max_sub_layers_minus1;
141     uint32_t                     vps_num_units_in_tick;
142     uint32_t                     vps_time_scale;
143     uint32_t                     vps_num_ticks_poc_diff_one_minus1;
144     StdVideoH265DecPicBufMgr*    pDecPicBufMgr;
145     StdVideoH265HrdParameters*   pHrdParameters;
146     StdVideoH265VpsFlags         flags;
147 } StdVideoH265VideoParameterSet;
148 
149 typedef struct StdVideoH265ScalingLists
150 {
151     uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS];       // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)
152     uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS];       // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)
153     uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS];     // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)
154     uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS];     // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)
155     uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2
156     uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3
157 } StdVideoH265ScalingLists;
158 
159 typedef struct StdVideoH265SpsVuiFlags {
160     uint32_t aspect_ratio_info_present_flag : 1;
161     uint32_t overscan_info_present_flag : 1;
162     uint32_t overscan_appropriate_flag : 1;
163     uint32_t video_signal_type_present_flag : 1;
164     uint32_t video_full_range_flag : 1;
165     uint32_t colour_description_present_flag : 1;
166     uint32_t chroma_loc_info_present_flag : 1;
167     uint32_t neutral_chroma_indication_flag : 1;
168     uint32_t field_seq_flag : 1;
169     uint32_t frame_field_info_present_flag : 1;
170     uint32_t default_display_window_flag : 1;
171     uint32_t vui_timing_info_present_flag : 1;
172     uint32_t vui_poc_proportional_to_timing_flag : 1;
173     uint32_t vui_hrd_parameters_present_flag : 1;
174     uint32_t bitstream_restriction_flag : 1;
175     uint32_t tiles_fixed_structure_flag : 1;
176     uint32_t motion_vectors_over_pic_boundaries_flag : 1;
177     uint32_t restricted_ref_pic_lists_flag : 1;
178 } StdVideoH265SpsVuiFlags;
179 
180 typedef struct StdVideoH265SequenceParameterSetVui {
181     uint8_t                     aspect_ratio_idc;
182     uint16_t                    sar_width;
183     uint16_t                    sar_height;
184     uint8_t                     video_format;
185     uint8_t                     colour_primaries;
186     uint8_t                     transfer_characteristics;
187     uint8_t                     matrix_coeffs;
188     uint8_t                     chroma_sample_loc_type_top_field;
189     uint8_t                     chroma_sample_loc_type_bottom_field;
190     uint16_t                    def_disp_win_left_offset;
191     uint16_t                    def_disp_win_right_offset;
192     uint16_t                    def_disp_win_top_offset;
193     uint16_t                    def_disp_win_bottom_offset;
194     uint32_t                    vui_num_units_in_tick;
195     uint32_t                    vui_time_scale;
196     uint32_t                    vui_num_ticks_poc_diff_one_minus1;
197     StdVideoH265HrdParameters*  pHrdParameters;
198     uint16_t                    min_spatial_segmentation_idc;
199     uint8_t                     max_bytes_per_pic_denom;
200     uint8_t                     max_bits_per_min_cu_denom;
201     uint8_t                     log2_max_mv_length_horizontal;
202     uint8_t                     log2_max_mv_length_vertical;
203     StdVideoH265SpsVuiFlags     flags;
204 } StdVideoH265SequenceParameterSetVui;
205 
206 typedef struct StdVideoH265PredictorPaletteEntries
207 {
208     uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE];
209 } StdVideoH265PredictorPaletteEntries;
210 
211 typedef struct StdVideoH265SpsFlags {
212     uint32_t sps_temporal_id_nesting_flag : 1;
213     uint32_t separate_colour_plane_flag : 1;
214     uint32_t scaling_list_enabled_flag : 1;
215     uint32_t sps_scaling_list_data_present_flag : 1;
216     uint32_t amp_enabled_flag : 1;
217     uint32_t sample_adaptive_offset_enabled_flag : 1;
218     uint32_t pcm_enabled_flag : 1;
219     uint32_t pcm_loop_filter_disabled_flag : 1;
220     uint32_t long_term_ref_pics_present_flag : 1;
221     uint32_t sps_temporal_mvp_enabled_flag : 1;
222     uint32_t strong_intra_smoothing_enabled_flag : 1;
223     uint32_t vui_parameters_present_flag : 1;
224     uint32_t sps_extension_present_flag : 1;
225     uint32_t sps_range_extension_flag : 1;
226 
227     // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
228     uint32_t transform_skip_rotation_enabled_flag : 1;
229     uint32_t transform_skip_context_enabled_flag : 1;
230     uint32_t implicit_rdpcm_enabled_flag : 1;
231     uint32_t explicit_rdpcm_enabled_flag : 1;
232     uint32_t extended_precision_processing_flag : 1;
233     uint32_t intra_smoothing_disabled_flag : 1;
234     uint32_t high_precision_offsets_enabled_flag : 1;
235     uint32_t persistent_rice_adaptation_enabled_flag : 1;
236     uint32_t cabac_bypass_alignment_enabled_flag : 1;
237 
238     // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
239     uint32_t sps_curr_pic_ref_enabled_flag : 1;
240     uint32_t palette_mode_enabled_flag : 1;
241     uint32_t sps_palette_predictor_initializer_present_flag : 1;
242     uint32_t intra_boundary_filtering_disabled_flag : 1;
243 } StdVideoH265SpsFlags;
244 
245 typedef struct StdVideoH265SequenceParameterSet
246 {
247     StdVideoH265ProfileIdc               profile_idc;
248     StdVideoH265Level                    level_idc;
249     uint32_t                             pic_width_in_luma_samples;
250     uint32_t                             pic_height_in_luma_samples;
251     uint8_t                              sps_video_parameter_set_id;
252     uint8_t                              sps_max_sub_layers_minus1;
253     uint8_t                              sps_seq_parameter_set_id;
254     uint8_t                              chroma_format_idc;
255     uint8_t                              bit_depth_luma_minus8;
256     uint8_t                              bit_depth_chroma_minus8;
257     uint8_t                              log2_max_pic_order_cnt_lsb_minus4;
258     uint8_t                              sps_max_dec_pic_buffering_minus1;
259     uint8_t                              log2_min_luma_coding_block_size_minus3;
260     uint8_t                              log2_diff_max_min_luma_coding_block_size;
261     uint8_t                              log2_min_luma_transform_block_size_minus2;
262     uint8_t                              log2_diff_max_min_luma_transform_block_size;
263     uint8_t                              max_transform_hierarchy_depth_inter;
264     uint8_t                              max_transform_hierarchy_depth_intra;
265     uint8_t                              num_short_term_ref_pic_sets;
266     uint8_t                              num_long_term_ref_pics_sps;
267     uint8_t                              pcm_sample_bit_depth_luma_minus1;
268     uint8_t                              pcm_sample_bit_depth_chroma_minus1;
269     uint8_t                              log2_min_pcm_luma_coding_block_size_minus3;
270     uint8_t                              log2_diff_max_min_pcm_luma_coding_block_size;
271     uint32_t                             conf_win_left_offset;
272     uint32_t                             conf_win_right_offset;
273     uint32_t                             conf_win_top_offset;
274     uint32_t                             conf_win_bottom_offset;
275     StdVideoH265DecPicBufMgr*            pDecPicBufMgr;
276     StdVideoH265SpsFlags                 flags;
277     StdVideoH265ScalingLists*            pScalingLists;             // Must be a valid pointer if sps_scaling_list_data_present_flag is set
278     StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;
279 
280     // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
281     uint8_t                              palette_max_size;
282     uint8_t                              delta_palette_max_predictor_size;
283     uint8_t                              motion_vector_resolution_control_idc;
284     uint8_t                              sps_num_palette_predictor_initializer_minus1;
285     StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set
286 } StdVideoH265SequenceParameterSet;
287 
288 
289 typedef struct StdVideoH265PpsFlags {
290     uint32_t dependent_slice_segments_enabled_flag : 1;
291     uint32_t output_flag_present_flag : 1;
292     uint32_t sign_data_hiding_enabled_flag : 1;
293     uint32_t cabac_init_present_flag : 1;
294     uint32_t constrained_intra_pred_flag : 1;
295     uint32_t transform_skip_enabled_flag : 1;
296     uint32_t cu_qp_delta_enabled_flag : 1;
297     uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;
298     uint32_t weighted_pred_flag : 1;
299     uint32_t weighted_bipred_flag : 1;
300     uint32_t transquant_bypass_enabled_flag : 1;
301     uint32_t tiles_enabled_flag : 1;
302     uint32_t entropy_coding_sync_enabled_flag : 1;
303     uint32_t uniform_spacing_flag : 1;
304     uint32_t loop_filter_across_tiles_enabled_flag : 1;
305     uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
306     uint32_t deblocking_filter_control_present_flag : 1;
307     uint32_t deblocking_filter_override_enabled_flag : 1;
308     uint32_t pps_deblocking_filter_disabled_flag : 1;
309     uint32_t pps_scaling_list_data_present_flag : 1;
310     uint32_t lists_modification_present_flag : 1;
311     uint32_t slice_segment_header_extension_present_flag : 1;
312     uint32_t pps_extension_present_flag : 1;
313 
314     // extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
315     uint32_t cross_component_prediction_enabled_flag : 1;
316     uint32_t chroma_qp_offset_list_enabled_flag : 1;
317 
318     // extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
319     uint32_t pps_curr_pic_ref_enabled_flag : 1;
320     uint32_t residual_adaptive_colour_transform_enabled_flag : 1;
321     uint32_t pps_slice_act_qp_offsets_present_flag : 1;
322     uint32_t pps_palette_predictor_initializer_present_flag : 1;
323     uint32_t monochrome_palette_flag : 1;
324     uint32_t pps_range_extension_flag : 1;
325 } StdVideoH265PpsFlags;
326 
327 typedef struct StdVideoH265PictureParameterSet
328 {
329     uint8_t                              pps_pic_parameter_set_id;
330     uint8_t                              pps_seq_parameter_set_id;
331     uint8_t                              num_extra_slice_header_bits;
332     uint8_t                              num_ref_idx_l0_default_active_minus1;
333     uint8_t                              num_ref_idx_l1_default_active_minus1;
334     int8_t                               init_qp_minus26;
335     uint8_t                              diff_cu_qp_delta_depth;
336     int8_t                               pps_cb_qp_offset;
337     int8_t                               pps_cr_qp_offset;
338     uint8_t                              num_tile_columns_minus1;
339     uint8_t                              num_tile_rows_minus1;
340     uint16_t                             column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE];
341     uint16_t                             row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE];
342     int8_t                               pps_beta_offset_div2;
343     int8_t                               pps_tc_offset_div2;
344     uint8_t                              log2_parallel_merge_level_minus2;
345     StdVideoH265PpsFlags                 flags;
346     StdVideoH265ScalingLists*            pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set
347 
348     // extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
349     uint8_t                              log2_max_transform_skip_block_size_minus2;
350     uint8_t                              diff_cu_chroma_qp_offset_depth;
351     uint8_t                              chroma_qp_offset_list_len_minus1;
352     int8_t                               cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
353     int8_t                               cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
354     uint8_t                              log2_sao_offset_scale_luma;
355     uint8_t                              log2_sao_offset_scale_chroma;
356 
357     // extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
358     int8_t                               pps_act_y_qp_offset_plus5;
359     int8_t                               pps_act_cb_qp_offset_plus5;
360     int8_t                               pps_act_cr_qp_offset_plus5;
361     uint8_t                              pps_num_palette_predictor_initializer;
362     uint8_t                              luma_bit_depth_entry_minus8;
363     uint8_t                              chroma_bit_depth_entry_minus8;
364     StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set
365 } StdVideoH265PictureParameterSet;
366 
367 #ifdef __cplusplus
368 }
369 #endif
370 
371 #endif // VULKAN_VIDEO_CODEC_H265STD_H_
372