streaming: Stop streaming if the client reports a streaming error

By removing the stream's video encoder we force the stream to send
future frames using the fallback code, that is as regular screen
updates.
However note that we keep the stream object: we have to. Otherwise
future frames would trigger the creation of a new stream object with a
new video encoder which would again try to stream the video and fail
again and again.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
Reviewed-by: Victor Toso <victortoso@redhat.com>
This commit is contained in:
Francois Gouget 2016-11-22 18:01:48 +01:00 committed by Victor Toso
parent a605a8d4a1
commit f861d2922d

View File

@ -1059,6 +1059,15 @@ static int dcc_handle_stream_report(DisplayChannelClient *dcc,
return TRUE;
}
if (report->num_frames == 0 && report->num_drops == UINT_MAX) {
spice_warning("stream_report: the client does not support stream %u",
report->stream_id);
/* Stop streaming the video so the client can see it */
agent->video_encoder->destroy(agent->video_encoder);
agent->video_encoder = NULL;
return TRUE;
}
if (report->unique_id != agent->report_id) {
spice_warning("stream_report: unique id mismatch: local (%u) != msg (%u) "
"The old stream was probably replaced by a new one",