[Spice-devel] [PATCH 06/30] Move dcc_compress_image_quic to dcc-encoders.c
Jonathon Jongsma
jjongsma at redhat.com
Thu Jun 9 18:20:52 UTC 2016
On Thu, 2016-06-09 at 05:48 -0400, Frediano Ziglio wrote:
> >
> >
> > On Tue, 2016-06-07 at 11:17 +0100, Frediano Ziglio wrote:
> > >
> > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > ---
> > > server/dcc-encoders.c | 76
> > > +++++++++++++++++++++++++++++++++++++++++++++++++++
> > > server/dcc-encoders.h | 10 +++++++
> > > server/dcc.c | 73
> > > -------------------------------------------------
> > > server/dcc.h | 7 -----
> > > 4 files changed, 86 insertions(+), 80 deletions(-)
> > >
> > > diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
> > > index 7d317d5..99e5507 100644
> > > --- a/server/dcc-encoders.c
> > > +++ b/server/dcc-encoders.c
> > > @@ -704,3 +704,79 @@ void dcc_release_glz(DisplayChannelClient *dcc)
> > > glz_enc_dictionary_destroy(shared_dict->dict, &dcc->glz_data.usr);
> > > free(shared_dict);
> > > }
> > > +
> > > +int dcc_compress_image_quic(EncodersData *enc, SpiceImage *dest,
> > > + SpiceBitmap *src, compress_send_data_t*
> > > o_comp_data,
> > > + stat_info_t *stats)
> > > +{
> > > + QuicData *quic_data = &enc->quic_data;
> > > + QuicContext *quic = enc->quic;
> > > + volatile QuicImageType type;
> > > + int size, stride;
> > > + stat_start_time_t start_time;
> > > + stat_start_time_init(&start_time, stats);
> > > +
> > > +#ifdef COMPRESS_DEBUG
> > > + spice_info("QUIC compress");
> > > +#endif
> > > +
> > > + switch (src->format) {
> > > + case SPICE_BITMAP_FMT_32BIT:
> > > + type = QUIC_IMAGE_TYPE_RGB32;
> > > + break;
> > > + case SPICE_BITMAP_FMT_RGBA:
> > > + type = QUIC_IMAGE_TYPE_RGBA;
> > > + break;
> > > + case SPICE_BITMAP_FMT_16BIT:
> > > + type = QUIC_IMAGE_TYPE_RGB16;
> > > + break;
> > > + case SPICE_BITMAP_FMT_24BIT:
> > > + type = QUIC_IMAGE_TYPE_RGB24;
> > > + break;
> > > + default:
> > > + return FALSE;
> > > + }
> > > +
> > > + encoder_data_init(&quic_data->data);
> > > +
> > > + if (setjmp(quic_data->data.jmp_env)) {
> > > + encoder_data_reset(&quic_data->data);
> > > + return FALSE;
> > > + }
> > > +
> > > + if (src->data->flags & SPICE_CHUNKS_FLAGS_UNSTABLE) {
> > > + spice_chunks_linearize(src->data);
> > > + }
> > > +
> > > + quic_data->data.u.lines_data.chunks = src->data;
> > > + quic_data->data.u.lines_data.stride = src->stride;
> > > + if ((src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN)) {
> > > + quic_data->data.u.lines_data.next = 0;
> > > + quic_data->data.u.lines_data.reverse = 0;
> > > + stride = src->stride;
> > > + } else {
> > > + quic_data->data.u.lines_data.next = src->data->num_chunks - 1;
> > > + quic_data->data.u.lines_data.reverse = 1;
> > > + stride = -src->stride;
> > > + }
> > > + size = quic_encode(quic, type, src->x, src->y, NULL, 0, stride,
> > > + quic_data->data.bufs_head->buf.words,
> > > +
> > > G_N_ELEMENTS(quic_data->data.bufs_head-
> > > >buf.words));
> > > +
> > > + // the compressed buffer is bigger than the original data
> > > + if ((size << 2) > (src->y * src->stride)) {
> > > + longjmp(quic_data->data.jmp_env, 1);
> > > + }
> > > +
> > > + dest->descriptor.type = SPICE_IMAGE_TYPE_QUIC;
> > > + dest->u.quic.data_size = size << 2;
> > > +
> > > + o_comp_data->comp_buf = quic_data->data.bufs_head;
> > > + o_comp_data->comp_buf_size = size << 2;
> > > +
> > > + stat_compress_add(stats, start_time, src->stride * src->y,
> > > + o_comp_data->comp_buf_size);
> > > + return TRUE;
> > > +}
> > > +
> > > +
> > > diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
> > > index 6bed548..a75678e 100644
> > > --- a/server/dcc-encoders.h
> > > +++ b/server/dcc-encoders.h
> > > @@ -167,6 +167,16 @@ struct EncodersData {
> > > QuicContext *quic;
> > > };
> > >
> > > +typedef struct compress_send_data_t {
> > > + void* comp_buf;
> > As long as we're moving this type, can we take the opportunity fix this
> > alignment issue?
> >
> Not aware of this issue...
I just mean changing
void* comp_buf;
to:
void* comp_buf;
Either all arguments should be aligned or none should be. And in general our
style has been to not align them.
>
> >
> > >
> > > + uint32_t comp_buf_size;
> > > + SpicePalette *lzplt_palette;
> > > + int is_lossy;
> > > +} compress_send_data_t;
> > > +
> > > +int dcc_compress_image_quic(EncodersData *enc, SpiceImage *dest,
> > > + SpiceBitmap *src, compress_send_data_t*
> > > o_comp_data,
> > > + stat_info_t *stats);
> > > #define RED_RELEASE_BUNCH_SIZE 64
> > >
> > > #endif /* DCC_ENCODERS_H_ */
> > > diff --git a/server/dcc.c b/server/dcc.c
> > > index 27e668c..0bc806a 100644
> > > --- a/server/dcc.c
> > > +++ b/server/dcc.c
> > > @@ -1026,79 +1026,6 @@ static int
> > > dcc_compress_image_lz4(DisplayChannelClient
> > > *dcc, SpiceImage *dest,
> > > }
> > > #endif
> > >
> > > -static int dcc_compress_image_quic(EncodersData *enc, SpiceImage *dest,
> > > - SpiceBitmap *src,
> > > compress_send_data_t*
> > > o_comp_data, stat_info_t *stats)
> > > -{
> > > - QuicData *quic_data = &enc->quic_data;
> > > - QuicContext *quic = enc->quic;
> > > - volatile QuicImageType type;
> > > - int size, stride;
> > > - stat_start_time_t start_time;
> > > - stat_start_time_init(&start_time, stats);
> > > -
> > > -#ifdef COMPRESS_DEBUG
> > > - spice_info("QUIC compress");
> > > -#endif
> > > -
> > > - switch (src->format) {
> > > - case SPICE_BITMAP_FMT_32BIT:
> > > - type = QUIC_IMAGE_TYPE_RGB32;
> > > - break;
> > > - case SPICE_BITMAP_FMT_RGBA:
> > > - type = QUIC_IMAGE_TYPE_RGBA;
> > > - break;
> > > - case SPICE_BITMAP_FMT_16BIT:
> > > - type = QUIC_IMAGE_TYPE_RGB16;
> > > - break;
> > > - case SPICE_BITMAP_FMT_24BIT:
> > > - type = QUIC_IMAGE_TYPE_RGB24;
> > > - break;
> > > - default:
> > > - return FALSE;
> > > - }
> > > -
> > > - encoder_data_init(&quic_data->data);
> > > -
> > > - if (setjmp(quic_data->data.jmp_env)) {
> > > - encoder_data_reset(&quic_data->data);
> > > - return FALSE;
> > > - }
> > > -
> > > - if (src->data->flags & SPICE_CHUNKS_FLAGS_UNSTABLE) {
> > > - spice_chunks_linearize(src->data);
> > > - }
> > > -
> > > - quic_data->data.u.lines_data.chunks = src->data;
> > > - quic_data->data.u.lines_data.stride = src->stride;
> > > - if ((src->flags & SPICE_BITMAP_FLAGS_TOP_DOWN)) {
> > > - quic_data->data.u.lines_data.next = 0;
> > > - quic_data->data.u.lines_data.reverse = 0;
> > > - stride = src->stride;
> > > - } else {
> > > - quic_data->data.u.lines_data.next = src->data->num_chunks - 1;
> > > - quic_data->data.u.lines_data.reverse = 1;
> > > - stride = -src->stride;
> > > - }
> > > - size = quic_encode(quic, type, src->x, src->y, NULL, 0, stride,
> > > - quic_data->data.bufs_head->buf.words,
> > > -
> > > G_N_ELEMENTS(quic_data->data.bufs_head-
> > > >buf.words));
> > > -
> > > - // the compressed buffer is bigger than the original data
> > > - if ((size << 2) > (src->y * src->stride)) {
> > > - longjmp(quic_data->data.jmp_env, 1);
> > > - }
> > > -
> > > - dest->descriptor.type = SPICE_IMAGE_TYPE_QUIC;
> > > - dest->u.quic.data_size = size << 2;
> > > -
> > > - o_comp_data->comp_buf = quic_data->data.bufs_head;
> > > - o_comp_data->comp_buf_size = size << 2;
> > > -
> > > - stat_compress_add(stats, start_time, src->stride * src->y,
> > > - o_comp_data->comp_buf_size);
> > > - return TRUE;
> > > -}
> > > -
> > > #define MIN_DIMENSION_TO_QUIC 3
> > > /**
> > > * quic doesn't handle:
> > > diff --git a/server/dcc.h b/server/dcc.h
> > > index 0ac5f5a..4b93c73 100644
> > > --- a/server/dcc.h
> > > +++ b/server/dcc.h
> > > @@ -216,13 +216,6 @@ RedPipeItem
> > > * dcc_gl_scanout_item_new (RedChannel
> > > RedPipeItem
> > > * dcc_gl_draw_item_new (RedChannelClient
> > > *rcc,
> > > voi
> > > d
> > > *data, int num);
> > >
> > > -typedef struct compress_send_data_t {
> > > - void* comp_buf;
> > > - uint32_t comp_buf_size;
> > > - SpicePalette *lzplt_palette;
> > > - int is_lossy;
> > > -} compress_send_data_t;
> > > -
> > > int dcc_compress_image
> > > (Display
> > > ChannelClient *dcc,
> > > Spi
> > > ceIm
> > > age *dest, SpiceBitmap *src, Drawable *drawable,
> > > int
> > > can_lossy,
> >
> > minor comment above
> >
> > Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
> >
> Frediano
More information about the Spice-devel
mailing list