[Spice-devel] [PATCH 06/30] Move dcc_compress_image_quic to dcc-encoders.c
Jonathon Jongsma
jjongsma at redhat.com
Wed Jun 8 20:35:53 UTC 2016
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?
> + 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,
> void
> *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,
> SpiceIm
> age *dest, SpiceBitmap *src, Drawable *drawable,
> int
> can_lossy,
minor comment above
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
More information about the Spice-devel
mailing list