From 2a4d357d2751059e9e0c14045fe4fb49d0505609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 4 Nov 2024 13:24:27 +0400 Subject: [PATCH] perf(graphics): help Rust to inline iter_to_ycbcr with format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rgb2yuv time: [11.706 µs 11.716 µs 11.727 µs] change: [-24.083% -23.682% -23.394%] (p = 0.00 < 0.05) Signed-off-by: Marc-André Lureau --- crates/ironrdp-graphics/src/color_conversion.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/ironrdp-graphics/src/color_conversion.rs b/crates/ironrdp-graphics/src/color_conversion.rs index be837e45..4c1d4d08 100644 --- a/crates/ironrdp-graphics/src/color_conversion.rs +++ b/crates/ironrdp-graphics/src/color_conversion.rs @@ -164,11 +164,15 @@ pub fn to_64x64_ycbcr_tile( assert!(width <= 64); assert!(height <= 64); - let to_rgb = pixel_format_to_rgb_fn(format); let bpp = format.bytes_per_pixel() as usize; let input = TileIterator::new(input, width, height, stride, bpp); - iter_to_ycbcr(input, y, cb, cr, to_rgb); + match format { + PixelFormat::ARgb32 | PixelFormat::XRgb32 => iter_to_ycbcr(input, y, cb, cr, xrgb_to_rgb), + PixelFormat::ABgr32 | PixelFormat::XBgr32 => iter_to_ycbcr(input, y, cb, cr, xbgr_to_rgb), + PixelFormat::BgrA32 | PixelFormat::BgrX32 => iter_to_ycbcr(input, y, cb, cr, bgrx_to_rgb), + PixelFormat::RgbA32 | PixelFormat::RgbX32 => iter_to_ycbcr(input, y, cb, cr, rgbx_to_rgb), + }; } /// Convert a 16-bit RDP color to RGB representation. Input value should be represented in