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.
This commit is contained in:
Lynne committed 2026-10-06 13:31:37 +09:00
1 parent 47313ad3f9
commit 2983c23762
11 files changed
+58 -2

No files matched your search

+3
View File
@@ -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().
+3
View File
@@ -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 } },
+24
View File
@@ -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, \
+5
View File
@@ -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)
+1 -1
View File
@@ -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, \
+2
View File
@@ -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:
+2
View File
@@ -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
+4
View File
@@ -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
+2
View File
@@ -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
+1 -1
View File
@@ -1 +1 @@
bc046cee81413c33100cc3c71f058e9d
b4ea23c724f642b3e43d329ed4981d38
+11
View File
@@ -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