diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-07-20 14:05:36 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-07-20 14:05:36 +0200 |
commit | bdeae7ffb234e9b5f06a3dbb9ea3337dbe9f5fb7 (patch) | |
tree | a86e912f92449d7d9abbd9fbfaba6866479c9367 /server/red_worker.c | |
parent | ccbb922d5ae5757343df64c4184ef3927e680bf9 (diff) | |
download | spice-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
Diffstat (limited to 'server/red_worker.c')
-rw-r--r-- | server/red_worker.c | 10 |
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; } |