Only drop an mjpeg frame if we are not currently processing one.
This commit is contained in:
parent
368fdaf51d
commit
4ea12e87a2
14
display.js
14
display.js
@ -582,7 +582,9 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg)
|
|||||||
media.spiceconn = this;
|
media.spiceconn = this;
|
||||||
v.spice_stream = s;
|
v.spice_stream = s;
|
||||||
}
|
}
|
||||||
else if (m.codec_type != SPICE_VIDEO_CODEC_TYPE_MJPEG)
|
else if (m.codec_type == SPICE_VIDEO_CODEC_TYPE_MJPEG)
|
||||||
|
this.streams[m.id].frames_loading = 0;
|
||||||
|
else
|
||||||
console.log("Unhandled stream codec: "+m.codec_type);
|
console.log("Unhandled stream codec: "+m.codec_type);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -884,6 +886,9 @@ function handle_draw_jpeg_onload()
|
|||||||
var temp_canvas = null;
|
var temp_canvas = null;
|
||||||
var context;
|
var context;
|
||||||
|
|
||||||
|
if (this.o.sc.streams[this.o.id])
|
||||||
|
this.o.sc.streams[this.o.id].frames_loading--;
|
||||||
|
|
||||||
/*------------------------------------------------------------
|
/*------------------------------------------------------------
|
||||||
** FIXME:
|
** FIXME:
|
||||||
** The helper should be extended to be able to handle actual HtmlImageElements
|
** The helper should be extended to be able to handle actual HtmlImageElements
|
||||||
@ -970,7 +975,10 @@ function handle_draw_jpeg_onload()
|
|||||||
|
|
||||||
function process_mjpeg_stream_data(sc, m, time_until_due)
|
function process_mjpeg_stream_data(sc, m, time_until_due)
|
||||||
{
|
{
|
||||||
if (time_until_due < 0)
|
/* If we are currently processing an mjpeg frame when a new one arrives,
|
||||||
|
and the new one is 'late', drop the new frame. This helps the browsers
|
||||||
|
keep up, and provides rate control feedback as well */
|
||||||
|
if (time_until_due < 0 && sc.streams[m.base.id].frames_loading > 0)
|
||||||
{
|
{
|
||||||
if ("report" in sc.streams[m.base.id])
|
if ("report" in sc.streams[m.base.id])
|
||||||
sc.streams[m.base.id].report.num_drops++;
|
sc.streams[m.base.id].report.num_drops++;
|
||||||
@ -1001,6 +1009,8 @@ function process_mjpeg_stream_data(sc, m, time_until_due)
|
|||||||
};
|
};
|
||||||
img.onload = handle_draw_jpeg_onload;
|
img.onload = handle_draw_jpeg_onload;
|
||||||
img.src = tmpstr;
|
img.src = tmpstr;
|
||||||
|
|
||||||
|
sc.streams[m.base.id].frames_loading++;
|
||||||
}
|
}
|
||||||
|
|
||||||
function process_stream_data_report(sc, id, msg_mmtime, time_until_due)
|
function process_stream_data_report(sc, id, msg_mmtime, time_until_due)
|
||||||
|
Loading…
Reference in New Issue
Block a user