[FFmpeg-devel] [PATCH 1/2] avutil: add P016 pixel format
wm4
nfxjfg at googlemail.com
Mon Nov 21 17:43:11 EET 2016
On Sun, 20 Nov 2016 14:35:51 -0800
Philip Langdale <philipl at overt.org> wrote:
> P016 is the 16-bit variant of NV12 (planar luma, packed chroma), using
> two bytes per component.
>
> It may, and in fact is most likely to, be used in situations where
> there are less than 16 bits of data. It is the responsibility of
> the writer to zero out any unused LSBs.
>
> Signed-off-by: Philip Langdale <philipl at overt.org>
> ---
> libavutil/pixdesc.c | 24 ++++++++++++++++++++++++
> libavutil/pixfmt.h | 4 ++++
> 2 files changed, 28 insertions(+)
>
> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
> index f8092ef..3b9c45d 100644
> --- a/libavutil/pixdesc.c
> +++ b/libavutil/pixdesc.c
> @@ -2078,6 +2078,30 @@ 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_P016LE] = {
> + .name = "p016le",
> + .nb_components = 3,
> + .log2_chroma_w = 1,
> + .log2_chroma_h = 1,
> + .comp = {
> + { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
> + { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
> + { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
> + },
> + .flags = AV_PIX_FMT_FLAG_PLANAR,
> + },
> + [AV_PIX_FMT_P016BE] = {
> + .name = "p016be",
> + .nb_components = 3,
> + .log2_chroma_w = 1,
> + .log2_chroma_h = 1,
> + .comp = {
> + { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
> + { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
> + { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
> + },
> + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
> + },
> [AV_PIX_FMT_GBRAP12LE] = {
> .name = "gbrap12le",
> .nb_components = 4,
> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
> index 96860ce..dfb1b11 100644
> --- a/libavutil/pixfmt.h
> +++ b/libavutil/pixfmt.h
> @@ -311,6 +311,9 @@ enum AVPixelFormat {
> AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian
> AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian
>
> + AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian
> + AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, 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 +392,7 @@ enum AVPixelFormat {
> #define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE)
> #define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE)
> #define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE)
> +#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE)
>
> /**
> * Chromaticity coordinates of the source primaries.
Probably fine, though these pixdesc fields are all kinds of tricky. You
changed shift from 6 to 0 and depth from 10 to 16, which looks right.
Probably lacks a libavutil minor bump or so.
More information about the ffmpeg-devel
mailing list