Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Paul B Mahol <onemda@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: [FFmpeg-devel] [PATCH] GBRAP14 support for MagicYUV
Date: Wed, 27 Sep 2023 19:24:50 +0200
Message-ID: <CAPYw7P7Qc-ib6CczELCmEDkXoSh65F7VViJn3aYBnztB-epN0g@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 10 bytes --]

Attached.

[-- Attachment #2: 0001-avutil-add-GBRAP14-format-support.patch --]
[-- Type: text/x-patch, Size: 2970 bytes --]

From 3e58da932f88e6781eb772d883efa6f0997de936 Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Wed, 27 Sep 2023 16:06:02 +0200
Subject: [PATCH 1/4] avutil: add GBRAP14 format support

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavutil/pixdesc.c | 28 ++++++++++++++++++++++++++++
 libavutil/pixfmt.h  |  4 ++++
 2 files changed, 32 insertions(+)

diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index e1e0dd2a9e..6ded9467b0 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2223,6 +2223,34 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
     },
+    [AV_PIX_FMT_GBRAP14LE] = {
+        .name = "gbrap14le",
+        .nb_components = 4,
+        .log2_chroma_w = 0,
+        .log2_chroma_h = 0,
+        .comp = {
+            { 2, 2, 0, 0, 14 },       /* R */
+            { 0, 2, 0, 0, 14 },       /* G */
+            { 1, 2, 0, 0, 14 },       /* B */
+            { 3, 2, 0, 0, 14 },       /* A */
+        },
+        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
+                 AV_PIX_FMT_FLAG_ALPHA,
+    },
+    [AV_PIX_FMT_GBRAP14BE] = {
+        .name = "gbrap14be",
+        .nb_components = 4,
+        .log2_chroma_w = 0,
+        .log2_chroma_h = 0,
+        .comp = {
+            { 2, 2, 0, 0, 14 },       /* R */
+            { 0, 2, 0, 0, 14 },       /* G */
+            { 1, 2, 0, 0, 14 },       /* B */
+            { 3, 2, 0, 0, 14 },       /* A */
+        },
+        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
+                 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
+    },
     [AV_PIX_FMT_GBRAP12LE] = {
         .name = "gbrap12le",
         .nb_components = 4,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 63e07ba64f..a26c72d56b 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -426,6 +426,9 @@ enum AVPixelFormat {
     AV_PIX_FMT_P412BE,      ///< interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, big-endian
     AV_PIX_FMT_P412LE,      ///< interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, little-endian
 
+    AV_PIX_FMT_GBRAP14BE,  ///< planar GBR 4:4:4:4 56bpp, big-endian
+    AV_PIX_FMT_GBRAP14LE,  ///< planar GBR 4:4:4:4 56bpp, 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
 };
 
@@ -484,6 +487,7 @@ enum AVPixelFormat {
 #define AV_PIX_FMT_GBRP16    AV_PIX_FMT_NE(GBRP16BE,    GBRP16LE)
 #define AV_PIX_FMT_GBRAP10   AV_PIX_FMT_NE(GBRAP10BE,   GBRAP10LE)
 #define AV_PIX_FMT_GBRAP12   AV_PIX_FMT_NE(GBRAP12BE,   GBRAP12LE)
+#define AV_PIX_FMT_GBRAP14   AV_PIX_FMT_NE(GBRAP14BE,   GBRAP14LE)
 #define AV_PIX_FMT_GBRAP16   AV_PIX_FMT_NE(GBRAP16BE,   GBRAP16LE)
 
 #define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE,    BAYER_BGGR16LE)
-- 
2.42.0


[-- Attachment #3: 0002-swscale-add-GBRAP14-format-support.patch --]
[-- Type: text/x-patch, Size: 16217 bytes --]

From 517fc54c52cfdcdbc6920ede04b215ed27429b00 Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Wed, 27 Sep 2023 16:13:16 +0200
Subject: [PATCH 2/4] swscale: add GBRAP14 format support

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavformat/nut.c                        | 2 ++
 libswscale/input.c                       | 7 +++++++
 libswscale/output.c                      | 2 ++
 libswscale/swscale_unscaled.c            | 3 +++
 libswscale/utils.c                       | 6 ++++++
 tests/ref/fate/filter-pixdesc-gbrap14be  | 1 +
 tests/ref/fate/filter-pixdesc-gbrap14le  | 1 +
 tests/ref/fate/filter-pixfmts-copy       | 2 ++
 tests/ref/fate/filter-pixfmts-crop       | 2 ++
 tests/ref/fate/filter-pixfmts-field      | 2 ++
 tests/ref/fate/filter-pixfmts-fieldorder | 2 ++
 tests/ref/fate/filter-pixfmts-hflip      | 2 ++
 tests/ref/fate/filter-pixfmts-il         | 2 ++
 tests/ref/fate/filter-pixfmts-null       | 2 ++
 tests/ref/fate/filter-pixfmts-pad        | 1 +
 tests/ref/fate/filter-pixfmts-scale      | 2 ++
 tests/ref/fate/filter-pixfmts-transpose  | 2 ++
 tests/ref/fate/filter-pixfmts-vflip      | 2 ++
 18 files changed, 43 insertions(+)
 create mode 100644 tests/ref/fate/filter-pixdesc-gbrap14be
 create mode 100644 tests/ref/fate/filter-pixdesc-gbrap14le

diff --git a/libavformat/nut.c b/libavformat/nut.c
index 47ed152529..a0bf257c7d 100644
--- a/libavformat/nut.c
+++ b/libavformat/nut.c
@@ -184,6 +184,8 @@ const AVCodecTag ff_nut_video_tags[] = {
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(10 , 00 , '4', 'G') },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 12 ) },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(12 , 00 , '4', 'G') },
+    { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 14 ) },
+    { AV_CODEC_ID_RAWVIDEO,         MKTAG(14 , 00 , '4', 'G') },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG('G', '4', 00 , 16 ) },
     { AV_CODEC_ID_RAWVIDEO,         MKTAG(16 , 00 , '4', 'G') },
 
