From: Randy Dunlap <rdunlap@infradead.org>
To: "Louis Chauvet" <louis.chauvet@bootlin.com>,
"Rodrigo Siqueira" <rodrigosiqueiramelo@gmail.com>,
"Melissa Wen" <melissa.srw@gmail.com>,
"Maíra Canal" <mairacanal@riseup.net>,
"Haneen Mohammed" <hamohammed.sa@gmail.com>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Simona Vetter" <simona@ffwll.ch>,
arthurgrillo@riseup.net, pekka.paalanen@haloniitty.fi,
"Simona Vetter" <simona.vetter@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org, thomas.petazzoni@bootlin.com,
jeremie.dautheribes@bootlin.com, miquel.raynal@bootlin.com,
seanpaul@google.com, marcheu@google.com,
nicolejadeyee@google.com
Subject: Re: [PATCH v11 10/15] drm/vkms: Add YUV support
Date: Wed, 2 Oct 2024 08:55:49 -0700 [thread overview]
Message-ID: <17edd793-32ac-4139-b989-e94502dda362@infradead.org> (raw)
In-Reply-To: <20240930-yuv-v11-10-4b1a26bcfc96@bootlin.com>
On 9/30/24 8:31 AM, Louis Chauvet wrote:
> From: Arthur Grillo <arthurgrillo@riseup.net>
>
> Add support to the YUV formats bellow:
>
> - NV12/NV16/NV24
> - NV21/NV61/NV42
> - YUV420/YUV422/YUV444
> - YVU420/YVU422/YVU444
>
> The conversion from yuv to rgb is done with fixed-point arithmetic, using
> 32.32 fixed-point numbers and the drm_fixed helpers.
>
> To do the conversion, a specific matrix must be used for each color range
> (DRM_COLOR_*_RANGE) and encoding (DRM_COLOR_*). This matrix is stored in
> the `conversion_matrix` struct, along with the specific y_offset needed.
> This matrix is queried only once, in `vkms_plane_atomic_update` and
> stored in a `vkms_plane_state`. Those conversion matrices of each
> encoding and range were obtained by rounding the values of the original
> conversion matrices multiplied by 2^32. This is done to avoid the use of
> floating point operations.
>
> The same reading function is used for YUV and YVU formats. As the only
> difference between those two category of formats is the order of field, a
> simple swap in conversion matrix columns allows using the same function.
>
> Signed-off-by: Arthur Grillo <arthurgrillo@riseup.net>
> [Louis Chauvet:
> - Adapted Arthur's work
> - Implemented the read_line_t callbacks for yuv
> - add struct conversion_matrix
> - store the whole conversion_matrix in the plane state
> - remove struct pixel_yuv_u8
> - update the commit message
> - Merge the modifications from Arthur]
> Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
> ---
> drivers/gpu/drm/vkms/vkms_drv.h | 18 ++
> drivers/gpu/drm/vkms/vkms_formats.c | 353 ++++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/vkms/vkms_formats.h | 4 +
> drivers/gpu/drm/vkms/vkms_plane.c | 16 +-
> 4 files changed, 390 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c
> index 0f6678420a11..adb1228e5201 100644
> --- a/drivers/gpu/drm/vkms/vkms_formats.c
> +++ b/drivers/gpu/drm/vkms/vkms_formats.c
> @@ -140,6 +140,51 @@ static void packed_pixels_addr_1x1(const struct vkms_frame_info *frame_info,
> *addr = (u8 *)frame_info->map[0].vaddr + offset;
> }
>
> +/**
> + * get_subsampling() - Get the subsampling divisor value on a specific direction
> + *
> + * @format: format to extarct the subsampling from
extract
> + * @direction: direction of the subsampling requested
> + */
> +static int get_subsampling(const struct drm_format_info *format,
> + enum pixel_read_direction direction)
> +{
> + switch (direction) {
> + case READ_BOTTOM_TO_TOP:
> + case READ_TOP_TO_BOTTOM:
> + return format->vsub;
> + case READ_RIGHT_TO_LEFT:
> + case READ_LEFT_TO_RIGHT:
> + return format->hsub;
> + }
> + WARN_ONCE(true, "Invalid direction for pixel reading: %d\n", direction);
> + return 1;
> +}
> +
> +/**
> + * get_subsampling_offset() - An offset for keeping the chroma siting consistent regardless of
> + * x_start and y_start values
> + *
> + * @direction: direction of the reading to properly compute this offset
> + * @x_start: x coordinate of the starting point of the readed line
read
> + * @y_start: y coordinate of the starting point of the readed line
read
> + */
> +static int get_subsampling_offset(enum pixel_read_direction direction, int x_start, int y_start)
> +{
next prev parent reply other threads:[~2024-10-02 15:56 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-30 15:31 [PATCH v11 00/15] drm/vkms: Reimplement line-per-line pixel conversion for plane reading Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 01/15] drm/vkms: Code formatting Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 02/15] drm/vkms: Use drm_frame directly Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 03/15] drm/vkms: Add typedef and documentation for pixel_read and pixel_write functions Louis Chauvet
2024-10-02 3:49 ` Randy Dunlap
2024-09-30 15:31 ` [PATCH v11 04/15] drm/vkms: Use const for input pointers in pixel_read an " Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 05/15] drm/vkms: Update pixels accessor to support packed and multi-plane formats Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 06/15] drm/vkms: Avoid computing blending limits inside pre_mul_alpha_blend Louis Chauvet
2024-10-02 3:54 ` Randy Dunlap
2024-10-02 8:57 ` Louis Chauvet
2024-10-02 15:49 ` Randy Dunlap
2024-10-02 16:11 ` Louis Chauvet
2024-10-02 16:37 ` Randy Dunlap
2024-09-30 15:31 ` [PATCH v11 07/15] drm/vkms: Introduce pixel_read_direction enum Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 08/15] drm/vkms: Re-introduce line-per-line composition algorithm Louis Chauvet
2024-10-02 4:02 ` Randy Dunlap
2024-09-30 15:31 ` [PATCH v11 09/15] drm/vkms: Remove useless drm_rotation_simplify Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 10/15] drm/vkms: Add YUV support Louis Chauvet
2024-10-02 15:55 ` Randy Dunlap [this message]
2024-09-30 15:31 ` [PATCH v11 11/15] drm/vkms: Add range and encoding properties to the plane Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 12/15] drm/vkms: Drop YUV formats TODO Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 13/15] drm/vkms: Create KUnit tests for YUV conversions Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 14/15] drm/vkms: Add how to run the Kunit tests Louis Chauvet
2024-09-30 15:31 ` [PATCH v11 15/15] drm/vkms: Add support for DRM_FORMAT_R* Louis Chauvet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=17edd793-32ac-4139-b989-e94502dda362@infradead.org \
--to=rdunlap@infradead.org \
--cc=airlied@gmail.com \
--cc=arthurgrillo@riseup.net \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=hamohammed.sa@gmail.com \
--cc=jeremie.dautheribes@bootlin.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mairacanal@riseup.net \
--cc=marcheu@google.com \
--cc=melissa.srw@gmail.com \
--cc=miquel.raynal@bootlin.com \
--cc=mripard@kernel.org \
--cc=nicolejadeyee@google.com \
--cc=pekka.paalanen@haloniitty.fi \
--cc=rodrigosiqueiramelo@gmail.com \
--cc=seanpaul@google.com \
--cc=simona.vetter@ffwll.ch \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®