Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- 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 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel