pixfmt: Add yuv444p12 pixel format
authorLuca Barbato <lu_zero@gentoo.org>
Sat, 24 Sep 2016 21:09:43 +0000 (23:09 +0200)
committerLuca Barbato <lu_zero@gentoo.org>
Tue, 27 Sep 2016 16:48:30 +0000 (18:48 +0200)
libavutil/pixdesc.c
libavutil/pixfmt.h
libswscale/swscale_unscaled.c
libswscale/utils.c
tests/ref/fate/filter-pixdesc-yuv444p12be [new file with mode: 0644]
tests/ref/fate/filter-pixdesc-yuv444p12le [new file with mode: 0644]
tests/ref/fate/filter-pixfmts-copy
tests/ref/fate/filter-pixfmts-null
tests/ref/fate/filter-pixfmts-scale
tests/ref/fate/filter-pixfmts-vflip

index e0c7851..78fbdbc 100644 (file)
@@ -1342,6 +1342,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
     },
+    [AV_PIX_FMT_YUV444P12LE] = {
+        .name = "yuv444p12le",
+        .nb_components = 3,
+        .log2_chroma_w = 0,
+        .log2_chroma_h = 0,
+        .comp = {
+            { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
+            { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
+            { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
+        },
+        .flags = AV_PIX_FMT_FLAG_PLANAR,
+    },
+    [AV_PIX_FMT_YUV444P12BE] = {
+        .name = "yuv444p12be",
+        .nb_components = 3,
+        .log2_chroma_w = 0,
+        .log2_chroma_h = 0,
+        .comp = {
+            { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
+            { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
+            { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
+        },
+        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
+    },
     [AV_PIX_FMT_YUV444P10LE] = {
         .name = "yuv444p10le",
         .nb_components = 3,
@@ -1892,6 +1916,7 @@ enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
     PIX_FMT_SWAP_ENDIANNESS(YUV444P10);
     PIX_FMT_SWAP_ENDIANNESS(YUV420P12);
     PIX_FMT_SWAP_ENDIANNESS(YUV422P12);
+    PIX_FMT_SWAP_ENDIANNESS(YUV444P12);
     PIX_FMT_SWAP_ENDIANNESS(YUV420P16);
     PIX_FMT_SWAP_ENDIANNESS(YUV422P16);
     PIX_FMT_SWAP_ENDIANNESS(YUV444P16);
index 3e356af..908b0fe 100644 (file)
@@ -236,6 +236,9 @@ enum AVPixelFormat {
     AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2, 24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
     AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2, 24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
 
+    AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4, 36bpp, (1 Cr & Cb sample per 1x1 Y), big-endian
+    AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4, 36bpp, (1 Cr & Cb sample per 1x1 Y), 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
 };
 
@@ -271,6 +274,7 @@ enum AVPixelFormat {
 #define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
 #define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE)
 #define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE)
+#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE)
 #define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
 #define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
 #define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE)
index 31706ca..ad87bbc 100644 (file)
@@ -1159,10 +1159,12 @@ void ff_get_unscaled_swscale(SwsContext *c)
          dstFormat != AV_PIX_FMT_P010LE && dstFormat != AV_PIX_FMT_P010BE &&
          dstFormat != AV_PIX_FMT_YUV420P12LE && dstFormat != AV_PIX_FMT_YUV420P12BE &&
          dstFormat != AV_PIX_FMT_YUV422P12LE && dstFormat != AV_PIX_FMT_YUV422P12BE &&
+         dstFormat != AV_PIX_FMT_YUV444P12LE && dstFormat != AV_PIX_FMT_YUV444P12BE &&
          srcFormat != AV_PIX_FMT_NV12 && srcFormat != AV_PIX_FMT_NV21 &&
          srcFormat != AV_PIX_FMT_P010LE && srcFormat != AV_PIX_FMT_P010BE &&
          srcFormat != AV_PIX_FMT_YUV420P12LE && srcFormat != AV_PIX_FMT_YUV420P12BE &&
-         srcFormat != AV_PIX_FMT_YUV422P12LE && srcFormat != AV_PIX_FMT_YUV422P12BE))
+         srcFormat != AV_PIX_FMT_YUV422P12LE && srcFormat != AV_PIX_FMT_YUV422P12BE &&
+         srcFormat != AV_PIX_FMT_YUV444P12LE && srcFormat != AV_PIX_FMT_YUV444P12BE))
     {
         if (isPacked(c->srcFormat))
             c->swscale = packedCopyWrapper;
index dc44292..b7b534d 100644 (file)
@@ -177,6 +177,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
     [AV_PIX_FMT_YUV444P9LE]  = { 1, 1 },
     [AV_PIX_FMT_YUV444P10BE] = { 1, 1 },
     [AV_PIX_FMT_YUV444P10LE] = { 1, 1 },
+    [AV_PIX_FMT_YUV444P12BE] = { 1, 1 },
+    [AV_PIX_FMT_YUV444P12LE] = { 1, 1 },
     [AV_PIX_FMT_GBRP]        = { 1, 1 },
     [AV_PIX_FMT_GBRP9LE]     = { 1, 1 },
     [AV_PIX_FMT_GBRP9BE]     = { 1, 1 },
diff --git a/tests/ref/fate/filter-pixdesc-yuv444p12be b/tests/ref/fate/filter-pixdesc-yuv444p12be
new file mode 100644 (file)
index 0000000..e8c1201
--- /dev/null
@@ -0,0 +1 @@
+pixdesc-yuv444p12be f20564006d137df0fc6bb7466fd0fc64
diff --git a/tests/ref/fate/filter-pixdesc-yuv444p12le b/tests/ref/fate/filter-pixdesc-yuv444p12le
new file mode 100644 (file)
index 0000000..9807ff0
--- /dev/null
@@ -0,0 +1 @@
+pixdesc-yuv444p12le 9d5db1a9354b62181e09aa93c1ffa19a
index 6ffeed0..c712f78 100644 (file)
@@ -62,6 +62,8 @@ yuv440p             12000ce709b38aac3f7b7f59b07847ef
 yuv444p             628c9d1e10c22e0e512b27c0e03b46e6
 yuv444p10be         b60d77db54a592ed088ebf7964e2dd5e
 yuv444p10le         1752a238eb27fb7c746e349536f60686
+yuv444p12be         be54f88f9b9034b5b9bc466132bfba10
+yuv444p12le         714c3c5789897b56cb9ae6a45688e395
 yuv444p16be         8e1e2f04cb2e97f80fdfecbb2c5679a0
 yuv444p16le         5677b2caa63e0c075eac6937b03cf2a6
 yuv444p9be          5ab55576b180b2966e9ed5a1ea55508a
index 6ffeed0..c712f78 100644 (file)
@@ -62,6 +62,8 @@ yuv440p             12000ce709b38aac3f7b7f59b07847ef
 yuv444p             628c9d1e10c22e0e512b27c0e03b46e6
 yuv444p10be         b60d77db54a592ed088ebf7964e2dd5e
 yuv444p10le         1752a238eb27fb7c746e349536f60686
+yuv444p12be         be54f88f9b9034b5b9bc466132bfba10
+yuv444p12le         714c3c5789897b56cb9ae6a45688e395
 yuv444p16be         8e1e2f04cb2e97f80fdfecbb2c5679a0
 yuv444p16le         5677b2caa63e0c075eac6937b03cf2a6
 yuv444p9be          5ab55576b180b2966e9ed5a1ea55508a
index a56d5c7..0a3f3f1 100644 (file)
@@ -62,6 +62,8 @@ yuv440p             4713a7b7ce80dd06923626d13589c098
 yuv444p             fd733672651ad5bbffb046fd67151fee
 yuv444p10be         34b38d54167df70044bdc08518d91009
 yuv444p10le         0812e3371c9589c6621408812f9e7a27
+yuv444p12be         936147950ba1b511570da85a0922abf3
+yuv444p12le         4a9ec677190371ef5e342ffac1ace735
 yuv444p16be         e89fe5a4624ed06603580b4a74af9170
 yuv444p16le         6944d11048ff4013c5e60359faf1bd2d
 yuv444p9be          04a950e843d099eb9ade2ddcea494fb3
index 9e7a916..b8718c7 100644 (file)
@@ -62,6 +62,8 @@ yuv440p             fade395d957e1e3b117ac11c09404964
 yuv444p             a3c2a074c3609226bf1a0bc4de5c0e51
 yuv444p10be         b02fac8bc5a564a755567a86dc3ceae0
 yuv444p10le         88860297f729c90526b157b6bf1e2fcf
+yuv444p12be         d8af56e4b09130e14a9449c84a03cab0
+yuv444p12le         0ccfbd671b8000c0f950b9dfae8ea879
 yuv444p16be         26fbffad3c28aa1a6c47f2be6d146173
 yuv444p16le         3d13dcea82caec9eb563a1d7a2e4b339
 yuv444p9be          df39c0778e5b13f306e9928c5b0ddbb2