Hi, On 3/13/24 10:45, Louis Chauvet wrote: > From: Arthur Grillo <arthurgrillo@xxxxxxxxxx> > > > Signed-off-by: Arthur Grillo <arthurgrillo@xxxxxxxxxx> > [Louis Chauvet: > - Adapted Arthur's work > - Implemented the read_line_t callbacks for yuv > - add struct conversion_matrix > - remove struct pixel_yuv_u8 > - update the commit message > - Merge the modifications from Arthur] > Signed-off-by: Louis Chauvet <louis.chauvet@xxxxxxxxxxx> > --- > drivers/gpu/drm/vkms/vkms_drv.h | 22 ++ > drivers/gpu/drm/vkms/vkms_formats.c | 431 ++++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/vkms/vkms_formats.h | 4 + > drivers/gpu/drm/vkms/vkms_plane.c | 17 +- > 4 files changed, 473 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h > index 23e1d247468d..f3116084de5a 100644 > --- a/drivers/gpu/drm/vkms/vkms_drv.h > +++ b/drivers/gpu/drm/vkms/vkms_drv.h > @@ -99,6 +99,27 @@ typedef void (*pixel_read_line_t)(const struct vkms_plane_state *plane, int x_st > int y_start, enum pixel_read_direction direction, int count, > struct pixel_argb_u16 out_pixel[]); > > +/** > + * CONVERSION_MATRIX_FLOAT_DEPTH - Number of digits after the point for conversion matrix values This should be + * define CONVERSION_MATRIX_FLOAT_DEPTH - Number of digits after the point for conversion matrix values to conform to kernel-doc format. > + */ > +#define CONVERSION_MATRIX_FLOAT_DEPTH 32 > + > diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c > index 1449a0e6c706..edbf4b321b91 100644 > --- a/drivers/gpu/drm/vkms/vkms_formats.c > +++ b/drivers/gpu/drm/vkms/vkms_formats.c > +/** > + * get_conversion_matrix_to_argb_u16() - Retrieve the correct yuv to rgb conversion matrix for a > + * given encoding and range. > + * > + * If the matrix is not found, return a null pointer. In all other cases, it return a simple > + * diagonal matrix, which act as a "no-op". > + * > + * @format: DRM_FORMAT_* value for which to obtain a conversion function (see [drm_fourcc.h]) > + * @encoding: DRM_COLOR_* value for which to obtain a conversion matrix > + * @range: DRM_COLOR_*_RANGE value for which to obtain a conversion matrix > + */ > +struct conversion_matrix * > +get_conversion_matrix_to_argb_u16(u32 format, enum drm_color_encoding encoding, > + enum drm_color_range range) > +{ > + static struct conversion_matrix no_operation = { > + .matrix = { > + { 4294967296, 0, 0, }, > + { 0, 4294967296, 0, }, > + { 0, 0, 4294967296, }, > + }, > + .y_offset = 0, > + }; > + > + /* > + * Those matrixies were generated using the colour python framework matrices > + * > + * Below are the function calls used to generate eac matrix, go to each > + * https://colour.readthedocs.io/en/develop/generated/colour.matrix_YCbCr.html > + * for more info: > + * > + * numpy.around(colour.matrix_YCbCr(K=colour.WEIGHTS_YCBCR["ITU-R BT.601"], > + * is_legal = False, > + * bits = 8) * 2**32).astype(int) > + */ > + > /** Please convert this comment to kernel-doc format or just use "/*" to begin the comment. > * Retrieve the correct write_pixel function for a specific format. > * If the format is not supported by VKMS a warn is emitted and a dummy "don't do anything" > diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c > index 8875bed76410..987dd2b686a8 100644 > --- a/drivers/gpu/drm/vkms/vkms_plane.c > +++ b/drivers/gpu/drm/vkms/vkms_plane.c thanks. -- #Randy