From 96d75b3c03e0bf47b19f170b7921695bc5937132 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Wed, 21 Oct 2020 13:14:37 +0200
Subject: [PATCH] Only extract the image data when we need it

---
 packages/qr-code-scanner/src/qr-code-scanner.js | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js
index 28b9d15f..9b91aa2f 100644
--- a/packages/qr-code-scanner/src/qr-code-scanner.js
+++ b/packages/qr-code-scanner/src/qr-code-scanner.js
@@ -259,11 +259,10 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
                 canvasElement.width = video.videoWidth;
                 canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height);
 
-                let maskWidth = 0;
-                let maskHeight = 0;
-                let maskStartX = canvasElement.width;
-                let maskStartY = canvasElement.height;
-                let imageData;
+                let maskWidth = canvasElement.width;
+                let maskHeight = canvasElement.height;
+                let maskStartX = 0;
+                let maskStartY = 0;
 
                 if (that.clipMask) {
                     //draw mask
@@ -299,10 +298,6 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
                     canvas.rect(maskStartX + clip - 10, maskStartY + clip/3*2, 10, clip/3);
 
                     canvas.fill();
-
-                    imageData = canvas.getImageData(maskStartX , maskStartY, maskWidth, maskHeight);
-                } else {
-                    imageData = canvas.getImageData(0 , 0, canvasElement.width, canvasElement.height);
                 }
 
                 let code = null;
@@ -310,6 +305,7 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
                 let shouldAnalyze = Math.abs(lastVideoScanTime - video.currentTime) >= 1/3;
                 if (shouldAnalyze) {
                     lastVideoScanTime = video.currentTime;
+                    let imageData = canvas.getImageData(maskStartX, maskStartY, maskWidth, maskHeight);
                     code = jsQR(imageData.data, imageData.width, imageData.height, {
                         inversionAttempts: "dontInvert",
                     });
-- 
GitLab