summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-07-20 14:05:36 +0200
committerAlexander Larsson <alexl@redhat.com>2010-07-20 14:05:36 +0200
commitbdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7 (patch)
treea86e912f92449d7d9abbd9fbfaba6866479c9367
parentccbb922d5ae5757343df64c4184ef3927e680bf9 (diff)
downloadspice-bdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7.tar.gz
spice-bdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7.tar.xz
spice-bdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7.zip
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
-rw-r--r--server/red_worker.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index bc3a7a36..cbfe405f 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;
}