From: Francois Gouget <fgouget@xxxxxxxxxxxxxxx> Only red_marshall_stream_data() needs to know whether to send the frame using a SpiceMsgDisplayStreamDataSized or a regular StreamData message. So check whether we have a sized frame there and simplify the rest of the code. Signed-off-by: Francois Gouget <fgouget@xxxxxxxxxxxxxxx> --- server/dcc-send.c | 13 +++---------- server/display-channel.h | 1 - server/stream.c | 31 ++++--------------------------- 3 files changed, 7 insertions(+), 38 deletions(-) diff --git a/server/dcc-send.c b/server/dcc-send.c index ff4aa4d..b18bd80 100644 --- a/server/dcc-send.c +++ b/server/dcc-send.c @@ -1683,10 +1683,6 @@ static int red_marshall_stream_data(RedChannelClient *rcc, int is_sized, width, height; int ret; - if (!stream) { - spice_assert(drawable->sized_stream); - stream = drawable->sized_stream; - } spice_assert(drawable->red_drawable->type == QXL_DRAW_COPY); copy = &drawable->red_drawable->u.copy; @@ -1696,16 +1692,13 @@ static int red_marshall_stream_data(RedChannelClient *rcc, width = copy->src_area.right - copy->src_area.left; height = copy->src_area.bottom - copy->src_area.top; - is_sized = (drawable->sized_stream != NULL); + is_sized = (width != stream->width) || (height != stream->height) || + !rect_is_equal(&drawable->red_drawable->bbox, &stream->dest_area); if (is_sized && !red_channel_client_test_remote_cap(rcc, SPICE_DISPLAY_CAP_SIZED_STREAM)) { return FALSE; } - if (!is_sized) { - width = stream->width; - height = stream->height; - } StreamAgent *agent = &dcc->stream_agents[get_stream_id(display, stream)]; uint64_t time_now = spice_get_monotonic_time_ns(); @@ -2150,7 +2143,7 @@ static void marshall_qxl_drawable(RedChannelClient *rcc, spice_return_if_fail(display); /* allow sized frames to be streamed, even if they where replaced by another frame, since * newer frames might not cover sized frames completely if they are bigger */ - if ((item->stream || item->sized_stream) && red_marshall_stream_data(rcc, m, item)) { + if (item->stream && red_marshall_stream_data(rcc, m, item)) { return; } if (display->enable_jpeg) diff --git a/server/display-channel.h b/server/display-channel.h index 16ea709..5891e94 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -70,7 +70,6 @@ struct Drawable { int gradual_frames_count; int last_gradual_frame; Stream *stream; - Stream *sized_stream; int streamable; BitmapGradualType copy_bitmap_graduality; DependItem depend_items[3]; diff --git a/server/stream.c b/server/stream.c index d8be148..f527c71 100644 --- a/server/stream.c +++ b/server/stream.c @@ -226,7 +226,6 @@ static int is_next_stream_frame(DisplayChannel *display, int container_candidate_allowed) { RedDrawable *red_drawable; - int is_frame_container = FALSE; if (!candidate->streamable) { return STREAM_FRAME_NONE; @@ -252,7 +251,6 @@ static int is_next_stream_frame(DisplayChannel *display, } } else { if (rect_contains(&red_drawable->bbox, other_dest)) { - SpiceRect* candidate_src; int candidate_area = rect_get_area(&red_drawable->bbox); int other_area = rect_get_area(other_dest); /* do not stream drawables that are significantly @@ -265,13 +263,6 @@ static int is_next_stream_frame(DisplayChannel *display, rect_debug(&red_drawable->bbox); return STREAM_FRAME_NONE; } - - candidate_src = &red_drawable->u.copy.src_area; - if (candidate_area > other_area || - candidate_src->right - candidate_src->left != other_src_width || - candidate_src->bottom - candidate_src->top != other_src_height) { - is_frame_container = TRUE; - } } else { return STREAM_FRAME_NONE; } @@ -283,11 +274,7 @@ static int is_next_stream_frame(DisplayChannel *display, return STREAM_FRAME_NONE; } } - if (is_frame_container) { - return STREAM_FRAME_CONTAINER; - } else { - return STREAM_FRAME_NATIVE; - } + return STREAM_FRAME_NATIVE; } static void attach_stream(DisplayChannel *display, Drawable *drawable, Stream *stream) @@ -340,9 +327,6 @@ void detach_stream(DisplayChannel *display, Stream *stream, spice_assert(stream->current && stream->current->stream); spice_assert(stream->current->stream == stream); stream->current->stream = NULL; - if (detach_sized) { - stream->current->sized_stream = NULL; - } stream->current = NULL; } @@ -545,9 +529,6 @@ void stream_trace_update(DisplayChannel *display, Drawable *drawable) detach_stream(display, stream, FALSE); } attach_stream(display, drawable, stream); - if (is_next_frame == STREAM_FRAME_CONTAINER) { - drawable->sized_stream = stream; - } return; } } @@ -590,9 +571,6 @@ void stream_maintenance(DisplayChannel *display, detach_stream(display, stream, FALSE); prev->streamable = FALSE; //prevent item trace attach_stream(display, candidate, stream); - if (is_next_frame == STREAM_FRAME_CONTAINER) { - candidate->sized_stream = stream; - } } } else if (candidate->streamable) { SpiceRect* prev_src = &prev->red_drawable->u.copy.src_area; @@ -833,13 +811,12 @@ static void dcc_detach_stream_gracefully(DisplayChannelClient *dcc, /* (1) The caller should detach the drawable from the stream. This will * lead to sending the drawable losslessly, as an ordinary drawable. */ if (dcc_drawable_is_in_pipe(dcc, stream->current)) { - spice_debug("stream %d: upgrade by linked drawable. sized %d, box ==>", - stream_id, stream->current->sized_stream != NULL); + spice_debug("stream %d: upgrade by linked drawable. box ==>", + stream_id); rect_debug(&stream->current->red_drawable->bbox); goto clear_vis_region; } - spice_debug("stream %d: upgrade by drawable. sized %d, box ==>", - stream_id, stream->current->sized_stream != NULL); + spice_debug("stream %d: upgrade by drawable. box ==>", stream_id); rect_debug(&stream->current->red_drawable->bbox); rcc = RED_CHANNEL_CLIENT(dcc); upgrade_item = spice_new(RedUpgradeItem, 1); -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel