[Spice-devel] [PATCH spice v2 1/4] dcc_compress_image: Handle NULL drawable
Frediano Ziglio
fziglio at redhat.com
Tue Jan 19 07:09:38 PST 2016
>
> Hi,
>
> On Fri, Jan 15, 2016 at 05:11:32PM +0100, Pavel Grunt wrote:
> > ---
> > server/dcc.c | 38 +++++++++++++++++++++-----------------
> > 1 file changed, 21 insertions(+), 17 deletions(-)
>
> The drawable being NULL only start to happen in the next patch, right?
> It might be worth to mention it. Also, if drawable is NULL it is either
> quic or lz/lz4, is that right?
>
Glz requires a drawable.
> Patch looks good otherwise
>
Acked-by: Frediano Ziglio <fziglio at redhat.com>
> >
> > diff --git a/server/dcc.c b/server/dcc.c
> > index 2568e24..097140a 100644
> > --- a/server/dcc.c
> > +++ b/server/dcc.c
> > @@ -1037,6 +1037,7 @@ int dcc_compress_image(DisplayChannelClient *dcc,
> > DisplayChannel *display_channel = DCC_TO_DC(dcc);
> > SpiceImageCompression image_compression = dcc->image_compression;
> > int quic_compress = FALSE;
> > + uint32_t group_id;
> >
> > if ((image_compression == SPICE_IMAGE_COMPRESSION_OFF) ||
> > ((src->y * src->stride) < MIN_SIZE_TO_COMPRESS)) { // TODO: change
> > the size cond
> > @@ -1067,7 +1068,8 @@ int dcc_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) &&
> > bitmap_get_graduality_level(src) ==
> > BITMAP_GRADUAL_HIGH;
> > } else {
> > @@ -1080,6 +1082,12 @@ int dcc_compress_image(DisplayChannelClient *dcc,
> > }
> > }
> >
> > + if (drawable != NULL) {
> > + group_id = drawable->group_id;
> > + } else {
> > + group_id =
> > red_worker_get_memslot(display_channel->common.worker)->internal_groupslot_id;
> > + }
> > +
> > if (quic_compress) {
> > #ifdef COMPRESS_DEBUG
> > spice_info("QUIC compress");
> > @@ -1090,24 +1098,22 @@ int dcc_compress_image(DisplayChannelClient *dcc,
> > (image_compression == SPICE_IMAGE_COMPRESSION_AUTO_GLZ))) {
> > // if we use lz for alpha, the stride can't be extra
> > if (src->format != SPICE_BITMAP_FMT_RGBA ||
> > !bitmap_has_extra_stride(src)) {
> > - return dcc_compress_image_jpeg(dcc, dest,
> > - src, o_comp_data,
> > drawable->group_id);
> > + return dcc_compress_image_jpeg(dcc, dest, src,
> > o_comp_data, group_id);
> > }
> > }
> > - return dcc_compress_image_quic(dcc, dest,
> > - src, o_comp_data,
> > drawable->group_id);
> > + return dcc_compress_image_quic(dcc, dest, src, o_comp_data,
> > group_id);
> > } else {
> > int glz;
> > int ret;
> > - if ((image_compression == SPICE_IMAGE_COMPRESSION_AUTO_GLZ) ||
> > - (image_compression == SPICE_IMAGE_COMPRESSION_GLZ)) {
> > - glz = 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_COMPRESSION_AUTO_LZ)
> > ||
> > - (image_compression == SPICE_IMAGE_COMPRESSION_LZ) ||
> > - (image_compression == SPICE_IMAGE_COMPRESSION_LZ4)) {
> > + if ((image_compression == SPICE_IMAGE_COMPRESSION_AUTO_LZ) ||
> > + (image_compression == SPICE_IMAGE_COMPRESSION_LZ) ||
> > + (image_compression == SPICE_IMAGE_COMPRESSION_LZ4) ||
> > + drawable == NULL) {
> > glz = FALSE;
> > + } else if ((image_compression == SPICE_IMAGE_COMPRESSION_AUTO_GLZ)
> > ||
> > + (image_compression == SPICE_IMAGE_COMPRESSION_GLZ)) {
> > + glz = bitmap_fmt_has_graduality(src->format) &&
> > + ((src->x * src->y) <
> > glz_enc_dictionary_get_size(dcc->glz_dict->dict));
> > } else {
> > spice_error("invalid image compression type %u",
> > image_compression);
> > return FALSE;
> > @@ -1132,12 +1138,10 @@ int dcc_compress_image(DisplayChannelClient *dcc,
> > bitmap_fmt_is_rgb(src->format) &&
> > red_channel_client_test_remote_cap(&dcc->common.base,
> > SPICE_DISPLAY_CAP_LZ4_COMPRESSION)) {
> > - ret = dcc_compress_image_lz4(dcc, dest, src, o_comp_data,
> > - drawable->group_id);
> > + ret = dcc_compress_image_lz4(dcc, dest, src, o_comp_data,
> > group_id);
> > } else
> > #endif
> > - ret = dcc_compress_image_lz(dcc, dest, src, o_comp_data,
> > - drawable->group_id);
> > + ret = dcc_compress_image_lz(dcc, dest, src, o_comp_data,
> > group_id);
> > #ifdef COMPRESS_DEBUG
> > spice_info("LZ LOCAL compress");
> > #endif
> > --
> > 2.5.0
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list