vulkan_video_codec_av1std_mesa.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. /* Copyright 2023 Lynne
  2. * Copyright 2023 Dave Airlie
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef VULKAN_VIDEO_CODEC_AV1STD_MESA_H_
  17. #define VULKAN_VIDEO_CODEC_AV1STD_MESA_H_ 1
  18. /*
  19. ** This header is NOT YET generated from the Khronos Vulkan XML API Registry.
  20. **
  21. */
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #define vulkan_video_codec_av1std 1
  26. #define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \
  27. ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
  28. #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_0_1_0 VK_MAKE_VIDEO_STD_VERSION(0, 1, 0)
  29. #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_0_1_0
  30. #define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_decode"
  31. typedef enum StdVideoAV1MESAProfile {
  32. STD_VIDEO_AV1_MESA_PROFILE_MAIN = 0,
  33. STD_VIDEO_AV1_MESA_PROFILE_HIGH = 1,
  34. STD_VIDEO_AV1_MESA_PROFILE_PROFESSIONAL = 2,
  35. } StdVideoAV1MESAProfile;
  36. typedef enum StdVideoAV1MESALevel {
  37. STD_VIDEO_AV1_MESA_LEVEL_2_0 = 0,
  38. STD_VIDEO_AV1_MESA_LEVEL_2_1 = 1,
  39. STD_VIDEO_AV1_MESA_LEVEL_2_2 = 2,
  40. STD_VIDEO_AV1_MESA_LEVEL_2_3 = 3,
  41. STD_VIDEO_AV1_MESA_LEVEL_3_0 = 4,
  42. STD_VIDEO_AV1_MESA_LEVEL_3_1 = 5,
  43. STD_VIDEO_AV1_MESA_LEVEL_3_2 = 6,
  44. STD_VIDEO_AV1_MESA_LEVEL_3_3 = 7,
  45. STD_VIDEO_AV1_MESA_LEVEL_4_0 = 8,
  46. STD_VIDEO_AV1_MESA_LEVEL_4_1 = 9,
  47. STD_VIDEO_AV1_MESA_LEVEL_4_2 = 10,
  48. STD_VIDEO_AV1_MESA_LEVEL_4_3 = 11,
  49. STD_VIDEO_AV1_MESA_LEVEL_5_0 = 12,
  50. STD_VIDEO_AV1_MESA_LEVEL_5_1 = 13,
  51. STD_VIDEO_AV1_MESA_LEVEL_5_2 = 14,
  52. STD_VIDEO_AV1_MESA_LEVEL_5_3 = 15,
  53. STD_VIDEO_AV1_MESA_LEVEL_6_0 = 16,
  54. STD_VIDEO_AV1_MESA_LEVEL_6_1 = 17,
  55. STD_VIDEO_AV1_MESA_LEVEL_6_2 = 18,
  56. STD_VIDEO_AV1_MESA_LEVEL_6_3 = 19,
  57. STD_VIDEO_AV1_MESA_LEVEL_7_0 = 20,
  58. STD_VIDEO_AV1_MESA_LEVEL_7_1 = 21,
  59. STD_VIDEO_AV1_MESA_LEVEL_7_2 = 22,
  60. STD_VIDEO_AV1_MESA_LEVEL_7_3 = 23,
  61. STD_VIDEO_AV1_MESA_LEVEL_MAX = 31,
  62. } StdVideoAV1MESALevel;
  63. typedef struct StdVideoAV1MESAFilmGrainFlags {
  64. uint8_t apply_grain;
  65. uint8_t chroma_scaling_from_luma;
  66. uint8_t overlap_flag;
  67. uint8_t clip_to_restricted_range;
  68. } StdVideoAV1MESAFilmGrainFlags;
  69. typedef struct StdVideoAV1MESAFilmGrainParameters {
  70. StdVideoAV1MESAFilmGrainFlags flags;
  71. uint32_t grain_scaling_minus_8;
  72. uint32_t ar_coeff_lag;
  73. uint32_t ar_coeff_shift_minus_6;
  74. uint32_t grain_scale_shift;
  75. uint16_t grain_seed;
  76. uint8_t num_y_points;
  77. uint8_t point_y_value[14];
  78. uint8_t point_y_scaling[14];
  79. uint8_t num_cb_points;
  80. uint8_t point_cb_value[10];
  81. uint8_t point_cb_scaling[10];
  82. uint8_t num_cr_points;
  83. uint8_t point_cr_value[10];
  84. uint8_t point_cr_scaling[10];
  85. int8_t ar_coeffs_y_plus_128[24];
  86. int8_t ar_coeffs_cb_plus_128[25];
  87. int8_t ar_coeffs_cr_plus_128[25];
  88. uint8_t cb_mult;
  89. uint8_t cb_luma_mult;
  90. uint16_t cb_offset;
  91. uint8_t cr_mult;
  92. uint8_t cr_luma_mult;
  93. uint16_t cr_offset;
  94. } StdVideoAV1MESAFilmGrainParameters;
  95. typedef struct StdVideoAV1MESAGlobalMotionFlags {
  96. uint8_t gm_invalid;
  97. } StdVideoAV1MESAGlobalMotionFlags;
  98. typedef struct StdVideoAV1MESAGlobalMotion {
  99. StdVideoAV1MESAGlobalMotionFlags flags;
  100. uint8_t gm_type;
  101. uint32_t gm_params[6];
  102. } StdVideoAV1MESAGlobalMotion;
  103. typedef struct StdVideoAV1MESALoopRestoration {
  104. uint8_t lr_type[3];
  105. uint8_t lr_unit_shift;
  106. uint8_t lr_uv_shift;
  107. } StdVideoAV1MESALoopRestoration;
  108. typedef struct StdVideoAV1MESATileInfoFlags {
  109. uint8_t uniform_tile_spacing_flag;
  110. } StdVideoAV1MESATileInfoFlags;
  111. typedef struct StdVideoAV1MESATileInfo {
  112. StdVideoAV1MESATileInfoFlags flags;
  113. uint8_t tile_cols;
  114. uint8_t tile_rows;
  115. uint8_t tile_start_col_sb[64];
  116. uint8_t tile_start_row_sb[64];
  117. uint8_t width_in_sbs_minus_1[64];
  118. uint8_t height_in_sbs_minus_1[64];
  119. uint16_t context_update_tile_id;
  120. uint8_t tile_size_bytes_minus1;
  121. } StdVideoAV1MESATileInfo;
  122. typedef struct StdVideoAV1MESAQuantizationFlags {
  123. uint8_t using_qmatrix;
  124. } StdVideoAV1MESAQuantizationFlags;
  125. typedef struct StdVideoAV1MESAQuantization {
  126. StdVideoAV1MESAQuantizationFlags flags;
  127. uint8_t base_q_idx;
  128. int8_t delta_q_y_dc;
  129. uint8_t diff_uv_delta;
  130. int8_t delta_q_u_dc;
  131. int8_t delta_q_u_ac;
  132. int8_t delta_q_v_dc;
  133. int8_t delta_q_v_ac;
  134. uint8_t qm_y;
  135. uint8_t qm_u;
  136. uint8_t qm_v;
  137. } StdVideoAV1MESAQuantization;
  138. typedef struct StdVideoAV1MESACDEF {
  139. uint8_t damping_minus_3;
  140. uint8_t bits;
  141. uint8_t y_pri_strength[8];
  142. uint8_t y_sec_strength[8];
  143. uint8_t uv_pri_strength[8];
  144. uint8_t uv_sec_strength[8];
  145. } StdVideoAV1MESACDEF;
  146. typedef struct StdVideoAV1MESADeltaQFlags {
  147. uint8_t delta_lf_present;
  148. uint8_t delta_lf_multi;
  149. } StdVideoAV1MESADeltaQFlags;
  150. typedef struct StdVideoAV1MESADeltaQ {
  151. StdVideoAV1MESADeltaQFlags flags;
  152. uint8_t delta_q_res;
  153. uint8_t delta_lf_res;
  154. } StdVideoAV1MESADeltaQ;
  155. typedef struct StdVideoAV1MESASegmentationFlags {
  156. uint8_t enabled;
  157. uint8_t update_map;
  158. uint8_t temporal_update;
  159. uint8_t update_data;
  160. } StdVideoAV1MESASegmentationFlags;
  161. typedef struct StdVideoAV1MESASegmentation {
  162. StdVideoAV1MESASegmentationFlags flags;
  163. uint8_t feature_enabled_bits[8];
  164. int16_t feature_data[8][8];
  165. } StdVideoAV1MESASegmentation;
  166. typedef struct StdVideoAV1MESALoopFilterFlags {
  167. uint8_t delta_enabled;
  168. uint8_t delta_update;
  169. } StdVideoAV1MESALoopFilterFlags;
  170. typedef struct StdVideoAV1MESALoopFilter {
  171. StdVideoAV1MESALoopFilterFlags flags;
  172. uint8_t level[4];
  173. uint8_t sharpness;
  174. int8_t ref_deltas[8];
  175. int8_t mode_deltas[2];
  176. } StdVideoAV1MESALoopFilter;
  177. typedef struct StdVideoAV1MESAFrameHeaderFlags {
  178. uint8_t error_resilient_mode;
  179. uint8_t disable_cdf_update;
  180. uint8_t use_superres;
  181. uint8_t render_and_frame_size_different;
  182. uint8_t allow_screen_content_tools;
  183. uint8_t is_filter_switchable;
  184. uint8_t force_integer_mv;
  185. uint8_t frame_size_override_flag;
  186. uint8_t buffer_removal_time_present_flag;
  187. uint8_t allow_intrabc;
  188. uint8_t frame_refs_short_signaling;
  189. uint8_t allow_high_precision_mv;
  190. uint8_t is_motion_mode_switchable;
  191. uint8_t use_ref_frame_mvs;
  192. uint8_t disable_frame_end_update_cdf;
  193. uint8_t allow_warped_motion;
  194. uint8_t reduced_tx_set;
  195. uint8_t reference_select;
  196. uint8_t skip_mode_present;
  197. uint8_t delta_q_present;
  198. uint8_t UsesLr;
  199. } StdVideoAV1MESAFrameHeaderFlags;
  200. typedef struct StdVideoAV1MESAFrameHeader {
  201. StdVideoAV1MESAFrameHeaderFlags flags;
  202. uint32_t frame_presentation_time;
  203. uint32_t display_frame_id;
  204. uint32_t current_frame_id;
  205. uint8_t frame_to_show_map_idx;
  206. uint8_t frame_type;
  207. uint8_t order_hint;
  208. uint8_t primary_ref_frame;
  209. uint16_t frame_width_minus_1;
  210. uint16_t frame_height_minus_1;
  211. uint16_t render_width_minus_1;
  212. uint16_t render_height_minus_1;
  213. uint8_t coded_denom;
  214. uint8_t refresh_frame_flags;
  215. uint8_t ref_order_hint[8];
  216. int8_t ref_frame_idx[7];
  217. uint32_t delta_frame_id_minus1[7];
  218. uint8_t interpolation_filter;
  219. uint8_t tx_mode;
  220. StdVideoAV1MESATileInfo tiling;
  221. StdVideoAV1MESAQuantization quantization;
  222. StdVideoAV1MESASegmentation segmentation;
  223. StdVideoAV1MESADeltaQ delta_q;
  224. StdVideoAV1MESALoopFilter loop_filter;
  225. StdVideoAV1MESACDEF cdef;
  226. StdVideoAV1MESALoopRestoration lr;
  227. StdVideoAV1MESAGlobalMotion global_motion[8]; // One per ref frame
  228. StdVideoAV1MESAFilmGrainParameters film_grain;
  229. } StdVideoAV1MESAFrameHeader;
  230. typedef struct StdVideoAV1MESAScreenCoding {
  231. uint8_t seq_force_screen_content_tools;
  232. } StdVideoAV1MESAScreenCoding;
  233. typedef struct StdVideoAV1MESATimingInfoFlags {
  234. uint8_t equal_picture_interval;
  235. } StdVideoAV1MESATimingInfoFlags;
  236. typedef struct StdVideoAV1MESATimingInfo {
  237. StdVideoAV1MESATimingInfoFlags flags;
  238. uint32_t num_units_in_display_tick;
  239. uint32_t time_scale;
  240. uint32_t num_ticks_per_picture_minus_1;
  241. } StdVideoAV1MESATimingInfo;
  242. typedef struct StdVideoAV1MESAColorConfigFlags {
  243. uint8_t mono_chrome;
  244. uint8_t color_range;
  245. uint8_t separate_uv_delta_q;
  246. } StdVideoAV1MESAColorConfigFlags;
  247. typedef struct StdVideoAV1MESAColorConfig {
  248. StdVideoAV1MESAColorConfigFlags flags;
  249. uint8_t bit_depth;
  250. uint8_t subsampling_x;
  251. uint8_t subsampling_y;
  252. } StdVideoAV1MESAColorConfig;
  253. typedef struct StdVideoAV1MESASequenceHeaderFlags {
  254. uint8_t still_picture;
  255. uint8_t reduced_still_picture_header;
  256. uint8_t use_128x128_superblock;
  257. uint8_t enable_filter_intra;
  258. uint8_t enable_intra_edge_filter;
  259. uint8_t enable_interintra_compound;
  260. uint8_t enable_masked_compound;
  261. uint8_t enable_warped_motion;
  262. uint8_t enable_dual_filter;
  263. uint8_t enable_order_hint;
  264. uint8_t enable_jnt_comp;
  265. uint8_t enable_ref_frame_mvs;
  266. uint8_t frame_id_numbers_present_flag;
  267. uint8_t enable_superres;
  268. uint8_t enable_cdef;
  269. uint8_t enable_restoration;
  270. uint8_t film_grain_params_present;
  271. uint8_t timing_info_present_flag;
  272. uint8_t initial_display_delay_present_flag;
  273. } StdVideoAV1MESASequenceHeaderFlags;
  274. typedef struct StdVideoAV1MESASequenceHeader {
  275. StdVideoAV1MESASequenceHeaderFlags flags;
  276. StdVideoAV1MESAProfile seq_profile;
  277. uint8_t frame_width_bits_minus_1;
  278. uint8_t frame_height_bits_minus_1;
  279. uint16_t max_frame_width_minus_1;
  280. uint16_t max_frame_height_minus_1;
  281. uint8_t delta_frame_id_length_minus_2;
  282. uint8_t additional_frame_id_length_minus_1;
  283. uint8_t order_hint_bits_minus_1;
  284. uint8_t seq_choose_integer_mv;
  285. uint8_t seq_force_integer_mv;
  286. StdVideoAV1MESATimingInfo timing_info;
  287. StdVideoAV1MESAColorConfig color_config;
  288. } StdVideoAV1MESASequenceHeader;
  289. typedef struct StdVideoAV1MESATile {
  290. uint16_t tg_start;
  291. uint16_t tg_end;
  292. uint16_t row;
  293. uint16_t column;
  294. uint32_t size;
  295. uint32_t offset;
  296. } StdVideoAV1MESATile;
  297. typedef struct StdVideoAV1MESATileList {
  298. StdVideoAV1MESATile *tile_list;
  299. uint32_t nb_tiles;
  300. } StdVideoAV1MESATileList;
  301. typedef struct VkVideoDecodeAV1PictureInfoMESA {
  302. VkStructureType sType;
  303. const void *pNext;
  304. StdVideoAV1MESAFrameHeader *frame_header;
  305. StdVideoAV1MESATileList *tile_list;
  306. uint8_t skip_mode_frame_idx[2];
  307. } VkVideoDecodeAV1PictureInfoMESA;
  308. typedef struct VkVideoDecodeAV1DpbSlotInfoMESA {
  309. VkStructureType sType;
  310. const void *pNext;
  311. uint8_t frameIdx;
  312. uint8_t ref_order_hint[7];
  313. uint8_t disable_frame_end_update_cdf;
  314. } VkVideoDecodeAV1DpbSlotInfoMESA;
  315. typedef struct VkVideoDecodeAV1SessionParametersAddInfoMESA {
  316. VkStructureType sType;
  317. const void *pNext;
  318. StdVideoAV1MESASequenceHeader *sequence_header;
  319. } VkVideoDecodeAV1SessionParametersAddInfoMESA;
  320. typedef struct VkVideoDecodeAV1SessionParametersCreateInfoMESA {
  321. VkStructureType sType;
  322. const void *pNext;
  323. const VkVideoDecodeAV1SessionParametersAddInfoMESA *pParametersAddInfo;
  324. } VkVideoDecodeAV1SessionParametersCreateInfoMESA;
  325. typedef struct VkVideoDecodeAV1ProfileInfoMESA {
  326. VkStructureType sType;
  327. const void *pNext;
  328. StdVideoAV1MESAProfile stdProfileIdc;
  329. } VkVideoDecodeAV1ProfileInfoMESA;
  330. typedef enum VkVideoDecodeAV1CapabilityFlagBitsMESA {
  331. VK_VIDEO_DECODE_AV1_CAPABILITY_EXTERNAL_FILM_GRAIN_MESA = 0x00000001,
  332. VK_VIDEO_DECODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_MESA = 0x7FFFFFFF
  333. } VkVideoDecodeAV1CapabilityFlagBitsMESA;
  334. typedef VkFlags VkVideoDecodeAV1CapabilityFlagsMESA;
  335. typedef struct VkVideoDecodeAV1CapabilitiesMESA {
  336. VkStructureType sType;
  337. const void *pNext;
  338. VkVideoDecodeAV1CapabilityFlagsMESA flags;
  339. StdVideoAV1MESALevel maxLevelIdc;
  340. } VkVideoDecodeAV1CapabilitiesMESA;
  341. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_MESA 1000509000
  342. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_MESA 1000509001
  343. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_ADD_INFO_MESA 1000509002
  344. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_MESA 1000509003
  345. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_MESA 1000509004
  346. #define VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_MESA 1000509005
  347. #ifdef __cplusplus
  348. }
  349. #endif
  350. #endif