diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-09-17 15:53:05 +0200 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2015-11-19 12:43:02 +0000 |
commit | 85920bb2e9715bc9317c2717cb14cc58f31f28ef (patch) | |
tree | 1976490e58270d90ce1fe0e486384df2b6ea64c3 /server/display-channel.c | |
parent | 806433a3bd092bc6225df7d7b7c5b5cc2cd97550 (diff) | |
download | spice-85920bb2e9715bc9317c2717cb14cc58f31f28ef.tar.gz spice-85920bb2e9715bc9317c2717cb14cc58f31f28ef.tar.xz spice-85920bb2e9715bc9317c2717cb14cc58f31f28ef.zip |
worker: start a DisplayChannelClient unit
Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com>
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
Diffstat (limited to 'server/display-channel.c')
-rw-r--r-- | server/display-channel.c | 127 |
1 files changed, 2 insertions, 125 deletions
diff --git a/server/display-channel.c b/server/display-channel.c index d4fcc7e2..9990c710 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -135,53 +135,6 @@ void display_channel_compress_stats_print(const DisplayChannel *display_channel) #endif } -DisplayChannelClient *dcc_new(DisplayChannel *display, - RedClient *client, RedsStream *stream, - int mig_target, - uint32_t *common_caps, int num_common_caps, - uint32_t *caps, int num_caps, - SpiceImageCompression image_compression, - spice_wan_compression_t jpeg_state, - spice_wan_compression_t zlib_glz_state) - -{ - DisplayChannelClient *dcc; - - dcc = (DisplayChannelClient*)common_channel_new_client( - (CommonChannel *)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; - dcc->image_compression = image_compression; - dcc->jpeg_state = jpeg_state; - dcc->zlib_glz_state = zlib_glz_state; - // todo: tune quality according to bandwidth - dcc->jpeg_quality = 85; - - dcc_encoders_init(dcc); - - return dcc; -} - -void dcc_add_stream_agent_clip(DisplayChannelClient* dcc, StreamAgent *agent) -{ - StreamClipItem *item = stream_clip_item_new(dcc, agent); - int n_rects; - - item->clip_type = SPICE_CLIP_TYPE_RECTS; - - n_rects = pixman_region32_n_rects(&agent->clip); - item->rects = spice_malloc_n_m(n_rects, sizeof(SpiceRect), sizeof(SpiceClipRects)); - item->rects->num_rects = n_rects; - region_ret_rects(&agent->clip, item->rects->rects, n_rects); - - red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), (PipeItem *)item); -} - MonitorsConfig* monitors_config_ref(MonitorsConfig *monitors_config) { monitors_config->refs++; @@ -227,82 +180,6 @@ MonitorsConfig* monitors_config_new(QXLHead *heads, ssize_t nheads, ssize_t max) return mc; } -static MonitorsConfigItem *monitors_config_item_new(RedChannel* channel, - MonitorsConfig *monitors_config) -{ - MonitorsConfigItem *mci; - - mci = (MonitorsConfigItem *)spice_malloc(sizeof(*mci)); - mci->monitors_config = monitors_config; - - red_channel_pipe_item_init(channel, - &mci->pipe_item, PIPE_ITEM_TYPE_MONITORS_CONFIG); - return mci; -} - -static void red_monitors_config_item_add(DisplayChannelClient *dcc) -{ - DisplayChannel *dc = DCC_TO_DC(dcc); - MonitorsConfigItem *mci; - - mci = monitors_config_item_new(dcc->common.base.channel, - monitors_config_ref(dc->monitors_config)); - red_channel_client_pipe_add(&dcc->common.base, &mci->pipe_item); -} - -void dcc_push_monitors_config(DisplayChannelClient *dcc) -{ - MonitorsConfig *monitors_config = DCC_TO_DC(dcc)->monitors_config; - - if (monitors_config == NULL) { - spice_warning("monitors_config is NULL"); - return; - } - - if (!red_channel_client_test_remote_cap(&dcc->common.base, - SPICE_DISPLAY_CAP_MONITORS_CONFIG)) { - return; - } - red_monitors_config_item_add(dcc); - red_channel_client_push(&dcc->common.base); -} - -static SurfaceDestroyItem *surface_destroy_item_new(RedChannel *channel, - uint32_t surface_id) -{ - SurfaceDestroyItem *destroy; - - destroy = spice_malloc(sizeof(SurfaceDestroyItem)); - destroy->surface_destroy.surface_id = surface_id; - red_channel_pipe_item_init(channel, &destroy->pipe_item, - PIPE_ITEM_TYPE_DESTROY_SURFACE); - - return destroy; -} - -void dcc_push_destroy_surface(DisplayChannelClient *dcc, uint32_t surface_id) -{ - DisplayChannel *display; - RedChannel *channel; - SurfaceDestroyItem *destroy; - - if (!dcc) { - return; - } - - display = DCC_TO_DC(dcc); - channel = RED_CHANNEL(display); - - if (COMMON_CHANNEL(display)->during_target_migrate || - !dcc->surface_client_created[surface_id]) { - return; - } - - dcc->surface_client_created[surface_id] = FALSE; - destroy = surface_destroy_item_new(channel, surface_id); - red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy->pipe_item); -} - int display_channel_get_streams_timeout(DisplayChannel *display) { int timeout = INT_MAX; @@ -395,7 +272,7 @@ void display_channel_surface_unref(DisplayChannel *display, uint32_t surface_id) region_destroy(&surface->draw_dirty_region); surface->context.canvas = NULL; FOREACH_DCC(display, link, next, dcc) { - dcc_push_destroy_surface(dcc, surface_id); + dcc_destroy_surface(dcc, surface_id); } spice_warn_if(!ring_is_empty(&surface->depend_on_me)); @@ -442,7 +319,7 @@ static void streams_update_visible_region(DisplayChannel *display, Drawable *dra if (region_intersects(&agent->vis_region, &drawable->tree_item.base.rgn)) { region_exclude(&agent->vis_region, &drawable->tree_item.base.rgn); region_exclude(&agent->clip, &drawable->tree_item.base.rgn); - dcc_add_stream_agent_clip(dcc, agent); + dcc_stream_agent_clip(dcc, agent); } } } |