[Spice-devel] [PATCH 05/30] Encapsulate quic information in a new EncodersData structure
Frediano Ziglio
fziglio at redhat.com
Tue Jun 7 10:17:43 UTC 2016
Start putting all encoding code into dcc-encoders.c.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/dcc-encoders.c | 27 ++++++++++++++-------------
server/dcc-encoders.h | 6 ++++++
server/dcc.c | 14 +++++++-------
server/dcc.h | 5 +++--
4 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index 2bf68d0..7d317d5 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -291,19 +291,19 @@ static int zlib_usr_more_input(ZlibEncoderUsrContext *usr, uint8_t** input)
return buf_size;
}
-static void dcc_init_quic(DisplayChannelClient *dcc)
+static void dcc_init_quic(EncodersData *enc)
{
- dcc->quic_data.usr.error = quic_usr_error;
- dcc->quic_data.usr.warn = quic_usr_warn;
- dcc->quic_data.usr.info = quic_usr_warn;
- dcc->quic_data.usr.malloc = quic_usr_malloc;
- dcc->quic_data.usr.free = quic_usr_free;
- dcc->quic_data.usr.more_space = quic_usr_more_space;
- dcc->quic_data.usr.more_lines = quic_usr_more_lines;
+ enc->quic_data.usr.error = quic_usr_error;
+ enc->quic_data.usr.warn = quic_usr_warn;
+ enc->quic_data.usr.info = quic_usr_warn;
+ enc->quic_data.usr.malloc = quic_usr_malloc;
+ enc->quic_data.usr.free = quic_usr_free;
+ enc->quic_data.usr.more_space = quic_usr_more_space;
+ enc->quic_data.usr.more_lines = quic_usr_more_lines;
- dcc->quic = quic_create(&dcc->quic_data.usr);
+ enc->quic = quic_create(&enc->quic_data.usr);
- if (!dcc->quic) {
+ if (!enc->quic) {
spice_critical("create quic failed");
}
}
@@ -401,7 +401,7 @@ static void dcc_init_zlib(DisplayChannelClient *dcc)
void dcc_encoders_init(DisplayChannelClient *dcc)
{
dcc_init_glz_data(dcc);
- dcc_init_quic(dcc);
+ dcc_init_quic(&dcc->encoders);
dcc_init_lz(dcc);
dcc_init_jpeg(dcc);
#ifdef USE_LZ4
@@ -415,8 +415,9 @@ void dcc_encoders_init(DisplayChannelClient *dcc)
void dcc_encoders_free(DisplayChannelClient *dcc)
{
- quic_destroy(dcc->quic);
- dcc->quic = NULL;
+ EncodersData *enc = &dcc->encoders;
+ quic_destroy(enc->quic);
+ enc->quic = NULL;
lz_destroy(dcc->lz);
dcc->lz = NULL;
jpeg_encoder_destroy(dcc->jpeg);
diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
index 95790b0..6bed548 100644
--- a/server/dcc-encoders.h
+++ b/server/dcc-encoders.h
@@ -34,6 +34,7 @@
typedef struct RedCompressBuf RedCompressBuf;
typedef struct GlzDrawableInstanceItem GlzDrawableInstanceItem;
typedef struct RedGlzDrawable RedGlzDrawable;
+typedef struct EncodersData EncodersData;
void dcc_encoders_init (DisplayChannelClient *dcc);
void dcc_encoders_free (DisplayChannelClient *dcc);
@@ -161,6 +162,11 @@ struct RedGlzDrawable {
DisplayChannelClient *dcc;
};
+struct EncodersData {
+ QuicData quic_data;
+ QuicContext *quic;
+};
+
#define RED_RELEASE_BUNCH_SIZE 64
#endif /* DCC_ENCODERS_H_ */
diff --git a/server/dcc.c b/server/dcc.c
index a88f8e6..27e668c 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -1026,15 +1026,15 @@ static int dcc_compress_image_lz4(DisplayChannelClient *dcc, SpiceImage *dest,
}
#endif
-static int dcc_compress_image_quic(DisplayChannelClient *dcc, SpiceImage *dest,
- SpiceBitmap *src, compress_send_data_t* o_comp_data)
+static int dcc_compress_image_quic(EncodersData *enc, SpiceImage *dest,
+ SpiceBitmap *src, compress_send_data_t* o_comp_data, stat_info_t *stats)
{
- QuicData *quic_data = &dcc->quic_data;
- QuicContext *quic = dcc->quic;
+ QuicData *quic_data = &enc->quic_data;
+ QuicContext *quic = enc->quic;
volatile QuicImageType type;
int size, stride;
stat_start_time_t start_time;
- stat_start_time_init(&start_time, &DCC_TO_DC(dcc)->quic_stat);
+ stat_start_time_init(&start_time, stats);
#ifdef COMPRESS_DEBUG
spice_info("QUIC compress");
@@ -1094,7 +1094,7 @@ static int dcc_compress_image_quic(DisplayChannelClient *dcc, SpiceImage *dest,
o_comp_data->comp_buf = quic_data->data.bufs_head;
o_comp_data->comp_buf_size = size << 2;
- stat_compress_add(&DCC_TO_DC(dcc)->quic_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;
}
@@ -1205,7 +1205,7 @@ int dcc_compress_image(DisplayChannelClient *dcc,
success = dcc_compress_image_jpeg(dcc, dest, src, o_comp_data);
break;
}
- success = dcc_compress_image_quic(dcc, dest, src, o_comp_data);
+ success = dcc_compress_image_quic(&dcc->encoders, dest, src, o_comp_data, &display_channel->quic_stat);
break;
case SPICE_IMAGE_COMPRESSION_GLZ:
if ((src->x * src->y) < glz_enc_dictionary_get_size(dcc->glz_dict->dict)) {
diff --git a/server/dcc.h b/server/dcc.h
index a11d25a..0ac5f5a 100644
--- a/server/dcc.h
+++ b/server/dcc.h
@@ -61,10 +61,11 @@ struct DisplayChannelClient {
spice_wan_compression_t jpeg_state;
spice_wan_compression_t zlib_glz_state;
int jpeg_quality;
+
+ EncodersData encoders;
+
int zlib_level;
- QuicData quic_data;
- QuicContext *quic;
LzData lz_data;
LzContext *lz;
JpegData jpeg_data;
--
2.7.4
More information about the Spice-devel
mailing list