lkml.org 
[lkml]   [2018]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 09/43] drm/fourcc: Add format info helpers for checking YUV planes disposition
    Date
    It is often useful to check whether the DRM format info retrieved from
    the DRM framebuffer matches a specific YUV planes disposition.

    This introduces helpers to quickly check that a provided format info
    matches a YUV format with a specific disposition, in commonly-used
    terminology.

    The intent of providing helpers taking the format info instead of the
    fourcc alone is to avoid the overhead of iterating through all formats
    when the whole format info structure is available. As a result, these
    helpers are very simple so they are made inline.

    Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
    ---
    include/drm/drm_fourcc.h | 42 ++++++++++++++++++++++++++++++++++++++++
    1 file changed, 42 insertions(+)

    diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
    index 569b70483505..f43d5ba412fb 100644
    --- a/include/drm/drm_fourcc.h
    +++ b/include/drm/drm_fourcc.h
    @@ -143,6 +143,48 @@ struct drm_format_name_buf {
    char str[32];
    };

    +/**
    + * drm_format_info_is_yuv_packed - check that the format info matches a YUV
    + * format with data laid in a single plane
    + * @info: format info
    + *
    + * Returns:
    + * A boolean indicating whether the format info matches a packed YUV format.
    + */
    +static inline bool
    +drm_format_info_is_yuv_packed(const struct drm_format_info *info)
    +{
    + return info->is_yuv && info->num_planes == 1;
    +}
    +
    +/**
    + * drm_format_info_is_yuv_semiplanar - check that the format info matches a YUV
    + * format with data laid in two planes (luminance and chrominance)
    + * @info: format info
    + *
    + * Returns:
    + * A boolean indicating whether the format info matches a semiplanar YUV format.
    + */
    +static inline bool
    +drm_format_info_is_yuv_semiplanar(const struct drm_format_info *info)
    +{
    + return info->is_yuv && info->num_planes == 2;
    +}
    +
    +/**
    + * drm_format_info_is_yuv_planar - check that the format info matches a YUV
    + * format with data laid in three planes (one for each YUV component)
    + * @info: format info
    + *
    + * Returns:
    + * A boolean indicating whether the format info matches a planar YUV format.
    + */
    +static inline bool
    +drm_format_info_is_yuv_planar(const struct drm_format_info *info)
    +{
    + return info->is_yuv && info->num_planes == 3;
    +}
    +
    const struct drm_format_info *__drm_format_info(u32 format);
    const struct drm_format_info *drm_format_info(u32 format);
    const struct drm_format_info *
    --
    2.19.1
    \
     
     \ /
      Last update: 2018-11-23 10:31    [W:2.132 / U:0.344 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site