[FFmpeg-devel] [PATCH 1/2] avutil: add P010 pixel format

wm4 nfxjfg at googlemail.com
Thu Jan 7 13:26:10 CET 2016


On Thu,  7 Jan 2016 12:11:21 +0100
Hendrik Leppkes <h.leppkes at gmail.com> wrote:

> P010 is the 10-bit variant of NV12 (planar luma, packed chroma), using two
> bytes per component to store 10-bit data plus 6-bit zeroes in the LSBs.
> ---
>  libavutil/pixdesc.c | 24 ++++++++++++++++++++++++
>  libavutil/pixfmt.h  |  4 ++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
> index 72d0470..58833cf 100644
> --- a/libavutil/pixdesc.c
> +++ b/libavutil/pixdesc.c
> @@ -2004,6 +2004,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
>          },
>          .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
>      },
> +    [AV_PIX_FMT_P010LE] = {
> +        .name = "p010le",
> +        .nb_components = 3,
> +        .log2_chroma_w = 1,
> +        .log2_chroma_h = 1,
> +        .comp = {
> +            { 0, 2, 0, 6, 10, 1, 9, 1 },        /* Y */
> +            { 1, 4, 0, 6, 10, 3, 9, 1 },        /* U */
> +            { 1, 4, 2, 6, 10, 3, 9, 3 },        /* V */

So just to clarify: each component is represented like with other 10
bit pixel formats (say, AV_PIX_FMT_YUV444P10LE), except the data is
already shifted left by 6?

If so, then this makes sense to me.

> +        },
> +        .flags = AV_PIX_FMT_FLAG_PLANAR,
> +    },
> +    [AV_PIX_FMT_P010BE] = {
> +        .name = "p010be",
> +        .nb_components = 3,
> +        .log2_chroma_w = 1,
> +        .log2_chroma_h = 1,
> +        .comp = {
> +            { 0, 2, 0, 6, 10, 1, 9, 1 },        /* Y */
> +            { 1, 4, 0, 6, 10, 3, 9, 1 },        /* U */
> +            { 1, 4, 2, 6, 10, 3, 9, 3 },        /* V */
> +        },
> +        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
> +    },
>  };
>  #if FF_API_PLUS1_MINUS1
>  FF_ENABLE_DEPRECATION_WARNINGS
> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
> index 32044f0..c01c057 100644
> --- a/libavutil/pixfmt.h
> +++ b/libavutil/pixfmt.h
> @@ -289,6 +289,9 @@ enum AVPixelFormat {
>  
>      AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox
>  
> +    AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
> +    AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, 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
>  };
>  
> @@ -365,6 +368,7 @@ enum AVPixelFormat {
>  #define AV_PIX_FMT_XYZ12      AV_PIX_FMT_NE(XYZ12BE, XYZ12LE)
>  #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)
>  
>  /**
>    * Chromaticity coordinates of the source primaries.



More information about the ffmpeg-devel mailing list