Commit 2983c23762 for ffmpeg
commit 2983c23762ab62160ad8b28dff6042d15efabf20
Author: Lynne <dev@lynne.ee>
Date: Sun Jul 26 13:53:42 2026 +0800
avutil: add AV_PIX_FMT_XYZP12
Planar 12-bit XYZ, the natural planar layout for DCI JPEG2000 content.
Also wire it into the Vulkan format table and shader format helpers.
diff --git a/doc/APIchanges b/doc/APIchanges
index fb421cea72..f6e68f5eac 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2026-06-23.
API changes, most recent first:
+2026-10-03 - xxxxxxxxxx - lavu 61.11.100 - pixfmt.h
+ Add AV_PIX_FMT_XYZP12LE, AV_PIX_FMT_XYZP12BE, and AV_PIX_FMT_XYZP12.
+
2026-09-xx - xxxxxxxxxx - lavfi 12.5.100 - avfilter.h buffersrc.h buffersink.h
Add AVFilterLink.chroma_location, AVBufferSrcParameters.chroma_location and
av_buffersink_get_chroma_location().
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index fab3532df9..63d2ab5c43 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -514,6 +514,9 @@ static const struct FFVkFormatEntry {
{ VK_FORMAT_R16_SFLOAT, AV_PIX_FMT_GBRPF16, VK_IMAGE_ASPECT_COLOR_BIT, 3, 3, 3, { VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SFLOAT } },
{ VK_FORMAT_R32_SFLOAT, AV_PIX_FMT_GBRPF32, VK_IMAGE_ASPECT_COLOR_BIT, 3, 3, 3, { VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SFLOAT } },
+ /* XYZ */
+ { VK_FORMAT_R16_UNORM, AV_PIX_FMT_XYZP12, VK_IMAGE_ASPECT_COLOR_BIT, 3, 3, 3, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } },
+
/* Planar RGB + Alpha */
{ VK_FORMAT_R8_UNORM, AV_PIX_FMT_GBRAP, 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_GBRAP10, VK_IMAGE_ASPECT_COLOR_BIT, 4, 4, 4, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } },
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index f1e80cb31c..c7cbfa8658 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2145,6 +2145,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
},
.flags = AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_BE,
},
+ [AV_PIX_FMT_XYZP12LE] = {
+ .name = "xyzp12le",
+ .nb_components = 3,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 0, 2, 0, 4, 12 }, /* X */
+ { 1, 2, 0, 4, 12 }, /* Y */
+ { 2, 2, 0, 4, 12 }, /* Z */
+ },
+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_XYZ,
+ },
+ [AV_PIX_FMT_XYZP12BE] = {
+ .name = "xyzp12be",
+ .nb_components = 3,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 0, 2, 0, 4, 12 }, /* X */
+ { 1, 2, 0, 4, 12 }, /* Y */
+ { 2, 2, 0, 4, 12 }, /* Z */
+ },
+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_BE,
+ },
#define BAYER8_DESC_COMMON \
.nb_components= 3, \
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index b08881cc1f..750e05b644 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -505,6 +505,9 @@ enum AVPixelFormat {
*/
AV_PIX_FMT_CUARRAY,
+ AV_PIX_FMT_XYZP12LE, ///< planar XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
+ AV_PIX_FMT_XYZP12BE, ///< planar XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
+
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
};
@@ -603,6 +606,8 @@ enum AVPixelFormat {
#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE)
#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE)
+#define AV_PIX_FMT_XYZP12 AV_PIX_FMT_NE(XYZP12BE, XYZP12LE)
+
#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE)
#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE)
#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE)
diff --git a/libavutil/version.h b/libavutil/version.h
index 1a2406e75e..edc3fa5832 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 61
-#define LIBAVUTIL_VERSION_MINOR 10
+#define LIBAVUTIL_VERSION_MINOR 11
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index fd8f939c55..3987c33080 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -1707,6 +1707,7 @@ int ff_vk_mt_is_np_rgb(enum AVPixelFormat pix_fmt)
pix_fmt == AV_PIX_FMT_X2RGB10 || pix_fmt == AV_PIX_FMT_X2BGR10 ||
pix_fmt == AV_PIX_FMT_RGBAF32 || pix_fmt == AV_PIX_FMT_RGBF32 ||
pix_fmt == AV_PIX_FMT_RGBA128 || pix_fmt == AV_PIX_FMT_RGB96 ||
+ pix_fmt == AV_PIX_FMT_XYZP12 ||
pix_fmt == AV_PIX_FMT_GBRP || pix_fmt == AV_PIX_FMT_BAYER_RGGB16)
return 1;
return 0;
@@ -1875,6 +1876,7 @@ const char *ff_vk_shader_rep_fmt(enum AVPixelFormat pix_fmt,
case AV_PIX_FMT_GBRP14:
case AV_PIX_FMT_GBRP16:
case AV_PIX_FMT_GBRPF16:
+ case AV_PIX_FMT_XYZP12:
case AV_PIX_FMT_YUV420P10:
case AV_PIX_FMT_YUV420P12:
case AV_PIX_FMT_YUV420P16:
diff --git a/tests/ref/fate/filter-drawutils b/tests/ref/fate/filter-drawutils
index 031f31fb44..faa41af60a 100644
--- a/tests/ref/fate/filter-drawutils
+++ b/tests/ref/fate/filter-drawutils
@@ -266,5 +266,7 @@ Testing gbrp12msbbe... no: unsupported
Testing gbrp12msble... ok
Testing ohcodec... no: unsupported
Testing cuarray... no: unsupported
+Testing xyzp12le... no: unsupported
+Testing xyzp12be... no: unsupported
half transparent red over transparent rgba by mask: 128 0 0 128
half transparent red over transparent rgba by rectangle: 128 0 0 128
diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils
index ccd1522ef2..1d104b7476 100644
--- a/tests/ref/fate/imgutils
+++ b/tests/ref/fate/imgutils
@@ -306,6 +306,8 @@ 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
+xyzp12le planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432
+xyzp12be planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432
image_fill_black tests
yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af
@@ -559,3 +561,5 @@ 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
+xyzp12le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000
+xyzp12be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000
diff --git a/tests/ref/fate/pixdesc b/tests/ref/fate/pixdesc
index 3d59e78ae7..eb79469e85 100644
--- a/tests/ref/fate/pixdesc
+++ b/tests/ref/fate/pixdesc
@@ -281,3 +281,5 @@ Testing pixel format descriptors
pix fmt gbrp12msble avg_bpp:48 planes:3
pix fmt ohcodec avg_bpp:0 planes:0
pix fmt cuarray avg_bpp:0 planes:0
+ pix fmt xyzp12le avg_bpp:48 planes:3
+ pix fmt xyzp12be avg_bpp:48 planes:3
diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list
index 7819781c4a..f3a5b44b56 100644
--- a/tests/ref/fate/sws-ops-list
+++ b/tests/ref/fate/sws-ops-list
@@ -1 +1 @@
-bc046cee81413c33100cc3c71f058e9d
+b4ea23c724f642b3e43d329ed4981d38
diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query
index a062088d54..92a2430ca4 100644
--- a/tests/ref/fate/sws-pixdesc-query
+++ b/tests/ref/fate/sws-pixdesc-query
@@ -105,6 +105,8 @@ isNBPS:
xv36le
xyz12be
xyz12le
+ xyzp12be
+ xyzp12le
y210be
y210le
y212be
@@ -221,6 +223,7 @@ isBE:
xv36be
xv48be
xyz12be
+ xyzp12be
y210be
y212be
y216be
@@ -303,6 +306,8 @@ isYUV:
xv48le
xyz12be
xyz12le
+ xyzp12be
+ xyzp12le
y210be
y210le
y212be
@@ -419,6 +424,8 @@ isPlanarYUV:
p412le
p416be
p416le
+ xyzp12be
+ xyzp12le
yuv410p
yuv411p
yuv420p
@@ -1035,6 +1042,8 @@ Planar:
p412le
p416be
p416le
+ xyzp12be
+ xyzp12le
yuv410p
yuv411p
yuv420p
@@ -1241,6 +1250,8 @@ DataInHighBits:
xv36le
xyz12be
xyz12le
+ xyzp12be
+ xyzp12le
y210be
y210le
y212be