Condense the playback queue before adding to the Media Buffer.

This helps Firefox in situations where the incoming traffic
is preventing the audio element from processing data quickly enough.
This commit is contained in:
Jeremy White 2016-12-09 12:46:22 -06:00
parent a770272e7d
commit 564461259f
1 changed files with 23 additions and 1 deletions

View File

@ -289,6 +289,28 @@ function handle_source_closed(e)
p.log_err('Audio source unexpectedly closed.');
}
function condense_playback_queue(queue)
{
if (queue.length == 1)
return queue.shift();
var len = 0;
var i = 0;
for (i = 0; i < queue.length; i++)
len += queue[i].byteLength;
var mb = new ArrayBuffer(len);
var tmp = new Uint8Array(mb);
len = 0;
for (i = 0; i < queue.length; i++)
{
tmp.set(new Uint8Array(queue[i]), len);
len += queue[i].byteLength;
}
queue.length = 0;
return mb;
}
function handle_append_buffer_done(e)
{
var p = this.spiceconn;
@ -298,7 +320,7 @@ function handle_append_buffer_done(e)
if (p.queue.length > 0)
{
var mb = p.queue.shift();
var mb = condense_playback_queue(p.queue);
playback_append_buffer(p, mb);
}
else