/* Copyright 2023 Lynne * Copyright 2023 Dave Airlie * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef VULKAN_VIDEO_CODEC_AV1STD_H_ #define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 /* ** This header is NOT YET generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define vulkan_video_codec_av1std 1 #define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_0_1_0 VK_MAKE_VIDEO_STD_VERSION(0, 1, 0) #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_0_1_0 #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_decode" typedef enum StdVideoAV1MESAProfile { STD_VIDEO_AV1_MESA_PROFILE_MAIN = 0, STD_VIDEO_AV1_MESA_PROFILE_HIGH = 1, STD_VIDEO_AV1_MESA_PROFILE_PROFESSIONAL = 2, } StdVideoAV1MESAProfile; typedef enum StdVideoAV1MESALevel { STD_VIDEO_AV1_MESA_LEVEL_2_0 = 0, STD_VIDEO_AV1_MESA_LEVEL_2_1 = 1, STD_VIDEO_AV1_MESA_LEVEL_2_2 = 2, STD_VIDEO_AV1_MESA_LEVEL_2_3 = 3, STD_VIDEO_AV1_MESA_LEVEL_3_0 = 4, STD_VIDEO_AV1_MESA_LEVEL_3_1 = 5, STD_VIDEO_AV1_MESA_LEVEL_3_2 = 6, STD_VIDEO_AV1_MESA_LEVEL_3_3 = 7, STD_VIDEO_AV1_MESA_LEVEL_4_0 = 8, STD_VIDEO_AV1_MESA_LEVEL_4_1 = 9, STD_VIDEO_AV1_MESA_LEVEL_4_2 = 10, STD_VIDEO_AV1_MESA_LEVEL_4_3 = 11, STD_VIDEO_AV1_MESA_LEVEL_5_0 = 12, STD_VIDEO_AV1_MESA_LEVEL_5_1 = 13, STD_VIDEO_AV1_MESA_LEVEL_5_2 = 14, STD_VIDEO_AV1_MESA_LEVEL_5_3 = 15, STD_VIDEO_AV1_MESA_LEVEL_6_0 = 16, STD_VIDEO_AV1_MESA_LEVEL_6_1 = 17, STD_VIDEO_AV1_MESA_LEVEL_6_2 = 18, STD_VIDEO_AV1_MESA_LEVEL_6_3 = 19, STD_VIDEO_AV1_MESA_LEVEL_7_0 = 20, STD_VIDEO_AV1_MESA_LEVEL_7_1 = 21, STD_VIDEO_AV1_MESA_LEVEL_7_2 = 22, STD_VIDEO_AV1_MESA_LEVEL_7_3 = 23, STD_VIDEO_AV1_MESA_LEVEL_MAX = 31, } StdVideoAV1MESALevel; typedef struct StdVideoAV1MESAFilmGrainFlags { uint8_t apply_grain; uint8_t chroma_scaling_from_luma; uint8_t overlap_flag; uint8_t clip_to_restricted_range; } StdVideoAV1MESAFilmGrainFlags; typedef struct StdVideoAV1MESAFilmGrainParameters { StdVideoAV1MESAFilmGrainFlags flags; uint32_t grain_scaling_minus_8; uint32_t ar_coeff_lag; uint32_t ar_coeff_shift_minus_6; uint32_t grain_scale_shift; uint16_t grain_seed; uint8_t num_y_points; uint8_t point_y_value[14]; uint8_t point_y_scaling[14]; uint8_t num_cb_points; uint8_t point_cb_value[10]; uint8_t point_cb_scaling[10]; uint8_t num_cr_points; uint8_t point_cr_value[10]; uint8_t point_cr_scaling[10]; int8_t ar_coeffs_y_plus_128[24]; int8_t ar_coeffs_cb_plus_128[25]; int8_t ar_coeffs_cr_plus_128[25]; uint8_t cb_mult; uint8_t cb_luma_mult; uint16_t cb_offset; uint8_t cr_mult; uint8_t cr_luma_mult; uint16_t cr_offset; } StdVideoAV1MESAFilmGrainParameters; typedef struct StdVideoAV1MESAGlobalMotionFlags { uint8_t gm_invalid; } StdVideoAV1MESAGlobalMotionFlags; typedef struct StdVideoAV1MESAGlobalMotion { StdVideoAV1MESAGlobalMotionFlags flags; uint8_t gm_type; uint32_t gm_params[6]; } StdVideoAV1MESAGlobalMotion; typedef struct StdVideoAV1MESALoopRestoration { uint8_t lr_type[3]; uint8_t lr_unit_shift; uint8_t lr_uv_shift; } StdVideoAV1MESALoopRestoration; typedef struct StdVideoAV1MESATileInfoFlags { uint8_t uniform_tile_spacing_flag; } StdVideoAV1MESATileInfoFlags; typedef struct StdVideoAV1MESATileInfo { StdVideoAV1MESATileInfoFlags flags; uint8_t tile_cols; uint8_t tile_rows; uint8_t tile_start_col_sb[64]; uint8_t tile_start_row_sb[64]; uint8_t width_in_sbs_minus_1[64]; uint8_t height_in_sbs_minus_1[64]; uint16_t context_update_tile_id; uint8_t tile_size_bytes_minus1; } StdVideoAV1MESATileInfo; typedef struct StdVideoAV1MESAQuantizationFlags { uint8_t using_qmatrix; } StdVideoAV1MESAQuantizationFlags; typedef struct StdVideoAV1MESAQuantization { StdVideoAV1MESAQuantizationFlags flags; uint8_t base_q_idx; int8_t delta_q_y_dc; uint8_t diff_uv_delta; int8_t delta_q_u_dc; int8_t delta_q_u_ac; int8_t delta_q_v_dc; int8_t delta_q_v_ac; uint8_t qm_y; uint8_t qm_u; uint8_t qm_v; } StdVideoAV1MESAQuantization; typedef struct StdVideoAV1MESACDEF { uint8_t damping_minus_3; uint8_t bits; uint8_t y_pri_strength[8]; uint8_t y_sec_strength[8]; uint8_t uv_pri_strength[8]; uint8_t uv_sec_strength[8]; } StdVideoAV1MESACDEF; typedef struct StdVideoAV1MESADeltaQFlags { uint8_t delta_lf_present; uint8_t delta_lf_multi; } StdVideoAV1MESADeltaQFlags; typedef struct StdVideoAV1MESADeltaQ { StdVideoAV1MESADeltaQFlags flags; uint8_t delta_q_res; uint8_t delta_lf_res; } StdVideoAV1MESADeltaQ; typedef struct StdVideoAV1MESASegmentationFlags { uint8_t enabled; uint8_t update_map; uint8_t temporal_update; uint8_t update_data; } StdVideoAV1MESASegmentationFlags; typedef struct StdVideoAV1MESASegmentation { StdVideoAV1MESASegmentationFlags flags; uint8_t feature_enabled_bits[8]; int16_t feature_data[8][8]; } StdVideoAV1MESASegmentation; typedef struct StdVideoAV1MESALoopFilterFlags { uint8_t delta_enabled; uint8_t delta_update; } StdVideoAV1MESALoopFilterFlags; typedef struct StdVideoAV1MESALoopFilter { StdVideoAV1MESALoopFilterFlags flags; uint8_t level[4]; uint8_t sharpness; int8_t ref_deltas[8]; int8_t mode_deltas[2]; } StdVideoAV1MESALoopFilter; typedef struct StdVideoAV1MESAFrameHeaderFlags { uint8_t error_resilient_mode; uint8_t disable_cdf_update; uint8_t use_superres; uint8_t render_and_frame_size_different; uint8_t allow_screen_content_tools; uint8_t is_filter_switchable; uint8_t force_integer_mv; uint8_t frame_size_override_flag; uint8_t buffer_removal_time_present_flag; uint8_t allow_intrabc; uint8_t frame_refs_short_signaling; uint8_t allow_high_precision_mv; uint8_t is_motion_mode_switchable; uint8_t use_ref_frame_mvs; uint8_t disable_frame_end_update_cdf; uint8_t allow_warped_motion; uint8_t reduced_tx_set; uint8_t reference_select; uint8_t skip_mode_present; uint8_t delta_q_present; uint8_t UsesLr; } StdVideoAV1MESAFrameHeaderFlags; typedef struct StdVideoAV1MESAFrameHeader { StdVideoAV1MESAFrameHeaderFlags flags; uint32_t frame_presentation_time; uint32_t display_frame_id; uint32_t current_frame_id; uint8_t frame_to_show_map_idx; uint8_t frame_type; uint8_t order_hint; uint8_t primary_ref_frame; uint16_t frame_width_minus_1; uint16_t frame_height_minus_1; uint16_t render_width_minus_1; uint16_t render_height_minus_1; uint8_t coded_denom; uint8_t refresh_frame_flags; uint8_t ref_order_hint[8]; int8_t ref_frame_idx[7]; uint32_t delta_frame_id_minus1[7]; uint8_t interpolation_filter; uint8_t tx_mode; StdVideoAV1MESATileInfo tiling; StdVideoAV1MESAQuantization quantization; StdVideoAV1MESASegmentation segmentation; StdVideoAV1MESADeltaQ delta_q; StdVideoAV1MESALoopFilter loop_filter; StdVideoAV1MESACDEF cdef; StdVideoAV1MESALoopRestoration lr; StdVideoAV1MESAGlobalMotion global_motion[8]; // One per ref frame StdVideoAV1MESAFilmGrainParameters film_grain; } StdVideoAV1MESAFrameHeader; typedef struct StdVideoAV1MESAScreenCoding { uint8_t seq_force_screen_content_tools; } StdVideoAV1MESAScreenCoding; typedef struct StdVideoAV1MESATimingInfoFlags { uint8_t equal_picture_interval; } StdVideoAV1MESATimingInfoFlags; typedef struct StdVideoAV1MESATimingInfo { StdVideoAV1MESATimingInfoFlags flags; uint32_t num_units_in_display_tick; uint32_t time_scale; uint32_t num_ticks_per_picture_minus_1; } StdVideoAV1MESATimingInfo; typedef struct StdVideoAV1MESAColorConfigFlags { uint8_t mono_chrome; uint8_t color_range; uint8_t separate_uv_delta_q; } StdVideoAV1MESAColorConfigFlags; typedef struct StdVideoAV1MESAColorConfig { StdVideoAV1MESAColorConfigFlags flags; uint8_t bit_depth; uint8_t subsampling_x; uint8_t subsampling_y; } StdVideoAV1MESAColorConfig; typedef struct StdVideoAV1MESASequenceHeaderFlags { uint8_t still_picture; uint8_t reduced_still_picture_header; uint8_t use_128x128_superblock; uint8_t enable_filter_intra; uint8_t enable_intra_edge_filter; uint8_t enable_interintra_compound; uint8_t enable_masked_compound; uint8_t enable_warped_motion; uint8_t enable_dual_filter; uint8_t enable_order_hint; uint8_t enable_jnt_comp; uint8_t enable_ref_frame_mvs; uint8_t frame_id_numbers_present_flag; uint8_t enable_superres; uint8_t enable_cdef; uint8_t enable_restoration; uint8_t film_grain_params_present; uint8_t timing_info_present_flag; uint8_t initial_display_delay_present_flag; } StdVideoAV1MESASequenceHeaderFlags; typedef struct StdVideoAV1MESASequenceHeader { StdVideoAV1MESASequenceHeaderFlags flags; StdVideoAV1MESAProfile seq_profile; uint8_t frame_width_bits_minus_1; uint8_t frame_height_bits_minus_1; uint16_t max_frame_width_minus_1; uint16_t max_frame_height_minus_1; uint8_t delta_frame_id_length_minus_2; uint8_t additional_frame_id_length_minus_1; uint8_t order_hint_bits_minus_1; uint8_t seq_choose_integer_mv; uint8_t seq_force_integer_mv; StdVideoAV1MESATimingInfo timing_info; StdVideoAV1MESAColorConfig color_config; } StdVideoAV1MESASequenceHeader; typedef struct StdVideoAV1MESATile { uint16_t tg_start; uint16_t tg_end; uint16_t row; uint16_t column; uint32_t size; uint32_t offset; } StdVideoAV1MESATile; typedef struct StdVideoAV1MESATileList { StdVideoAV1MESATile *tile_list; uint32_t nb_tiles; } StdVideoAV1MESATileList; typedef struct VkVideoDecodeAV1PictureInfoMESA { VkStructureType sType; const void *pNext; StdVideoAV1MESAFrameHeader *frame_header; StdVideoAV1MESATileList *tile_list; uint8_t skip_mode_frame_idx[2]; } VkVideoDecodeAV1PictureInfoMESA; typedef struct VkVideoDecodeAV1DpbSlotInfoMESA { VkStructureType sType; const void *pNext; uint8_t frameIdx; uint8_t ref_order_hint[7]; uint8_t disable_frame_end_update_cdf; } VkVideoDecodeAV1DpbSlotInfoMESA; typedef struct VkVideoDecodeAV1SessionParametersAddInfoMESA { VkStructureType sType; const void *pNext; StdVideoAV1MESASequenceHeader *sequence_header; } VkVideoDecodeAV1SessionParametersAddInfoMESA; typedef struct VkVideoDecodeAV1SessionParametersCreateInfoMESA { VkStructureType sType; const void *pNext; const VkVideoDecodeAV1SessionParametersAddInfoMESA *pParametersAddInfo; } VkVideoDecodeAV1SessionParametersCreateInfoMESA; typedef struct VkVideoDecodeAV1ProfileInfoMESA { VkStructureType sType; const void *pNext; StdVideoAV1MESAProfile stdProfileIdc; } VkVideoDecodeAV1ProfileInfoMESA; typedef enum VkVideoDecodeAV1CapabilityFlagBitsMESA { VK_VIDEO_DECODE_AV1_CAPABILITY_EXTERNAL_FILM_GRAIN_MESA = 0x00000001, VK_VIDEO_DECODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_MESA = 0x7FFFFFFF } VkVideoDecodeAV1CapabilityFlagBitsMESA; typedef VkFlags VkVideoDecodeAV1CapabilityFlagsMESA; typedef struct VkVideoDecodeAV1CapabilitiesMESA { VkStructureType sType; const void *pNext; VkVideoDecodeAV1CapabilityFlagsMESA flags; StdVideoAV1MESALevel maxLevelIdc; } VkVideoDecodeAV1CapabilitiesMESA; #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_MESA 1000509000 #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_MESA 1000509001 #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_ADD_INFO_MESA 1000509002 #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_MESA 1000509003 #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_MESA 1000509004 #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_MESA 1000509005 #ifdef __cplusplus } #endif #endif