diff options
author | Jonathon Jongsma <jjongsma@redhat.com> | 2015-01-26 15:08:23 -0600 |
---|---|---|
committer | Fabiano FidĂȘncio <fidencio@redhat.com> | 2015-02-23 23:00:45 +0100 |
commit | d10f4d16ef1fe38ceebdd0130faca4da06729584 (patch) | |
tree | 62a26851ea1ac9b5a22559f1d0446c89c64a8541 | |
parent | 951e1e0bc70eca2e26df99a2e444640bc610e5b5 (diff) | |
download | spice-d10f4d16ef1fe38ceebdd0130faca4da06729584.tar.gz spice-d10f4d16ef1fe38ceebdd0130faca4da06729584.tar.xz spice-d10f4d16ef1fe38ceebdd0130faca4da06729584.zip |
Store 'renderers' as GArray in RedsState
-rw-r--r-- | server/display-channel.c | 13 | ||||
-rw-r--r-- | server/display-channel.h | 3 | ||||
-rw-r--r-- | server/reds-private.h | 2 | ||||
-rw-r--r-- | server/reds.c | 19 | ||||
-rw-r--r-- | server/reds.h | 5 |
5 files changed, 23 insertions, 19 deletions
diff --git a/server/display-channel.c b/server/display-channel.c index dcbde74f..8aaa5fb7 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -1831,10 +1831,11 @@ void display_channel_create_surface(DisplayChannel *display, uint32_t surface_id if (display->renderer == RED_RENDERER_INVALID) { int i; - for (i = 0; i < display->num_renderers; i++) { - surface->context.canvas = create_canvas_for_surface(display, surface, display->renderers[i]); + for (i = 0; i < display->renderers->len; i++) { + uint32_t renderer = g_array_index(display->renderers, uint32_t, i); + surface->context.canvas = create_canvas_for_surface(display, surface, renderer); if (surface->context.canvas) { - display->renderer = display->renderers[i]; + display->renderer = renderer; break; } } @@ -1956,8 +1957,9 @@ DisplayChannel* display_channel_new(RedWorker *worker, int migrate, uint32_t n_s static SpiceImageSurfacesOps image_surfaces_ops = { image_surfaces_get, }; + GArray *renderers = reds_get_renderers(reds); - spice_return_val_if_fail(num_renderers > 0, NULL); + spice_return_val_if_fail(renderers->len > 0, NULL); spice_info("create display channel"); display = (DisplayChannel *)red_worker_new_channel( @@ -1988,8 +1990,7 @@ DisplayChannel* display_channel_new(RedWorker *worker, int migrate, uint32_t n_s stat_compress_init(&display_channel->lz4_stat, "lz4"); display->n_surfaces = n_surfaces; - display->num_renderers = num_renderers; - memcpy(display->renderers, renderers, sizeof(display->renderers)); + display->renderers = g_array_ref(renderers); display->renderer = RED_RENDERER_INVALID; ring_init(&display->current_list); diff --git a/server/display-channel.h b/server/display-channel.h index ee8fef42..b095d482 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -155,8 +155,7 @@ struct DisplayChannel { MonitorsConfig *monitors_config; - uint32_t num_renderers; - uint32_t renderers[RED_RENDERER_LAST]; + GArray *renderers; uint32_t renderer; int enable_jpeg; int enable_zlib_glz_wrap; diff --git a/server/reds-private.h b/server/reds-private.h index 59d371ed..8e92eb4b 100644 --- a/server/reds-private.h +++ b/server/reds-private.h @@ -180,6 +180,8 @@ struct RedsState { int default_channel_security; ChannelSecurityOptions *channels_security; const char *default_renderer; + GArray *renderers; + }; #endif diff --git a/server/reds.c b/server/reds.c index 84b6da52..d074ee01 100644 --- a/server/reds.c +++ b/server/reds.c @@ -3325,6 +3325,7 @@ SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void) reds->default_channel_security = SPICE_CHANNEL_SECURITY_NONE | SPICE_CHANNEL_SECURITY_SSL; reds->default_renderer = "sw"; + reds->renderers = g_array_sized_new(FALSE, TRUE, sizeof(uint32_t), RED_RENDERER_LAST); return reds; } @@ -3338,9 +3339,6 @@ static RendererInfo renderers_info[] = { {RED_RENDERER_INVALID, NULL}, }; -uint32_t renderers[RED_RENDERER_LAST]; -uint32_t num_renderers = 0; - static RendererInfo *find_renderer(const char *name) { RendererInfo *inf = renderers_info; @@ -3353,14 +3351,14 @@ static RendererInfo *find_renderer(const char *name) return NULL; } -static int red_add_renderer(const char *name) +static int reds_add_renderer(RedsState *reds, const char *name) { RendererInfo *inf; - if (num_renderers == RED_RENDERER_LAST || !(inf = find_renderer(name))) { + if (reds->renderers->len == RED_RENDERER_LAST || !(inf = find_renderer(name))) { return FALSE; } - renderers[num_renderers++] = inf->id; + g_array_append_val(reds->renderers, inf->id); return TRUE; } @@ -3371,7 +3369,7 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *cor spice_assert(reds == s); ret = do_spice_init(s, core); if (s->default_renderer) { - red_add_renderer(s->default_renderer); + reds_add_renderer(s, s->default_renderer); } return ret; } @@ -3379,6 +3377,7 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *cor SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *s) { spice_assert(reds == s); + g_array_unref(s->renderers); reds_exit(); } @@ -3649,7 +3648,7 @@ SPICE_GNUC_VISIBLE int spice_server_is_server_mouse(SpiceServer *s) SPICE_GNUC_VISIBLE int spice_server_add_renderer(SpiceServer *s, const char *name) { spice_assert(reds == s); - if (!red_add_renderer(name)) { + if (!reds_add_renderer(s, name)) { return -1; } s->default_renderer = NULL; @@ -3905,3 +3904,7 @@ SPICE_GNUC_VISIBLE void spice_server_set_seamless_migration(SpiceServer *s, int spice_debug("seamless migration enabled=%d", enable); } +GArray* reds_get_renderers(RedsState *reds) +{ + return reds->renderers; +} diff --git a/server/reds.h b/server/reds.h index 9781e0a2..1624bc94 100644 --- a/server/reds.h +++ b/server/reds.h @@ -65,6 +65,8 @@ int reds_get_agent_mouse(void); // used by inputs_channel int reds_has_vdagent(void); // used by inputs channel void reds_handle_agent_mouse_event(RedsState *reds, const VDAgentMouseState *mouse_state); // used by inputs_channel +GArray* reds_get_renderers(RedsState *reds); + enum { RED_RENDERER_INVALID, RED_RENDERER_SW, @@ -72,9 +74,6 @@ enum { RED_RENDERER_LAST }; -extern uint32_t renderers[RED_RENDERER_LAST]; -extern uint32_t num_renderers; - extern struct SpiceCoreInterface *core; extern uint32_t streaming_video; extern spice_image_compression_t image_compression; |