Re: [PATCH 5/6] LZ4: Fix the row alignment when it is not on a 32bit boundary

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 26, 2015 at 03:20:23PM +0100, Javier Celaya wrote:
> Hello,
> 
> El Lunes, 26 de enero de 2015 15:13:57 Christophe Fergeau escribió:
> > Hey,
> > 
> > On Thu, Jan 22, 2015 at 05:21:23PM +0100, Javier Celaya wrote:
> > > ---
> > > 
> > >  common/canvas_base.c | 25 +++++++++++++++++++++++--
> > >  1 file changed, 23 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/common/canvas_base.c b/common/canvas_base.c
> > > index c45d535..170def1 100644
> > > --- a/common/canvas_base.c
> > > +++ b/common/canvas_base.c
> > > @@ -563,8 +563,7 @@ static pixman_image_t *canvas_get_lz4(CanvasBase
> > > *canvas, SpiceImage *image, int> 
> > >  {
> > >  
> > >      pixman_image_t *surface = NULL;
> > >      int dec_size, enc_size, available;
> > > 
> > > -    int stride;
> > > -    int stride_abs;
> > > +    int stride, stride_abs, stride_encoded;
> > > 
> > >      uint8_t *dest, *data, *data_end;
> > >      int width, height, top_down;
> > >      LZ4_streamDecode_t *stream;
> > > 
> > > @@ -575,19 +574,23 @@ static pixman_image_t *canvas_get_lz4(CanvasBase
> > > *canvas, SpiceImage *image, int> 
> > >      data = image->u.lz4.data->chunk[0].data;
> > >      data_end = data + image->u.lz4.data->chunk[0].len;
> > >      width = image->descriptor.width;
> > > 
> > > +    stride_encoded = width;
> > > 
> > >      height = image->descriptor.height;
> > >      top_down = *(data++);
> > >      spice_format = *(data++);
> > >      switch (spice_format) {
> > >      
> > >          case SPICE_BITMAP_FMT_16BIT:
> > >              format = PIXMAN_x1r5g5b5;
> > > 
> > > +            stride_encoded *= 2;
> > > 
> > >              break;
> > >          
> > >          case SPICE_BITMAP_FMT_24BIT:
> > >          
> > >          case SPICE_BITMAP_FMT_32BIT:
> > >              format = PIXMAN_x8r8g8b8;
> > > 
> > > +            stride_encoded *= 4;
> > > 
> > >              break;
> > >          
> > >          case SPICE_BITMAP_FMT_RGBA:
> > >              format = PIXMAN_a8r8g8b8;
> > > 
> > > +            stride_encoded *= 4;
> > > 
> > >              break;
> > >          
> > >          default:
> > >              spice_warning("Unsupported bitmap format %d with LZ4\n",
> > >              spice_format);
> > > 
> > > @@ -631,6 +634,24 @@ static pixman_image_t *canvas_get_lz4(CanvasBase
> > > *canvas, SpiceImage *image, int> 
> > >          data += enc_size;
> > >      
> > >      } while (data < data_end);
> > > 
> > > +    if (stride_abs > stride_encoded) {
> > 
> > My understanding is that this will only trigger in the 24bpp case when
> > the next commit adds
> >           case SPICE_BITMAP_FMT_24BIT:
> >               stride_encoded *= 3;
> > ?
> > If so, it should be mentioned in the commit log that this only add some
> > helper code which will be used when 24bpp support is added or something
> > like this.
> 
> It also triggers with 16bpp when width is an odd number, so the commit makes 
> sense by itself. But I can say something about the "future" support to 24bpp.

If width is an odd number, the code in this patch ends up doing 'weird'
since it copies 32 bit at a time, so it will copy 16 bit extra at the
end of each line.

Christophe

Attachment: pgpbu9ImgIGcr.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]