diff --git a/libswscale/input.c b/libswscale/input.c
index 41795c636e..d171394bb2 100644
--- a/libswscale/input.c
+++ b/libswscale/input.c
@@ -1149,6 +1149,7 @@ rgb9plus_planar_funcs(16)
 
 rgb9plus_planar_transparency_funcs(10)
 rgb9plus_planar_transparency_funcs(12)
+rgb9plus_planar_transparency_funcs(14)
 rgb9plus_planar_transparency_funcs(16)
 
 #define rgbf32_planar_funcs_endian(endian_name, endian)                                             \
@@ -1326,6 +1327,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12LE:
         c->readChrPlanar = planar_rgb12le_to_uv;
         break;
+    case AV_PIX_FMT_GBRAP14LE:
     case AV_PIX_FMT_GBRP14LE:
         c->readChrPlanar = planar_rgb14le_to_uv;
         break;
@@ -1348,6 +1350,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12BE:
         c->readChrPlanar = planar_rgb12be_to_uv;
         break;
+    case AV_PIX_FMT_GBRAP14BE:
     case AV_PIX_FMT_GBRP14BE:
         c->readChrPlanar = planar_rgb14be_to_uv;
         break;
@@ -1686,6 +1689,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12LE:
         c->readLumPlanar = planar_rgb12le_to_y;
         break;
+    case AV_PIX_FMT_GBRAP14LE:
+        c->readAlpPlanar = planar_rgb14le_to_a;
     case AV_PIX_FMT_GBRP14LE:
         c->readLumPlanar = planar_rgb14le_to_y;
         break;
@@ -1712,6 +1717,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
     case AV_PIX_FMT_GBRP12BE:
         c->readLumPlanar = planar_rgb12be_to_y;
         break;
+    case AV_PIX_FMT_GBRAP14BE:
+        c->readAlpPlanar = planar_rgb14be_to_a;
     case AV_PIX_FMT_GBRP14BE:
         c->readLumPlanar = planar_rgb14be_to_y;
         break;
diff --git a/libswscale/output.c b/libswscale/output.c
index 5c85bff971..8849a3201a 100644
--- a/libswscale/output.c
+++ b/libswscale/output.c
@@ -3047,6 +3047,8 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,
         case AV_PIX_FMT_GBRAP10LE:
         case AV_PIX_FMT_GBRAP12BE:
         case AV_PIX_FMT_GBRAP12LE:
+        case AV_PIX_FMT_GBRAP14BE:
+        case AV_PIX_FMT_GBRAP14LE:
             *yuv2anyX = yuv2gbrp_full_X_c;
             break;
         case AV_PIX_FMT_GBRP16BE:
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index 9af2e7ecc3..a5c9917799 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -2073,6 +2073,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
          dstFormat == AV_PIX_FMT_GBRP16LE || dstFormat == AV_PIX_FMT_GBRP16BE ||
          dstFormat == AV_PIX_FMT_GBRAP10LE || dstFormat == AV_PIX_FMT_GBRAP10BE ||
          dstFormat == AV_PIX_FMT_GBRAP12LE || dstFormat == AV_PIX_FMT_GBRAP12BE ||
+         dstFormat == AV_PIX_FMT_GBRAP14LE || dstFormat == AV_PIX_FMT_GBRAP14BE ||
          dstFormat == AV_PIX_FMT_GBRAP16LE || dstFormat == AV_PIX_FMT_GBRAP16BE ))
         c->convert_unscaled = Rgb16ToPlanarRgb16Wrapper;
 
@@ -2083,6 +2084,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
          srcFormat == AV_PIX_FMT_GBRP14LE || srcFormat == AV_PIX_FMT_GBRP14BE ||
          srcFormat == AV_PIX_FMT_GBRAP10LE || srcFormat == AV_PIX_FMT_GBRAP10BE ||
          srcFormat == AV_PIX_FMT_GBRAP12LE || srcFormat == AV_PIX_FMT_GBRAP12BE ||
