[Spice-devel] [PATCH 08/11] Add DisplayChannelClientPrivate and CursorChannelPrivate structs
Jonathon Jongsma
jjongsma at redhat.com
Tue Aug 9 15:33:02 UTC 2016
These need to be introduced at the same time since cache-item.tmpl.c
assumes that both of these classes will have a cache in the same place:
either within the channel client struct itself or (now) within a priv
struct owned by the channel client.
This encapsulates private data and prepares for porting to GObject.
---
server/cache-item.tmpl.c | 38 +++++-----
server/cursor-channel-client.c | 14 +++-
server/dcc-private.h | 10 ++-
server/dcc-send.c | 114 ++++++++++++++--------------
server/dcc.c | 166 +++++++++++++++++++++--------------------
5 files changed, 181 insertions(+), 161 deletions(-)
diff --git a/server/cache-item.tmpl.c b/server/cache-item.tmpl.c
index d1310a5..ce38a2a 100644
--- a/server/cache-item.tmpl.c
+++ b/server/cache-item.tmpl.c
@@ -46,12 +46,12 @@
static RedCacheItem *FUNC_NAME(find)(CHANNELCLIENT *channel_client, uint64_t id)
{
- RedCacheItem *item = channel_client->CACHE_NAME[CACHE_HASH_KEY(id)];
+ RedCacheItem *item = channel_client->priv->CACHE_NAME[CACHE_HASH_KEY(id)];
while (item) {
if (item->id == id) {
ring_remove(&item->u.cache_data.lru_link);
- ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
+ ring_add(&channel_client->priv->VAR_NAME(lru), &item->u.cache_data.lru_link);
break;
}
item = item->u.cache_data.next;
@@ -64,7 +64,7 @@ static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, RedCacheItem *item)
RedCacheItem **now;
spice_assert(item);
- now = &channel_client->CACHE_NAME[CACHE_HASH_KEY(item->id)];
+ now = &channel_client->priv->CACHE_NAME[CACHE_HASH_KEY(item->id)];
for (;;) {
spice_assert(*now);
if (*now == item) {
@@ -74,8 +74,8 @@ static void FUNC_NAME(remove)(CHANNELCLIENT *channel_client, RedCacheItem *item)
now = &(*now)->u.cache_data.next;
}
ring_remove(&item->u.cache_data.lru_link);
- channel_client->VAR_NAME(items)--;
- channel_client->VAR_NAME(available) += item->u.cache_data.size;
+ channel_client->priv->VAR_NAME(items)--;
+ channel_client->priv->VAR_NAME(available) += item->u.cache_data.size;
red_pipe_item_init(&item->u.pipe_data, RED_PIPE_ITEM_TYPE_INVAL_ONE);
red_channel_client_pipe_add_tail_and_push(&channel_client->base, &item->u.pipe_data); // for now
@@ -88,22 +88,22 @@ static int FUNC_NAME(add)(CHANNELCLIENT *channel_client, uint64_t id, size_t siz
item = spice_new(RedCacheItem, 1);
- channel_client->VAR_NAME(available) -= size;
+ channel_client->priv->VAR_NAME(available) -= size;
verify(SPICE_OFFSETOF(RedCacheItem, u.cache_data.lru_link) == 0);
- while (channel_client->VAR_NAME(available) < 0) {
- RedCacheItem *tail = (RedCacheItem *)ring_get_tail(&channel_client->VAR_NAME(lru));
+ while (channel_client->priv->VAR_NAME(available) < 0) {
+ RedCacheItem *tail = (RedCacheItem *)ring_get_tail(&channel_client->priv->VAR_NAME(lru));
if (!tail) {
- channel_client->VAR_NAME(available) += size;
+ channel_client->priv->VAR_NAME(available) += size;
free(item);
return FALSE;
}
FUNC_NAME(remove)(channel_client, tail);
}
- ++channel_client->VAR_NAME(items);
- item->u.cache_data.next = channel_client->CACHE_NAME[(key = CACHE_HASH_KEY(id))];
- channel_client->CACHE_NAME[key] = item;
+ ++channel_client->priv->VAR_NAME(items);
+ item->u.cache_data.next = channel_client->priv->CACHE_NAME[(key = CACHE_HASH_KEY(id))];
+ channel_client->priv->CACHE_NAME[key] = item;
ring_item_init(&item->u.cache_data.lru_link);
- ring_add(&channel_client->VAR_NAME(lru), &item->u.cache_data.lru_link);
+ ring_add(&channel_client->priv->VAR_NAME(lru), &item->u.cache_data.lru_link);
item->id = id;
item->u.cache_data.size = size;
return TRUE;
@@ -114,15 +114,15 @@ static void FUNC_NAME(reset)(CHANNELCLIENT *channel_client, long size)
int i;
for (i = 0; i < CACHE_HASH_SIZE; i++) {
- while (channel_client->CACHE_NAME[i]) {
- RedCacheItem *item = channel_client->CACHE_NAME[i];
- channel_client->CACHE_NAME[i] = item->u.cache_data.next;
+ while (channel_client->priv->CACHE_NAME[i]) {
+ RedCacheItem *item = channel_client->priv->CACHE_NAME[i];
+ channel_client->priv->CACHE_NAME[i] = item->u.cache_data.next;
free(item);
}
}
- ring_init(&channel_client->VAR_NAME(lru));
- channel_client->VAR_NAME(available) = size;
- channel_client->VAR_NAME(items) = 0;
+ ring_init(&channel_client->priv->VAR_NAME(lru));
+ channel_client->priv->VAR_NAME(available) = size;
+ channel_client->priv->VAR_NAME(items) = 0;
}
diff --git a/server/cursor-channel-client.c b/server/cursor-channel-client.c
index 7dc936b..cdb1e51 100644
--- a/server/cursor-channel-client.c
+++ b/server/cursor-channel-client.c
@@ -39,9 +39,16 @@ enum {
RED_PIPE_ITEM_TYPE_INVAL_CURSOR_CACHE,
};
-struct CursorChannelClient {
+typedef struct CursorChannelClientPrivate CursorChannelClientPrivate;
+struct CursorChannelClient
+{
RedChannelClient base;
+ CursorChannelClientPrivate *priv;
+};
+
+struct CursorChannelClientPrivate
+{
RedCacheItem *cursor_cache[CURSOR_CACHE_HASH_SIZE];
Ring cursor_cache_lru;
long cursor_cache_available;
@@ -101,10 +108,11 @@ CursorChannelClient* cursor_channel_client_new(CursorChannel *cursor, RedClient
num_caps,
caps);
spice_return_val_if_fail(ccc != NULL, NULL);
+ ccc->priv = g_new0(CursorChannelClientPrivate, 1);
COMMON_GRAPHICS_CHANNEL(cursor)->during_target_migrate = mig_target;
- ring_init(&ccc->cursor_cache_lru);
- ccc->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE;
+ ring_init(&ccc->priv->cursor_cache_lru);
+ ccc->priv->cursor_cache_available = CLIENT_CURSOR_CACHE_SIZE;
return ccc;
}
diff --git a/server/dcc-private.h b/server/dcc-private.h
index dc5750b..e752ae3 100644
--- a/server/dcc-private.h
+++ b/server/dcc-private.h
@@ -24,9 +24,17 @@
#include "stream.h"
#include "red-channel-client-private.h"
-struct DisplayChannelClient {
+typedef struct DisplayChannelClientPrivate DisplayChannelClientPrivate;
+struct DisplayChannelClient
+{
RedChannelClient base;
int is_low_bandwidth;
+
+ DisplayChannelClientPrivate *priv;
+};
+
+struct DisplayChannelClientPrivate
+{
uint32_t id;
SpiceImageCompression image_compression;
spice_wan_compression_t jpeg_state;
diff --git a/server/dcc-send.c b/server/dcc-send.c
index da11bd3..5c03d6b 100644
--- a/server/dcc-send.c
+++ b/server/dcc-send.c
@@ -50,7 +50,7 @@ typedef struct BitmapData {
static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id, int *lossy)
{
- PixmapCache *cache = dcc->pixmap_cache;
+ PixmapCache *cache = dcc->priv->pixmap_cache;
NewCacheItem *item;
uint64_t serial;
@@ -61,9 +61,9 @@ static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id,
if (item->id == id) {
ring_remove(&item->lru_link);
ring_add(&cache->lru, &item->lru_link);
- spice_assert(dcc->id < MAX_CACHE_CLIENTS);
- item->sync[dcc->id] = serial;
- cache->sync[dcc->id] = serial;
+ spice_assert(dcc->priv->id < MAX_CACHE_CLIENTS);
+ item->sync[dcc->priv->id] = serial;
+ cache->sync[dcc->priv->id] = serial;
*lossy = item->lossy;
break;
}
@@ -76,7 +76,7 @@ static int dcc_pixmap_cache_unlocked_hit(DisplayChannelClient *dcc, uint64_t id,
static int dcc_pixmap_cache_hit(DisplayChannelClient *dcc, uint64_t id, int *lossy)
{
int hit;
- PixmapCache *cache = dcc->pixmap_cache;
+ PixmapCache *cache = dcc->priv->pixmap_cache;
pthread_mutex_lock(&cache->lock);
hit = dcc_pixmap_cache_unlocked_hit(dcc, id, lossy);
@@ -96,7 +96,7 @@ static int is_surface_area_lossy(DisplayChannelClient *dcc, uint32_t surface_id,
spice_return_val_if_fail(validate_surface(display, surface_id), FALSE);
surface = &display->surfaces[surface_id];
- surface_lossy_region = &dcc->surface_client_lossy_region[surface_id];
+ surface_lossy_region = &dcc->priv->surface_client_lossy_region[surface_id];
if (!area) {
if (region_is_empty(surface_lossy_region)) {
@@ -206,7 +206,7 @@ static void red_display_add_image_to_pixmap_cache(RedChannelClient *rcc,
image->descriptor.width * image->descriptor.height,
is_lossy)) {
io_image->descriptor.flags |= SPICE_IMAGE_FLAGS_CACHE_ME;
- dcc->send_data.pixmap_cache_items[dcc->send_data.num_pixmap_cache_items++] =
+ dcc->priv->send_data.pixmap_cache_items[dcc->priv->send_data.num_pixmap_cache_items++] =
image->descriptor.id;
stat_inc_counter(reds, display_channel->add_to_cache_counter, 1);
}
@@ -242,7 +242,7 @@ static void marshal_sub_msg_inval_list_wait(SpiceMarshaller *m,
static void send_free_list_legacy(RedChannelClient *rcc)
{
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
- FreeList *free_list = &dcc->send_data.free_list;
+ FreeList *free_list = &dcc->priv->send_data.free_list;
SpiceMarshaller *marshaller;
int sub_list_len = 1;
SpiceMarshaller *wait_m = NULL;
@@ -273,7 +273,7 @@ static void send_free_list_legacy(RedChannelClient *rcc)
static void send_free_list(RedChannelClient *rcc)
{
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
- FreeList *free_list = &dcc->send_data.free_list;
+ FreeList *free_list = &dcc->priv->send_data.free_list;
int sub_list_len = 1;
SpiceMarshaller *urgent_marshaller;
SpiceMarshaller *wait_m = NULL;
@@ -284,14 +284,14 @@ static void send_free_list(RedChannelClient *rcc)
int i;
urgent_marshaller = red_channel_client_switch_to_urgent_sender(rcc);
- for (i = 0; i < dcc->send_data.num_pixmap_cache_items; i++) {
+ for (i = 0; i < dcc->priv->send_data.num_pixmap_cache_items; i++) {
int dummy;
/* When using the urgent marshaller, the serial number of the message that is
* going to be sent right after the SPICE_MSG_LIST, is increased by one.
* But all this message pixmaps cache references used its old serial.
* we use pixmap_cache_items to collect these pixmaps, and we update their serial
* by calling pixmap_cache_hit. */
- dcc_pixmap_cache_hit(dcc, dcc->send_data.pixmap_cache_items[i], &dummy);
+ dcc_pixmap_cache_hit(dcc, dcc->priv->send_data.pixmap_cache_items[i], &dummy);
}
if (free_list->wait.header.wait_count) {
@@ -377,13 +377,13 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
if (simage->descriptor.flags & SPICE_IMAGE_FLAGS_HIGH_BITS_SET) {
image.descriptor.flags = SPICE_IMAGE_FLAGS_HIGH_BITS_SET;
}
- pthread_mutex_lock(&dcc->pixmap_cache->lock);
+ pthread_mutex_lock(&dcc->priv->pixmap_cache->lock);
if ((simage->descriptor.flags & SPICE_IMAGE_FLAGS_CACHE_ME)) {
int lossy_cache_item;
if (dcc_pixmap_cache_unlocked_hit(dcc, image.descriptor.id, &lossy_cache_item)) {
- dcc->send_data.pixmap_cache_items[dcc->send_data.num_pixmap_cache_items++] =
- image.descriptor.id;
+ dcc->priv->send_data.pixmap_cache_items[dcc->priv->send_data.num_pixmap_cache_items++] =
+ image.descriptor.id;
if (can_lossy || !lossy_cache_item) {
if (!display->enable_jpeg || lossy_cache_item) {
image.descriptor.type = SPICE_IMAGE_TYPE_FROM_CACHE;
@@ -398,10 +398,10 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
spice_assert(bitmap_palette_out == NULL);
spice_assert(lzplt_palette_out == NULL);
stat_inc_counter(reds, display->cache_hits_counter, 1);
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_CACHE;
} else {
- pixmap_cache_unlocked_set_lossy(dcc->pixmap_cache, simage->descriptor.id,
+ pixmap_cache_unlocked_set_lossy(dcc->priv->pixmap_cache, simage->descriptor.id,
FALSE);
image.descriptor.flags |= SPICE_IMAGE_FLAGS_CACHE_REPLACE_ME;
}
@@ -416,7 +416,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
surface_id = simage->u.surface.surface_id;
if (!validate_surface(display, surface_id)) {
spice_warning("Invalid surface in SPICE_IMAGE_TYPE_SURFACE");
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_SURFACE;
}
@@ -431,7 +431,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
&bitmap_palette_out, &lzplt_palette_out);
spice_assert(bitmap_palette_out == NULL);
spice_assert(lzplt_palette_out == NULL);
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_SURFACE;
}
case SPICE_IMAGE_TYPE_BITMAP: {
@@ -463,7 +463,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
}
spice_marshaller_add_ref_chunks(m, bitmap->data);
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_BITMAP;
} else {
red_display_add_image_to_pixmap_cache(rcc, simage, &image,
@@ -481,7 +481,7 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
}
spice_assert(!comp_send_data.is_lossy || can_lossy);
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return (comp_send_data.is_lossy ? FILL_BITS_TYPE_COMPRESS_LOSSY :
FILL_BITS_TYPE_COMPRESS_LOSSLESS);
}
@@ -495,12 +495,12 @@ static FillBitsType fill_bits(DisplayChannelClient *dcc, SpiceMarshaller *m,
spice_assert(bitmap_palette_out == NULL);
spice_assert(lzplt_palette_out == NULL);
spice_marshaller_add_ref_chunks(m, image.u.quic.data);
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_COMPRESS_LOSSLESS;
default:
spice_error("invalid image type %u", image.descriptor.type);
}
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
return FILL_BITS_TYPE_INVALID;
}
@@ -510,12 +510,12 @@ static void fill_mask(RedChannelClient *rcc, SpiceMarshaller *m,
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
if (mask_bitmap && m) {
- if (dcc->image_compression != SPICE_IMAGE_COMPRESSION_OFF) {
+ if (dcc->priv->image_compression != SPICE_IMAGE_COMPRESSION_OFF) {
/* todo: pass compression argument */
- SpiceImageCompression save_img_comp = dcc->image_compression;
- dcc->image_compression = SPICE_IMAGE_COMPRESSION_OFF;
+ SpiceImageCompression save_img_comp = dcc->priv->image_compression;
+ dcc->priv->image_compression = SPICE_IMAGE_COMPRESSION_OFF;
fill_bits(dcc, m, mask_bitmap, drawable, FALSE);
- dcc->image_compression = save_img_comp;
+ dcc->priv->image_compression = save_img_comp;
} else {
fill_bits(dcc, m, mask_bitmap, drawable, FALSE);
}
@@ -569,7 +569,7 @@ static void surface_lossy_region_update(DisplayChannelClient *dcc,
return;
}
- surface_lossy_region = &dcc->surface_client_lossy_region[item->surface_id];
+ surface_lossy_region = &dcc->priv->surface_client_lossy_region[item->surface_id];
drawable = item->red_drawable;
if (drawable->clip.type == SPICE_CLIP_TYPE_RECTS ) {
@@ -1706,10 +1706,10 @@ static int red_marshall_stream_data(RedChannelClient *rcc,
return FALSE;
}
- StreamAgent *agent = &dcc->stream_agents[get_stream_id(display, stream)];
+ StreamAgent *agent = &dcc->priv->stream_agents[get_stream_id(display, stream)];
uint64_t time_now = spice_get_monotonic_time_ns();
- if (!dcc->use_video_encoder_rate_control) {
+ if (!dcc->priv->use_video_encoder_rate_control) {
if (time_now - agent->last_send_time < (1000 * 1000 * 1000) / agent->fps) {
agent->frames--;
#ifdef STREAM_STATS
@@ -1733,7 +1733,7 @@ static int red_marshall_stream_data(RedChannelClient *rcc,
&outbuf);
switch (ret) {
case VIDEO_ENCODER_FRAME_DROP:
- spice_assert(dcc->use_video_encoder_rate_control);
+ spice_assert(dcc->priv->use_video_encoder_rate_control);
#ifdef STREAM_STATS
agent->stats.num_drops_fps++;
#endif
@@ -1811,7 +1811,7 @@ static void display_channel_marshall_migrate_data_surfaces(DisplayChannelClient
for (i = 0; i < NUM_SURFACES; i++) {
SpiceRect lossy_rect;
- if (!dcc->surface_client_created[i]) {
+ if (!dcc->priv->surface_client_created[i]) {
continue;
}
spice_marshaller_add_uint32(m2, i);
@@ -1820,7 +1820,7 @@ static void display_channel_marshall_migrate_data_surfaces(DisplayChannelClient
if (!lossy) {
continue;
}
- region_extents(&dcc->surface_client_lossy_region[i], &lossy_rect);
+ region_extents(&dcc->priv->surface_client_lossy_region[i], &lossy_rect);
spice_marshaller_add_int32(m2, lossy_rect.left);
spice_marshaller_add_int32(m2, lossy_rect.top);
spice_marshaller_add_int32(m2, lossy_rect.right);
@@ -1833,6 +1833,7 @@ static void display_channel_marshall_migrate_data(RedChannelClient *rcc,
{
DisplayChannel *display_channel;
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
+ ImageEncoders *encoders = dcc_get_encoders(dcc);
SpiceMigrateDataDisplay display_data = {0,};
display_channel = SPICE_CONTAINEROF(red_channel_client_get_channel(rcc),
@@ -1842,20 +1843,20 @@ static void display_channel_marshall_migrate_data(RedChannelClient *rcc,
spice_marshaller_add_uint32(base_marshaller, SPICE_MIGRATE_DATA_DISPLAY_MAGIC);
spice_marshaller_add_uint32(base_marshaller, SPICE_MIGRATE_DATA_DISPLAY_VERSION);
- spice_assert(dcc->pixmap_cache);
+ spice_assert(dcc->priv->pixmap_cache);
spice_assert(MIGRATE_DATA_DISPLAY_MAX_CACHE_CLIENTS == 4 &&
MIGRATE_DATA_DISPLAY_MAX_CACHE_CLIENTS == MAX_CACHE_CLIENTS);
display_data.message_serial = red_channel_client_get_message_serial(rcc);
- display_data.low_bandwidth_setting = dcc->is_low_bandwidth;
+ display_data.low_bandwidth_setting = dcc_is_low_bandwidth(dcc);
- display_data.pixmap_cache_freezer = pixmap_cache_freeze(dcc->pixmap_cache);
- display_data.pixmap_cache_id = dcc->pixmap_cache->id;
- display_data.pixmap_cache_size = dcc->pixmap_cache->size;
- memcpy(display_data.pixmap_cache_clients, dcc->pixmap_cache->sync,
+ display_data.pixmap_cache_freezer = pixmap_cache_freeze(dcc->priv->pixmap_cache);
+ display_data.pixmap_cache_id = dcc->priv->pixmap_cache->id;
+ display_data.pixmap_cache_size = dcc->priv->pixmap_cache->size;
+ memcpy(display_data.pixmap_cache_clients, dcc->priv->pixmap_cache->sync,
sizeof(display_data.pixmap_cache_clients));
- image_encoders_glz_get_restore_data(&dcc->encoders, &display_data.glz_dict_id,
+ image_encoders_glz_get_restore_data(encoders, &display_data.glz_dict_id,
&display_data.glz_dict_data);
/* all data besided the surfaces ref */
@@ -1873,7 +1874,7 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
PixmapCache *pixmap_cache;
red_channel_client_init_send_data(rcc, SPICE_MSG_WAIT_FOR_CHANNELS, NULL);
- pixmap_cache = dcc->pixmap_cache;
+ pixmap_cache = dcc->priv->pixmap_cache;
pthread_mutex_lock(&pixmap_cache->lock);
@@ -1881,8 +1882,8 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
wait.wait_list[0].channel_type = SPICE_CHANNEL_DISPLAY;
wait.wait_list[0].channel_id = pixmap_cache->generation_initiator.client;
wait.wait_list[0].message_serial = pixmap_cache->generation_initiator.message;
- dcc->pixmap_cache_generation = pixmap_cache->generation;
- dcc->pending_pixmaps_sync = FALSE;
+ dcc->priv->pixmap_cache_generation = pixmap_cache->generation;
+ dcc->priv->pending_pixmaps_sync = FALSE;
pthread_mutex_unlock(&pixmap_cache->lock);
@@ -1891,7 +1892,7 @@ static void display_channel_marshall_pixmap_sync(RedChannelClient *rcc,
static void dcc_pixmap_cache_reset(DisplayChannelClient *dcc, SpiceMsgWaitForChannels* sync_data)
{
- PixmapCache *cache = dcc->pixmap_cache;
+ PixmapCache *cache = dcc->priv->pixmap_cache;
uint8_t wait_count;
uint64_t serial;
uint32_t i;
@@ -1900,14 +1901,14 @@ static void dcc_pixmap_cache_reset(DisplayChannelClient *dcc, SpiceMsgWaitForCha
pthread_mutex_lock(&cache->lock);
pixmap_cache_clear(cache);
- dcc->pixmap_cache_generation = ++cache->generation;
- cache->generation_initiator.client = dcc->id;
+ dcc->priv->pixmap_cache_generation = ++cache->generation;
+ cache->generation_initiator.client = dcc->priv->id;
cache->generation_initiator.message = serial;
- cache->sync[dcc->id] = serial;
+ cache->sync[dcc->priv->id] = serial;
wait_count = 0;
for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
- if (cache->sync[i] && i != dcc->id) {
+ if (cache->sync[i] && i != dcc->priv->id) {
sync_data->wait_list[wait_count].channel_type = SPICE_CHANNEL_DISPLAY;
sync_data->wait_list[wait_count].channel_id = i;
sync_data->wait_list[wait_count++].message_serial = cache->sync[i];
@@ -1994,7 +1995,7 @@ static void red_marshall_image(RedChannelClient *rcc,
int comp_succeeded = dcc_compress_image(dcc, &red_image, &bitmap, NULL, item->can_lossy, &comp_send_data);
- surface_lossy_region = &dcc->surface_client_lossy_region[item->surface_id];
+ surface_lossy_region = &dcc->priv->surface_client_lossy_region[item->surface_id];
if (comp_succeeded) {
spice_marshall_Image(src_bitmap_out, &red_image,
&bitmap_palette_out, &lzplt_palette_out);
@@ -2261,7 +2262,7 @@ static void marshall_surface_create(RedChannelClient *rcc,
{
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
- region_init(&dcc->surface_client_lossy_region[surface_create->surface_id]);
+ region_init(&dcc->priv->surface_client_lossy_region[surface_create->surface_id]);
red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_SURFACE_CREATE, NULL);
spice_marshall_msg_display_surface_create(base_marshaller, surface_create);
@@ -2273,7 +2274,7 @@ static void marshall_surface_destroy(RedChannelClient *rcc,
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
SpiceMsgSurfaceDestroy surface_destroy;
- region_destroy(&dcc->surface_client_lossy_region[surface_id]);
+ region_destroy(&dcc->priv->surface_client_lossy_region[surface_id]);
red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_SURFACE_DESTROY, NULL);
surface_destroy.surface_id = surface_id;
@@ -2313,7 +2314,7 @@ static void marshall_stream_activate_report(RedChannelClient *rcc,
uint32_t stream_id)
{
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
- StreamAgent *agent = &dcc->stream_agents[stream_id];
+ StreamAgent *agent = &dcc->priv->stream_agents[stream_id];
SpiceMsgDisplayStreamActivateReport msg;
red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT, NULL);
@@ -2354,14 +2355,14 @@ static void marshall_gl_draw(RedChannelClient *rcc,
static void begin_send_message(RedChannelClient *rcc)
{
DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
- FreeList *free_list = &dcc->send_data.free_list;
+ FreeList *free_list = &dcc->priv->send_data.free_list;
if (free_list->res->count) {
int sync_count = 0;
int i;
for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
- if (i != dcc->id && free_list->sync[i] != 0) {
+ if (i != dcc->priv->id && free_list->sync[i] != 0) {
free_list->wait.header.wait_list[sync_count].channel_type = SPICE_CHANNEL_DISPLAY;
free_list->wait.header.wait_list[sync_count].channel_id = i;
free_list->wait.header.wait_list[sync_count++].message_serial = free_list->sync[i];
@@ -2380,9 +2381,10 @@ static void begin_send_message(RedChannelClient *rcc)
static void reset_send_data(DisplayChannelClient *dcc)
{
- dcc->send_data.free_list.res->count = 0;
- dcc->send_data.num_pixmap_cache_items = 0;
- memset(dcc->send_data.free_list.sync, 0, sizeof(dcc->send_data.free_list.sync));
+ dcc->priv->send_data.free_list.res->count = 0;
+ dcc->priv->send_data.num_pixmap_cache_items = 0;
+ memset(dcc->priv->send_data.free_list.sync, 0,
+ sizeof(dcc->priv->send_data.free_list.sync));
}
void dcc_send_item(RedChannelClient *rcc, RedPipeItem *pipe_item)
diff --git a/server/dcc.c b/server/dcc.c
index fb71794..9b0adb4 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -154,7 +154,7 @@ void dcc_create_surface(DisplayChannelClient *dcc, int surface_id)
/* don't send redundant create surface commands to client */
if (!dcc || display->common.during_target_migrate ||
- dcc->surface_client_created[surface_id]) {
+ dcc->priv->surface_client_created[surface_id]) {
return;
}
channel = red_channel_client_get_channel(RED_CHANNEL_CLIENT(dcc));
@@ -163,7 +163,7 @@ void dcc_create_surface(DisplayChannelClient *dcc, int surface_id)
surface_id, surface->context.width,
surface->context.height,
surface->context.format, flags);
- dcc->surface_client_created[surface_id] = TRUE;
+ dcc->priv->surface_client_created[surface_id] = TRUE;
red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &create->pipe_item);
}
@@ -265,7 +265,7 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
surface_id = drawable->surface_deps[x];
if (surface_id != -1) {
- if (dcc->surface_client_created[surface_id] == TRUE) {
+ if (dcc->priv->surface_client_created[surface_id] == TRUE) {
continue;
}
dcc_create_surface(dcc, surface_id);
@@ -274,7 +274,7 @@ static void add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
}
}
- if (dcc->surface_client_created[drawable->surface_id] == TRUE) {
+ if (dcc->priv->surface_client_created[drawable->surface_id] == TRUE) {
return;
}
@@ -343,12 +343,12 @@ static void dcc_init_stream_agents(DisplayChannelClient *dcc)
DisplayChannel *display = DCC_TO_DC(dcc);
for (i = 0; i < NUM_STREAMS; i++) {
- StreamAgent *agent = &dcc->stream_agents[i];
+ StreamAgent *agent = &dcc->priv->stream_agents[i];
agent->stream = &display->streams_buf[i];
region_init(&agent->vis_region);
region_init(&agent->clip);
}
- dcc->use_video_encoder_rate_control =
+ dcc->priv->use_video_encoder_rate_control =
red_channel_client_test_remote_cap(RED_CHANNEL_CLIENT(dcc), SPICE_DISPLAY_CAP_STREAM_REPORT);
}
@@ -372,27 +372,29 @@ DisplayChannelClient *dcc_new(DisplayChannel *display,
client, stream, TRUE,
num_common_caps, common_caps,
num_caps, caps);
+ dcc->priv = g_new0(DisplayChannelClientPrivate, 1);
+
display->common.during_target_migrate = mig_target;
- dcc->id = display->common.qxl->id;
+ dcc->priv->id = display->common.qxl->id;
spice_return_val_if_fail(dcc, NULL);
spice_info("New display (client %p) dcc %p stream %p", client, dcc, stream);
- ring_init(&dcc->palette_cache_lru);
- dcc->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
- dcc->image_compression = image_compression;
- dcc->jpeg_state = jpeg_state;
- dcc->zlib_glz_state = zlib_glz_state;
+ ring_init(&dcc->priv->palette_cache_lru);
+ dcc->priv->palette_cache_available = CLIENT_PALETTE_CACHE_SIZE;
+ dcc->priv->image_compression = image_compression;
+ dcc->priv->jpeg_state = jpeg_state;
+ dcc->priv->zlib_glz_state = zlib_glz_state;
// TODO: tune quality according to bandwidth
- dcc->encoders.jpeg_quality = 85;
+ dcc->priv->encoders.jpeg_quality = 85;
- dcc->send_data.free_list.res =
+ dcc->priv->send_data.free_list.res =
spice_malloc(sizeof(SpiceResourceList) +
DISPLAY_FREE_LIST_DEFAULT_SIZE * sizeof(SpiceResourceID));
- dcc->send_data.free_list.res_size = DISPLAY_FREE_LIST_DEFAULT_SIZE;
+ dcc->priv->send_data.free_list.res_size = DISPLAY_FREE_LIST_DEFAULT_SIZE;
dcc_init_stream_agents(dcc);
- image_encoders_init(&dcc->encoders, &display->encoder_shared_data);
+ image_encoders_init(&dcc->priv->encoders, &display->encoder_shared_data);
return dcc;
}
@@ -411,18 +413,18 @@ static void dcc_create_all_streams(DisplayChannelClient *dcc)
/* TODO: this function is evil^Wsynchronous, fix */
static int display_channel_client_wait_for_init(DisplayChannelClient *dcc)
{
- dcc->expect_init = TRUE;
+ dcc->priv->expect_init = TRUE;
uint64_t end_time = spice_get_monotonic_time_ns() + COMMON_CLIENT_TIMEOUT;
for (;;) {
red_channel_client_receive(RED_CHANNEL_CLIENT(dcc));
if (!red_channel_client_is_connected(RED_CHANNEL_CLIENT(dcc))) {
break;
}
- if (dcc->pixmap_cache && dcc->encoders.glz_dict) {
- dcc->pixmap_cache_generation = dcc->pixmap_cache->generation;
+ if (dcc->priv->pixmap_cache && dcc->priv->encoders.glz_dict) {
+ dcc->priv->pixmap_cache_generation = dcc->priv->pixmap_cache->generation;
/* TODO: move common.id? if it's used for a per client structure.. */
- spice_info("creating encoder with id == %d", dcc->id);
- if (!image_encoders_glz_create(&dcc->encoders, dcc->id)) {
+ spice_info("creating encoder with id == %d", dcc->priv->id);
+ if (!image_encoders_glz_create(&dcc->priv->encoders, dcc->priv->id)) {
spice_critical("create global lz failed");
}
return TRUE;
@@ -473,7 +475,7 @@ static void dcc_destroy_stream_agents(DisplayChannelClient *dcc)
int i;
for (i = 0; i < NUM_STREAMS; i++) {
- StreamAgent *agent = &dcc->stream_agents[i];
+ StreamAgent *agent = &dcc->priv->stream_agents[i];
region_destroy(&agent->vis_region);
region_destroy(&agent->clip);
if (agent->video_encoder) {
@@ -487,14 +489,14 @@ void dcc_stop(DisplayChannelClient *dcc)
{
DisplayChannel *dc = DCC_TO_DC(dcc);
- pixmap_cache_unref(dcc->pixmap_cache);
- dcc->pixmap_cache = NULL;
+ pixmap_cache_unref(dcc->priv->pixmap_cache);
+ dcc->priv->pixmap_cache = NULL;
dcc_palette_cache_reset(dcc);
- free(dcc->send_data.free_list.res);
+ free(dcc->priv->send_data.free_list.res);
dcc_destroy_stream_agents(dcc);
- image_encoders_free(&dcc->encoders);
+ image_encoders_free(&dcc->priv->encoders);
- if (dcc->gl_draw_ongoing) {
+ if (dcc->priv->gl_draw_ongoing) {
display_channel_gl_draw_done(dc);
}
}
@@ -602,7 +604,7 @@ RedPipeItem *dcc_gl_draw_item_new(RedChannelClient *rcc, void *data, int num)
return NULL;
}
- dcc->gl_draw_ongoing = TRUE;
+ dcc->priv->gl_draw_ongoing = TRUE;
item->draw = *draw;
red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_GL_DRAW);
@@ -623,11 +625,11 @@ void dcc_destroy_surface(DisplayChannelClient *dcc, uint32_t surface_id)
channel = RED_CHANNEL(display);
if (COMMON_GRAPHICS_CHANNEL(display)->during_target_migrate ||
- !dcc->surface_client_created[surface_id]) {
+ !dcc->priv->surface_client_created[surface_id]) {
return;
}
- dcc->surface_client_created[surface_id] = FALSE;
+ dcc->priv->surface_client_created[surface_id] = FALSE;
destroy = red_surface_destroy_item_new(channel, surface_id);
red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy->pipe_item);
}
@@ -728,20 +730,20 @@ int dcc_compress_image(DisplayChannelClient *dcc,
stat_start_time_init(&start_time, &display_channel->encoder_shared_data.off_stat);
- image_compression = get_compression_for_bitmap(src, dcc->image_compression, drawable);
+ image_compression = get_compression_for_bitmap(src, dcc->priv->image_compression, drawable);
switch (image_compression) {
case SPICE_IMAGE_COMPRESSION_OFF:
break;
case SPICE_IMAGE_COMPRESSION_QUIC:
if (can_lossy && display_channel->enable_jpeg &&
(src->format != SPICE_BITMAP_FMT_RGBA || !bitmap_has_extra_stride(src))) {
- success = image_encoders_compress_jpeg(&dcc->encoders, dest, src, o_comp_data);
+ success = image_encoders_compress_jpeg(&dcc->priv->encoders, dest, src, o_comp_data);
break;
}
- success = image_encoders_compress_quic(&dcc->encoders, dest, src, o_comp_data);
+ success = image_encoders_compress_quic(&dcc->priv->encoders, dest, src, o_comp_data);
break;
case SPICE_IMAGE_COMPRESSION_GLZ:
- success = image_encoders_compress_glz(&dcc->encoders, dest, src,
+ success = image_encoders_compress_glz(&dcc->priv->encoders, dest, src,
drawable->red_drawable, &drawable->glz_retention,
o_comp_data,
display_channel->enable_zlib_glz_wrap);
@@ -753,13 +755,13 @@ int dcc_compress_image(DisplayChannelClient *dcc,
case SPICE_IMAGE_COMPRESSION_LZ4:
if (red_channel_client_test_remote_cap(&dcc->base,
SPICE_DISPLAY_CAP_LZ4_COMPRESSION)) {
- success = image_encoders_compress_lz4(&dcc->encoders, dest, src, o_comp_data);
+ success = image_encoders_compress_lz4(&dcc->priv->encoders, dest, src, o_comp_data);
break;
}
#endif
lz_compress:
case SPICE_IMAGE_COMPRESSION_LZ:
- success = image_encoders_compress_lz(&dcc->encoders, dest, src, o_comp_data);
+ success = image_encoders_compress_lz(&dcc->priv->encoders, dest, src, o_comp_data);
if (success && !bitmap_fmt_is_rgb(src->format)) {
dcc_palette_cache_palette(dcc, dest->u.lz_plt.palette, &(dest->u.lz_plt.flags));
}
@@ -805,7 +807,7 @@ void dcc_palette_cache_reset(DisplayChannelClient *dcc)
static void dcc_push_release(DisplayChannelClient *dcc, uint8_t type, uint64_t id,
uint64_t* sync_data)
{
- FreeList *free_list = &dcc->send_data.free_list;
+ FreeList *free_list = &dcc->priv->send_data.free_list;
int i;
for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
@@ -830,7 +832,7 @@ static void dcc_push_release(DisplayChannelClient *dcc, uint8_t type, uint64_t i
int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
uint32_t size, int lossy)
{
- PixmapCache *cache = dcc->pixmap_cache;
+ PixmapCache *cache = dcc->priv->pixmap_cache;
NewCacheItem *item;
uint64_t serial;
int key;
@@ -840,11 +842,11 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
item = spice_new(NewCacheItem, 1);
serial = red_channel_client_get_message_serial(RED_CHANNEL_CLIENT(dcc));
- if (cache->generation != dcc->pixmap_cache_generation) {
- if (!dcc->pending_pixmaps_sync) {
+ if (cache->generation != dcc->priv->pixmap_cache_generation) {
+ if (!dcc->priv->pending_pixmaps_sync) {
red_channel_client_pipe_add_type(
RED_CHANNEL_CLIENT(dcc), RED_PIPE_ITEM_TYPE_PIXMAP_SYNC);
- dcc->pending_pixmaps_sync = TRUE;
+ dcc->priv->pending_pixmaps_sync = TRUE;
}
free(item);
return FALSE;
@@ -857,7 +859,7 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
verify(SPICE_OFFSETOF(NewCacheItem, lru_link) == 0);
if (!(tail = (NewCacheItem *)ring_get_tail(&cache->lru)) ||
- tail->sync[dcc->id] == serial) {
+ tail->sync[dcc->priv->id] == serial) {
cache->available += size;
free(item);
return FALSE;
@@ -875,7 +877,7 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
ring_remove(&tail->lru_link);
cache->items--;
cache->available += tail->size;
- cache->sync[dcc->id] = serial;
+ cache->sync[dcc->priv->id] = serial;
dcc_push_release(dcc, SPICE_RES_TYPE_PIXMAP, tail->id, tail->sync);
free(tail);
}
@@ -888,8 +890,8 @@ int dcc_pixmap_cache_unlocked_add(DisplayChannelClient *dcc, uint64_t id,
item->size = size;
item->lossy = lossy;
memset(item->sync, 0, sizeof(item->sync));
- item->sync[dcc->id] = serial;
- cache->sync[dcc->id] = serial;
+ item->sync[dcc->priv->id] = serial;
+ cache->sync[dcc->priv->id] = serial;
return TRUE;
}
@@ -898,16 +900,16 @@ static int dcc_handle_init(DisplayChannelClient *dcc, SpiceMsgcDisplayInit *init
gboolean success;
RedClient *client = red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc));
- spice_return_val_if_fail(dcc->expect_init, FALSE);
- dcc->expect_init = FALSE;
+ spice_return_val_if_fail(dcc->priv->expect_init, FALSE);
+ dcc->priv->expect_init = FALSE;
- spice_return_val_if_fail(!dcc->pixmap_cache, FALSE);
- dcc->pixmap_cache = pixmap_cache_get(client,
- init->pixmap_cache_id,
- init->pixmap_cache_size);
- spice_return_val_if_fail(dcc->pixmap_cache, FALSE);
+ spice_return_val_if_fail(!dcc->priv->pixmap_cache, FALSE);
+ dcc->priv->pixmap_cache = pixmap_cache_get(client,
+ init->pixmap_cache_id,
+ init->pixmap_cache_size);
+ spice_return_val_if_fail(dcc->priv->pixmap_cache, FALSE);
- success = image_encoders_get_glz_dictionary(&dcc->encoders,
+ success = image_encoders_get_glz_dictionary(&dcc->priv->encoders,
red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc)),
init->glz_dictionary_id,
init->glz_dictionary_window_size);
@@ -927,7 +929,7 @@ static int dcc_handle_stream_report(DisplayChannelClient *dcc,
return FALSE;
}
- agent = &dcc->stream_agents[report->stream_id];
+ agent = &dcc->priv->stream_agents[report->stream_id];
if (!agent->video_encoder) {
spice_info("stream_report: no encoder for stream id %u. "
"The stream has probably been destroyed",
@@ -965,7 +967,7 @@ static int dcc_handle_preferred_compression(DisplayChannelClient *dcc,
case SPICE_IMAGE_COMPRESSION_LZ:
case SPICE_IMAGE_COMPRESSION_GLZ:
case SPICE_IMAGE_COMPRESSION_OFF:
- dcc->image_compression = pc->image_compression;
+ dcc->priv->image_compression = pc->image_compression;
break;
default:
spice_warning("preferred-compression: unsupported image compression setting");
@@ -977,13 +979,13 @@ static int dcc_handle_gl_draw_done(DisplayChannelClient *dcc)
{
DisplayChannel *display = DCC_TO_DC(dcc);
- if (G_UNLIKELY(!dcc->gl_draw_ongoing)) {
+ if (G_UNLIKELY(!dcc->priv->gl_draw_ongoing)) {
g_warning("unexpected DRAW_DONE received\n");
/* close client connection */
return FALSE;
}
- dcc->gl_draw_ongoing = FALSE;
+ dcc->priv->gl_draw_ongoing = FALSE;
display_channel_gl_draw_done(display);
return TRUE;
@@ -1011,7 +1013,7 @@ int dcc_handle_message(RedChannelClient *rcc, uint32_t size, uint16_t type, void
static int dcc_handle_migrate_glz_dictionary(DisplayChannelClient *dcc,
SpiceMigrateDataDisplay *migrate)
{
- return image_encoders_restore_glz_dictionary(&dcc->encoders,
+ return image_encoders_restore_glz_dictionary(&dcc->priv->encoders,
red_channel_client_get_client(RED_CHANNEL_CLIENT(dcc)),
migrate->glz_dict_id,
&migrate->glz_dict_data);
@@ -1021,11 +1023,11 @@ static int restore_surface(DisplayChannelClient *dcc, uint32_t surface_id)
{
/* we don't process commands till we receive the migration data, thus,
* we should have not sent any surface to the client. */
- if (dcc->surface_client_created[surface_id]) {
+ if (dcc->priv->surface_client_created[surface_id]) {
spice_warning("surface %u is already marked as client_created", surface_id);
return FALSE;
}
- dcc->surface_client_created[surface_id] = TRUE;
+ dcc->priv->surface_client_created[surface_id] = TRUE;
return TRUE;
}
@@ -1063,8 +1065,8 @@ static int restore_surfaces_lossy(DisplayChannelClient *dcc,
lossy_rect.top = mig_lossy_rect->top;
lossy_rect.right = mig_lossy_rect->right;
lossy_rect.bottom = mig_lossy_rect->bottom;
- region_init(&dcc->surface_client_lossy_region[surface_id]);
- region_add(&dcc->surface_client_lossy_region[surface_id], &lossy_rect);
+ region_init(&dcc->priv->surface_client_lossy_region[surface_id]);
+ region_add(&dcc->priv->surface_client_lossy_region[surface_id], &lossy_rect);
}
return TRUE;
}
@@ -1089,26 +1091,26 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
* channel client that froze the cache on the src size receives the migrate
* data and unfreezes the cache by setting its size > 0 and by triggering
* pixmap_cache_reset */
- dcc->pixmap_cache = pixmap_cache_get(client,
- migrate_data->pixmap_cache_id, -1);
- spice_return_val_if_fail(dcc->pixmap_cache, FALSE);
+ dcc->priv->pixmap_cache = pixmap_cache_get(client,
+ migrate_data->pixmap_cache_id, -1);
+ spice_return_val_if_fail(dcc->priv->pixmap_cache, FALSE);
- pthread_mutex_lock(&dcc->pixmap_cache->lock);
+ pthread_mutex_lock(&dcc->priv->pixmap_cache->lock);
for (i = 0; i < MAX_CACHE_CLIENTS; i++) {
- dcc->pixmap_cache->sync[i] = MAX(dcc->pixmap_cache->sync[i],
- migrate_data->pixmap_cache_clients[i]);
+ dcc->priv->pixmap_cache->sync[i] = MAX(dcc->priv->pixmap_cache->sync[i],
+ migrate_data->pixmap_cache_clients[i]);
}
- pthread_mutex_unlock(&dcc->pixmap_cache->lock);
+ pthread_mutex_unlock(&dcc->priv->pixmap_cache->lock);
if (migrate_data->pixmap_cache_freezer) {
/* activating the cache. The cache will start to be active after
* pixmap_cache_reset is called, when handling RED_PIPE_ITEM_TYPE_PIXMAP_RESET */
- dcc->pixmap_cache->size = migrate_data->pixmap_cache_size;
+ dcc->priv->pixmap_cache->size = migrate_data->pixmap_cache_size;
red_channel_client_pipe_add_type(RED_CHANNEL_CLIENT(dcc), RED_PIPE_ITEM_TYPE_PIXMAP_RESET);
}
if (dcc_handle_migrate_glz_dictionary(dcc, migrate_data)) {
- image_encoders_glz_create(&dcc->encoders, dcc->id);
+ image_encoders_glz_create(&dcc->priv->encoders, dcc->priv->id);
} else {
spice_critical("restoring global lz dictionary failed");
}
@@ -1117,10 +1119,10 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
if (migrate_data->low_bandwidth_setting) {
red_channel_client_ack_set_client_window(RED_CHANNEL_CLIENT(dcc), WIDE_CLIENT_ACK_WINDOW);
- if (dcc->jpeg_state == SPICE_WAN_COMPRESSION_AUTO) {
+ if (dcc->priv->jpeg_state == SPICE_WAN_COMPRESSION_AUTO) {
display->enable_jpeg = TRUE;
}
- if (dcc->zlib_glz_state == SPICE_WAN_COMPRESSION_AUTO) {
+ if (dcc->priv->zlib_glz_state == SPICE_WAN_COMPRESSION_AUTO) {
display->enable_zlib_glz_wrap = TRUE;
}
}
@@ -1140,47 +1142,47 @@ int dcc_handle_migrate_data(DisplayChannelClient *dcc, uint32_t size, void *mess
StreamAgent* dcc_get_stream_agent(DisplayChannelClient *dcc, int stream_id)
{
- return &dcc->stream_agents[stream_id];
+ return &dcc->priv->stream_agents[stream_id];
}
ImageEncoders* dcc_get_encoders(DisplayChannelClient *dcc)
{
- return &dcc->encoders;
+ return &dcc->priv->encoders;
}
spice_wan_compression_t dcc_get_jpeg_state(DisplayChannelClient *dcc)
{
- return dcc->jpeg_state;
+ return dcc->priv->jpeg_state;
}
spice_wan_compression_t dcc_get_zlib_glz_state(DisplayChannelClient *dcc)
{
- return dcc->zlib_glz_state;
+ return dcc->priv->zlib_glz_state;
}
gboolean dcc_use_video_encoder_rate_control(DisplayChannelClient *dcc)
{
- return dcc->use_video_encoder_rate_control;
+ return dcc->priv->use_video_encoder_rate_control;
}
uint32_t dcc_get_max_stream_latency(DisplayChannelClient *dcc)
{
- return dcc->streams_max_latency;
+ return dcc->priv->streams_max_latency;
}
void dcc_set_max_stream_latency(DisplayChannelClient *dcc, uint32_t latency)
{
- dcc->streams_max_latency = latency;
+ dcc->priv->streams_max_latency = latency;
}
uint64_t dcc_get_max_stream_bit_rate(DisplayChannelClient *dcc)
{
- return dcc->streams_max_bit_rate;
+ return dcc->priv->streams_max_bit_rate;
}
void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate)
{
- dcc->streams_max_bit_rate = rate;
+ dcc->priv->streams_max_bit_rate = rate;
}
int dcc_config_socket(RedChannelClient *rcc)
--
2.7.4
More information about the Spice-devel
mailing list