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