Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/dcc-encoders.c | 16 ++++++++-------- server/dcc-encoders.h | 5 +++++ server/dcc.c | 28 ++++++++++++++++------------ server/dcc.h | 3 --- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c index 015f677..7d74ca3 100644 --- a/server/dcc-encoders.c +++ b/server/dcc-encoders.c @@ -360,14 +360,14 @@ static void dcc_init_glz_data(DisplayChannelClient *dcc) dcc->glz_data.usr.free_image = glz_usr_free_image; } -static void dcc_init_jpeg(DisplayChannelClient *dcc) +static void dcc_init_jpeg(EncodersData *enc) { - dcc->jpeg_data.usr.more_space = jpeg_usr_more_space; - dcc->jpeg_data.usr.more_lines = jpeg_usr_more_lines; + enc->jpeg_data.usr.more_space = jpeg_usr_more_space; + enc->jpeg_data.usr.more_lines = jpeg_usr_more_lines; - dcc->jpeg = jpeg_encoder_create(&dcc->jpeg_data.usr); + enc->jpeg = jpeg_encoder_create(&enc->jpeg_data.usr); - if (!dcc->jpeg) { + if (!enc->jpeg) { spice_critical("create jpeg encoder failed"); } } @@ -405,7 +405,7 @@ void dcc_encoders_init(DisplayChannelClient *dcc) dcc_init_glz_data(dcc); dcc_init_quic(enc); dcc_init_lz(enc); - dcc_init_jpeg(dcc); + dcc_init_jpeg(enc); #ifdef USE_LZ4 dcc_init_lz4(dcc); #endif @@ -422,8 +422,8 @@ void dcc_encoders_free(DisplayChannelClient *dcc) enc->quic = NULL; lz_destroy(enc->lz); enc->lz = NULL; - jpeg_encoder_destroy(dcc->jpeg); - dcc->jpeg = NULL; + jpeg_encoder_destroy(enc->jpeg); + enc->jpeg = NULL; #ifdef USE_LZ4 lz4_encoder_destroy(dcc->lz4); dcc->lz4 = NULL; diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h index f008bf6..9978a9c 100644 --- a/server/dcc-encoders.h +++ b/server/dcc-encoders.h @@ -168,6 +168,11 @@ struct EncodersData { LzData lz_data; LzContext *lz; + + int jpeg_quality; + + JpegData jpeg_data; + JpegEncoderContext *jpeg; }; typedef struct compress_send_data_t { diff --git a/server/dcc.c b/server/dcc.c index 7bdb2bd..89035be 100644 --- a/server/dcc.c +++ b/server/dcc.c @@ -379,7 +379,7 @@ DisplayChannelClient *dcc_new(DisplayChannel *display, dcc->jpeg_state = jpeg_state; dcc->zlib_glz_state = zlib_glz_state; // TODO: tune quality according to bandwidth - dcc->jpeg_quality = 85; + dcc->encoders.jpeg_quality = 85; size_t stream_buf_size; stream_buf_size = 32*1024; @@ -784,13 +784,15 @@ glz: return TRUE; } -static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, - SpiceBitmap *src, compress_send_data_t* o_comp_data) +static int dcc_compress_image_jpeg(EncodersData *enc, SpiceImage *dest, + SpiceBitmap *src, compress_send_data_t* o_comp_data, + stat_info_t *jpeg_stats, // FIXME put all stats in a structure + stat_info_t *jpeg_alpha_stats) { - JpegData *jpeg_data = &dcc->jpeg_data; - LzData *lz_data = &dcc->encoders.lz_data; - JpegEncoderContext *jpeg = dcc->jpeg; - LzContext *lz = dcc->encoders.lz; + JpegData *jpeg_data = &enc->jpeg_data; + LzData *lz_data = &enc->lz_data; + JpegEncoderContext *jpeg = enc->jpeg; + LzContext *lz = enc->lz; volatile JpegEncoderImageType jpeg_in_type; int jpeg_size = 0; volatile int has_alpha = FALSE; @@ -800,7 +802,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, int stride; uint8_t *lz_out_start_byte; stat_start_time_t start_time; - stat_start_time_init(&start_time, &DCC_TO_DC(dcc)->jpeg_alpha_stat); + stat_start_time_init(&start_time, jpeg_alpha_stats); #ifdef COMPRESS_DEBUG spice_info("JPEG compress"); @@ -846,7 +848,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, jpeg_data->data.u.lines_data.reverse = 1; stride = -src->stride; } - jpeg_size = jpeg_encode(jpeg, dcc->jpeg_quality, jpeg_in_type, + jpeg_size = jpeg_encode(jpeg, enc->jpeg_quality, jpeg_in_type, src->x, src->y, NULL, 0, stride, jpeg_data->data.bufs_head->buf.bytes, sizeof(jpeg_data->data.bufs_head->buf)); @@ -864,7 +866,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, o_comp_data->comp_buf_size = jpeg_size; o_comp_data->is_lossy = TRUE; - stat_compress_add(&DCC_TO_DC(dcc)->jpeg_stat, start_time, src->stride * src->y, + stat_compress_add(jpeg_stats, start_time, src->stride * src->y, o_comp_data->comp_buf_size); return TRUE; } @@ -904,7 +906,7 @@ static int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, o_comp_data->comp_buf = jpeg_data->data.bufs_head; o_comp_data->comp_buf_size = jpeg_size + alpha_lz_size; o_comp_data->is_lossy = TRUE; - stat_compress_add(&DCC_TO_DC(dcc)->jpeg_alpha_stat, start_time, src->stride * src->y, + stat_compress_add(jpeg_alpha_stats, start_time, src->stride * src->y, o_comp_data->comp_buf_size); return TRUE; } @@ -1063,7 +1065,9 @@ int dcc_compress_image(DisplayChannelClient *dcc, case SPICE_IMAGE_COMPRESSION_QUIC: if (can_lossy && display_channel->enable_jpeg && (src->format != SPICE_BITMAP_FMT_RGBA || !bitmap_has_extra_stride(src))) { - success = dcc_compress_image_jpeg(dcc, dest, src, o_comp_data); + success = dcc_compress_image_jpeg(&dcc->encoders, dest, src, o_comp_data, + &display_channel->jpeg_stat, + &display_channel->jpeg_alpha_stat); break; } success = dcc_compress_image_quic(&dcc->encoders, dest, src, o_comp_data, &display_channel->quic_stat); diff --git a/server/dcc.h b/server/dcc.h index 532ce7b..b200d50 100644 --- a/server/dcc.h +++ b/server/dcc.h @@ -60,14 +60,11 @@ struct DisplayChannelClient { SpiceImageCompression image_compression; spice_wan_compression_t jpeg_state; spice_wan_compression_t zlib_glz_state; - int jpeg_quality; EncodersData encoders; int zlib_level; - JpegData jpeg_data; - JpegEncoderContext *jpeg; #ifdef USE_LZ4 Lz4Data lz4_data; Lz4EncoderContext *lz4; -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel