--- server/red_worker.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/server/red_worker.c b/server/red_worker.c index 515262d..3a305d8 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -6560,6 +6560,13 @@ static inline int red_compress_image(DisplayChannelClient *dcc, spice_image_compression_t image_compression = display_channel->common.worker->image_compression; int quic_compress = FALSE; + uint32_t group_id; + + if (drawable != NULL) { + group_id = drawable->group_id; + } else { + group_id = display_channel->common.worker->mem_slots.internal_groupslot_id; + } if ((image_compression == SPICE_IMAGE_COMPRESS_OFF) || ((src->y * src->stride) < MIN_SIZE_TO_COMPRESS)) { // TODO: change the size cond @@ -6590,10 +6597,11 @@ static inline int red_compress_image(DisplayChannelClient *dcc, if ((src->x < MIN_DIMENSION_TO_QUIC) || (src->y < MIN_DIMENSION_TO_QUIC)) { quic_compress = FALSE; } else { - if (drawable->copy_bitmap_graduality == BITMAP_GRADUAL_INVALID) { + if (drawable == NULL || + drawable->copy_bitmap_graduality == BITMAP_GRADUAL_INVALID) { quic_compress = BITMAP_FMT_HAS_GRADUALITY(src->format) && (_get_bitmap_graduality_level(display_channel->common.worker, src, - drawable->group_id) == + group_id) == BITMAP_GRADUAL_HIGH); } else { quic_compress = (drawable->copy_bitmap_graduality == BITMAP_GRADUAL_HIGH); @@ -6616,17 +6624,18 @@ static inline int red_compress_image(DisplayChannelClient *dcc, // if we use lz for alpha, the stride can't be extra if (src->format != SPICE_BITMAP_FMT_RGBA || !_stride_is_extra(src)) { return red_jpeg_compress_image(dcc, dest, - src, o_comp_data, drawable->group_id); + src, o_comp_data, group_id); } } return red_quic_compress_image(dcc, dest, - src, o_comp_data, drawable->group_id); + src, o_comp_data, group_id); } else { int glz; int ret; if ((image_compression == SPICE_IMAGE_COMPRESS_AUTO_GLZ) || (image_compression == SPICE_IMAGE_COMPRESS_GLZ)) { - glz = BITMAP_FMT_HAS_GRADUALITY(src->format) && ( + glz = drawable != NULL && + BITMAP_FMT_HAS_GRADUALITY(src->format) && ( (src->x * src->y) < glz_enc_dictionary_get_size( dcc->glz_dict->dict)); } else if ((image_compression == SPICE_IMAGE_COMPRESS_AUTO_LZ) || @@ -6658,11 +6667,11 @@ static inline int red_compress_image(DisplayChannelClient *dcc, red_channel_client_test_remote_cap(&dcc->common.base, SPICE_DISPLAY_CAP_LZ4_COMPRESSION)) { ret = red_lz4_compress_image(dcc, dest, src, o_comp_data, - drawable->group_id); + group_id); } else #endif ret = red_lz_compress_image(dcc, dest, src, o_comp_data, - drawable->group_id); + group_id); #ifdef COMPRESS_DEBUG spice_info("LZ LOCAL compress"); #endif -- 2.4.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel