From afeb37be35fdffd9be48e92b63a3e54be39f3e5a Mon Sep 17 00:00:00 2001 From: dgreif Date: Mon, 8 Feb 2016 09:36:08 -0600 Subject: [PATCH] feat: allow multiple barcodes to be decoded --- src/barcode_decoder.js | 15 +++++++++++++-- src/quagga.js | 31 ++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/barcode_decoder.js b/src/barcode_decoder.js index 54d1e1f..c927d9e 100644 --- a/src/barcode_decoder.js +++ b/src/barcode_decoder.js @@ -267,14 +267,25 @@ export default { return decodeFromBoundingBox(box); }, decodeFromBoundingBoxes: function(boxes) { - var i, result; + var i, result, barcodes = []; for ( i = 0; i < boxes.length; i++) { result = decodeFromBoundingBox(boxes[i]); if (result && result.codeResult) { result.box = boxes[i]; - return result; + + if (!config.multiple) { + return result; + } + + barcodes.push(result); } } + + if (config.multiple) { + return { + barcodes + }; + } }, setReaders: function(readers) { config.readers = readers; diff --git a/src/quagga.js b/src/quagga.js index 8c90134..042d738 100644 --- a/src/quagga.js +++ b/src/quagga.js @@ -168,10 +168,16 @@ function transformResult(result) { return; } + if (result.barcodes) { + for (i = 0; i < result.barcodes.length; i++) { + transformResult(result.barcodes[i]); + } + } if (result.line && result.line.length === 2) { moveLine(result.line); } + if (result.boxes && result.boxes.length > 0) { for (i = 0; i < result.boxes.length; i++) { moveBox(result.boxes[i]); @@ -195,14 +201,29 @@ function transformResult(result) { } } +function addResult (result, imageData) { + var i; + + if (!imageData || !result || !_resultCollector) { + return; + } + + if (result.barcodes) { + for (i = 0; i < result.barcodes.length; i++) { + addResult(result.barcodes[i], imageData); + } + return; + } + + if (result.codeResult) { + _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult); + } +} + function publishResult(result, imageData) { if (_onUIThread) { transformResult(result); - if (imageData && result && result.codeResult) { - if (_resultCollector) { - _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult); - } - } + addResult(result, imageData); } Events.publish("processed", result);