Use worker without external file

This commit is contained in:
Christoph Oberhofer
2015-01-18 13:55:18 +01:00
parent 63993dfa8c
commit b7b4711a7e
8 changed files with 107 additions and 5136 deletions
+1 -36
View File
@@ -21,7 +21,7 @@ module.exports = function(grunt) {
all : ['Gruntfile.js', 'src/*.js'] all : ['Gruntfile.js', 'src/*.js']
}, },
requirejs : { requirejs : {
quagga : { compile : {
options : { options : {
almond : true, almond : true,
wrap : { wrap : {
@@ -51,41 +51,6 @@ module.exports = function(grunt) {
} }
}, },
"paths" : {
"typedefs" : "typedefs",
"glMatrix" : "vendor/glMatrix",
"glMatrixAddon" : "glMatrixAddon"
}
}
},
locator : {
options : {
almond : true,
wrap : {
startFile : 'build/locator_start.frag',
endFile : 'build/locator_end.frag'
},
"baseUrl" : "src",
"name" : "barcode_locator",
"out" : "dist/locator.js",
"include" : ['barcode_locator'],
"optimize" : "none",
"findNestedDependencies" : true,
"skipSemiColonInsertion" : true,
"shim" : {
"typedefs" : {
"deps" : [],
"exports" : "typedefs"
},
"glMatrix" : {
"deps" : ["typedefs"],
"exports" : "glMatrix"
},
"glMatrixAddon" : {
"deps" : ["glMatrix"],
"exports" : "glMatrixAddon"
}
},
"paths" : { "paths" : {
"typedefs" : "typedefs", "typedefs" : "typedefs",
"glMatrix" : "vendor/glMatrix", "glMatrix" : "vendor/glMatrix",
-5068
View File
File diff suppressed because it is too large Load Diff
+53 -3
View File
@@ -6173,9 +6173,13 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
} }
function initWorker(cb) { function initWorker(cb) {
var tmpData; var tmpData,
blobURL;
blobURL = generateWorkerBlob();
_worker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);
_worker = new Worker('../src/worker_locator.js');
tmpData = _inputImageWrapper.data; tmpData = _inputImageWrapper.data;
_inputImageWrapper.data = null; // do not send the data along _inputImageWrapper.data = null; // do not send the data along
_worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config}); _worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config});
@@ -6191,6 +6195,50 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}; };
} }
function generateWorkerBlob() {
var blob,
quaggaAbsoluteUrl,
scripts = document.getElementsByTagName('script'),
regex = new RegExp('\/' + _config.scriptName + '$');
quaggaAbsoluteUrl = Array.prototype.slice.apply(scripts).filter(function(script) {
return script.src && script.src.match(regex);
}).map(function(script) {
return script.src;
})[0];
/* jshint ignore:start */
blob = new Blob(['(' +
(function(scriptUrl){
importScripts(scriptUrl);
var inputImageWrapper,
config,
Locator = Quagga.Locator;
self.onmessage = function(e) {
if (e.data.cmd === 'init') {
inputImageWrapper = e.data.inputImageWrapper;
config = e.data.config;
config.useWorker = false;
Locator.init(inputImageWrapper, config, function() {
self.postMessage({'event': 'initialized'});
});
} else if (e.data.cmd === 'locate') {
inputImageWrapper.data = new Uint8Array(e.data.buffer);
Locator.locate(function(result) {
self.postMessage({'event': 'located', result: result, buffer : inputImageWrapper.data}, [inputImageWrapper.data.buffer]);
});
}
};
}).toString() + ')("' + quaggaAbsoluteUrl + '");'
], {type : 'text/javascript'});
/* jshint ignore:end */
return window.URL.createObjectURL(blob);
}
return { return {
init : function(inputImageWrapper, config, cb) { init : function(inputImageWrapper, config, cb) {
_config = config; _config = config;
@@ -6859,6 +6907,7 @@ define('config',[],function(){
locator: { locator: {
halfSample: true, halfSample: true,
useWorker: true, useWorker: true,
scriptName: 'quagga.js',
showCanvas: false, showCanvas: false,
showPatches: false, showPatches: false,
showFoundPatches: false, showFoundPatches: false,
@@ -7296,7 +7345,8 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Reader: { Reader: {
EANReader : EANReader, EANReader : EANReader,
Code128Reader : Code128Reader Code128Reader : Code128Reader
} },
Locator: BarcodeLocator
}; };
}); });
-3
View File
File diff suppressed because one or more lines are too long
+50 -2
View File
@@ -478,9 +478,13 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
} }
function initWorker(cb) { function initWorker(cb) {
var tmpData; var tmpData,
blobURL;
blobURL = generateWorkerBlob();
_worker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);
_worker = new Worker('../src/worker_locator.js');
tmpData = _inputImageWrapper.data; tmpData = _inputImageWrapper.data;
_inputImageWrapper.data = null; // do not send the data along _inputImageWrapper.data = null; // do not send the data along
_worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config}); _worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config});
@@ -496,6 +500,50 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}; };
} }
function generateWorkerBlob() {
var blob,
quaggaAbsoluteUrl,
scripts = document.getElementsByTagName('script'),
regex = new RegExp('\/' + _config.scriptName + '$');
quaggaAbsoluteUrl = Array.prototype.slice.apply(scripts).filter(function(script) {
return script.src && script.src.match(regex);
}).map(function(script) {
return script.src;
})[0];
/* jshint ignore:start */
blob = new Blob(['(' +
(function(scriptUrl){
importScripts(scriptUrl);
var inputImageWrapper,
config,
Locator = Quagga.Locator;
self.onmessage = function(e) {
if (e.data.cmd === 'init') {
inputImageWrapper = e.data.inputImageWrapper;
config = e.data.config;
config.useWorker = false;
Locator.init(inputImageWrapper, config, function() {
self.postMessage({'event': 'initialized'});
});
} else if (e.data.cmd === 'locate') {
inputImageWrapper.data = new Uint8Array(e.data.buffer);
Locator.locate(function(result) {
self.postMessage({'event': 'located', result: result, buffer : inputImageWrapper.data}, [inputImageWrapper.data.buffer]);
});
}
};
}).toString() + ')("' + quaggaAbsoluteUrl + '");'
], {type : 'text/javascript'});
/* jshint ignore:end */
return window.URL.createObjectURL(blob);
}
return { return {
init : function(inputImageWrapper, config, cb) { init : function(inputImageWrapper, config, cb) {
_config = config; _config = config;
+1
View File
@@ -26,6 +26,7 @@ define(function(){
locator: { locator: {
halfSample: true, halfSample: true,
useWorker: true, useWorker: true,
scriptName: 'quagga.js',
showCanvas: false, showCanvas: false,
showPatches: false, showPatches: false,
showFoundPatches: false, showFoundPatches: false,
+2 -1
View File
@@ -224,6 +224,7 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Reader: { Reader: {
EANReader : EANReader, EANReader : EANReader,
Code128Reader : Code128Reader Code128Reader : Code128Reader
} },
Locator: BarcodeLocator
}; };
}); });
-23
View File
@@ -1,23 +0,0 @@
/* jshint undef: true, unused: true, browser:true, devel: true */
/* global importScripts, self, Locator */
importScripts('../dist/locator.js');
var inputImageWrapper,
config;
self.onmessage = function(e) {
if (e.data.cmd === 'init') {
inputImageWrapper = e.data.inputImageWrapper;
config = e.data.config;
config.useWorker = false;
Locator.init(inputImageWrapper, config, function() {
self.postMessage({'event': 'initialized'});
});
} else if (e.data.cmd === 'locate') {
inputImageWrapper.data = new Uint8Array(e.data.buffer);
Locator.locate(function(result) {
self.postMessage({'event': 'located', result: result, buffer : inputImageWrapper.data}, [inputImageWrapper.data.buffer]);
});
}
};