[Spice-devel] [PATCH v2 06/30] Move image_encoders_compress_lz to dcc-encoders.c

Frediano Ziglio fziglio at redhat.com
Thu Jun 9 12:31:26 UTC 2016


Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/dcc-encoders.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
 server/dcc-encoders.h |  5 ++++
 server/dcc.c          | 66 ------------------------------------------
 3 files changed, 85 insertions(+), 66 deletions(-)

diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index 2ccbb66..e795065 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -782,4 +782,84 @@ int image_encoders_compress_quic(ImageEncoders *enc, SpiceImage *dest,
     return TRUE;
 }
 
+static const LzImageType bitmap_fmt_to_lz_image_type[] = {
+    LZ_IMAGE_TYPE_INVALID,
+    LZ_IMAGE_TYPE_PLT1_LE,
+    LZ_IMAGE_TYPE_PLT1_BE,
+    LZ_IMAGE_TYPE_PLT4_LE,
+    LZ_IMAGE_TYPE_PLT4_BE,
+    LZ_IMAGE_TYPE_PLT8,
+    LZ_IMAGE_TYPE_RGB16,
+    LZ_IMAGE_TYPE_RGB24,
+    LZ_IMAGE_TYPE_RGB32,
+    LZ_IMAGE_TYPE_RGBA,
+    LZ_IMAGE_TYPE_A8
+};
+
+int image_encoders_compress_lz(ImageEncoders *enc,
+                               SpiceImage *dest, SpiceBitmap *src,
+                               compress_send_data_t* o_comp_data,
+                               stat_info_t *stats)
+{
+    LzData *lz_data = &enc->lz_data;
+    LzContext *lz = enc->lz;
+    LzImageType type = bitmap_fmt_to_lz_image_type[src->format];
+    int size;            // size of the compressed data
+
+    stat_start_time_t start_time;
+    stat_start_time_init(&start_time, stats);
+
+#ifdef COMPRESS_DEBUG
+    spice_info("LZ LOCAL compress");
+#endif
+
+    encoder_data_init(&lz_data->data);
+
+    if (setjmp(lz_data->data.jmp_env)) {
+        encoder_data_reset(&lz_data->data);
+        return FALSE;
+    }
+
+    lz_data->data.u.lines_data.chunks = src->data;
+    lz_data->data.u.lines_data.stride = src->stride;
+    lz_data->data.u.lines_data.next = 0;
+    lz_data->data.u.lines_data.reverse = 0;
+
+    size = lz_encode(lz, type, src->x, src->y,
+                     !!(src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN),
+                     NULL, 0, src->stride,
+                     lz_data->data.bufs_head->buf.bytes,
+                     sizeof(lz_data->data.bufs_head->buf));
+
+    // the compressed buffer is bigger than the original data
+    if (size > (src->y * src->stride)) {
+        longjmp(lz_data->data.jmp_env, 1);
+    }
+
+    if (bitmap_fmt_is_rgb(src->format)) {
+        dest->descriptor.type = SPICE_IMAGE_TYPE_LZ_RGB;
+        dest->u.lz_rgb.data_size = size;
+
+        o_comp_data->comp_buf = lz_data->data.bufs_head;
+        o_comp_data->comp_buf_size = size;
+    } else {
+        /* masks are 1BIT bitmaps without palettes, but they are not compressed
+         * (see fill_mask) */
+        spice_assert(src->palette);
+        dest->descriptor.type = SPICE_IMAGE_TYPE_LZ_PLT;
+        dest->u.lz_plt.data_size = size;
+        dest->u.lz_plt.flags = src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN;
+        dest->u.lz_plt.palette = src->palette;
+        dest->u.lz_plt.palette_id = src->palette->unique;
+        o_comp_data->comp_buf = lz_data->data.bufs_head;
+        o_comp_data->comp_buf_size = size;
+
+        o_comp_data->lzplt_palette = dest->u.lz_plt.palette;
+    }
+
+    stat_compress_add(stats, start_time, src->stride * src->y,
+                      o_comp_data->comp_buf_size);
+    return TRUE;
+}
+
 
diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
index 03d5ee7..21e2fa4 100644
--- a/server/dcc-encoders.h
+++ b/server/dcc-encoders.h
@@ -179,6 +179,11 @@ typedef struct compress_send_data_t {
 int image_encoders_compress_quic(ImageEncoders *enc, SpiceImage *dest,
                                  SpiceBitmap *src, compress_send_data_t* o_comp_data,
                                  stat_info_t *stats);
+int image_encoders_compress_lz(ImageEncoders *enc,
+                               SpiceImage *dest, SpiceBitmap *src,
+                               compress_send_data_t* o_comp_data,
+                               stat_info_t *stats);
+
 #define RED_RELEASE_BUNCH_SIZE 64
 
 #endif /* DCC_ENCODERS_H_ */
diff --git a/server/dcc.c b/server/dcc.c
index d5e6c6b..2d715d9 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -784,72 +784,6 @@ glz:
     return TRUE;
 }
 
-static int image_encoders_compress_lz(ImageEncoders *enc,
-                                      SpiceImage *dest, SpiceBitmap *src,
-                                      compress_send_data_t* o_comp_data,
-                                      stat_info_t *stats)
-{
-    LzData *lz_data = &enc->lz_data;
-    LzContext *lz = enc->lz;
-    LzImageType type = bitmap_fmt_to_lz_image_type[src->format];
-    int size;            // size of the compressed data
-
-    stat_start_time_t start_time;
-    stat_start_time_init(&start_time, stats);
-
-#ifdef COMPRESS_DEBUG
-    spice_info("LZ LOCAL compress");
-#endif
-
-    encoder_data_init(&lz_data->data);
-
-    if (setjmp(lz_data->data.jmp_env)) {
-        encoder_data_reset(&lz_data->data);
-        return FALSE;
-    }
-
-    lz_data->data.u.lines_data.chunks = src->data;
-    lz_data->data.u.lines_data.stride = src->stride;
-    lz_data->data.u.lines_data.next = 0;
-    lz_data->data.u.lines_data.reverse = 0;
-
-    size = lz_encode(lz, type, src->x, src->y,
-                     !!(src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN),
-                     NULL, 0, src->stride,
-                     lz_data->data.bufs_head->buf.bytes,
-                     sizeof(lz_data->data.bufs_head->buf));
-
-    // the compressed buffer is bigger than the original data
-    if (size > (src->y * src->stride)) {
-        longjmp(lz_data->data.jmp_env, 1);
-    }
-
-    if (bitmap_fmt_is_rgb(src->format)) {
-        dest->descriptor.type = SPICE_IMAGE_TYPE_LZ_RGB;
-        dest->u.lz_rgb.data_size = size;
-
-        o_comp_data->comp_buf = lz_data->data.bufs_head;
-        o_comp_data->comp_buf_size = size;
-    } else {
-        /* masks are 1BIT bitmaps without palettes, but they are not compressed
-         * (see fill_mask) */
-        spice_assert(src->palette);
-        dest->descriptor.type = SPICE_IMAGE_TYPE_LZ_PLT;
-        dest->u.lz_plt.data_size = size;
-        dest->u.lz_plt.flags = src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN;
-        dest->u.lz_plt.palette = src->palette;
-        dest->u.lz_plt.palette_id = src->palette->unique;
-        o_comp_data->comp_buf = lz_data->data.bufs_head;
-        o_comp_data->comp_buf_size = size;
-
-        o_comp_data->lzplt_palette = dest->u.lz_plt.palette;
-    }
-
-    stat_compress_add(stats, start_time, src->stride * src->y,
-                      o_comp_data->comp_buf_size);
-    return TRUE;
-}
-
 static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
                                    SpiceBitmap *src, compress_send_data_t* o_comp_data)
 {
-- 
2.7.4



More information about the Spice-devel mailing list