diff options
author | Jeremy White <jwhite@codeweavers.com> | 2016-12-09 12:46:22 -0600 |
---|---|---|
committer | Jeremy White <jwhite@codeweavers.com> | 2017-01-10 11:24:29 -0600 |
commit | 564461259f40ffb9f350c97c6bdd27c1a6c056f2 (patch) | |
tree | aa556a27cad64fadd2a063b04e84455d93a7b7ec | |
parent | a770272e7d59ceb8ee25e209a622ac04b68eac9d (diff) |
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.
-rw-r--r-- | playback.js | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/playback.js b/playback.js index 48d4cdd..5af9233 100644 --- a/playback.js +++ b/playback.js @@ -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 |