| From 029583e56e6eaad4139e39b4cf908158ab8cc91a Mon Sep 17 00:00:00 2001 |
| From: David Fort <rdp.effort@gmail.com> |
| Date: Sun, 27 May 2018 23:56:43 +0200 |
| Subject: [PATCH] rdp-compositor: fix compilation against FreeRDP 2.0.0 rc2 |
| |
| The SURFACE_BITS_COMMAND struct has changed and some members have been moved in the |
| bmp field. |
| |
| Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> |
| Tested-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> |
| [yann.morin.1998@free.fr: backported from upstream] |
| Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> |
| --- |
| configure.ac | 9 +++++- |
| libweston/compositor-rdp.c | 69 +++++++++++++++++++++++++++++----------------- |
| 2 files changed, 52 insertions(+), 26 deletions(-) |
| |
| diff --git a/configure.ac b/configure.ac |
| index da3f7342..1dce05fa 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -264,10 +264,17 @@ if test x$enable_rdp_compositor = xyes; then |
| [], |
| [PKG_CHECK_MODULES(RDP_COMPOSITOR, [freerdp >= 1.1.0],[])] |
| ) |
| - |
| SAVED_CPPFLAGS="$CPPFLAGS" |
| CPPFLAGS="$CPPFLAGS $RDP_COMPOSITOR_CFLAGS" |
| + |
| AC_CHECK_HEADERS([freerdp/version.h]) |
| + AC_CHECK_MEMBER([SURFACE_BITS_COMMAND.bmp], |
| + [AC_DEFINE([HAVE_SURFACE_BITS_BMP], [1], [SURFACE_BITS_CMD has bmp field])], |
| + [], |
| + [[#include <freerdp/update.h>]] |
| + ) |
| + |
| + |
| CPPFLAGS="$SAVED_CPPFLAGS" |
| fi |
| |
| diff --git a/libweston/compositor-rdp.c b/libweston/compositor-rdp.c |
| index fd0651af..134e7298 100644 |
| --- a/libweston/compositor-rdp.c |
| +++ b/libweston/compositor-rdp.c |
| @@ -66,6 +66,22 @@ |
| #define FREERDP_CB_RETURN(V) return TRUE |
| #endif |
| |
| +#ifdef HAVE_SURFACE_BITS_BMP |
| +#define SURFACE_BPP(cmd) cmd->bmp.bpp |
| +#define SURFACE_CODECID(cmd) cmd->bmp.codecID |
| +#define SURFACE_WIDTH(cmd) cmd->bmp.width |
| +#define SURFACE_HEIGHT(cmd) cmd->bmp.height |
| +#define SURFACE_BITMAP_DATA(cmd) cmd->bmp.bitmapData |
| +#define SURFACE_BITMAP_DATA_LEN(cmd) cmd->bmp.bitmapDataLength |
| +#else |
| +#define SURFACE_BPP(cmd) cmd->bpp |
| +#define SURFACE_CODECID(cmd) cmd->codecID |
| +#define SURFACE_WIDTH(cmd) cmd->width |
| +#define SURFACE_HEIGHT(cmd) cmd->height |
| +#define SURFACE_BITMAP_DATA(cmd) cmd->bitmapData |
| +#define SURFACE_BITMAP_DATA_LEN(cmd) cmd->bitmapDataLength |
| +#endif |
| + |
| #include <freerdp/freerdp.h> |
| #include <freerdp/listener.h> |
| #include <freerdp/update.h> |
| @@ -200,10 +216,10 @@ rdp_peer_refresh_rfx(pixman_region32_t *damage, pixman_image_t *image, freerdp_p |
| cmd->destTop = damage->extents.y1; |
| cmd->destRight = damage->extents.x2; |
| cmd->destBottom = damage->extents.y2; |
| - cmd->bpp = 32; |
| - cmd->codecID = peer->settings->RemoteFxCodecId; |
| - cmd->width = width; |
| - cmd->height = height; |
| + SURFACE_BPP(cmd) = 32; |
| + SURFACE_CODECID(cmd) = peer->settings->RemoteFxCodecId; |
| + SURFACE_WIDTH(cmd) = width; |
| + SURFACE_HEIGHT(cmd) = height; |
| |
| ptr = pixman_image_get_data(image) + damage->extents.x1 + |
| damage->extents.y1 * (pixman_image_get_stride(image) / sizeof(uint32_t)); |
| @@ -226,8 +242,8 @@ rdp_peer_refresh_rfx(pixman_region32_t *damage, pixman_image_t *image, freerdp_p |
| pixman_image_get_stride(image) |
| ); |
| |
| - cmd->bitmapDataLength = Stream_GetPosition(context->encode_stream); |
| - cmd->bitmapData = Stream_Buffer(context->encode_stream); |
| + SURFACE_BITMAP_DATA_LEN(cmd) = Stream_GetPosition(context->encode_stream); |
| + SURFACE_BITMAP_DATA(cmd) = Stream_Buffer(context->encode_stream); |
| |
| update->SurfaceBits(update->context, cmd); |
| } |
| @@ -253,23 +269,26 @@ rdp_peer_refresh_nsc(pixman_region32_t *damage, pixman_image_t *image, freerdp_p |
| #else |
| memset(cmd, 0, sizeof(*cmd)); |
| #endif |
| + |
| cmd->destLeft = damage->extents.x1; |
| cmd->destTop = damage->extents.y1; |
| cmd->destRight = damage->extents.x2; |
| cmd->destBottom = damage->extents.y2; |
| - cmd->bpp = 32; |
| - cmd->codecID = peer->settings->NSCodecId; |
| - cmd->width = width; |
| - cmd->height = height; |
| + SURFACE_BPP(cmd) = 32; |
| + SURFACE_CODECID(cmd) = peer->settings->NSCodecId; |
| + SURFACE_WIDTH(cmd) = width; |
| + SURFACE_HEIGHT(cmd) = height; |
| |
| ptr = pixman_image_get_data(image) + damage->extents.x1 + |
| damage->extents.y1 * (pixman_image_get_stride(image) / sizeof(uint32_t)); |
| |
| nsc_compose_message(context->nsc_context, context->encode_stream, (BYTE *)ptr, |
| - cmd->width, cmd->height, |
| + width, height, |
| pixman_image_get_stride(image)); |
| - cmd->bitmapDataLength = Stream_GetPosition(context->encode_stream); |
| - cmd->bitmapData = Stream_Buffer(context->encode_stream); |
| + |
| + SURFACE_BITMAP_DATA_LEN(cmd) = Stream_GetPosition(context->encode_stream); |
| + SURFACE_BITMAP_DATA(cmd) = Stream_Buffer(context->encode_stream); |
| + |
| update->SurfaceBits(update->context, cmd); |
| } |
| |
| @@ -306,16 +325,16 @@ rdp_peer_refresh_raw(pixman_region32_t *region, pixman_image_t *image, freerdp_p |
| update->SurfaceFrameMarker(peer->context, marker); |
| |
| memset(cmd, 0, sizeof(*cmd)); |
| - cmd->bpp = 32; |
| - cmd->codecID = 0; |
| + SURFACE_BPP(cmd) = 32; |
| + SURFACE_CODECID(cmd) = 0; |
| |
| for (i = 0; i < nrects; i++, rect++) { |
| /*weston_log("rect(%d,%d, %d,%d)\n", rect->x1, rect->y1, rect->x2, rect->y2);*/ |
| cmd->destLeft = rect->x1; |
| cmd->destRight = rect->x2; |
| - cmd->width = rect->x2 - rect->x1; |
| + SURFACE_WIDTH(cmd) = rect->x2 - rect->x1; |
| |
| - heightIncrement = peer->settings->MultifragMaxRequestSize / (16 + cmd->width * 4); |
| + heightIncrement = peer->settings->MultifragMaxRequestSize / (16 + SURFACE_WIDTH(cmd) * 4); |
| remainingHeight = rect->y2 - rect->y1; |
| top = rect->y1; |
| |
| @@ -323,21 +342,21 @@ rdp_peer_refresh_raw(pixman_region32_t *region, pixman_image_t *image, freerdp_p |
| subrect.x2 = rect->x2; |
| |
| while (remainingHeight) { |
| - cmd->height = (remainingHeight > heightIncrement) ? heightIncrement : remainingHeight; |
| + SURFACE_HEIGHT(cmd) = (remainingHeight > heightIncrement) ? heightIncrement : remainingHeight; |
| cmd->destTop = top; |
| - cmd->destBottom = top + cmd->height; |
| - cmd->bitmapDataLength = cmd->width * cmd->height * 4; |
| - cmd->bitmapData = (BYTE *)realloc(cmd->bitmapData, cmd->bitmapDataLength); |
| + cmd->destBottom = top + SURFACE_HEIGHT(cmd); |
| + SURFACE_BITMAP_DATA_LEN(cmd) = SURFACE_WIDTH(cmd) * SURFACE_HEIGHT(cmd) * 4; |
| + SURFACE_BITMAP_DATA(cmd) = (BYTE *)realloc(SURFACE_BITMAP_DATA(cmd), SURFACE_BITMAP_DATA_LEN(cmd)); |
| |
| subrect.y1 = top; |
| - subrect.y2 = top + cmd->height; |
| - pixman_image_flipped_subrect(&subrect, image, cmd->bitmapData); |
| + subrect.y2 = top + SURFACE_HEIGHT(cmd); |
| + pixman_image_flipped_subrect(&subrect, image, SURFACE_BITMAP_DATA(cmd)); |
| |
| /*weston_log("* sending (%d,%d, %d,%d)\n", subrect.x1, subrect.y1, subrect.x2, subrect.y2); */ |
| update->SurfaceBits(peer->context, cmd); |
| |
| - remainingHeight -= cmd->height; |
| - top += cmd->height; |
| + remainingHeight -= SURFACE_HEIGHT(cmd); |
| + top += SURFACE_HEIGHT(cmd); |
| } |
| } |
| |
| -- |
| 2.14.1 |
| |