Make web-workers work independently

feature/109
Christoph Oberhofer 9 years ago committed by Christoph Oberhofer
parent 633eabe86c
commit 12a39e28e5

@ -18,7 +18,7 @@ module.exports = {
singleChannel: false // true: only the red color-channel is read singleChannel: false // true: only the red color-channel is read
}, },
locate: true, locate: true,
numOfWorkers: 0, numOfWorkers: 1,
decoder: { decoder: {
readers: [ readers: [
'code_128_reader' 'code_128_reader'

@ -4,6 +4,21 @@ import {
computeGray computeGray
} from '../common/cv_utils'; } 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 = {}; var FrameGrabber = {};
FrameGrabber.create = function(inputStream, canvas) { FrameGrabber.create = function(inputStream, canvas) {
@ -56,6 +71,7 @@ FrameGrabber.create = function(inputStream, canvas) {
frame = inputStream.getFrame(), frame = inputStream.getFrame(),
ctxData; ctxData;
if (frame) { if (frame) {
adjustCanvasSize(_canvas, _canvasSize);
_ctx.drawImage(frame, 0, 0, _canvasSize.x, _canvasSize.y); _ctx.drawImage(frame, 0, 0, _canvasSize.x, _canvasSize.y);
ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data; ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;
if (doHalfSample){ if (doHalfSample){

@ -8,6 +8,9 @@ import Config from './config/config';
import {merge, pick, omitBy, isEmpty, omit} from 'lodash'; import {merge, pick, omitBy, isEmpty, omit} from 'lodash';
// scanner map
// Keep record of already created scanners for reuse?!
function fromImage(config, imageSrc, imageConfig) { function fromImage(config, imageSrc, imageConfig) {
config = config =
merge({ merge({
@ -27,7 +30,7 @@ function fromImage(config, imageSrc, imageConfig) {
{inputStream: imageConfig}); {inputStream: imageConfig});
console.log(config); console.log(config);
const scanner = createScanner(config); const scanner = createScanner();
return { return {
addEventListener: (eventType, cb) => { addEventListener: (eventType, cb) => {
scanner.decodeSingle(config, cb); scanner.decodeSingle(config, cb);
@ -106,22 +109,27 @@ function createApi(configuration = Config) {
config(conf) { config(conf) {
return createApi(merge({}, configuration, conf)); return createApi(merge({}, configuration, conf));
}, },
start: function() { start() {
defaultScanner.start(); defaultScanner.start();
}, },
stop: function() { stop() {
defaultScanner.stop(); defaultScanner.stop();
}, },
pause: function() { pause() {
defaultScanner.pause(); defaultScanner.pause();
}, },
registerResultCollector: function(resultCollector) { registerResultCollector(resultCollector) {
defaultScanner.registerResultCollector(resultCollector); defaultScanner.registerResultCollector(resultCollector);
}, },
ImageWrapper: ImageWrapper, getCanvas() {
ImageDebug: ImageDebug, return defaultScanner.canvas;
ResultCollector: ResultCollector, },
canvas: defaultScanner.canvas ImageWrapper,
ImageDebug,
ResultCollector,
_worker: {
createScanner
}
}; };
} }
export default createApi(); export default createApi();

@ -383,7 +383,8 @@ function createScanner() {
return; return;
} }
} }
var imageWrapper; var imageWrapper,
scanner = Quagga._worker.createScanner();
self.onmessage = function(e) { self.onmessage = function(e) {
if (e.data.cmd === 'init') { if (e.data.cmd === 'init') {
@ -393,13 +394,11 @@ function createScanner() {
x: e.data.size.x, x: e.data.size.x,
y: e.data.size.y y: e.data.size.y
}, new Uint8Array(e.data.imageData)); }, new Uint8Array(e.data.imageData));
Quagga.init(config, ready, imageWrapper); scanner.init(config, ready, imageWrapper);
Quagga.onProcessed(onProcessed); scanner.onProcessed(onProcessed);
} else if (e.data.cmd === 'process') { } else if (e.data.cmd === 'process') {
imageWrapper.data = new Uint8Array(e.data.imageData); imageWrapper.data = new Uint8Array(e.data.imageData);
Quagga.start(); scanner.start();
} else if (e.data.cmd === 'setReaders') {
Quagga.setReaders(e.data.readers);
} }
}; };

Loading…
Cancel
Save