diff --git a/src/quagga.js b/src/quagga.js index dd8af12..495e5f4 100644 --- a/src/quagga.js +++ b/src/quagga.js @@ -296,16 +296,29 @@ function update() { } } -function start() { +function startContinuousUpdate() { + var next = null, + delay = 1000 / (_config.frequency || 60); + _stopped = false; - ( function frame() { + (function frame(timestamp) { + next = next || timestamp; if (!_stopped) { - update(); - if (_onUIThread && _config.inputStream.type === "LiveStream") { - window.requestAnimFrame(frame); + if (timestamp >= next) { + next += delay; + update(); } + window.requestAnimFrame(frame); } - }()); + }(performance.now())); +} + +function start() { + if (_onUIThread && _config.inputStream.type === "LiveStream") { + startContinuousUpdate(); + } else { + update(); + } } function initWorker(cb) { @@ -360,23 +373,21 @@ function workerInterface(factory) { var imageWrapper; self.onmessage = function(e) { - setTimeout(function() { - if (e.data.cmd === 'init') { - var config = e.data.config; - config.numOfWorkers = 0; - imageWrapper = new Quagga.ImageWrapper({ - x: e.data.size.x, - y: e.data.size.y - }, new Uint8Array(e.data.imageData)); - Quagga.init(config, ready, imageWrapper); - Quagga.onProcessed(onProcessed); - } else if (e.data.cmd === 'process') { - imageWrapper.data = new Uint8Array(e.data.imageData); - Quagga.start(); - } else if (e.data.cmd === 'setReaders') { - Quagga.setReaders(e.data.readers); - } - }, Quagga.getConfig().scanDelay || 0); + if (e.data.cmd === 'init') { + var config = e.data.config; + config.numOfWorkers = 0; + imageWrapper = new Quagga.ImageWrapper({ + x: e.data.size.x, + y: e.data.size.y + }, new Uint8Array(e.data.imageData)); + Quagga.init(config, ready, imageWrapper); + Quagga.onProcessed(onProcessed); + } else if (e.data.cmd === 'process') { + imageWrapper.data = new Uint8Array(e.data.imageData); + Quagga.start(); + } else if (e.data.cmd === 'setReaders') { + Quagga.setReaders(e.data.readers); + } }; function onProcessed(result) { @@ -518,8 +529,5 @@ export default { }, ImageWrapper: ImageWrapper, ImageDebug: ImageDebug, - ResultCollector: ResultCollector, - getConfig: function getConfig() { - return _config; - } + ResultCollector: ResultCollector };