diff mbox series

[FFmpeg-devel,1/3] lavu/pixfmt: Introduce VUYX format

Message ID 20220820012404.932086-2-philipl@overt.org
State New
Headers show
Series vaapi: switch 8bit 444 format to VUYX | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 fail Make fate failed
andriy/make_x86 success Make finished
andriy/make_fate_x86 fail Make fate failed

Commit Message

Philip Langdale Aug. 20, 2022, 1:24 a.m. UTC
This is the alphaless version of VUYA that I introduced recently. After
further discussion and noting that the Intel vaapi driver explicitly
lists XYUV as a support format for encoding and decoding 8bit 444
content, we decided to switch our usage and avoid the overhead of
having a declared alpha channel around.

Note that I am not removing VUYA, as this turned out to have another
use, which was to replace the need for v408enc/dec when dealing with
the format.

The vaapi switching will happen in the next change

Signed-off-by: Philip Langdale <philipl@overt.org>
---
 libavutil/pixdesc.c              | 12 ++++++++++++
 libavutil/pixfmt.h               |  2 ++
 libavutil/tests/pixfmt_best.c    |  1 +
 tests/ref/fate/imgutils          |  1 +
 tests/ref/fate/sws-pixdesc-query |  3 +++
 5 files changed, 19 insertions(+)
diff mbox series

Patch

diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index f7558ff8b9..a7aadc18cc 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2504,6 +2504,18 @@  static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_ALPHA,
     },
+    [AV_PIX_FMT_VUYX] = {
+        .name = "vuyx",
+        .nb_components = 3,
+        .log2_chroma_w = 0,
+        .log2_chroma_h = 0,
+        .comp = {
+            { 0, 4, 2, 0, 8 },        /* Y */
+            { 0, 4, 1, 0, 8 },        /* U */
+            { 0, 4, 0, 0, 8 },        /* V */
+        },
+        .flags = AV_PIX_FMT_FLAG_ALPHA,
+    },
     [AV_PIX_FMT_RGBAF16BE] = {
         .name = "rgbaf16be",
         .nb_components = 4,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 86c9bdefeb..7d45561395 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -372,6 +372,8 @@  enum AVPixelFormat {
     AV_PIX_FMT_RGBAF16BE,   ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian
     AV_PIX_FMT_RGBAF16LE,   ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian
 
+    AV_PIX_FMT_VUYX,        ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined
+
     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
 };
 
diff --git a/libavutil/tests/pixfmt_best.c b/libavutil/tests/pixfmt_best.c
index de53baf092..0542af494f 100644
--- a/libavutil/tests/pixfmt_best.c
+++ b/libavutil/tests/pixfmt_best.c
@@ -84,6 +84,7 @@  int main(void)
     TEST(AV_PIX_FMT_GBRP,      AV_PIX_FMT_RGB24);
     TEST(AV_PIX_FMT_0RGB,      AV_PIX_FMT_RGB24);
     TEST(AV_PIX_FMT_GBRP16,    AV_PIX_FMT_RGB48);
+    TEST(AV_PIX_FMT_VUYX,      AV_PIX_FMT_YUV444P);
 
     // Formats additionally containing alpha (here ignored).
     TEST(AV_PIX_FMT_YA8,       AV_PIX_FMT_GRAY8);
diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils
index 01c9877de5..47b73b1b64 100644
--- a/tests/ref/fate/imgutils
+++ b/tests/ref/fate/imgutils
@@ -249,3 +249,4 @@  p416le          planes: 2, linesizes: 128 256   0   0, plane_sizes:  6144 12288
 vuya            planes: 1, linesizes: 256   0   0   0, plane_sizes: 12288     0     0     0, plane_offsets:     0     0     0, total_size: 12288
 rgbaf16be       planes: 1, linesizes: 512   0   0   0, plane_sizes: 24576     0     0     0, plane_offsets:     0     0     0, total_size: 24576
 rgbaf16le       planes: 1, linesizes: 512   0   0   0, plane_sizes: 24576     0     0     0, plane_offsets:     0     0     0, total_size: 24576
+vuyx            planes: 1, linesizes: 256   0   0   0, plane_sizes: 12288     0     0     0, plane_offsets:     0     0     0, total_size: 12288
diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query
index f79d99e513..045f751831 100644
--- a/tests/ref/fate/sws-pixdesc-query
+++ b/tests/ref/fate/sws-pixdesc-query
@@ -219,6 +219,7 @@  isYUV:
   uyvy422
   uyyvyy411
   vuya
+  vuyx
   xyz12be
   xyz12le
   y210be
@@ -665,6 +666,7 @@  ALPHA:
   rgbaf16be
   rgbaf16le
   vuya
+  vuyx
   ya16be
   ya16le
   ya8
@@ -753,6 +755,7 @@  Packed:
   uyvy422
   uyyvyy411
   vuya
+  vuyx
   x2bgr10be
   x2bgr10le
   x2rgb10be