From 9bd6ea5695660529b2887292874a7b9e61fc301e Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Sat, 24 Sep 2016 23:09:43 +0200 Subject: [PATCH] pixfmt: Add yuv444p12 pixel format --- libavutil/pixdesc.c | 25 +++++++++++++++++++++++ libavutil/pixfmt.h | 4 ++++ libswscale/swscale_unscaled.c | 4 +++- libswscale/utils.c | 2 ++ tests/ref/fate/filter-pixdesc-yuv444p12be | 1 + tests/ref/fate/filter-pixdesc-yuv444p12le | 1 + tests/ref/fate/filter-pixfmts-copy | 2 ++ tests/ref/fate/filter-pixfmts-null | 2 ++ tests/ref/fate/filter-pixfmts-scale | 2 ++ tests/ref/fate/filter-pixfmts-vflip | 2 ++ 10 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p12be create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p12le diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index e0c7851abe..78fbdbc01b 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -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); diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 3e356afa6b..908b0fe7a5 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -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) diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c index 31706ca4c2..ad87bbcb46 100644 --- a/libswscale/swscale_unscaled.c +++ b/libswscale/swscale_unscaled.c @@ -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; diff --git a/libswscale/utils.c b/libswscale/utils.c index dc442929b9..b7b534dceb 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -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 index 0000000000..e8c1201985 --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-yuv444p12be @@ -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 index 0000000000..9807ff074a --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-yuv444p12le @@ -0,0 +1 @@ +pixdesc-yuv444p12le 9d5db1a9354b62181e09aa93c1ffa19a diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy index 6ffeed0544..c712f78148 100644 --- a/tests/ref/fate/filter-pixfmts-copy +++ b/tests/ref/fate/filter-pixfmts-copy @@ -62,6 +62,8 @@ yuv440p 12000ce709b38aac3f7b7f59b07847ef yuv444p 628c9d1e10c22e0e512b27c0e03b46e6 yuv444p10be b60d77db54a592ed088ebf7964e2dd5e yuv444p10le 1752a238eb27fb7c746e349536f60686 +yuv444p12be be54f88f9b9034b5b9bc466132bfba10 +yuv444p12le 714c3c5789897b56cb9ae6a45688e395 yuv444p16be 8e1e2f04cb2e97f80fdfecbb2c5679a0 yuv444p16le 5677b2caa63e0c075eac6937b03cf2a6 yuv444p9be 5ab55576b180b2966e9ed5a1ea55508a diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null index 6ffeed0544..c712f78148 100644 --- a/tests/ref/fate/filter-pixfmts-null +++ b/tests/ref/fate/filter-pixfmts-null @@ -62,6 +62,8 @@ yuv440p 12000ce709b38aac3f7b7f59b07847ef yuv444p 628c9d1e10c22e0e512b27c0e03b46e6 yuv444p10be b60d77db54a592ed088ebf7964e2dd5e yuv444p10le 1752a238eb27fb7c746e349536f60686 +yuv444p12be be54f88f9b9034b5b9bc466132bfba10 +yuv444p12le 714c3c5789897b56cb9ae6a45688e395 yuv444p16be 8e1e2f04cb2e97f80fdfecbb2c5679a0 yuv444p16le 5677b2caa63e0c075eac6937b03cf2a6 yuv444p9be 5ab55576b180b2966e9ed5a1ea55508a diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale index a56d5c776b..0a3f3f18c6 100644 --- a/tests/ref/fate/filter-pixfmts-scale +++ b/tests/ref/fate/filter-pixfmts-scale @@ -62,6 +62,8 @@ yuv440p 4713a7b7ce80dd06923626d13589c098 yuv444p fd733672651ad5bbffb046fd67151fee yuv444p10be 34b38d54167df70044bdc08518d91009 yuv444p10le 0812e3371c9589c6621408812f9e7a27 +yuv444p12be 936147950ba1b511570da85a0922abf3 +yuv444p12le 4a9ec677190371ef5e342ffac1ace735 yuv444p16be e89fe5a4624ed06603580b4a74af9170 yuv444p16le 6944d11048ff4013c5e60359faf1bd2d yuv444p9be 04a950e843d099eb9ade2ddcea494fb3 diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip index 9e7a916faf..b8718c7375 100644 --- a/tests/ref/fate/filter-pixfmts-vflip +++ b/tests/ref/fate/filter-pixfmts-vflip @@ -62,6 +62,8 @@ yuv440p fade395d957e1e3b117ac11c09404964 yuv444p a3c2a074c3609226bf1a0bc4de5c0e51 yuv444p10be b02fac8bc5a564a755567a86dc3ceae0 yuv444p10le 88860297f729c90526b157b6bf1e2fcf +yuv444p12be d8af56e4b09130e14a9449c84a03cab0 +yuv444p12le 0ccfbd671b8000c0f950b9dfae8ea879 yuv444p16be 26fbffad3c28aa1a6c47f2be6d146173 yuv444p16le 3d13dcea82caec9eb563a1d7a2e4b339 yuv444p9be df39c0778e5b13f306e9928c5b0ddbb2