27     .decode_op        = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
 
   29         .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME,
 
   30         .specVersion   = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION,
 
   54                              VkVideoReferenceSlotInfoKHR *ref_slot,       
 
   55                              VkVideoPictureResourceInfoKHR *
ref,          
 
   56                              VkVideoDecodeH264DpbSlotInfoKHR *vkh264_ref, 
 
   57                              StdVideoDecodeH264ReferenceInfo *h264_ref,   
 
   59                              int is_field, 
int picture_structure,
 
   71     *h264_ref = (StdVideoDecodeH264ReferenceInfo) {
 
   74         .flags = (StdVideoDecodeH264ReferenceInfoFlags) {
 
   75             .top_field_flag    = is_field ? !!(picture_structure & 
PICT_TOP_FIELD)    : 0,
 
   89     *vkh264_ref = (VkVideoDecodeH264DpbSlotInfoKHR) {
 
   90         .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR,
 
   91         .pStdReferenceInfo = h264_ref,
 
   94     *
ref = (VkVideoPictureResourceInfoKHR) {
 
   95         .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
 
   96         .codedOffset = (VkOffset2D){ 0, 0 },
 
   98         .baseArrayLayer = dec->
layered_dpb ? dpb_slot_index : 0,
 
  102     *ref_slot = (VkVideoReferenceSlotInfoKHR) {
 
  103         .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
 
  105         .slotIndex = dpb_slot_index,
 
  106         .pPictureResource = 
ref,
 
  118     case 10: 
return STD_VIDEO_H264_LEVEL_IDC_1_0;
 
  119     case 11: 
return STD_VIDEO_H264_LEVEL_IDC_1_1;
 
  120     case 12: 
return STD_VIDEO_H264_LEVEL_IDC_1_2;
 
  121     case 13: 
return STD_VIDEO_H264_LEVEL_IDC_1_3;
 
  122     case 20: 
return STD_VIDEO_H264_LEVEL_IDC_2_0;
 
  123     case 21: 
return STD_VIDEO_H264_LEVEL_IDC_2_1;
 
  124     case 22: 
return STD_VIDEO_H264_LEVEL_IDC_2_2;
 
  125     case 30: 
return STD_VIDEO_H264_LEVEL_IDC_3_0;
 
  126     case 31: 
return STD_VIDEO_H264_LEVEL_IDC_3_1;
 
  127     case 32: 
return STD_VIDEO_H264_LEVEL_IDC_3_2;
 
  128     case 40: 
return STD_VIDEO_H264_LEVEL_IDC_4_0;
 
  129     case 41: 
return STD_VIDEO_H264_LEVEL_IDC_4_1;
 
  130     case 42: 
return STD_VIDEO_H264_LEVEL_IDC_4_2;
 
  131     case 50: 
return STD_VIDEO_H264_LEVEL_IDC_5_0;
 
  132     case 51: 
return STD_VIDEO_H264_LEVEL_IDC_5_1;
 
  133     case 52: 
return STD_VIDEO_H264_LEVEL_IDC_5_2;
 
  134     case 60: 
return STD_VIDEO_H264_LEVEL_IDC_6_0;
 
  135     case 61: 
return STD_VIDEO_H264_LEVEL_IDC_6_1;
 
  137     case 62: 
return STD_VIDEO_H264_LEVEL_IDC_6_2;
 
  142                     StdVideoH264ScalingLists *vksps_scaling,
 
  143                     StdVideoH264HrdParameters *vksps_vui_header,
 
  144                     StdVideoH264SequenceParameterSetVui *vksps_vui,
 
  145                     StdVideoH264SequenceParameterSet *vksps)
 
  147     *vksps_scaling = (StdVideoH264ScalingLists) {
 
  148         .scaling_list_present_mask = 
sps->scaling_matrix_present_mask,
 
  149         .use_default_scaling_matrix_mask = 0, 
 
  152     for (
int i = 0; 
i < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS; 
i++)
 
  153         for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS; j++)
 
  156     for (
int i = 0; 
i < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS; 
i++)
 
  157         for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS; j++)
 
  158             vksps_scaling->ScalingList8x8[
i][j] =
 
  161     *vksps_vui_header = (StdVideoH264HrdParameters) {
 
  162         .cpb_cnt_minus1 = 
sps->cpb_cnt - 1,
 
  163         .bit_rate_scale = 
sps->bit_rate_scale,
 
  164         .initial_cpb_removal_delay_length_minus1 = 
sps->initial_cpb_removal_delay_length - 1,
 
  165         .cpb_removal_delay_length_minus1 = 
sps->cpb_removal_delay_length - 1,
 
  166         .dpb_output_delay_length_minus1 = 
sps->dpb_output_delay_length - 1,
 
  167         .time_offset_length = 
sps->time_offset_length,
 
  170     for (
int i = 0; 
i < 
sps->cpb_cnt; 
i++) {
 
  171         vksps_vui_header->bit_rate_value_minus1[
i] = 
sps->bit_rate_value[
i] - 1;
 
  172         vksps_vui_header->cpb_size_value_minus1[
i] = 
sps->cpb_size_value[
i] - 1;
 
  173         vksps_vui_header->cbr_flag[
i] = (
sps->cpr_flag >> 
i) & 0x1;
 
  176     *vksps_vui = (StdVideoH264SequenceParameterSetVui) {
 
  177         .aspect_ratio_idc = 
sps->vui.aspect_ratio_idc,
 
  178         .sar_width = 
sps->vui.sar.num,
 
  179         .sar_height = 
sps->vui.sar.den,
 
  180         .video_format = 
sps->vui.video_format,
 
  181         .colour_primaries = 
sps->vui.colour_primaries,
 
  182         .transfer_characteristics = 
sps->vui.transfer_characteristics,
 
  183         .matrix_coefficients = 
sps->vui.matrix_coeffs,
 
  184         .num_units_in_tick = 
sps->num_units_in_tick,
 
  185         .time_scale = 
sps->time_scale,
 
  186         .pHrdParameters = vksps_vui_header,
 
  187         .max_num_reorder_frames = 
sps->num_reorder_frames,
 
  188         .max_dec_frame_buffering = 
sps->max_dec_frame_buffering,
 
  189         .flags = (StdVideoH264SpsVuiFlags) {
 
  190             .aspect_ratio_info_present_flag = 
sps->vui.aspect_ratio_info_present_flag,
 
  191             .overscan_info_present_flag = 
sps->vui.overscan_info_present_flag,
 
  192             .overscan_appropriate_flag = 
sps->vui.overscan_appropriate_flag,
 
  193             .video_signal_type_present_flag = 
sps->vui.video_signal_type_present_flag,
 
  194             .video_full_range_flag = 
sps->vui.video_full_range_flag,
 
  195             .color_description_present_flag = 
sps->vui.colour_description_present_flag,
 
  196             .chroma_loc_info_present_flag = 
sps->vui.chroma_location,
 
  197             .timing_info_present_flag = 
sps->timing_info_present_flag,
 
  198             .fixed_frame_rate_flag = 
sps->fixed_frame_rate_flag,
 
  199             .bitstream_restriction_flag = 
sps->bitstream_restriction_flag,
 
  200             .nal_hrd_parameters_present_flag = 
sps->nal_hrd_parameters_present_flag,
 
  201             .vcl_hrd_parameters_present_flag = 
sps->vcl_hrd_parameters_present_flag,
 
  205     *vksps = (StdVideoH264SequenceParameterSet) {
 
  206         .profile_idc = 
sps->profile_idc,
 
  208         .seq_parameter_set_id = 
sps->sps_id,
 
  209         .chroma_format_idc = 
sps->chroma_format_idc,
 
  210         .bit_depth_luma_minus8 = 
sps->bit_depth_luma - 8,
 
  211         .bit_depth_chroma_minus8 = 
sps->bit_depth_chroma - 8,
 
  212         .log2_max_frame_num_minus4 = 
sps->log2_max_frame_num - 4,
 
  213         .pic_order_cnt_type = 
sps->poc_type,
 
  214         .log2_max_pic_order_cnt_lsb_minus4 = 
sps->poc_type ? 0 : 
sps->log2_max_poc_lsb - 4,
 
  215         .offset_for_non_ref_pic = 
sps->offset_for_non_ref_pic,
 
  216         .offset_for_top_to_bottom_field = 
sps->offset_for_top_to_bottom_field,
 
  217         .num_ref_frames_in_pic_order_cnt_cycle = 
sps->poc_cycle_length,
 
  218         .max_num_ref_frames = 
sps->ref_frame_count,
 
  219         .pic_width_in_mbs_minus1 = 
sps->mb_width - 1,
 
  220         .pic_height_in_map_units_minus1 = (
sps->mb_height/(2 - 
sps->frame_mbs_only_flag)) - 1,
 
  221         .frame_crop_left_offset = 
sps->crop_left,
 
  222         .frame_crop_right_offset = 
sps->crop_right,
 
  223         .frame_crop_top_offset = 
sps->crop_top,
 
  224         .frame_crop_bottom_offset = 
sps->crop_bottom,
 
  225         .flags = (StdVideoH264SpsFlags) {
 
  226             .constraint_set0_flag = (
sps->constraint_set_flags >> 0) & 0x1,
 
  227             .constraint_set1_flag = (
sps->constraint_set_flags >> 1) & 0x1,
 
  228             .constraint_set2_flag = (
sps->constraint_set_flags >> 2) & 0x1,
 
  229             .constraint_set3_flag = (
sps->constraint_set_flags >> 3) & 0x1,
 
  230             .constraint_set4_flag = (
sps->constraint_set_flags >> 4) & 0x1,
 
  231             .constraint_set5_flag = (
sps->constraint_set_flags >> 5) & 0x1,
 
  232             .direct_8x8_inference_flag = 
sps->direct_8x8_inference_flag,
 
  233             .mb_adaptive_frame_field_flag = 
sps->mb_aff,
 
  234             .frame_mbs_only_flag = 
sps->frame_mbs_only_flag,
 
  235             .delta_pic_order_always_zero_flag = 
sps->delta_pic_order_always_zero_flag,
 
  236             .separate_colour_plane_flag = 
sps->residual_color_transform_flag,
 
  237             .gaps_in_frame_num_value_allowed_flag = 
sps->gaps_in_frame_num_allowed_flag,
 
  238             .qpprime_y_zero_transform_bypass_flag = 
sps->transform_bypass,
 
  239             .frame_cropping_flag = 
sps->crop,
 
  240             .seq_scaling_matrix_present_flag = 
sps->scaling_matrix_present,
 
  241             .vui_parameters_present_flag = 
sps->vui_parameters_present_flag,
 
  243         .pOffsetForRefFrame = 
sps->offset_for_ref_frame,
 
  244         .pScalingLists = vksps_scaling,
 
  245         .pSequenceParameterSetVui = vksps_vui,
 
  250                     StdVideoH264ScalingLists *vkpps_scaling,
 
  251                     StdVideoH264PictureParameterSet *vkpps)
 
  253     *vkpps_scaling = (StdVideoH264ScalingLists) {
 
  254         .scaling_list_present_mask = 
pps->pic_scaling_matrix_present_mask,
 
  255         .use_default_scaling_matrix_mask = 0, 
 
  258     for (
int i = 0; 
i < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS; 
i++)
 
  259         for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS; j++)
 
  262     for (
int i = 0; 
i < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS; 
i++)
 
  263         for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS; j++)
 
  264             vkpps_scaling->ScalingList8x8[
i][j] =
 
  267     *vkpps = (StdVideoH264PictureParameterSet) {
 
  268         .seq_parameter_set_id = 
pps->sps_id,
 
  269         .pic_parameter_set_id = 
pps->pps_id,
 
  270         .num_ref_idx_l0_default_active_minus1 = 
pps->ref_count[0] - 1,
 
  271         .num_ref_idx_l1_default_active_minus1 = 
pps->ref_count[1] - 1,
 
  272         .weighted_bipred_idc = 
pps->weighted_bipred_idc,
 
  273         .pic_init_qp_minus26 = 
pps->init_qp - 26,
 
  274         .pic_init_qs_minus26 = 
pps->init_qs - 26,
 
  275         .chroma_qp_index_offset = 
pps->chroma_qp_index_offset[0],
 
  276         .second_chroma_qp_index_offset = 
pps->chroma_qp_index_offset[1],
 
  277         .flags = (StdVideoH264PpsFlags) {
 
  278             .transform_8x8_mode_flag = 
pps->transform_8x8_mode,
 
  279             .redundant_pic_cnt_present_flag = 
pps->redundant_pic_cnt_present,
 
  280             .constrained_intra_pred_flag = 
pps->constrained_intra_pred,
 
  281             .deblocking_filter_control_present_flag = 
pps->deblocking_filter_parameters_present,
 
  282             .weighted_pred_flag = 
pps->weighted_pred,
 
  283             .bottom_field_pic_order_in_frame_present_flag = 
pps->pic_order_present,
 
  284             .entropy_coding_mode_flag = 
pps->cabac,
 
  285             .pic_scaling_matrix_present_flag = 
pps->pic_scaling_matrix_present_flag,
 
  287         .pScalingLists = vkpps_scaling,
 
  301     StdVideoH264SequenceParameterSetVui vksps_vui[
MAX_SPS_COUNT];
 
  308     VkVideoDecodeH264SessionParametersAddInfoKHR h264_params_info = {
 
  309         .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR,
 
  315     VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = {
 
  316         .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR,
 
  317         .pParametersAddInfo = &h264_params_info,
 
  319     VkVideoSessionParametersCreateInfoKHR session_params_create = {
 
  320         .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
 
  321         .pNext = &h264_params,
 
  322         .videoSession = 
ctx->common.session,
 
  323         .videoSessionParametersTemplate = VK_NULL_HANDLE,
 
  328         if (
h->ps.sps_list[
i]) {
 
  329             const SPS *sps_l = 
h->ps.sps_list[
i];
 
  330             int idx = h264_params_info.stdSPSCount;
 
  331             set_sps(sps_l, &vksps_scaling[idx], &vksps_vui_header[idx], &vksps_vui[idx], &vksps[idx]);
 
  332             h264_params_info.stdSPSCount++;
 
  338         if (
h->ps.pps_list[
i]) {
 
  339             const PPS *pps_l = 
h->ps.pps_list[
i];
 
  340             int idx = h264_params_info.stdPPSCount;
 
  341             set_pps(pps_l, pps_l->
sps, &vkpps_scaling[idx], &vkpps[idx]);
 
  342             h264_params_info.stdPPSCount++;
 
  346     h264_params.maxStdSPSCount = h264_params_info.stdSPSCount;
 
  347     h264_params.maxStdPPSCount = h264_params_info.stdPPSCount;
 
  354            h264_params_info.stdSPSCount, h264_params_info.stdPPSCount);
 
  364     int dpb_slot_index = 0;
 
  380         if (pic == &
h->DPB[slot]) {
 
  381             dpb_slot_index = slot;
 
  388                             h->DPB[dpb_slot_index].field_picture,
 
  389                             h->DPB[dpb_slot_index].reference,
 
  395     for (
int i = 0; 
i < 
h->short_ref_count; 
i++) {
 
  398             if (
h->short_ref[
i] == &
h->DPB[slot]) {
 
  399                 dpb_slot_index = slot;
 
  406                                 h->DPB[dpb_slot_index].field_picture,
 
  407                                 h->DPB[dpb_slot_index].reference,
 
  415          i < h->short_ref_count + 
h->long_ref_count; 
r++) {
 
  420         for (
unsigned slot = 0; slot < 16; slot++) {
 
  421             if (
h->long_ref[
r] == &
h->DPB[slot]) {
 
  422                 dpb_slot_index = slot;
 
  429                                 h->DPB[dpb_slot_index].field_picture,
 
  430                                 h->DPB[dpb_slot_index].reference,
 
  437     hp->
h264pic = (StdVideoDecodeH264PictureInfo) {
 
  438         .seq_parameter_set_id = pic->
pps->
sps_id,
 
  439         .pic_parameter_set_id = pic->
pps->
pps_id,
 
  444         .flags = (StdVideoDecodeH264PictureInfoFlags) {
 
  447             .IdrPicFlag = 
h->picture_idr,
 
  448             .bottom_field_flag = 
h->picture_structure != 
PICT_FRAME &&
 
  450             .is_reference = 
h->nal_ref_idc != 0,
 
  456         .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR,
 
  457         .pStdPictureInfo = &hp->
h264pic,
 
  461         .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
 
  464         .pSetupReferenceSlot = &vp->
ref_slot,
 
  465         .referenceSlotCount = 
h->short_ref_count + 
h->long_ref_count,
 
  467         .dstPictureResource = (VkVideoPictureResourceInfoKHR) {
 
  468             .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
 
  469             .codedOffset = (VkOffset2D){ 0, 0 },
 
  470             .codedExtent = (VkExtent2D){ pic->
f->
width, pic->
f->
height },
 
  499         hp->
h264pic.flags.is_intra = 0;
 
  553     .
p.
name                = 
"h264_vulkan",