[Spice-devel] [PATCH 07/30] Encapsulate lz information in EncodersData structure

Frediano Ziglio fziglio at redhat.com
Tue Jun 7 10:17:45 UTC 2016


Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/dcc-encoders.c | 30 ++++++++++++++++--------------
 server/dcc-encoders.h |  3 +++
 server/dcc.c          | 23 +++++++++++++----------
 server/dcc.h          |  2 --
 4 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index 99e5507..54b970a 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -308,19 +308,19 @@ static void dcc_init_quic(EncodersData *enc)
     }
 }
 
-static void dcc_init_lz(DisplayChannelClient *dcc)
+static void dcc_init_lz(EncodersData *enc)
 {
-    dcc->lz_data.usr.error = lz_usr_error;
-    dcc->lz_data.usr.warn = lz_usr_warn;
-    dcc->lz_data.usr.info = lz_usr_warn;
-    dcc->lz_data.usr.malloc = lz_usr_malloc;
-    dcc->lz_data.usr.free = lz_usr_free;
-    dcc->lz_data.usr.more_space = lz_usr_more_space;
-    dcc->lz_data.usr.more_lines = lz_usr_more_lines;
+    enc->lz_data.usr.error = lz_usr_error;
+    enc->lz_data.usr.warn = lz_usr_warn;
+    enc->lz_data.usr.info = lz_usr_warn;
+    enc->lz_data.usr.malloc = lz_usr_malloc;
+    enc->lz_data.usr.free = lz_usr_free;
+    enc->lz_data.usr.more_space = lz_usr_more_space;
+    enc->lz_data.usr.more_lines = lz_usr_more_lines;
 
-    dcc->lz = lz_create(&dcc->lz_data.usr);
+    enc->lz = lz_create(&enc->lz_data.usr);
 
-    if (!dcc->lz) {
+    if (!enc->lz) {
         spice_critical("create lz failed");
     }
 }
@@ -400,9 +400,11 @@ static void dcc_init_zlib(DisplayChannelClient *dcc)
 
 void dcc_encoders_init(DisplayChannelClient *dcc)
 {
+    EncodersData *enc = &dcc->encoders;
+
     dcc_init_glz_data(dcc);
-    dcc_init_quic(&dcc->encoders);
-    dcc_init_lz(dcc);
+    dcc_init_quic(enc);
+    dcc_init_lz(enc);
     dcc_init_jpeg(dcc);
 #ifdef USE_LZ4
     dcc_init_lz4(dcc);
@@ -418,8 +420,8 @@ void dcc_encoders_free(DisplayChannelClient *dcc)
     EncodersData *enc = &dcc->encoders;
     quic_destroy(enc->quic);
     enc->quic = NULL;
-    lz_destroy(dcc->lz);
-    dcc->lz = NULL;
+    lz_destroy(enc->lz);
+    enc->lz = NULL;
     jpeg_encoder_destroy(dcc->jpeg);
     dcc->jpeg = NULL;
 #ifdef USE_LZ4
diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
index a75678e..21049cd 100644
--- a/server/dcc-encoders.h
+++ b/server/dcc-encoders.h
@@ -165,6 +165,9 @@ struct RedGlzDrawable {
 struct EncodersData {
     QuicData quic_data;
     QuicContext *quic;
+
+    LzData lz_data;
+    LzContext  *lz;
 };
 
 typedef struct compress_send_data_t {
diff --git a/server/dcc.c b/server/dcc.c
index 0bc806a..05a511d 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -784,17 +784,18 @@ glz:
     return TRUE;
 }
 
-static int dcc_compress_image_lz(DisplayChannelClient *dcc,
+static int dcc_compress_image_lz(EncodersData *enc,
                                  SpiceImage *dest, SpiceBitmap *src,
-                                 compress_send_data_t* o_comp_data)
+                                 compress_send_data_t* o_comp_data,
+                                 stat_info_t *stats)
 {
-    LzData *lz_data = &dcc->lz_data;
-    LzContext *lz = dcc->lz;
+    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, &DCC_TO_DC(dcc)->lz_stat);
+    stat_start_time_init(&start_time, stats);
 
 #ifdef COMPRESS_DEBUG
     spice_info("LZ LOCAL compress");
@@ -841,11 +842,10 @@ static int dcc_compress_image_lz(DisplayChannelClient *dcc,
         o_comp_data->comp_buf = lz_data->data.bufs_head;
         o_comp_data->comp_buf_size = size;
 
-        dcc_palette_cache_palette(dcc, dest->u.lz_plt.palette, &(dest->u.lz_plt.flags));
         o_comp_data->lzplt_palette = dest->u.lz_plt.palette;
     }
 
-    stat_compress_add(&DCC_TO_DC(dcc)->lz_stat, start_time, src->stride * src->y,
+    stat_compress_add(stats, start_time, src->stride * src->y,
                       o_comp_data->comp_buf_size);
     return TRUE;
 }
@@ -854,9 +854,9 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
                                    SpiceBitmap *src, compress_send_data_t* o_comp_data)
 {
     JpegData *jpeg_data = &dcc->jpeg_data;
-    LzData *lz_data = &dcc->lz_data;
+    LzData *lz_data = &dcc->encoders.lz_data;
     JpegEncoderContext *jpeg = dcc->jpeg;
-    LzContext *lz = dcc->lz;
+    LzContext *lz = dcc->encoders.lz;
     volatile JpegEncoderImageType jpeg_in_type;
     int jpeg_size = 0;
     volatile int has_alpha = FALSE;
@@ -1159,7 +1159,10 @@ int dcc_compress_image(DisplayChannelClient *dcc,
 #endif
 lz_compress:
     case SPICE_IMAGE_COMPRESSION_LZ:
-        success = dcc_compress_image_lz(dcc, dest, src, o_comp_data);
+        success = dcc_compress_image_lz(&dcc->encoders, dest, src, o_comp_data, &display_channel->lz_stat);
+        if (success && !bitmap_fmt_is_rgb(src->format)) {
+            dcc_palette_cache_palette(dcc, dest->u.lz_plt.palette, &(dest->u.lz_plt.flags));
+        }
         break;
     default:
         spice_error("invalid image compression type %u", image_compression);
diff --git a/server/dcc.h b/server/dcc.h
index 4b93c73..532ce7b 100644
--- a/server/dcc.h
+++ b/server/dcc.h
@@ -66,8 +66,6 @@ struct DisplayChannelClient {
 
     int zlib_level;
 
-    LzData lz_data;
-    LzContext  *lz;
     JpegData jpeg_data;
     JpegEncoderContext *jpeg;
 #ifdef USE_LZ4
-- 
2.7.4



More information about the Spice-devel mailing list