With and without alpha. --- Updated with fate tests. Vittorio libavutil/pixdesc.c | 51 ++++++++++++++++++++++++++++++++++++++++ libavutil/pixdesc.h | 5 ++++ libavutil/pixfmt.h | 7 ++++++ libswscale/utils.c | 4 ++++ tests/ref/fate/sws-pixdesc-query | 16 +++++++++++++ 5 files changed, 83 insertions(+)
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 1983ce9ef5..2175b9d799 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -2162,6 +2162,57 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { .name = "d3d11", .flags = AV_PIX_FMT_FLAG_HWACCEL, }, + [AV_PIX_FMT_YUV444F32LE] = { + .name = "yuv444f32le", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_YUV444F32BE] = { + .name = "yuv444f32be", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_YUVA444F32LE] = { + .name = "yuva444f32le", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, + }, + [AV_PIX_FMT_YUVA444F32BE] = { + .name = "yuva444f32be", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, + }, }; #if FF_API_PLUS1_MINUS1 FF_ENABLE_DEPRECATION_WARNINGS diff --git a/libavutil/pixdesc.h b/libavutil/pixdesc.h index c3a6f27f49..294555260a 100644 --- a/libavutil/pixdesc.h +++ b/libavutil/pixdesc.h @@ -178,6 +178,11 @@ typedef struct AVPixFmtDescriptor { #define AV_PIX_FMT_FLAG_BAYER (1 << 8) /** + * The pixel format contains IEEE-754 single precision floating point values. + */ +#define AV_PIX_FMT_FLAG_FLOAT (1 << 10) + +/** * Return the number of bits per pixel used by the pixel format * described by pixdesc. Note that this is not the same as the number * of bits per sample. diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index e1e4074bee..d6a874da15 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -326,6 +326,11 @@ enum AVPixelFormat { */ AV_PIX_FMT_D3D11, + AV_PIX_FMT_YUV444F32LE, ///< IEEE-754 single precision planar YUV 4:4:4, 96bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444F32BE, ///< IEEE-754 single precision planar YUV 4:4:4, 96bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUVA444F32LE, ///< IEEE-754 single precision planar YUV 4:4:4, 128bpp, (1 Cr & Cb sample per 1x1 Y & A sample), little-endian + AV_PIX_FMT_YUVA444F32BE, ///< IEEE-754 single precision planar YUV 4:4:4, 128bpp, (1 Cr & Cb sample per 1x1 Y & A sample), big-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 }; @@ -389,6 +394,8 @@ 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_YUV444F32 AV_PIX_FMT_NE(YUV444F32BE, YUV444F32LE) +#define AV_PIX_FMT_YUVA444F32 AV_PIX_FMT_NE(YUVA444F32BE, YUVA444F32LE) #define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) #define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) diff --git a/libswscale/utils.c b/libswscale/utils.c index 17c996734a..892b219049 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -254,6 +254,10 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = { [AV_PIX_FMT_P010BE] = { 1, 1 }, [AV_PIX_FMT_P016LE] = { 1, 0 }, [AV_PIX_FMT_P016BE] = { 1, 0 }, + [AV_PIX_FMT_YUV444F32LE] = { 0, 0 }, + [AV_PIX_FMT_YUV444F32BE] = { 0, 0 }, + [AV_PIX_FMT_YUVA444F32LE] = { 0, 0 }, + [AV_PIX_FMT_YUVA444F32BE] = { 0, 0 }, }; int sws_isSupportedInput(enum AVPixelFormat pix_fmt) diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query index e262a0cabf..7f2fc557d6 100644 --- a/tests/ref/fate/sws-pixdesc-query +++ b/tests/ref/fate/sws-pixdesc-query @@ -154,6 +154,8 @@ isBE: gray12be gray10be p016be + yuv444f32be + yuva444f32be isYUV: yuv420p @@ -242,6 +244,10 @@ isYUV: p010be p016le p016be + yuv444f32le + yuv444f32be + yuva444f32le + yuva444f32be isPlanarYUV: yuv420p @@ -319,6 +325,10 @@ isPlanarYUV: p010be p016le p016be + yuv444f32le + yuv444f32be + yuva444f32le + yuva444f32be isRGB: rgb24 @@ -567,6 +577,8 @@ ALPHA: gbrap12le gbrap10be gbrap10le + yuva444f32le + yuva444f32be Packed: yuyv422 @@ -726,6 +738,10 @@ Planar: gbrap10le p016le p016be + yuv444f32le + yuv444f32be + yuva444f32le + yuva444f32be PackedRGB: rgb24 -- 2.13.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel