[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#989163: Acknowledgement (RDP broken under Wayland)



Control: tags -1 patch

1.4.11+dfsg-2 bad
1.4.12+dfsg-1 bad
1.4.13+dfsg-1 bad

1.4.16+dfsg-1 good
1.4.17+dfsg-1 good

git bisect to the rescue

The commit which fixed this issue is

e6a8e76e69f6d614abdf8a2677a37e53b08829c5 is the first bad commit
commit e6a8e76e69f6d614abdf8a2677a37e53b08829c5
Author: Antenore Gatta <antenore@simbiosi.org>
Date:   Tue Apr 27 10:43:35 2021 +0200

    Do not use alpha as it is not used for the Desktop

    It may fix #2456

    Signed-off-by: Antenore Gatta <antenore@simbiosi.org>

 plugins/rdp/rdp_plugin.c | 43 +++++++++++++++++++++++++++++++++----------
 1 file changed, 33 insertions(+), 10 deletions(-)



Attached is a backport of this patch for 1.4.11 which fixes the issue for me.

It would be great if you can consider this patch for bullseye.

Regards,
Michael
From 5933f73f3be0402eaffcdf27eae6006108607cfa Mon Sep 17 00:00:00 2001
From: Antenore Gatta <antenore@simbiosi.org>
Date: Tue, 27 Apr 2021 10:43:35 +0200
Subject: [PATCH] Do not use alpha as it is not used for the Desktop

It may fix #2456

Signed-off-by: Antenore Gatta <antenore@simbiosi.org>
---
 plugins/rdp/rdp_plugin.c | 43 ++++++++++++++++++++++++++++++----------
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/plugins/rdp/rdp_plugin.c b/plugins/rdp/rdp_plugin.c
index ca937adfc..9e5f80aa3 100644
--- a/plugins/rdp/rdp_plugin.c
+++ b/plugins/rdp/rdp_plugin.c
@@ -600,16 +600,27 @@ static BOOL remmina_rdp_post_connect(freerdp *instance)
 
 	rf_register_graphics(instance->context->graphics);
 
-	if (rfi->bpp == 32) {
-		freerdp_local_color_format = PIXEL_FORMAT_BGRA32;
-		rfi->cairo_format = CAIRO_FORMAT_ARGB32;
-	} else if (rfi->bpp == 24) {
-		/* CAIRO_FORMAT_RGB24 is 32bit aligned, so we map it to libfreerdp’s PIXEL_FORMAT_BGRX32 */
-		freerdp_local_color_format = PIXEL_FORMAT_BGRX32;
-		rfi->cairo_format = CAIRO_FORMAT_RGB24;
-	} else {
-		freerdp_local_color_format = PIXEL_FORMAT_RGB16;
-		rfi->cairo_format = CAIRO_FORMAT_RGB16_565;
+	REMMINA_PLUGIN_DEBUG("bpp: %d", rfi->bpp);
+	switch (rfi->bpp) {
+		case 24:
+			REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
+			freerdp_local_color_format = PIXEL_FORMAT_BGRX32;
+			rfi->cairo_format = CAIRO_FORMAT_RGB24;
+			break;
+		case 32:
+			/** Do not use alpha as it's not used with the desktop
+			 * CAIRO_FORMAT_ARGB32
+			 * See https://gitlab.com/Remmina/Remmina/-/issues/2456
+			 */
+			REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
+			freerdp_local_color_format = PIXEL_FORMAT_BGRA32;
+			rfi->cairo_format = CAIRO_FORMAT_RGB24;
+			break;
+		default:
+			REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB16_565");
+			freerdp_local_color_format = PIXEL_FORMAT_RGB16;
+			rfi->cairo_format = CAIRO_FORMAT_RGB16_565;
+			break;
 	}
 
 	if (!gdi_init(instance, freerdp_local_color_format)) {
@@ -1216,6 +1227,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
 	rfi->settings->ColorDepth = remmina_plugin_service->file_get_int(remminafile, "colordepth", 99);
 
 	rfi->settings->SoftwareGdi = TRUE;
+	REMMINA_PLUGIN_DEBUG("gfx_h264_available: %d", gfx_h264_available);
 
 	/* Avoid using H.264 modes if they are not available on libfreerdp */
 	if (!gfx_h264_available && (rfi->settings->ColorDepth == 65 || rfi->settings->ColorDepth == 66))
@@ -1260,6 +1272,15 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
 		rfi->settings->GfxAVC444 = gfx_h264_available;
 	}
 
+	if (rfi->settings->RemoteFxCodec ||
+	    rfi->settings->NSCodec       ||
+	    rfi->settings->SupportGraphicsPipeline ) {
+		rfi->settings->FastPathOutput = TRUE;
+		rfi->settings->FrameMarkerCommandEnabled = TRUE;
+		rfi->settings->ColorDepth = 32;
+		rfi->bpp = 32;
+	}
+
 	rfi->settings->DesktopWidth = remmina_plugin_service->get_profile_remote_width(gp);
 	rfi->settings->DesktopHeight = remmina_plugin_service->get_profile_remote_height(gp);
 
@@ -2594,8 +2615,10 @@ G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service)
 
 	if (buildconfig_strstr(freerdp_get_build_config(), "WITH_GFX_H264=ON")) {
 		gfx_h264_available = TRUE;
+		REMMINA_PLUGIN_DEBUG("gfx_h264_available: %d", gfx_h264_available);
 	} else {
 		gfx_h264_available = FALSE;
+		REMMINA_PLUGIN_DEBUG("gfx_h264_available: %d", gfx_h264_available);
 		/* Remove values 65 and 66 from colordepth_list array by shifting it */
 		gpointer *src, *dst;
 		dst = src = colordepth_list;
-- 
2.32.0.rc2

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


Reply to: