[Spice-devel] [PATCH 3/5] LZ4: Do not reverse bottom-up images

Christophe Fergeau cfergeau at redhat.com
Mon Jan 26 08:33:17 PST 2015


Some small comment in the commit log as to why we no longer want to swap
the image would be nice (was it broken? does it make the code simpler?
.. )

Christophe

On Thu, Jan 22, 2015 at 05:21:06PM +0100, Javier Celaya wrote:
> ---
>  server/lz4_encoder.c | 13 ++++++-------
>  server/lz4_encoder.h |  7 +++----
>  server/red_worker.c  | 18 +++++-------------
>  3 files changed, 14 insertions(+), 24 deletions(-)
> 
> diff --git a/server/lz4_encoder.c b/server/lz4_encoder.c
> index aa03721..2327e9a 100644
> --- a/server/lz4_encoder.c
> +++ b/server/lz4_encoder.c
> @@ -49,21 +49,20 @@ void lz4_encoder_destroy(Lz4EncoderContext* encoder)
>      free(encoder);
>  }
>  
> -int lz4_encode(Lz4EncoderContext *lz4, int height, int stride,
> -               uint8_t *io_ptr, unsigned int num_io_bytes)
> +int lz4_encode(Lz4EncoderContext *lz4, int height, int stride, uint8_t *io_ptr,
> +               unsigned int num_io_bytes, int top_down)
>  {
>      Lz4Encoder *enc = (Lz4Encoder *)lz4;
>      uint8_t *lines;
>      int num_lines = 0;
>      int total_lines = 0;
>      int in_size, enc_size, out_size, already_copied;
> -    int stride_abs = abs(stride);
>      uint8_t *in_buf, *compressed_lines;
>      uint8_t *out_buf = io_ptr;
>      LZ4_stream_t *stream = LZ4_createStream();
>  
>      // Encode direction
> -    *(out_buf++) = stride < 0 ? 1 : 0;
> +    *(out_buf++) = top_down ? 1 : 0;
>      num_io_bytes--;
>      out_size = 1;
>  
> @@ -74,9 +73,9 @@ int lz4_encode(Lz4EncoderContext *lz4, int height, int stride,
>              LZ4_freeStream(stream);
>              return 0;
>          }
> -        in_buf = stride < 0 ? lines - (stride_abs * (num_lines - 1)) : lines;
> -        lines += stride * num_lines;
> -        in_size = stride_abs * num_lines;
> +        in_buf = lines;
> +        in_size = stride * num_lines;
> +        lines += in_size;
>          compressed_lines = (uint8_t *) malloc(LZ4_compressBound(in_size) + 4);
>          enc_size = LZ4_compress_continue(stream, (const char *) in_buf,
>                                           (char *) compressed_lines + 4, in_size);
> diff --git a/server/lz4_encoder.h b/server/lz4_encoder.h
> index f3359c0..97b8dc8 100644
> --- a/server/lz4_encoder.h
> +++ b/server/lz4_encoder.h
> @@ -43,8 +43,7 @@ struct Lz4EncoderUsrContext {
>  Lz4EncoderContext* lz4_encoder_create(Lz4EncoderUsrContext *usr);
>  void lz4_encoder_destroy(Lz4EncoderContext *encoder);
>  
> -/* returns the total size of the encoded data. Images must be supplied from the
> -   top line to the bottom */
> -int lz4_encode(Lz4EncoderContext *lz4, int height, int stride,
> -               uint8_t *io_ptr, unsigned int num_io_bytes);
> +/* returns the total size of the encoded data. */
> +int lz4_encode(Lz4EncoderContext *lz4, int height, int stride, uint8_t *io_ptr,
> +               unsigned int num_io_bytes, int top_down);
>  #endif
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 8f07ee9..922a459 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -6422,7 +6422,6 @@ static int red_lz4_compress_image(DisplayChannelClient *dcc, SpiceImage *dest,
>      Lz4Data *lz4_data = &worker->lz4_data;
>      Lz4EncoderContext *lz4 = worker->lz4;
>      int lz4_size = 0;
> -    int stride;
>  
>  #ifdef COMPRESS_STAT
>      stat_time_t start_time = stat_now();
> @@ -6454,20 +6453,13 @@ static int red_lz4_compress_image(DisplayChannelClient *dcc, SpiceImage *dest,
>  
>      lz4_data->data.u.lines_data.chunks = src->data;
>      lz4_data->data.u.lines_data.stride = src->stride;
> +    lz4_data->data.u.lines_data.next = 0;
> +    lz4_data->data.u.lines_data.reverse = 0;
>      lz4_data->usr.more_lines = lz4_usr_more_lines;
>  
> -    if ((src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN)) {
> -        lz4_data->data.u.lines_data.next = 0;
> -        lz4_data->data.u.lines_data.reverse = 0;
> -        stride = src->stride;
> -    } else {
> -        lz4_data->data.u.lines_data.next = src->data->num_chunks - 1;
> -        lz4_data->data.u.lines_data.reverse = 1;
> -        stride = -src->stride;
> -    }
> -
> -    lz4_size = lz4_encode(lz4, src->y, stride, (uint8_t*)lz4_data->data.bufs_head->buf,
> -                          sizeof(lz4_data->data.bufs_head->buf));
> +    lz4_size = lz4_encode(lz4, src->y, src->stride, (uint8_t*)lz4_data->data.bufs_head->buf,
> +                          sizeof(lz4_data->data.bufs_head->buf),
> +                          src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN);
>  
>      // the compressed buffer is bigger than the original data
>      if (lz4_size > (src->y * src->stride)) {
> -- 
> 1.9.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150126/ac6c48ba/attachment.sig>


More information about the Spice-devel mailing list