diff --git a/packages/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js index 820cf39aec7bae9bfd3ad70aeef3c72918edca9c..796f237151e72f525f9d3dd0330215c947962cab 100644 --- a/packages/qr-code-scanner/src/qr-code-scanner.js +++ b/packages/qr-code-scanner/src/qr-code-scanner.js @@ -221,6 +221,9 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) { requestAnimationFrame(tick); }).catch((e) => { console.log(e); that.askPermission = true;}); + let lastVideoTime = -1; + let lastCode = null; + function tick() { if (that.sourceChanged) { video.srcObject.getTracks().forEach(function(track) { @@ -291,9 +294,19 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) { imageData = canvas.getImageData(maskStartX , maskStartY, maskWidth, maskHeight); } - var code = jsQR(imageData.data, imageData.width, imageData.height, { - inversionAttempts: "dontInvert", - }); + let code = null; + // We only check for QR codes 5 times a second to improve performance + let shouldAnalyze = Math.abs(lastVideoTime - video.currentTime) >= 1/5; + if (shouldAnalyze) { + lastVideoTime = video.currentTime; + code = jsQR(imageData.data, imageData.width, imageData.height, { + inversionAttempts: "dontInvert", + }); + lastCode = code; + } else { + code = lastCode; + } + if (code) { let topLeftCorner = code.location.topLeftCorner; let topRightCorner = code.location.topRightCorner;