Regression fix: The usage of RDPGFX_SURFACE_COMMAND::format is changed after color...
authorzihao.jiang <zihao.jiang@yahoo.com>
Mon, 10 Oct 2016 16:23:48 +0000 (00:23 +0800)
committerzihao.jiang <zihao.jiang@yahoo.com>
Mon, 10 Oct 2016 16:56:12 +0000 (00:56 +0800)
Fix server side rdpgfx code to match the change.

channels/rdpgfx/server/rdpgfx_main.c
include/freerdp/channels/rdpgfx.h

index 77433c0..47d2bf4 100644 (file)
@@ -571,6 +571,21 @@ static UINT rdpgfx_write_surface_command(wStream* s,
        RDPGFX_AVC444_BITMAP_STREAM* havc444 = NULL;
        UINT32 bitmapDataStart = 0;
        UINT32 bitmapDataLength = 0;
+       UINT8 pixelFormat = 0;
+       switch (cmd->format)
+       {
+               case PIXEL_FORMAT_BGRX32:
+                       pixelFormat = GFX_PIXEL_FORMAT_XRGB_8888;
+                       break;
+
+               case PIXEL_FORMAT_BGRA32:
+                       pixelFormat = GFX_PIXEL_FORMAT_ARGB_8888;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "Format %s not supported!", GetColorFormatName(cmd->format));
+                       return ERROR_INVALID_DATA;
+       }
 
        if (cmd->codecId == RDPGFX_CODECID_CAPROGRESSIVE ||
            cmd->codecId == RDPGFX_CODECID_CAPROGRESSIVE_V2)
@@ -579,7 +594,7 @@ static UINT rdpgfx_write_surface_command(wStream* s,
                Stream_Write_UINT16(s, cmd->surfaceId); /* surfaceId (2 bytes) */
                Stream_Write_UINT16(s, cmd->codecId); /* codecId (2 bytes) */
                Stream_Write_UINT32(s, cmd->contextId); /* codecContextId (4 bytes) */
-               Stream_Write_UINT8(s, cmd->format); /* pixelFormat (1 byte) */
+               Stream_Write_UINT8(s, pixelFormat); /* pixelFormat (1 byte) */
                Stream_Write_UINT32(s, cmd->length); /* bitmapDataLength (4 bytes) */
                Stream_Write(s, cmd->data, cmd->length);
        }
@@ -588,7 +603,7 @@ static UINT rdpgfx_write_surface_command(wStream* s,
                /* Write RDPGFX_CMDID_WIRETOSURFACE_1 format for others */
                Stream_Write_UINT16(s, cmd->surfaceId); /* surfaceId (2 bytes) */
                Stream_Write_UINT16(s, cmd->codecId); /* codecId (2 bytes) */
-               Stream_Write_UINT8(s, cmd->format); /* pixelFormat (1 byte) */
+               Stream_Write_UINT8(s, pixelFormat); /* pixelFormat (1 byte) */
                Stream_Write_UINT16(s, cmd->left); /* left (2 bytes) */
                Stream_Write_UINT16(s, cmd->top); /* top (2 bytes) */
                Stream_Write_UINT16(s, cmd->right); /* right (2 bytes) */
index aa90c8c..97e863f 100644 (file)
@@ -177,7 +177,7 @@ struct _RDPGFX_SURFACE_COMMAND
        UINT32 surfaceId;
        UINT32 codecId;
        UINT32 contextId;
-       UINT32 format;
+       UINT32 format; /* FreeRDP color format. @see freerdp/codec/color.h */
        UINT32 left;
        UINT32 top;
        UINT32 right;