Submitted By: Douglas R. Reno Date: 2024-03-02 Initial Package Version: 6.1.1 Origin: Upstream (pointer from Joe Locash) Upstream Status: Applied (commit e06ce6d2b45edac4a2df04f304e18d4727417d24) Description: Fixes building Vulkan support with newer versions of the Vulkan API by renaming the bundled Mesa AV1 headers, working around build failures with the new standardized AV1 decoding definitions. diff -Naurp ffmpeg-6.1.1.orig/libavcodec/Makefile ffmpeg-6.1.1/libavcodec/Makefile --- ffmpeg-6.1.1.orig/libavcodec/Makefile 2024-03-02 13:33:17.247258676 -0600 +++ ffmpeg-6.1.1/libavcodec/Makefile 2024-03-02 13:34:10.778669517 -0600 @@ -1284,7 +1284,7 @@ SKIPHEADERS + aacenc_quantization.h \ aacenc_quantization_misc.h \ bitstream_template.h \ - vulkan_video_codec_av1std.h \ + vulkan_video_codec_av1std_mesa.h \ $(ARCH)/vpx_arith.h \ SKIPHEADERS-$(CONFIG_AMF) += amfenc.h @@ -1306,7 +1306,7 @@ SKIPHEADERS-$(CONFIG_XVMC) + SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_decode.h vaapi_hevc.h vaapi_encode.h SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h vdpau_internal.h SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vt_internal.h -SKIPHEADERS-$(CONFIG_VULKAN) += vulkan.h vulkan_video.h vulkan_decode.h vulkan_video_codec_av1std_decode.h +SKIPHEADERS-$(CONFIG_VULKAN) += vulkan.h vulkan_video.h vulkan_decode.h vulkan_video_codec_av1std_decode_mesa.h SKIPHEADERS-$(CONFIG_V4L2_M2M) += v4l2_buffers.h v4l2_context.h v4l2_m2m.h SKIPHEADERS-$(CONFIG_ZLIB) += zlib_wrapper.h diff -Naurp ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_decode.h ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_decode.h --- ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_decode.h 2024-03-02 13:33:17.253258722 -0600 +++ ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_decode.h 1969-12-31 18:00:00.000000000 -0600 @@ -1,36 +0,0 @@ -/* 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_DECODE_H_ -#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_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_decode 1 - - - -#ifdef __cplusplus -} -#endif - -#endif diff -Naurp ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_decode_mesa.h ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_decode_mesa.h --- ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_decode_mesa.h 1969-12-31 18:00:00.000000000 -0600 +++ ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_decode_mesa.h 2024-03-02 13:35:44.739389912 -0600 @@ -0,0 +1,36 @@ +/* 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_DECODE_MESA_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_MESA_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_decode 1 + + + +#ifdef __cplusplus +} +#endif + +#endif diff -Naurp ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std.h ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std.h --- ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std.h 2024-03-02 13:33:17.267258829 -0600 +++ ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std.h 1969-12-31 18:00:00.000000000 -0600 @@ -1,403 +0,0 @@ -/* 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 diff -Naurp ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_mesa.h ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_mesa.h --- ffmpeg-6.1.1.orig/libavcodec/vulkan_video_codec_av1std_mesa.h 1969-12-31 18:00:00.000000000 -0600 +++ ffmpeg-6.1.1/libavcodec/vulkan_video_codec_av1std_mesa.h 2024-03-02 13:36:02.126523128 -0600 @@ -0,0 +1,403 @@ +/* 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_MESA_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_MESA_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 diff -Naurp ffmpeg-6.1.1.orig/libavcodec/vulkan_video.h ffmpeg-6.1.1/libavcodec/vulkan_video.h --- ffmpeg-6.1.1.orig/libavcodec/vulkan_video.h 2024-03-02 13:33:17.284258960 -0600 +++ ffmpeg-6.1.1/libavcodec/vulkan_video.h 2024-03-02 13:34:27.741799638 -0600 @@ -23,8 +23,8 @@ #include "vulkan.h" #include -#include "vulkan_video_codec_av1std.h" -#include "vulkan_video_codec_av1std_decode.h" +#include "vulkan_video_codec_av1std_mesa.h" +#include "vulkan_video_codec_av1std_decode_mesa.h" #define CODEC_VER_MAJ(ver) (ver >> 22) #define CODEC_VER_MIN(ver) ((ver >> 12) & ((1 << 10) - 1))