diff --git a/src/config/config.dev.js b/src/config/config.dev.js index ea01319..8a44bcd 100644 --- a/src/config/config.dev.js +++ b/src/config/config.dev.js @@ -18,7 +18,7 @@ module.exports = { singleChannel: false // true: only the red color-channel is read }, locate: true, - numOfWorkers: 0, + numOfWorkers: 1, decoder: { readers: [ 'code_128_reader' diff --git a/src/input/frame_grabber.js b/src/input/frame_grabber.js index 503f52b..92a1cad 100644 --- a/src/input/frame_grabber.js +++ b/src/input/frame_grabber.js @@ -4,6 +4,21 @@ import { computeGray } from '../common/cv_utils'; +function adjustCanvasSize(canvas, targetSize) { + if (canvas.width !== targetSize.x) { + if (ENV.development) { + console.log("WARNING: canvas-size needs to be adjusted"); + } + canvas.width = targetSize.x; + } + if (canvas.height !== targetSize.y) { + if (ENV.development) { + console.log("WARNING: canvas-size needs to be adjusted"); + } + canvas.height = targetSize.y; + } +} + var FrameGrabber = {}; FrameGrabber.create = function(inputStream, canvas) { @@ -56,6 +71,7 @@ FrameGrabber.create = function(inputStream, canvas) { frame = inputStream.getFrame(), ctxData; if (frame) { + adjustCanvasSize(_canvas, _canvasSize); _ctx.drawImage(frame, 0, 0, _canvasSize.x, _canvasSize.y); ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data; if (doHalfSample){ diff --git a/src/quagga.js b/src/quagga.js index b79db56..b565f27 100644 --- a/src/quagga.js +++ b/src/quagga.js @@ -8,6 +8,9 @@ import Config from './config/config'; import {merge, pick, omitBy, isEmpty, omit} from 'lodash'; +// scanner map +// Keep record of already created scanners for reuse?! + function fromImage(config, imageSrc, imageConfig) { config = merge({ @@ -27,7 +30,7 @@ function fromImage(config, imageSrc, imageConfig) { {inputStream: imageConfig}); console.log(config); - const scanner = createScanner(config); + const scanner = createScanner(); return { addEventListener: (eventType, cb) => { scanner.decodeSingle(config, cb); @@ -106,22 +109,27 @@ function createApi(configuration = Config) { config(conf) { return createApi(merge({}, configuration, conf)); }, - start: function() { + start() { defaultScanner.start(); }, - stop: function() { + stop() { defaultScanner.stop(); }, - pause: function() { + pause() { defaultScanner.pause(); }, - registerResultCollector: function(resultCollector) { + registerResultCollector(resultCollector) { defaultScanner.registerResultCollector(resultCollector); }, - ImageWrapper: ImageWrapper, - ImageDebug: ImageDebug, - ResultCollector: ResultCollector, - canvas: defaultScanner.canvas + getCanvas() { + return defaultScanner.canvas; + }, + ImageWrapper, + ImageDebug, + ResultCollector, + _worker: { + createScanner + } }; } export default createApi(); diff --git a/src/scanner.js b/src/scanner.js index b19c364..d7854ca 100644 --- a/src/scanner.js +++ b/src/scanner.js @@ -383,7 +383,8 @@ function createScanner() { return; } } - var imageWrapper; + var imageWrapper, + scanner = Quagga._worker.createScanner(); self.onmessage = function(e) { if (e.data.cmd === 'init') { @@ -393,13 +394,11 @@ function createScanner() { x: e.data.size.x, y: e.data.size.y }, new Uint8Array(e.data.imageData)); - Quagga.init(config, ready, imageWrapper); - Quagga.onProcessed(onProcessed); + scanner.init(config, ready, imageWrapper); + scanner.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); + scanner.start(); } };