From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> --- server/Makefile.am | 1 + server/display-channel.c | 38 +++++++++++++++++++++++++++++++++++ server/display-channel.h | 52 +++++++++++++++++++++++++++++++++++++++++++++--- server/red_worker.c | 37 +--------------------------------- 4 files changed, 89 insertions(+), 39 deletions(-) create mode 100644 server/display-channel.c diff --git a/server/Makefile.am b/server/Makefile.am index dc2fbc5..bd95818 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -106,6 +106,7 @@ libspice_server_la_SOURCES = \ red_time.h \ red_worker.c \ red_worker.h \ + display-channel.c \ display-channel.h \ cursor-channel.c \ cursor-channel.h \ diff --git a/server/display-channel.c b/server/display-channel.c new file mode 100644 index 0000000..643169c --- /dev/null +++ b/server/display-channel.c @@ -0,0 +1,38 @@ +/* + Copyright (C) 2009-2015 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see <http://www.gnu.org/licenses/>. +*/ +#include "display-channel.h" + +DisplayChannelClient *display_channel_client_new(DisplayChannel *display, + RedClient *client, RedsStream *stream, + int mig_target, + uint32_t *common_caps, int num_common_caps, + uint32_t *caps, int num_caps) +{ + DisplayChannelClient *dcc; + + dcc = (DisplayChannelClient*)common_channel_new_client( + COMMON_CHANNEL(display), sizeof(DisplayChannelClient), + client, stream, mig_target, TRUE, + common_caps, num_common_caps, + caps, num_caps); + spice_return_val_if_fail(dcc, NULL); + + ring_init(&dcc->palette_cache_lru); + dcc->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE; + + return dcc; +} diff --git a/server/display-channel.h b/server/display-channel.h index fb38ee2..1b38932 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -15,15 +15,50 @@ You should have received a copy of the GNU Lesser General Public License along with this library; if not, see <http://www.gnu.org/licenses/>. */ -#ifndef RED_WORKER_CLIENT_H_ -# define RED_WORKER_CLIENT_H_ +#ifndef DISPLAY_CHANNEL_H_ +# define DISPLAY_CHANNEL_H_ + +#include <setjmp.h> #include "red_worker.h" +#include "reds_stream.h" #include "cache-item.h" #include "pixmap-cache.h" +#ifdef USE_OPENGL +#include "common/ogl_ctx.h" +#include "reds_gl_canvas.h" +#endif /* USE_OPENGL */ +#include "reds_sw_canvas.h" +#include "glz_encoder_dictionary.h" +#include "glz_encoder.h" +#include "stat.h" +#include "reds.h" +#include "mjpeg_encoder.h" +#include "red_memslots.h" +#include "red_parse_qxl.h" +#include "red_record_qxl.h" +#include "jpeg_encoder.h" +#ifdef USE_LZ4 +#include "lz4_encoder.h" +#endif +#include "demarshallers.h" +#include "zlib_encoder.h" +#include "red_channel.h" +#include "red_dispatcher.h" +#include "dispatcher.h" +#include "main_channel.h" +#include "migration_protocol.h" +#include "main_dispatcher.h" +#include "spice_server_utils.h" +#include "red_time.h" +#include "spice_bitmap_utils.h" +#include "spice_image_cache.h" + typedef int64_t red_time_t; +typedef struct DisplayChannel DisplayChannel; + typedef struct Drawable Drawable; #define PALETTE_CACHE_HASH_SHIFT 8 @@ -31,6 +66,8 @@ typedef struct Drawable Drawable; #define PALETTE_CACHE_HASH_MASK (PALETTE_CACHE_HASH_SIZE - 1) #define PALETTE_CACHE_HASH_KEY(id) ((id) & PALETTE_CACHE_HASH_MASK) +#define CLIENT_PALETTE_CACHE_SIZE 128 + /* Each drawable can refer to at most 3 images: src, brush and mask */ #define MAX_DRAWABLE_PIXMAP_CACHE_ITEMS 3 @@ -194,4 +231,13 @@ struct DisplayChannelClient { uint64_t streams_max_bit_rate; }; -#endif /* RED_WORKER_CLIENT_H_ */ +DisplayChannelClient * display_channel_client_new (DisplayChannel *display, + RedClient *client, + RedsStream *stream, + int mig_target, + uint32_t *common_caps, + int num_common_caps, + uint32_t *caps, + int num_caps); + +#endif /* DISPLAY_CHANNEL_H_ */ diff --git a/server/red_worker.c b/server/red_worker.c index 4d797c8..a90a28d 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -58,42 +58,11 @@ #include "common/ring.h" #include "common/generated_server_marshallers.h" -#ifdef USE_OPENGL -#include "common/ogl_ctx.h" -#include "reds_gl_canvas.h" -#endif /* USE_OPENGL */ +#include "display-channel.h" #include "spice.h" #include "red_worker.h" -#include "reds_stream.h" -#include "reds_sw_canvas.h" -#include "glz_encoder_dictionary.h" -#include "glz_encoder.h" -#include "stat.h" -#include "reds.h" -#include "mjpeg_encoder.h" -#include "red_memslots.h" -#include "red_parse_qxl.h" -#include "red_record_qxl.h" -#include "jpeg_encoder.h" -#ifdef USE_LZ4 -#include "lz4_encoder.h" -#endif -#include "demarshallers.h" -#include "zlib_encoder.h" -#include "red_channel.h" -#include "red_dispatcher.h" -#include "dispatcher.h" -#include "main_channel.h" -#include "migration_protocol.h" #include "spice_timer_queue.h" -#include "main_dispatcher.h" -#include "spice_server_utils.h" -#include "red_time.h" -#include "spice_bitmap_utils.h" -#include "spice_image_cache.h" -#include "pixmap-cache.h" -#include "display-channel.h" #include "cursor-channel.h" //#define COMPRESS_STAT @@ -317,8 +286,6 @@ typedef struct StreamActivateReportItem { #define WIDE_CLIENT_ACK_WINDOW 40 #define NARROW_CLIENT_ACK_WINDOW 20 -#define CLIENT_PALETTE_CACHE_SIZE 128 - typedef struct ImageItem { PipeItem link; int refs; @@ -334,8 +301,6 @@ typedef struct ImageItem { uint8_t data[0]; } ImageItem; -typedef struct DisplayChannel DisplayChannel; - enum { STREAM_FRAME_NONE, STREAM_FRAME_NATIVE, -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel