mirror of https://github.com/FFmpeg/FFmpeg.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
403 lines
13 KiB
403 lines
13 KiB
/* 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
|
|
|