mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-06 05:19:49 +00:00
Better encapsulation for image_encoders_compress_glz call
Do not access too much encoders data. Slightly different as now if glz is frozen lz compression is used. Glz is frozen only during migration. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
parent
2d1c724301
commit
cc26a9a91e
@ -1195,6 +1195,17 @@ int image_encoders_compress_glz(ImageEncoders *enc,
|
||||
spice_info("LZ global compress fmt=%d", src->format);
|
||||
#endif
|
||||
|
||||
if ((src->x * src->y) >= glz_enc_dictionary_get_size(enc->glz_dict->dict)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pthread_rwlock_rdlock(&enc->glz_dict->encode_lock);
|
||||
/* using the global dictionary only if it is not frozen */
|
||||
if (enc->glz_dict->migrate_freeze) {
|
||||
pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
encoder_data_init(&glz_data->data);
|
||||
|
||||
glz_drawable = get_glz_drawable(enc, drawable);
|
||||
@ -1245,8 +1256,12 @@ int image_encoders_compress_glz(ImageEncoders *enc,
|
||||
o_comp_data->comp_buf_size = zlib_size;
|
||||
|
||||
stat_compress_add(&enc->shared_data->zlib_glz_stat, start_time, glz_size, zlib_size);
|
||||
pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
|
||||
return TRUE;
|
||||
|
||||
glz:
|
||||
pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
|
||||
|
||||
dest->descriptor.type = SPICE_IMAGE_TYPE_GLZ_RGB;
|
||||
dest->u.lz_rgb.data_size = glz_size;
|
||||
|
||||
|
||||
17
server/dcc.c
17
server/dcc.c
@ -735,19 +735,10 @@ int dcc_compress_image(DisplayChannelClient *dcc,
|
||||
success = image_encoders_compress_quic(&dcc->encoders, dest, src, o_comp_data);
|
||||
break;
|
||||
case SPICE_IMAGE_COMPRESSION_GLZ:
|
||||
if ((src->x * src->y) < glz_enc_dictionary_get_size(dcc->encoders.glz_dict->dict)) {
|
||||
int frozen;
|
||||
/* using the global dictionary only if it is not frozen */
|
||||
pthread_rwlock_rdlock(&dcc->encoders.glz_dict->encode_lock);
|
||||
frozen = dcc->encoders.glz_dict->migrate_freeze;
|
||||
if (!frozen) {
|
||||
success = image_encoders_compress_glz(&dcc->encoders, dest, src, drawable, o_comp_data,
|
||||
display_channel->enable_zlib_glz_wrap);
|
||||
}
|
||||
pthread_rwlock_unlock(&dcc->encoders.glz_dict->encode_lock);
|
||||
if (!frozen) {
|
||||
break;
|
||||
}
|
||||
success = image_encoders_compress_glz(&dcc->encoders, dest, src, drawable, o_comp_data,
|
||||
display_channel->enable_zlib_glz_wrap);
|
||||
if (success) {
|
||||
break;
|
||||
}
|
||||
goto lz_compress;
|
||||
#ifdef USE_LZ4
|
||||
|
||||
Loading…
Reference in New Issue
Block a user