PR #20756 opened by Lynne URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20756 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20756.patch
The issue is that Vulkan defines all padding to be in the LSBs for all padded pixel formats. We previously tried to fudge it, by treating padded pixel formats as 16-bit and ignoring top bits. This worked, until libplacebo got proper support, which broke the fudge. Instead of hacking it further, give up and define LSB-padded pixel formats, something we should have done from the start. Perhaps we could add some special cases in the command line interface to treat yuv420p as an MSB format in case yuv420p is not supported but yuv420pmsb is. >From 56f09324966dc9b507ce477c77f47562a8157460 Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sat, 18 Oct 2025 05:57:05 +0200 Subject: [PATCH 1/9] hwcontext_vulkan: add support for VK_EXT_zero_initialize_device_memory --- libavutil/hwcontext_vulkan.c | 16 ++++++++++++++++ libavutil/vulkan_functions.h | 1 + libavutil/vulkan_loader.h | 3 +++ 3 files changed, 20 insertions(+) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index ae4b07c698..45ca628070 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -82,6 +82,10 @@ typedef struct VulkanDeviceFeatures { VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR subgroup_rotate; VkPhysicalDeviceHostImageCopyFeaturesEXT host_image_copy; +#ifdef VK_EXT_zero_initialize_device_memory + VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT zero_initialize; +#endif + #ifdef VK_KHR_shader_expect_assume VkPhysicalDeviceShaderExpectAssumeFeaturesKHR expect_assume; #endif @@ -225,6 +229,11 @@ static void device_features_init(AVHWDeviceContext *ctx, VulkanDeviceFeatures *f FF_VK_STRUCT_EXT(s, &feats->device, &feats->host_image_copy, FF_VK_EXT_HOST_IMAGE_COPY, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT); +#ifdef VK_EXT_zero_initialize_device_memory + FF_VK_STRUCT_EXT(s, &feats->device, &feats->zero_initialize, FF_VK_EXT_ZERO_INITIALIZE, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT); +#endif + #ifdef VK_KHR_shader_expect_assume FF_VK_STRUCT_EXT(s, &feats->device, &feats->expect_assume, FF_VK_EXT_EXPECT_ASSUME, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR); @@ -311,6 +320,10 @@ static void device_features_copy_needed(VulkanDeviceFeatures *dst, VulkanDeviceF COPY_VAL(subgroup_rotate.shaderSubgroupRotate); COPY_VAL(host_image_copy.hostImageCopy); +#ifdef VK_EXT_zero_initialize_device_memory + COPY_VAL(zero_initialize.zeroInitializeDeviceMemory); +#endif + COPY_VAL(video_maintenance_1.videoMaintenance1); #ifdef VK_KHR_video_maintenance2 COPY_VAL(video_maintenance_2.videoMaintenance2); @@ -642,6 +655,9 @@ static const VulkanOptExtension optional_device_exts[] = { { VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, FF_VK_EXT_COOP_MATRIX }, { VK_EXT_SHADER_OBJECT_EXTENSION_NAME, FF_VK_EXT_SHADER_OBJECT }, { VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE }, +#ifdef VK_EXT_zero_initialize_device_memory + { VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME, FF_VK_EXT_ZERO_INITIALIZE }, +#endif #ifdef VK_KHR_shader_expect_assume { VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME, FF_VK_EXT_EXPECT_ASSUME }, #endif diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h index 4d20b7d806..d6a88160f8 100644 --- a/libavutil/vulkan_functions.h +++ b/libavutil/vulkan_functions.h @@ -50,6 +50,7 @@ typedef uint64_t FFVulkanExtensions; #define FF_VK_EXT_EXPECT_ASSUME (1ULL << 16) /* VK_KHR_shader_expect_assume */ #define FF_VK_EXT_SUBGROUP_ROTATE (1ULL << 17) /* VK_KHR_shader_subgroup_rotate */ #define FF_VK_EXT_HOST_IMAGE_COPY (1ULL << 18) /* VK_EXT_host_image_copy */ +#define FF_VK_EXT_ZERO_INITIALIZE (1ULL << 19) /* VK_EXT_zero_initialize_device_memory */ /* Video extensions */ #define FF_VK_EXT_VIDEO_QUEUE (1ULL << 36) /* VK_KHR_video_queue */ diff --git a/libavutil/vulkan_loader.h b/libavutil/vulkan_loader.h index 3207511663..dc558f9d64 100644 --- a/libavutil/vulkan_loader.h +++ b/libavutil/vulkan_loader.h @@ -60,6 +60,9 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions, { VK_EXT_SHADER_OBJECT_EXTENSION_NAME, FF_VK_EXT_SHADER_OBJECT }, { VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE }, { VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, FF_VK_EXT_HOST_IMAGE_COPY }, +#ifdef VK_EXT_zero_initialize_device_memory + { VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME, FF_VK_EXT_ZERO_INITIALIZE }, +#endif { VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME, FF_VK_EXT_VIDEO_MAINTENANCE_1 }, #ifdef VK_KHR_video_maintenance2 { VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME, FF_VK_EXT_VIDEO_MAINTENANCE_2 }, -- 2.49.1 >From 7d177055efacd3be65977665737ecb341080d127 Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Thu, 16 Oct 2025 03:11:32 +0200 Subject: [PATCH 2/9] vulkan_decode: align images to the subsampling Normally, the Vulkan drivers handle this. But Vulkan decided "nah". This requires API users to crop out odd-numbered images with subsampling. --- libavcodec/vulkan_decode.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index cbf2ab8194..d22ccc21aa 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1130,8 +1130,9 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) } } - frames_ctx->width = avctx->coded_width; - frames_ctx->height = avctx->coded_height; + const AVPixFmtDescriptor *pdesc = av_pix_fmt_desc_get(frames_ctx->sw_format); + frames_ctx->width = FFALIGN(avctx->coded_width, 1 << pdesc->log2_chroma_w); + frames_ctx->height = FFALIGN(avctx->coded_height, 1 << pdesc->log2_chroma_h); frames_ctx->format = AV_PIX_FMT_VULKAN; hwfc->format[0] = vkfmt; @@ -1338,8 +1339,8 @@ int ff_vk_decode_init(AVCodecContext *avctx) dpb_frames = (AVHWFramesContext *)ctx->common.dpb_hwfc_ref->data; dpb_frames->format = s->frames->format; dpb_frames->sw_format = s->frames->sw_format; - dpb_frames->width = avctx->coded_width; - dpb_frames->height = avctx->coded_height; + dpb_frames->width = s->frames->width; + dpb_frames->height = s->frames->height; dpb_hwfc = dpb_frames->hwctx; dpb_hwfc->create_pnext = (void *)ff_vk_find_struct(ctx->s.hwfc->create_pnext, -- 2.49.1 >From f6dd55b8db7ff0fde2a02e2589fee4b33562ae0b Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Fri, 17 Oct 2025 14:12:11 +0200 Subject: [PATCH 3/9] vulkan/rangecoder: ifdef out encode and decode chunks There's little code sharing between them. --- libavcodec/vulkan/rangecoder.comp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/libavcodec/vulkan/rangecoder.comp b/libavcodec/vulkan/rangecoder.comp index b6b6c0490f..98ff743b2e 100644 --- a/libavcodec/vulkan/rangecoder.comp +++ b/libavcodec/vulkan/rangecoder.comp @@ -31,6 +31,19 @@ struct RangeCoder { uint8_t outstanding_byte; }; +void rac_init(out RangeCoder r, u8buf data, uint buf_size) +{ + r.bytestream_start = uint64_t(data); + r.bytestream = uint64_t(data); + r.bytestream_end = uint64_t(data) + buf_size; + r.low = 0; + r.range = 0xFF00; + r.outstanding_count = uint16_t(0); + r.outstanding_byte = uint8_t(0xFF); +} + +#if !defined(DECODE) + #ifdef FULL_RENORM /* Full renorm version that can handle outstanding_byte == 0xFF */ void renorm_encoder(inout RangeCoder c) @@ -165,16 +178,7 @@ uint32_t rac_terminate(inout RangeCoder c) return uint32_t(uint64_t(c.bytestream) - uint64_t(c.bytestream_start)); } -void rac_init(out RangeCoder r, u8buf data, uint buf_size) -{ - r.bytestream_start = uint64_t(data); - r.bytestream = uint64_t(data); - r.bytestream_end = uint64_t(data) + buf_size; - r.low = 0; - r.range = 0xFF00; - r.outstanding_count = uint16_t(0); - r.outstanding_byte = uint8_t(0xFF); -} +#else /* Decoder */ uint overread = 0; @@ -239,3 +243,5 @@ bool get_rac_equi(inout RangeCoder c) { return get_rac_internal(c, c.range >> 1); } + +#endif -- 2.49.1 >From a64d6e32ff3d3a1d135daa0ba76fa06ddda36ffa Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 21:51:40 +0100 Subject: [PATCH 4/9] lavu/pixfmt: add grayscale 10 and 12-bit MSB padded variants --- libavutil/pixdesc.c | 42 ++++++++++++++++++++++++++++++++ libavutil/pixfmt.h | 7 ++++++ tests/ref/fate/imgutils | 8 ++++++ tests/ref/fate/sws-pixdesc-query | 14 +++++++++++ 4 files changed, 71 insertions(+) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 3c31ee2132..9ea8fccb94 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -734,6 +734,27 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .alias = "y10le", }, + [AV_PIX_FMT_GRAY10MSBBE] = { + .name = "gray10msbbe", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y10msbbe", + }, + [AV_PIX_FMT_GRAY10MSBLE] = { + .name = "gray10msble", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + }, + .alias = "y10msble", + }, [AV_PIX_FMT_GRAY12BE] = { .name = "gray12be", .nb_components = 1, @@ -755,6 +776,27 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .alias = "y12le", }, + [AV_PIX_FMT_GRAY12MSBBE] = { + .name = "gray12msbbe", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 4, 12 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y12msbbe", + }, + [AV_PIX_FMT_GRAY12MSBLE] = { + .name = "gray12msble", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 4, 12 }, /* Y */ + }, + .alias = "y12msble", + }, [AV_PIX_FMT_GRAY14BE] = { .name = "gray14be", .nb_components = 1, diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 6aa1c94cec..82396563a8 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -499,6 +499,11 @@ enum AVPixelFormat { AV_PIX_FMT_OHCODEC, /// hardware decoding through openharmony + AV_PIX_FMT_GRAY10MSBBE, ///< Y , 10bpp, big-endian + AV_PIX_FMT_GRAY10MSBLE, ///< Y , 10bpp, little-endian + AV_PIX_FMT_GRAY12MSBBE, ///< Y , 12bpp, big-endian + AV_PIX_FMT_GRAY12MSBLE, ///< Y , 12bpp, little-endian + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -551,6 +556,8 @@ enum AVPixelFormat { #define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) #define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) +#define AV_PIX_FMT_GRAY10MSB AV_PIX_FMT_NE(GRAY10MSBBE, GRAY10MSBLE) +#define AV_PIX_FMT_GRAY12MSB AV_PIX_FMT_NE(GRAY12MSBBE, GRAY12MSBLE) #define AV_PIX_FMT_YUV444P10MSB AV_PIX_FMT_NE(YUV444P10MSBBE, YUV444P10MSBLE) #define AV_PIX_FMT_YUV444P12MSB AV_PIX_FMT_NE(YUV444P12MSBBE, YUV444P12MSBLE) diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index ccd1522ef2..738ce0289c 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -306,6 +306,10 @@ gbrp10msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 gbrp10msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 gbrp12msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 gbrp12msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 +gray10msbbe planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 +gray10msble planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 +gray12msbbe planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 +gray12msble planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 image_fill_black tests yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af @@ -559,3 +563,7 @@ gbrp10msbbe total_size: 18432, black_unknown_crc: 0x00000000, black_tv_cr gbrp10msble total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 gbrp12msbbe total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 gbrp12msble total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gray10msbbe total_size: 6144, black_unknown_crc: 0x02d4a26f, black_tv_crc: 0x02d4a26f, black_pc_crc: 0x00000000 +gray10msble total_size: 6144, black_unknown_crc: 0xb93165c3, black_tv_crc: 0xb93165c3, black_pc_crc: 0x00000000 +gray12msbbe total_size: 6144, black_unknown_crc: 0x02d4a26f, black_tv_crc: 0x02d4a26f, black_pc_crc: 0x00000000 +gray12msble total_size: 6144, black_unknown_crc: 0xb93165c3, black_tv_crc: 0xb93165c3, black_pc_crc: 0x00000000 diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query index a062088d54..af421b4eee 100644 --- a/tests/ref/fate/sws-pixdesc-query +++ b/tests/ref/fate/sws-pixdesc-query @@ -73,8 +73,12 @@ isNBPS: gbrp9le gray10be gray10le + gray10msbbe + gray10msble gray12be gray12le + gray12msbbe + gray12msble gray14be gray14le gray9be @@ -186,7 +190,9 @@ isBE: gbrpf16be gbrpf32be gray10be + gray10msbbe gray12be + gray12msbbe gray14be gray16be gray32be @@ -625,8 +631,12 @@ Gray: gray gray10be gray10le + gray10msbbe + gray10msble gray12be gray12le + gray12msbbe + gray12msble gray14be gray14le gray16be @@ -1225,6 +1235,10 @@ DataInHighBits: gbrp10msble gbrp12msbbe gbrp12msble + gray10msbbe + gray10msble + gray12msbbe + gray12msble p010be p010le p012be -- 2.49.1 >From 9dfbeb381318d9f918869a64b77bdab3e26cb61c Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 20:16:19 +0000 Subject: [PATCH 5/9] lavu/pixfmt: add 420 and 422, 10 and 12-bit MSB padded variants Vulkan has defined all its 3-plane formats as MSB padded. --- libavutil/pixdesc.c | 48 ++++++++++++++++++++++++++++++++ libavutil/pixfmt.h | 12 ++++++++ tests/ref/fate/imgutils | 8 ++++++ tests/ref/fate/sws-pixdesc-query | 22 +++++++++++++++ 4 files changed, 90 insertions(+) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 9ea8fccb94..a16d6b170a 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -1503,6 +1503,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, }, + [AV_PIX_FMT_YUV420P10MSBLE] = { + .name = "yuv420p10msble", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 2, 0, 6, 10 }, /* U */ + { 2, 2, 0, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, + [AV_PIX_FMT_YUV420P10MSBBE] = { + .name = "yuv420p10msbbe", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 2, 0, 6, 10 }, /* U */ + { 2, 2, 0, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, [AV_PIX_FMT_YUV420P12LE] = { .name = "yuv420p12le", .nb_components = 3, @@ -1623,6 +1647,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, }, + [AV_PIX_FMT_YUV422P10MSBLE] = { + .name = "yuv422p10msble", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 2, 0, 6, 10 }, /* U */ + { 2, 2, 0, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, + [AV_PIX_FMT_YUV422P10MSBBE] = { + .name = "yuv422p10msbbe", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 6, 10 }, /* Y */ + { 1, 2, 0, 6, 10 }, /* U */ + { 2, 2, 0, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, [AV_PIX_FMT_YUV422P12LE] = { .name = "yuv422p12le", .nb_components = 3, diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 82396563a8..d22c939ba9 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -503,6 +503,14 @@ enum AVPixelFormat { AV_PIX_FMT_GRAY10MSBLE, ///< Y , 10bpp, little-endian AV_PIX_FMT_GRAY12MSBBE, ///< Y , 12bpp, big-endian AV_PIX_FMT_GRAY12MSBLE, ///< Y , 12bpp, little-endian + AV_PIX_FMT_YUV420P10MSBBE, ///< planar YUV 4:2:0, 30bpp, (1 Cr & Cb sample per 2x2 Y samples), lowest bits zero, big-endian + AV_PIX_FMT_YUV420P10MSBLE, ///< planar YUV 4:2:0, 30bpp, (1 Cr & Cb sample per 2x2 Y samples), lowest bits zero, little-endian + AV_PIX_FMT_YUV420P12MSBBE, ///< planar YUV 4:2:0, 30bpp, (1 Cr & Cb sample per 2x2 Y samples), lowest bits zero, big-endian + AV_PIX_FMT_YUV420P12MSBLE, ///< planar YUV 4:2:0, 30bpp, (1 Cr & Cb sample per 2x2 Y samples), lowest bits zero, little-endian + AV_PIX_FMT_YUV422P10MSBBE, ///< planar YUV 4:2:2, 30bpp, (1 Cr & Cb sample per 2x1 Y samples), lowest bits zero, big-endian + AV_PIX_FMT_YUV422P10MSBLE, ///< planar YUV 4:2:2, 30bpp, (1 Cr & Cb sample per 2x1 Y samples), lowest bits zero, little-endian + AV_PIX_FMT_YUV422P12MSBBE, ///< planar YUV 4:2:2, 30bpp, (1 Cr & Cb sample per 2x1 Y samples), lowest bits zero, big-endian + AV_PIX_FMT_YUV422P12MSBLE, ///< planar YUV 4:2:2, 30bpp, (1 Cr & Cb sample per 2x1 Y samples), lowest bits zero, little-endian AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -558,6 +566,10 @@ enum AVPixelFormat { #define AV_PIX_FMT_GRAY10MSB AV_PIX_FMT_NE(GRAY10MSBBE, GRAY10MSBLE) #define AV_PIX_FMT_GRAY12MSB AV_PIX_FMT_NE(GRAY12MSBBE, GRAY12MSBLE) +#define AV_PIX_FMT_YUV420P10MSB AV_PIX_FMT_NE(YUV420P10MSBBE, YUV420P10MSBLE) +#define AV_PIX_FMT_YUV420P12MSB AV_PIX_FMT_NE(YUV420P12MSBBE, YUV420P12MSBLE) +#define AV_PIX_FMT_YUV422P10MSB AV_PIX_FMT_NE(YUV422P10MSBBE, YUV422P10MSBLE) +#define AV_PIX_FMT_YUV422P12MSB AV_PIX_FMT_NE(YUV422P12MSBBE, YUV422P12MSBLE) #define AV_PIX_FMT_YUV444P10MSB AV_PIX_FMT_NE(YUV444P10MSBBE, YUV444P10MSBLE) #define AV_PIX_FMT_YUV444P12MSB AV_PIX_FMT_NE(YUV444P12MSBBE, YUV444P12MSBLE) diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index 738ce0289c..2ef30e2bc1 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -310,6 +310,10 @@ gray10msbbe planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 gray10msble planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 gray12msbbe planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 gray12msble planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 +yuv420p10msbbe planes: 3, linesizes: 128 64 64 0, plane_sizes: 6144 1536 1536 0, plane_offsets: 6144 1536 0, total_size: 9216 +yuv420p10msble planes: 3, linesizes: 128 64 64 0, plane_sizes: 6144 1536 1536 0, plane_offsets: 6144 1536 0, total_size: 9216 +yuv422p10msbbe planes: 3, linesizes: 128 64 64 0, plane_sizes: 6144 3072 3072 0, plane_offsets: 6144 3072 0, total_size: 12288 +yuv422p10msble planes: 3, linesizes: 128 64 64 0, plane_sizes: 6144 3072 3072 0, plane_offsets: 6144 3072 0, total_size: 12288 image_fill_black tests yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af @@ -567,3 +571,7 @@ gray10msbbe total_size: 6144, black_unknown_crc: 0x02d4a26f, black_tv_cr gray10msble total_size: 6144, black_unknown_crc: 0xb93165c3, black_tv_crc: 0xb93165c3, black_pc_crc: 0x00000000 gray12msbbe total_size: 6144, black_unknown_crc: 0x02d4a26f, black_tv_crc: 0x02d4a26f, black_pc_crc: 0x00000000 gray12msble total_size: 6144, black_unknown_crc: 0xb93165c3, black_tv_crc: 0xb93165c3, black_pc_crc: 0x00000000 +yuv420p10msbbe total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 +yuv420p10msble total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 +yuv422p10msbbe total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 +yuv422p10msble total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query index af421b4eee..baca687697 100644 --- a/tests/ref/fate/sws-pixdesc-query +++ b/tests/ref/fate/sws-pixdesc-query @@ -115,6 +115,8 @@ isNBPS: y212le yuv420p10be yuv420p10le + yuv420p10msbbe + yuv420p10msble yuv420p12be yuv420p12le yuv420p14be @@ -123,6 +125,8 @@ isNBPS: yuv420p9le yuv422p10be yuv422p10le + yuv422p10msbbe + yuv422p10msble yuv422p12be yuv422p12le yuv422p14be @@ -234,11 +238,13 @@ isBE: yaf16be yaf32be yuv420p10be + yuv420p10msbbe yuv420p12be yuv420p14be yuv420p16be yuv420p9be yuv422p10be + yuv422p10msbbe yuv422p12be yuv422p14be yuv422p16be @@ -327,6 +333,8 @@ isYUV: yuv420p yuv420p10be yuv420p10le + yuv420p10msbbe + yuv420p10msble yuv420p12be yuv420p12le yuv420p14be @@ -338,6 +346,8 @@ isYUV: yuv422p yuv422p10be yuv422p10le + yuv422p10msbbe + yuv422p10msble yuv422p12be yuv422p12le yuv422p14be @@ -430,6 +440,8 @@ isPlanarYUV: yuv420p yuv420p10be yuv420p10le + yuv420p10msbbe + yuv420p10msble yuv420p12be yuv420p12le yuv420p14be @@ -441,6 +453,8 @@ isPlanarYUV: yuv422p yuv422p10be yuv422p10le + yuv422p10msbbe + yuv422p10msble yuv422p12be yuv422p12le yuv422p14be @@ -1050,6 +1064,8 @@ Planar: yuv420p yuv420p10be yuv420p10le + yuv420p10msbbe + yuv420p10msble yuv420p12be yuv420p12le yuv420p14be @@ -1061,6 +1077,8 @@ Planar: yuv422p yuv422p10be yuv422p10le + yuv422p10msbbe + yuv422p10msble yuv422p12be yuv422p12le yuv422p14be @@ -1259,6 +1277,10 @@ DataInHighBits: y210le y212be y212le + yuv420p10msbbe + yuv420p10msble + yuv422p10msbbe + yuv422p10msble yuv444p10msbbe yuv444p10msble yuv444p12msbbe -- 2.49.1 >From 59794e001bf865713be66dd6aec880b8b4675303 Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 21:51:51 +0100 Subject: [PATCH 6/9] hwcontext_vulkan: fix grayscale 10 and 12-bit formats using the new MSB formats --- libavcodec/vulkan_decode.c | 3 +++ libavutil/hwcontext_vulkan.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index d22ccc21aa..c2381155ab 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1113,6 +1113,9 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) hwfc->create_pnext = &prof->profile_list; } else { switch (frames_ctx->sw_format) { + /* Vulkan's formats are all LSB-padded */ + case AV_PIX_FMT_GRAY10: frames_ctx->sw_format = AV_PIX_FMT_GRAY10MSB; break; + case AV_PIX_FMT_GRAY12: frames_ctx->sw_format = AV_PIX_FMT_GRAY12MSB; break; case AV_PIX_FMT_GBRAP16: /* This should be more efficient for downloading and using */ frames_ctx->sw_format = AV_PIX_FMT_RGBA64; diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 45ca628070..39ba8a4e5c 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -372,8 +372,8 @@ static const struct FFVkFormatEntry { } vk_formats_list[] = { /* Gray formats */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_GRAY8, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY10, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY12, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_R10X6_UNORM_PACK16, AV_PIX_FMT_GRAY10MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_R12X4_UNORM_PACK16, AV_PIX_FMT_GRAY12MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY14, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY16, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R32_UINT, AV_PIX_FMT_GRAY32, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R32_UINT } }, -- 2.49.1 >From fa936d465789983938a342d8f0acbb2f0df13bf6 Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 20:12:15 +0000 Subject: [PATCH 7/9] hwcontext_vulkan: fix 3-plane 444 10 and 12-bit formats using the new MSB formats We previously tried to fudge this somehow, but the pixel formats are simply broken and we cannot use them without declaring them as MSB. --- libavcodec/vulkan_decode.c | 6 ++++++ libavutil/hwcontext_vulkan.c | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index c2381155ab..a43f02f21e 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1116,6 +1116,12 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) /* Vulkan's formats are all LSB-padded */ case AV_PIX_FMT_GRAY10: frames_ctx->sw_format = AV_PIX_FMT_GRAY10MSB; break; case AV_PIX_FMT_GRAY12: frames_ctx->sw_format = AV_PIX_FMT_GRAY12MSB; break; + case AV_PIX_FMT_YUV420P10: frames_ctx->sw_format = AV_PIX_FMT_YUV420P10MSB; break; + case AV_PIX_FMT_YUV420P12: frames_ctx->sw_format = AV_PIX_FMT_YUV420P12MSB; break; + case AV_PIX_FMT_YUV422P10: frames_ctx->sw_format = AV_PIX_FMT_YUV422P10MSB; break; + case AV_PIX_FMT_YUV422P12: frames_ctx->sw_format = AV_PIX_FMT_YUV422P12MSB; break; + case AV_PIX_FMT_YUV444P10: frames_ctx->sw_format = AV_PIX_FMT_YUV444P10MSB; break; + case AV_PIX_FMT_YUV444P12: frames_ctx->sw_format = AV_PIX_FMT_YUV444P12MSB; break; case AV_PIX_FMT_GBRAP16: /* This should be more efficient for downloading and using */ frames_ctx->sw_format = AV_PIX_FMT_RGBA64; diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 39ba8a4e5c..e02ddc5e1b 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -437,16 +437,16 @@ static const struct FFVkFormatEntry { /* Three-plane 420, 422, 444 at 8, 10, 12 and 16 bits */ { VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, AV_PIX_FMT_YUV420P, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, AV_PIX_FMT_YUV420P10, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, AV_PIX_FMT_YUV420P12, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, AV_PIX_FMT_YUV420P10MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, AV_PIX_FMT_YUV420P12MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, AV_PIX_FMT_YUV420P16, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, AV_PIX_FMT_YUV422P, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, AV_PIX_FMT_YUV422P10, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, AV_PIX_FMT_YUV422P12, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, AV_PIX_FMT_YUV422P10MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, AV_PIX_FMT_YUV422P12MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, AV_PIX_FMT_YUV422P16, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, AV_PIX_FMT_YUV444P, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, AV_PIX_FMT_YUV444P10, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, AV_PIX_FMT_YUV444P12, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, AV_PIX_FMT_YUV444P10MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, AV_PIX_FMT_YUV444P12MSB, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, AV_PIX_FMT_YUV444P16, ASPECT_3PLANE, 3, 1, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, /* Single plane 422 at 8, 10, 12 and 16 bits */ -- 2.49.1 >From ee9b9c1141abdc6985fbb9d4184a20b17e6ede1d Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 22:01:37 +0100 Subject: [PATCH 8/9] hwcontext_vulkan: remove unsupported/broken pixel formats We have no use for 14-bit pixel formats for now, so remove support for gray14, which was broken due to the LSB padding issue. Similarly YUVA at 10/12 bit was broken for the same reason. --- libavutil/hwcontext_vulkan.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index e02ddc5e1b..040a8bd00c 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -374,7 +374,6 @@ static const struct FFVkFormatEntry { { VK_FORMAT_R8_UNORM, AV_PIX_FMT_GRAY8, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8_UNORM } }, { VK_FORMAT_R10X6_UNORM_PACK16, AV_PIX_FMT_GRAY10MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R12X4_UNORM_PACK16, AV_PIX_FMT_GRAY12MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY14, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY16, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R32_UINT, AV_PIX_FMT_GRAY32, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R32_UINT } }, { VK_FORMAT_R32_SFLOAT, AV_PIX_FMT_GRAYF32, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R32_SFLOAT } }, @@ -458,19 +457,14 @@ static const struct FFVkFormatEntry { /* Planar YUVA 420 at 8, 10 and 16 bits */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_YUVA420P, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA420P10, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA420P16, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, /* Planar YUVA 422 at 8, 10, 12 and 16 bits */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_YUVA422P, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA422P10, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA422P12, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA422P16, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, /* Planar YUVA 444 at 8, 10, 12 and 16 bits */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_YUVA444P, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA444P10, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA444P12, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_YUVA444P16, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, /* Single plane 444 at 8, 10, 12 and 16 bits */ -- 2.49.1 >From ad3295204a285d07a080dff9666c4a051cf7fa78 Mon Sep 17 00:00:00 2001 From: Lynne <[email protected]> Date: Sun, 26 Oct 2025 22:36:33 +0100 Subject: [PATCH 9/9] lavu: bump minor and add APIchanges entry for the new pixfmts --- doc/APIchanges | 5 +++++ libavutil/version.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 3ec8e25f03..8d24f22473 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,11 @@ The last version increases of all libraries were on 2025-03-28 API changes, most recent first: +2025-10-xx - xxxxxxxxxx - lavu 60.15.100 - pixfmt.h + Add AV_PIX_FMT_GRAY10MSB, AV_PIX_FMT_GRAY12MSB, + AV_PIX_FMT_YUV420P10MSB, AV_PIX_FMT_YUV420P12MSB, + AV_PIX_FMT_YUV422P10MSB, AV_PIX_FMT_YUV422P12MSB. + 2025-10-xx - xxxxxxxxxx - lavu 60.14.100 - csp.h Add av_csp_approximate_eotf_gamma(). diff --git a/libavutil/version.h b/libavutil/version.h index 176b99aef3..f2c554a560 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 60 -#define LIBAVUTIL_VERSION_MINOR 14 +#define LIBAVUTIL_VERSION_MINOR 15 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