+         srcFormat == AV_PIX_FMT_GBRAP14LE || srcFormat == AV_PIX_FMT_GBRAP14BE ||
          srcFormat == AV_PIX_FMT_GBRAP16LE || srcFormat == AV_PIX_FMT_GBRAP16BE) &&
         (dstFormat == AV_PIX_FMT_RGB48LE  || dstFormat == AV_PIX_FMT_RGB48BE  ||
          dstFormat == AV_PIX_FMT_BGR48LE  || dstFormat == AV_PIX_FMT_BGR48BE  ||
@@ -2132,6 +2134,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP16) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP10) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP12) ||
+        IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP14) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP16) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB444) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB48)  ||
diff --git a/libswscale/utils.c b/libswscale/utils.c
index b3cc74331f..e1ad685972 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -204,6 +204,8 @@ static const FormatEntry format_entries[] = {
     [AV_PIX_FMT_GBRAP12BE]   = { 1, 1 },
     [AV_PIX_FMT_GBRP14LE]    = { 1, 1 },
     [AV_PIX_FMT_GBRP14BE]    = { 1, 1 },
+    [AV_PIX_FMT_GBRAP14LE]   = { 1, 1 },
+    [AV_PIX_FMT_GBRAP14BE]   = { 1, 1 },
     [AV_PIX_FMT_GBRP16LE]    = { 1, 1 },
     [AV_PIX_FMT_GBRP16BE]    = { 1, 1 },
     [AV_PIX_FMT_GBRPF32LE]   = { 1, 1 },
@@ -1228,6 +1230,9 @@ static enum AVPixelFormat alphaless_fmt(enum AVPixelFormat fmt)
     case AV_PIX_FMT_GBRAP12LE:          return AV_PIX_FMT_GBRP12;
     case AV_PIX_FMT_GBRAP12BE:          return AV_PIX_FMT_GBRP12;
 
+    case AV_PIX_FMT_GBRAP14LE:          return AV_PIX_FMT_GBRP14;
+    case AV_PIX_FMT_GBRAP14BE:          return AV_PIX_FMT_GBRP14;
+
     case AV_PIX_FMT_GBRAP16LE:          return AV_PIX_FMT_GBRP16;
     case AV_PIX_FMT_GBRAP16BE:          return AV_PIX_FMT_GBRP16;
 
@@ -1496,6 +1501,7 @@ static av_cold int sws_init_single_context(SwsContext *c, SwsFilter *srcFilter,
         srcFormat != AV_PIX_FMT_GBRAP10BE && srcFormat != AV_PIX_FMT_GBRAP10LE &&
         srcFormat != AV_PIX_FMT_GBRP12BE  && srcFormat != AV_PIX_FMT_GBRP12LE &&
         srcFormat != AV_PIX_FMT_GBRAP12BE && srcFormat != AV_PIX_FMT_GBRAP12LE &&
+        srcFormat != AV_PIX_FMT_GBRAP14BE && srcFormat != AV_PIX_FMT_GBRAP14LE &&
         srcFormat != AV_PIX_FMT_GBRP14BE  && srcFormat != AV_PIX_FMT_GBRP14LE &&
         srcFormat != AV_PIX_FMT_GBRP16BE  && srcFormat != AV_PIX_FMT_GBRP16LE &&
         srcFormat != AV_PIX_FMT_GBRAP16BE  && srcFormat != AV_PIX_FMT_GBRAP16LE &&
diff --git a/tests/ref/fate/filter-pixdesc-gbrap14be b/tests/ref/fate/filter-pixdesc-gbrap14be
new file mode 100644
index 0000000000..5d9bacae3d
--- /dev/null
+++ b/tests/ref/fate/filter-pixdesc-gbrap14be
@@ -0,0 +1 @@
+pixdesc-gbrap14be   3daddf88ce69e6efbd71237b6e5a3ae7
diff --git a/tests/ref/fate/filter-pixdesc-gbrap14le b/tests/ref/fate/filter-pixdesc-gbrap14le
new file mode 100644
index 0000000000..2f4e5b2228
--- /dev/null
+++ b/tests/ref/fate/filter-pixdesc-gbrap14le
@@ -0,0 +1 @@
+pixdesc-gbrap14le   582105d7d9bb1353b46cab08c9353007
diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy
index 27f12e8f97..009fbc3946 100644
--- a/tests/ref/fate/filter-pixfmts-copy
+++ b/tests/ref/fate/filter-pixfmts-copy
@@ -23,6 +23,8 @@ gbrap10be           edcffb185e44b6dae5c2ead5505b7125
 gbrap10le           2a7392e14b21b1f9457526a071236a6d
 gbrap12be           0c4c1f8af361571265ca259d5f70f026
 gbrap12le           5f1d8c663d4c28863e687192433b34a4
+gbrap14be           0c85f0816ab73c68ee55b8c97d514073
+gbrap14le           04a623fdd866668141cbb179d3f54ec7
 gbrap16be           e4edca4361d643794034e5aa9ef290b1
 gbrap16le           9a95b389d2bf556179e8f4b27fb550ab
 gbrapf32be          d908f0950d3735863fe6f0793fa24f76
diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop
index 7bd0cfcb89..59cf4e1ab8 100644
--- a/tests/ref/fate/filter-pixfmts-crop
+++ b/tests/ref/fate/filter-pixfmts-crop
@@ -23,6 +23,8 @@ gbrap10be           1880c4856d9cc6492b8b859f2711aaf1
 gbrap10le           c2b6e35f8b7ca363a7ec021ccdf31d1f
 gbrap12be           c9769d18733cdc2664d8b9af09a03f6d
 gbrap12le           3f80453c1ac6c5d1b2febf3ef141b476
+gbrap14be           6f75ef32dd72aa2edbb1068c83facf14
+gbrap14le           b8be6f25cbfc38578ac80070634df850
 gbrap16be           21c98d0d7e7de2a93f9f095e5bb5c227
 gbrap16le           ea9a96870c1b742dd9f065c5db568184
 gbrapf32be          ec06b3b168dc74048100f29a4412da90
diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field
index 0c40a4d90f..f60b636399 100644
--- a/tests/ref/fate/filter-pixfmts-field
+++ b/tests/ref/fate/filter-pixfmts-field
@@ -23,6 +23,8 @@ gbrap10be           29d46cbf021b233f5f1886e5d5fe21b4
 gbrap10le           4017c5d8c124438eb9aefa107db58d3b
 gbrap12be           e7f471132628b1c034199cc109b84bc2
 gbrap12le           886207e5aa379a0312485b94e5fd5edd
+gbrap14be           ab3802ae6a8dac1484d106406d10408b
+gbrap14le           fa16cbca5a20fa44ac28d3af07efc9b1
 gbrap16be           eaa0158f27ebc40cde9e3d6eef1e2ba1
 gbrap16le           6cf68992d4fcac2aa025d1014b669d24
 gbrapf32be          37c627796dee55ca6f4e7ca965460680
diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder
index 8c024784e3..1b858a9e83 100644
--- a/tests/ref/fate/filter-pixfmts-fieldorder
+++ b/tests/ref/fate/filter-pixfmts-fieldorder
@@ -23,6 +23,8 @@ gbrap10be           8b27254a69cd0e25fa55262a743f95e6
 gbrap10le           52278021718ec370903dccc923dc8bf6
 gbrap12be           302b353dff696ec9fd0d85a0cc14802b
 gbrap12le           ae2d6db2c9c825f06d92389de21263d2
+gbrap14be           5d025a02520ce9bbb5768ef8bb87d273
+gbrap14le           4b599df3a54256db9cd8d52b8406861d
 gbrap16be           52c10d8046d123dfc4a478276906467c
 gbrap16le           2317737b8f5140add27d121de8f5ba95
 gbrapf32be          6781751ef9d444d150cb0a1e1cefe141
diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip
index a80b1abd5b..812af02384 100644
--- a/tests/ref/fate/filter-pixfmts-hflip
+++ b/tests/ref/fate/filter-pixfmts-hflip
@@ -23,6 +23,8 @@ gbrap10be           f188dc23756469cbdd172fe97ad58121
 gbrap10le           262f0501633ea4670020fae8ac6835e2
 gbrap12be           ffe9aa4cbcc42f71757efe18826764ac
 gbrap12le           88a85c1b3c5e19e299fdd209b73ac1ba
+gbrap14be           268fd48793f6b4bb8cc8ca0961c83fe3
+gbrap14le           fc4a7409c1d6a35753d533c91c45a86a
 gbrap16be           3117e84b258433a7efb9288bbb8815d4
 gbrap16le           3ad08cf8b49d8eb31a1b356ec4b7b88b
 gbrapf32be          d82e48eb62c1e2d2ce5d614aeda38a99
diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il
index 461b2b1720..69f7644798 100644
--- a/tests/ref/fate/filter-pixfmts-il
+++ b/tests/ref/fate/filter-pixfmts-il
@@ -23,6 +23,8 @@ gbrap10be           bafa57a2e4331d8a39f6f0087c85d4b1
 gbrap10le           553a1f439d8184dc400432d3f786fbce
 gbrap12be           48609d6b61ff6313939fa2d9c3ebb6d9
 gbrap12le           e3b5342c8e47820f2de7e2dd61872312
+gbrap14be           5d415a505fb7d2fc28081d30aab4eb69
+gbrap14le           073a6431c47a3dbc1a1ee7cb7055a2d8
 gbrap16be           696c84c8b009c7320cad7f3847bb35da
 gbrap16le           9bacb81fbbe9cdfd04d71eb55a9719d2
 gbrapf32be          5995aba2bf66254f63d5413cd9860353
diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null
index 27f12e8f97..009fbc3946 100644
--- a/tests/ref/fate/filter-pixfmts-null
+++ b/tests/ref/fate/filter-pixfmts-null
@@ -23,6 +23,8 @@ gbrap10be           edcffb185e44b6dae5c2ead5505b7125
 gbrap10le           2a7392e14b21b1f9457526a071236a6d
 gbrap12be           0c4c1f8af361571265ca259d5f70f026
 gbrap12le           5f1d8c663d4c28863e687192433b34a4
+gbrap14be           0c85f0816ab73c68ee55b8c97d514073
+gbrap14le           04a623fdd866668141cbb179d3f54ec7
 gbrap16be           e4edca4361d643794034e5aa9ef290b1
 gbrap16le           9a95b389d2bf556179e8f4b27fb550ab
 gbrapf32be          d908f0950d3735863fe6f0793fa24f76
diff --git a/tests/ref/fate/filter-pixfmts-pad b/tests/ref/fate/filter-pixfmts-pad
index 8394622257..69cc882d98 100644
--- a/tests/ref/fate/filter-pixfmts-pad
+++ b/tests/ref/fate/filter-pixfmts-pad
@@ -9,6 +9,7 @@ bgra                929aac15e848038e367c250037575f9f
 gbrap               5f16cccab5a17cb766c882e865995167
 gbrap10le           e63e0a1ae9afd7e6a732f18be194e761
 gbrap12le           eb7a5ff44a9b5b46bb9829838224ed8e
+gbrap14le           317f0d66cd2ca03b3ca82508dcd9f2e2
 gbrap16le           d0f6fc33cb75588327aec1b5ad6ab4f0
 gbrp                3c94d39256db2409015df913fd330a90
 gbrp10le            5b356737cd8a396f39bbdadb7cb35e06
diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale
index 6435cc6ef2..95a2aae24f 100644
--- a/tests/ref/fate/filter-pixfmts-scale
+++ b/tests/ref/fate/filter-pixfmts-scale
@@ -23,6 +23,8 @@ gbrap10be           50735fbc471a5ac5a6645c85881f3670
 gbrap10le           6e1cba57029fdf0f9d46b5e5cd55112b
 gbrap12be           58170165829484b3db4a3b9165198987
 gbrap12le           24f5ecb32435b73353517e017c165e31
+gbrap14be           4299fd1ee69f2ed34eb131f78d034235
+gbrap14le           f298f7822e1dfeddd328d8ff8e4fba9f
 gbrap16be           31968e6872a46e8174fb57f8920ed10d
 gbrap16le           8c6758f33671b673b6d30969fc05a23d
 gbrapf32be          366b804d5697276e8c481c4bdf05a00b
diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose
index 169f2708ec..e435ea7a21 100644
--- a/tests/ref/fate/filter-pixfmts-transpose
+++ b/tests/ref/fate/filter-pixfmts-transpose
@@ -23,6 +23,8 @@ gbrap10be           3e3be2d8f9aa5f449a1df404e27d0054
 gbrap10le           db4e4861010cbbf726492fad282d5813
 gbrap12be           1518c9a565d1ba1a45dd369acc1aa75e
 gbrap12le           714fe318af81a46f83655c6e7e13351e
+gbrap14be           d1cac66a73b023c3eaa31f7478403cba
+gbrap14le           a11b84cb50679e600f0a3ceba055e848
 gbrap16be           39d488528aacff466aac7539c9b948a8
 gbrap16le           5426ac9457289927bfe2ec03038a8780
 gbrapf32be          ea02b3912372c8671ff4eacbcbda740a
diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip
index 705ab1a050..7dd6e906e3 100644
--- a/tests/ref/fate/filter-pixfmts-vflip
+++ b/tests/ref/fate/filter-pixfmts-vflip
@@ -23,6 +23,8 @@ gbrap10be           e8134b72acc090b093b4d9b4d4703c7e
 gbrap10le           43bde7bd6a676c6ac33dbcc4c72762f3
 gbrap12be           16a3d105ba852a9fa23ea5232db51b48
 gbrap12le           6ef8a3ac4129ec23c34aec14ac41f249
+gbrap14be           459094279ebcd343eedefa10ada1cdad
+gbrap14le           b35689f9bc5e1765918da73321924b2e
 gbrap16be           70b020b6b9e1896b72f890de3570ffda
 gbrap16le           e0cf341cdbaf1f5c40016f181bc9d7d4
 gbrapf32be          e82323abcb665014346a3a34a4b084c3
-- 
2.42.0


[-- Attachment #4: 0003-avcodec-magicyuv-add-14bit-rgb-a-support.patch --]
[-- Type: text/x-patch, Size: 4442 bytes --]

From 6b3c29109ce486cb71f977c0be55fd37fb75a188 Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Wed, 27 Sep 2023 15:41:01 +0200
Subject: [PATCH 3/4] avcodec/magicyuv: add 14bit rgb(a) support

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavcodec/magicyuv.c   | 26 +++++++++++++++++++++-----
 libavformat/isom_tags.c |  2 ++
 libavformat/riff.c      |  2 ++
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c
index 539da54c2f..3573db0f0a 100644
--- a/libavcodec/magicyuv.c
+++ b/libavcodec/magicyuv.c
@@ -73,12 +73,16 @@ typedef struct MagicYUVContext {
     int (*magy_decode_slice)(AVCodecContext *avctx, void *tdata,
                              int j, int threadnr);
     LLVidDSPContext   llviddsp;
+    HuffEntry         he[1 << 14];
+    uint8_t           len[1 << 14];
 } MagicYUVContext;
 
-static int huff_build(const uint8_t len[], uint16_t codes_pos[33],
+static int huff_build(AVCodecContext *avctx,
+                      const uint8_t len[], uint16_t codes_pos[33],
                       VLC *vlc, VLC_MULTI *multi, int nb_elems, void *logctx)
 {
-    HuffEntry he[4096];
+    MagicYUVContext *s = avctx->priv_data;
+    HuffEntry *he = s->he;
 
     for (int i = 31; i > 0; i--)
         codes_pos[i] += codes_pos[i + 1];
@@ -381,7 +385,7 @@ static int build_huffman(AVCodecContext *avctx, const uint8_t *table,
 {
     MagicYUVContext *s = avctx->priv_data;
     GetByteContext gb;
-    uint8_t len[4096];
+    uint8_t *len = s->len;
     uint16_t length_count[33] = { 0 };
     int i = 0, j = 0, k;
 
@@ -409,7 +413,7 @@ static int build_huffman(AVCodecContext *avctx, const uint8_t *table,
 
         if (j == max) {
             j = 0;
-            if (huff_build(len, length_count, &s->vlc[i], &s->multi[i], max, avctx)) {
+            if (huff_build(avctx, len, length_count, &s->vlc[i], &s->multi[i], max, avctx)) {
                 av_log(avctx, AV_LOG_ERROR, "Cannot build Huffman codes\n");
                 return AVERROR_INVALIDDATA;
             }
@@ -526,6 +530,16 @@ static int magy_decode_frame(AVCodecContext *avctx, AVFrame *p,
         s->decorrelate = 1;
         s->bps = 12;
         break;
+    case 0x71:
+        avctx->pix_fmt = AV_PIX_FMT_GBRP14;
+        s->decorrelate = 1;
+        s->bps = 14;
+        break;
+    case 0x72:
+        avctx->pix_fmt = AV_PIX_FMT_GBRAP14;
+        s->decorrelate = 1;
+        s->bps = 14;
+        break;
     case 0x73:
         avctx->pix_fmt = AV_PIX_FMT_GRAY10;
         s->bps = 10;
@@ -653,7 +667,9 @@ static int magy_decode_frame(AVCodecContext *avctx, AVFrame *p,
         avctx->pix_fmt == AV_PIX_FMT_GBRP10 ||
         avctx->pix_fmt == AV_PIX_FMT_GBRAP10||
         avctx->pix_fmt == AV_PIX_FMT_GBRAP12||
-        avctx->pix_fmt == AV_PIX_FMT_GBRP12) {
+        avctx->pix_fmt == AV_PIX_FMT_GBRAP14||
+        avctx->pix_fmt == AV_PIX_FMT_GBRP12||
+        avctx->pix_fmt == AV_PIX_FMT_GBRP14) {
         FFSWAP(uint8_t*, p->data[0], p->data[1]);
         FFSWAP(int, p->linesize[0], p->linesize[1]);
     } else {
diff --git a/libavformat/isom_tags.c b/libavformat/isom_tags.c
index 1dd980c4aa..277dd30e23 100644
--- a/libavformat/isom_tags.c
+++ b/libavformat/isom_tags.c
@@ -263,6 +263,8 @@ const AVCodecTag ff_codec_movvideo_tags[] = {
     { AV_CODEC_ID_MAGICYUV, MKTAG('M', '8', 'Y', 'A') },
     { AV_CODEC_ID_MAGICYUV, MKTAG('M', '2', 'R', 'A') },
     { AV_CODEC_ID_MAGICYUV, MKTAG('M', '2', 'R', 'G') },
+    { AV_CODEC_ID_MAGICYUV, MKTAG('M', '4', 'R', 'A') },
+    { AV_CODEC_ID_MAGICYUV, MKTAG('M', '4', 'R', 'G') },
 
     { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '0') },
     { AV_CODEC_ID_SHEERVIDEO, MKTAG('S', 'h', 'r', '1') },
diff --git a/libavformat/riff.c b/libavformat/riff.c
index e2b3424012..56daef5f15 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -463,6 +463,8 @@ const AVCodecTag ff_codec_bmp_tags[] = {
     { AV_CODEC_ID_MAGICYUV,     MKTAG('M', '0', 'Y', '4') },
     { AV_CODEC_ID_MAGICYUV,     MKTAG('M', '2', 'R', 'A') },
     { AV_CODEC_ID_MAGICYUV,     MKTAG('M', '2', 'R', 'G') },
+    { AV_CODEC_ID_MAGICYUV,     MKTAG('M', '4', 'R', 'A') },
+    { AV_CODEC_ID_MAGICYUV,     MKTAG('M', '4', 'R', 'G') },
     { AV_CODEC_ID_YLC,          MKTAG('Y', 'L', 'C', '0') },
     { AV_CODEC_ID_SPEEDHQ,      MKTAG('S', 'H', 'Q', '0') },
     { AV_CODEC_ID_SPEEDHQ,      MKTAG('S', 'H', 'Q', '1') },
-- 
2.42.0


[-- Attachment #5: 0004-avfilter-vf_extractplanes-add-GBRAP14-support.patch --]
[-- Type: text/x-patch, Size: 1108 bytes --]

From 866363f60c48c397088905c49ede8cfcfdd2125d Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Wed, 27 Sep 2023 17:08:16 +0200
Subject: [PATCH 4/4] avfilter/vf_extractplanes: add GBRAP14 support

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavfilter/vf_extractplanes.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c
index 453e51a1ea..7b7149ab24 100644
--- a/libavfilter/vf_extractplanes.c
+++ b/libavfilter/vf_extractplanes.c
@@ -119,7 +119,7 @@ AVFILTER_DEFINE_CLASS(extractplanes);
         AV_PIX_FMT_YUVA422P9##suf,                             \
         AV_PIX_FMT_YUVA444P9##suf,                             \
         AV_PIX_FMT_GBRP9##suf,                                 \
-        AV_PIX_FMT_GBRP14##suf,                                \
+        AV_PIX_FMT_GBRP14##suf, AV_PIX_FMT_GBRAP14##suf,       \
         AV_PIX_FMT_YUV420P14##suf,                             \
         AV_PIX_FMT_YUV422P14##suf,                             \
         AV_PIX_FMT_YUV444P14##suf
-- 
2.42.0


[-- Attachment #6: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

             reply	other threads:[~2023-09-27 17:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-27 17:24 Paul B Mahol [this message]
2023-09-28 10:07 ` Michael Niedermayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPYw7P7Qc-ib6CczELCmEDkXoSh65F7VViJn3aYBnztB-epN0g@mail.gmail.com \
    --to=onemda@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git