[Spice-commits] server/red_worker.c

Alexander Larsson alexl at kemper.freedesktop.org
Tue Jul 20 05:15:20 PDT 2010


 server/red_worker.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

New commits:
commit bdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7
Author: Alexander Larsson <alexl at redhat.com>
Date:   Tue Jul 20 14:05:36 2010 +0200

    server: Properly order rgb for 24bit bitmaps when sending to libjpeg
    
    SPICE_BITMAP_FMT_24BIT order is bgr, libjpeg wants rgb.
    This fixes freedesktop bug #28089

diff --git a/server/red_worker.c b/server/red_worker.c
index bc3a7a3..cbfe405 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -7933,7 +7933,7 @@ static int red_rgb24bpp_to_24 (RedWorker *worker, const SpiceRect *src,
     uint32_t image_stride;
     uint8_t *frame_row;
     size_t offset;
-    int i, chunk;
+    int i, x, chunk;
 
     chunks = image->data;
     offset = 0;
@@ -7958,7 +7958,13 @@ static int red_rgb24bpp_to_24 (RedWorker *worker, const SpiceRect *src,
         src_line += src->left * 3;
 
         frame_row = frame;
-        memcpy (frame_row, src_line, image_width * 3);
+        for (x = 0; x < image_width; x++) {
+            /* libjpegs stores rgb, spice/win32 stores bgr */
+            *frame_row++ = src_line[2]; /* red */
+            *frame_row++ = src_line[1]; /* green */
+            *frame_row++ = src_line[0]; /* blue */
+            src_line += 3;
+        }
         frame += frame_stride;
     }
 


More information about the Spice-commits mailing list