[FFmpeg-devel] [PATCH 2/5] libavutil/pixfmt: 16bit float support
Michael Niedermayer
michael at niedermayer.cc
Fri Jan 10 06:06:11 EET 2025
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
libavutil/pixdesc.c | 74 ++++++++++++++++++++++++++++++++
libavutil/pixfmt.h | 11 +++++
tests/ref/fate/imgutils | 12 ++++++
tests/ref/fate/sws-pixdesc-query | 29 +++++++++++++
4 files changed, 126 insertions(+)
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index e595c76232f..2148bdd5fb1 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2414,6 +2414,60 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
},
+ [AV_PIX_FMT_GBRPF16BE] = {
+ .name = "gbrpf16be",
+ .nb_components = 3,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 2, 2, 0, 0, 16 }, /* R */
+ { 0, 2, 0, 0, 16 }, /* G */
+ { 1, 2, 0, 0, 16 }, /* B */
+ },
+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
+ AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
+ },
+ [AV_PIX_FMT_GBRPF16LE] = {
+ .name = "gbrpf16le",
+ .nb_components = 3,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 2, 2, 0, 0, 16 }, /* R */
+ { 0, 2, 0, 0, 16 }, /* G */
+ { 1, 2, 0, 0, 16 }, /* B */
+ },
+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB,
+ },
+ [AV_PIX_FMT_GBRAPF16BE] = {
+ .name = "gbrapf16be",
+ .nb_components = 4,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 2, 2, 0, 0, 16 }, /* R */
+ { 0, 2, 0, 0, 16 }, /* G */
+ { 1, 2, 0, 0, 16 }, /* B */
+ { 3, 2, 0, 0, 16 }, /* A */
+ },
+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
+ AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB |
+ AV_PIX_FMT_FLAG_FLOAT,
+ },
+ [AV_PIX_FMT_GBRAPF16LE] = {
+ .name = "gbrapf16le",
+ .nb_components = 4,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 2, 2, 0, 0, 16 }, /* R */
+ { 0, 2, 0, 0, 16 }, /* G */
+ { 1, 2, 0, 0, 16 }, /* B */
+ { 3, 2, 0, 0, 16 }, /* A */
+ },
+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
+ AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
+ },
[AV_PIX_FMT_DRM_PRIME] = {
.name = "drm_prime",
.flags = AV_PIX_FMT_FLAG_HWACCEL,
@@ -2444,6 +2498,26 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
.flags = AV_PIX_FMT_FLAG_FLOAT,
.alias = "yf32le",
},
+ [AV_PIX_FMT_GRAYF16BE] = {
+ .name = "grayf16be",
+ .nb_components = 1,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 0, 2, 0, 0, 16 }, /* Y */
+ },
+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT,
+ },
+ [AV_PIX_FMT_GRAYF16LE] = {
+ .name = "grayf16le",
+ .nb_components = 1,
+ .log2_chroma_w = 0,
+ .log2_chroma_h = 0,
+ .comp = {
+ { 0, 2, 0, 0, 16 }, /* Y */
+ },
+ .flags = AV_PIX_FMT_FLAG_FLOAT,
+ },
[AV_PIX_FMT_YUVA422P12BE] = {
.name = "yuva422p12be",
.nb_components = 4,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 3215266091a..b0b64b27663 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -463,6 +463,14 @@ enum AVPixelFormat {
AV_PIX_FMT_XV48BE, ///< packed XVYU 4:4:4, 64bpp, big-endian, variant of Y416 where alpha channel is left undefined
AV_PIX_FMT_XV48LE, ///< packed XVYU 4:4:4, 64bpp, little-endian, variant of Y416 where alpha channel is left undefined
+ AV_PIX_FMT_GBRPF16BE, ///< IEEE-754 half precision planer GBR 4:4:4, 48bpp, big-endian
+ AV_PIX_FMT_GBRPF16LE, ///< IEEE-754 half precision planer GBR 4:4:4, 48bpp, little-endian
+ AV_PIX_FMT_GBRAPF16BE, ///< IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, big-endian
+ AV_PIX_FMT_GBRAPF16LE, ///< IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, little-endian
+
+ AV_PIX_FMT_GRAYF16BE, ///< IEEE-754 half precision Y, 16bpp, big-endian
+ AV_PIX_FMT_GRAYF16LE, ///< IEEE-754 half precision Y, 16bpp, 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
};
@@ -529,9 +537,12 @@ enum AVPixelFormat {
#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE)
#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE)
+#define AV_PIX_FMT_GBRPF16 AV_PIX_FMT_NE(GBRPF16BE, GBRPF16LE)
+#define AV_PIX_FMT_GBRAPF16 AV_PIX_FMT_NE(GBRAPF16BE, GBRAPF16LE)
#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE)
#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE)
+#define AV_PIX_FMT_GRAYF16 AV_PIX_FMT_NE(GRAYF16BE, GRAYF16LE)
#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE)
#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE)
diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils
index b03e6c58244..40958a63954 100644
--- a/tests/ref/fate/imgutils
+++ b/tests/ref/fate/imgutils
@@ -284,6 +284,12 @@ y216be planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0
y216le planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 0 0, plane_offsets: 0 0 0, total_size: 12288
xv48be planes: 1, linesizes: 512 0 0 0, plane_sizes: 24576 0 0 0, plane_offsets: 0 0 0, total_size: 24576
xv48le planes: 1, linesizes: 512 0 0 0, plane_sizes: 24576 0 0 0, plane_offsets: 0 0 0, total_size: 24576
+gbrpf16be planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432
+gbrpf16le planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432
+gbrapf16be planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576
+gbrapf16le planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576
+grayf16be planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144
+grayf16le 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
@@ -515,3 +521,9 @@ y216be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_cr
y216le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45
xv48be total_size: 24576, black_unknown_crc: 0x6ba828bd, black_tv_crc: 0x6ba828bd, black_pc_crc: 0x5f450f41
xv48le total_size: 24576, black_unknown_crc: 0xc3794950, black_tv_crc: 0xc3794950, black_pc_crc: 0x40874939
+gbrpf16be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000
+gbrpf16le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000
+gbrapf16be total_size: 24576, black_unknown_crc: 0x707ede8d, black_tv_crc: 0x707ede8d, black_pc_crc: 0x707ede8d
+gbrapf16le total_size: 24576, black_unknown_crc: 0x142a0205, black_tv_crc: 0x142a0205, black_pc_crc: 0x142a0205
+grayf16be total_size: 6144, black_unknown_crc: 0x72aa7ce2, black_tv_crc: 0x72aa7ce2, black_pc_crc: 0x00000000
+grayf16le total_size: 6144, black_unknown_crc: 0xad1b67c6, black_tv_crc: 0xad1b67c6, black_pc_crc: 0x00000000
diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query
index bc6a07959d3..89eef20e4b7 100644
--- a/tests/ref/fate/sws-pixdesc-query
+++ b/tests/ref/fate/sws-pixdesc-query
@@ -7,10 +7,16 @@ is16BPS:
bgra64le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrp16be
gbrp16le
+ gbrpf16be
+ gbrpf16le
gray16be
gray16le
+ grayf16be
+ grayf16le
p016be
p016le
p216be
@@ -157,18 +163,21 @@ isBE:
gbrap12be
gbrap14be
gbrap16be
+ gbrapf16be
gbrapf32be
gbrp10be
gbrp12be
gbrp14be
gbrp16be
gbrp9be
+ gbrpf16be
gbrpf32be
gray10be
gray12be
gray14be
gray16be
gray9be
+ grayf16be
grayf32be
nv20be
p010be
@@ -523,6 +532,8 @@ isRGB:
gbrap14le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrapf32be
gbrapf32le
gbrp
@@ -536,6 +547,8 @@ isRGB:
gbrp16le
gbrp9be
gbrp9le
+ gbrpf16be
+ gbrpf16le
gbrpf32be
gbrpf32le
rgb0
@@ -584,6 +597,8 @@ Gray:
gray16le
gray9be
gray9le
+ grayf16be
+ grayf16le
grayf32be
grayf32le
ya16be
@@ -685,6 +700,8 @@ AnyRGB:
gbrap14le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrapf32be
gbrapf32le
gbrp
@@ -698,6 +715,8 @@ AnyRGB:
gbrp16le
gbrp9be
gbrp9le
+ gbrpf16be
+ gbrpf16le
gbrpf32be
gbrpf32le
monob
@@ -753,6 +772,8 @@ ALPHA:
gbrap14le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrapf32be
gbrapf32le
pal8
@@ -906,6 +927,8 @@ Planar:
gbrap14le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrapf32be
gbrapf32le
gbrp
@@ -919,6 +942,8 @@ Planar:
gbrp16le
gbrp9be
gbrp9le
+ gbrpf16be
+ gbrpf16le
gbrpf32be
gbrpf32le
nv12
@@ -1093,6 +1118,8 @@ PlanarRGB:
gbrap14le
gbrap16be
gbrap16le
+ gbrapf16be
+ gbrapf16le
gbrapf32be
gbrapf32le
gbrp
@@ -1106,6 +1133,8 @@ PlanarRGB:
gbrp16le
gbrp9be
gbrp9le
+ gbrpf16be
+ gbrpf16le
gbrpf32be
gbrpf32le
--
2.47.0
More information about the ffmpeg-devel
mailing list