[FFmpeg-devel] [PATCH 1/5] lavu/pixfmt: add Y210/AYUV/Y410 pixel formats

James Almer jamrial at gmail.com
Thu Jun 27 17:33:00 EEST 2019


On 6/27/2019 11:26 PM, Linjie Fu wrote:
> Previously, media driver provided planar format(like 420 8 bit), but
> for HEVC Range Extension (422/444 8/10 bit), the decoded image is
> produced in packed format.
> 
> Y210/AYUV/Y410 are packed formats which are needed in HEVC Rext decoding
> for both VAAPI and QSV:
>     - Y210: 422 10 BIT
>     - AYUV: 444  8 BIT
>     - Y410: 444 10 BIT
> 
> Signed-off-by: Linjie Fu <linjie.fu at intel.com>
> ---
>  libavutil/pixdesc.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  libavutil/pixfmt.h  |  6 ++++++
>  libavutil/version.h |  2 +-
>  3 files changed, 69 insertions(+), 1 deletion(-)
> 
> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
> index b97b066..bde49f9 100644
> --- a/libavutil/pixdesc.c
> +++ b/libavutil/pixdesc.c
> @@ -205,6 +205,68 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
>              { 0, 4, 1, 0, 8, 3, 7, 2 },        /* V */
>          },
>      },
> +    [AV_PIX_FMT_Y210LE] = {
> +        .name = "y210le",
> +        .nb_components = 3,
> +        .log2_chroma_w = 1,
> +        .log2_chroma_h = 0,
> +        .comp = {
> +            { 0, 4, 0, 6, 10, 1, 9, 1 },        /* Y */
> +            { 0, 8, 1, 6, 10, 3, 9, 2 },        /* U */
> +            { 0, 8, 3, 6, 10, 3, 9, 4 },        /* V */
> +        },
> +        .flags = AV_PIX_FMT_FLAG_ALPHA,
> +    },
> +    [AV_PIX_FMT_Y210BE] = {
> +        .name = "y210be",
> +        .nb_components = 3,
> +        .log2_chroma_w = 1,
> +        .log2_chroma_h = 0,
> +        .comp = {
> +            { 0, 4, 0, 6, 10, 1, 9, 1 },        /* Y */
> +            { 0, 8, 1, 6, 10, 3, 9, 2 },        /* U */
> +            { 0, 8, 3, 6, 10, 3, 9, 4 },        /* V */
> +        },
> +        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
> +    },
> +    [AV_PIX_FMT_AYUV] = {
> +        .name = "ayuv",
> +        .nb_components = 4,
> +        .log2_chroma_w = 0,
> +        .log2_chroma_h = 0,
> +        .comp = {
> +            { 0, 4, 1, 0, 8, 3, 7, 2 },        /* Y */
> +            { 0, 4, 2, 0, 8, 3, 7, 1 },        /* U */
> +            { 0, 4, 3, 0, 8, 3, 7, 3 },        /* V */
> +            { 0, 4, 0, 0, 8, 3, 7, 4 },        /* A */
> +        },
> +    },
> +    [AV_PIX_FMT_Y410LE] = {
> +        .name = "y410le",
> +        .nb_components = 4,
> +        .log2_chroma_w = 0,
> +        .log2_chroma_h = 0,
> +        .comp = {
> +            { 0, 4, 1, 0, 10, 3, 9, 2 },        /* Y */
> +            { 0, 4, 0, 0, 10, 3, 9, 1 },        /* U */
> +            { 0, 4, 2, 0, 10, 3, 9, 3 },        /* V */
> +            { 0, 4, 3, 0,  2, 3, 1, 4 },        /* A */
> +        },
> +        .flags = AV_PIX_FMT_FLAG_ALPHA,
> +    },
> +    [AV_PIX_FMT_Y410BE] = {
> +        .name = "y410be",
> +        .nb_components = 4,
> +        .log2_chroma_w = 0,
> +        .log2_chroma_h = 0,
> +        .comp = {
> +            { 0, 4, 1, 0, 10, 3, 9, 2 },        /* Y */
> +            { 0, 4, 0, 0, 10, 3, 9, 1 },        /* U */
> +            { 0, 4, 2, 0, 10, 3, 9, 3 },        /* V */
> +            { 0, 4, 3, 0,  2, 3, 1, 4 },        /* A */
> +        },
> +        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
> +    },
>      [AV_PIX_FMT_RGB24] = {
>          .name = "rgb24",
>          .nb_components = 3,
> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
> index 8b54c94..6a6a36a 100644
> --- a/libavutil/pixfmt.h
> +++ b/libavutil/pixfmt.h
> @@ -209,6 +209,12 @@ enum AVPixelFormat {
>  
>      AV_PIX_FMT_YVYU422,   ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
>  
> +    AV_PIX_FMT_Y210LE,    ///< packed YUV 4:2:2, 32bpp, Y0 Cb Y1 Cr, little-endian
> +    AV_PIX_FMT_Y210BE,    ///< packed YUV 4:2:2, 32bpp, Y0 Cb Y1 Cr, big-endian
> +    AV_PIX_FMT_AYUV,      ///< packed YUV 4:4:4, 32bpp,  A Y Cb Cr
> +    AV_PIX_FMT_Y410LE,    ///< packed YUV 4:4:4, 32bpp, Cr Y Cb A, little-endian
> +    AV_PIX_FMT_Y410BE,    ///< packed YUV 4:4:4, 32bpp, Cr Y Cb A, big-endian

This is an ABI break, as you're shifting the enum values for every entry
under these.

You need to add new values at the end, right above AV_PIX_FMT_NB.

> +
>      AV_PIX_FMT_YA16BE,       ///< 16 bits gray, 16 bits alpha (big-endian)
>      AV_PIX_FMT_YA16LE,       ///< 16 bits gray, 16 bits alpha (little-endian)
>  
> diff --git a/libavutil/version.h b/libavutil/version.h
> index dccbb38..e16b93e 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,7 +79,7 @@
>   */
>  
>  #define LIBAVUTIL_VERSION_MAJOR  56
> -#define LIBAVUTIL_VERSION_MINOR  29
> +#define LIBAVUTIL_VERSION_MINOR  30
>  #define LIBAVUTIL_VERSION_MICRO 100
>  
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> 



More information about the ffmpeg-devel mailing list