[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