Use worker without external file

pull/12/head
Christoph Oberhofer 11 years ago
parent 63993dfa8c
commit b7b4711a7e

@ -21,7 +21,7 @@ module.exports = function(grunt) {
all : ['Gruntfile.js', 'src/*.js']
},
requirejs : {
quagga : {
compile : {
options : {
almond : true,
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" : {
"typedefs" : "typedefs",
"glMatrix" : "vendor/glMatrix",

5068
dist/locator.js vendored

File diff suppressed because it is too large Load Diff

56
dist/quagga.js vendored

@ -6173,9 +6173,13 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
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;
_inputImageWrapper.data = null; // do not send the data along
_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 {
init : function(inputImageWrapper, config, cb) {
_config = config;
@ -6859,6 +6907,7 @@ define('config',[],function(){
locator: {
halfSample: true,
useWorker: true,
scriptName: 'quagga.js',
showCanvas: false,
showPatches: false,
showFoundPatches: false,
@ -7296,7 +7345,8 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Reader: {
EANReader : EANReader,
Code128Reader : Code128Reader
}
},
Locator: BarcodeLocator
};
});

File diff suppressed because one or more lines are too long

@ -478,9 +478,13 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
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;
_inputImageWrapper.data = null; // do not send the data along
_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 {
init : function(inputImageWrapper, config, cb) {
_config = config;

@ -26,6 +26,7 @@ define(function(){
locator: {
halfSample: true,
useWorker: true,
scriptName: 'quagga.js',
showCanvas: false,
showPatches: false,
showFoundPatches: false,

@ -224,6 +224,7 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Reader: {
EANReader : EANReader,
Code128Reader : Code128Reader
}
},
Locator: BarcodeLocator
};
});

@ -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]);
});
}
};
Loading…
Cancel
Save