[Spice-devel] [PATCH spice-server 10/15] Factor out dcc_attach_stream()
Jonathon Jongsma
jjongsma at redhat.com
Fri Oct 20 21:13:15 UTC 2017
Separate the channel code from the channel client code and move the
latter into a new function.
Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
---
server/dcc.c | 23 +++++++++++++++++++++++
server/dcc.h | 1 +
server/stream.c | 20 +-------------------
3 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/server/dcc.c b/server/dcc.c
index 13166645c..226665ee2 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -1786,3 +1786,26 @@ void dcc_stream_stop(DisplayChannelClient *dcc, int stream_id)
red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), stream_destroy_item_new(stream_agent));
stream_agent_stats_print(stream_agent);
}
+
+void dcc_attach_stream(DisplayChannelClient *dcc, Drawable *drawable, int stream_id)
+{
+ StreamAgent *agent;
+ QRegion clip_in_draw_dest;
+
+ agent = dcc_get_stream_agent(dcc, stream_id);
+ region_or(&agent->vis_region, &drawable->tree_item.base.rgn);
+
+ region_init(&clip_in_draw_dest);
+ region_add(&clip_in_draw_dest, &drawable->red_drawable->bbox);
+ region_and(&clip_in_draw_dest, &agent->clip);
+
+ if (!region_is_equal(&clip_in_draw_dest, &drawable->tree_item.base.rgn)) {
+ region_remove(&agent->clip, &drawable->red_drawable->bbox);
+ region_or(&agent->clip, &drawable->tree_item.base.rgn);
+ dcc_stream_agent_clip(dcc, agent);
+ }
+ region_destroy(&clip_in_draw_dest);
+#ifdef STREAM_STATS
+ agent->stats.num_input_frames++;
+#endif
+}
diff --git a/server/dcc.h b/server/dcc.h
index 5fb61a605..8e1da936e 100644
--- a/server/dcc.h
+++ b/server/dcc.h
@@ -204,6 +204,7 @@ gboolean dcc_is_low_bandwidth(DisplayChannelClient *dcc);
GArray *dcc_get_preferred_video_codecs_for_encoding(DisplayChannelClient *dcc);
void dcc_update_streams_max_latency(DisplayChannelClient *dcc, StreamAgent *remove_agent);
void dcc_stream_stop(DisplayChannelClient *dcc, int stream_id);
+void dcc_attach_stream(DisplayChannelClient *dcc, Drawable *drawable, int stream_id);
typedef struct RedStreamClipItem {
RedPipeItem base;
diff --git a/server/stream.c b/server/stream.c
index c3cdd6707..0e5da6468 100644
--- a/server/stream.c
+++ b/server/stream.c
@@ -199,25 +199,7 @@ static void attach_stream(DisplayChannel *display, Drawable *drawable, Stream *s
}
FOREACH_DCC(display, dcc) {
- StreamAgent *agent;
- QRegion clip_in_draw_dest;
-
- agent = dcc_get_stream_agent(dcc, display_channel_get_stream_id(display, stream));
- region_or(&agent->vis_region, &drawable->tree_item.base.rgn);
-
- region_init(&clip_in_draw_dest);
- region_add(&clip_in_draw_dest, &drawable->red_drawable->bbox);
- region_and(&clip_in_draw_dest, &agent->clip);
-
- if (!region_is_equal(&clip_in_draw_dest, &drawable->tree_item.base.rgn)) {
- region_remove(&agent->clip, &drawable->red_drawable->bbox);
- region_or(&agent->clip, &drawable->tree_item.base.rgn);
- dcc_stream_agent_clip(dcc, agent);
- }
- region_destroy(&clip_in_draw_dest);
-#ifdef STREAM_STATS
- agent->stats.num_input_frames++;
-#endif
+ dcc_attach_stream(dcc, drawable, display_channel_get_stream_id(display, stream));
}
}
--
2.13.6
More information about the Spice-devel
mailing list