Skip to content
Snippets Groups Projects

qr-scanner: only check max 5 times per second for a QR code

1 file
+ 16
3
Compare changes
  • Side-by-side
  • Inline
@@ -221,6 +221,9 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
@@ -221,6 +221,9 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
requestAnimationFrame(tick);
requestAnimationFrame(tick);
}).catch((e) => { console.log(e); that.askPermission = true;});
}).catch((e) => { console.log(e); that.askPermission = true;});
 
let lastVideoTime = -1;
 
let lastCode = null;
 
function tick() {
function tick() {
if (that.sourceChanged) {
if (that.sourceChanged) {
video.srcObject.getTracks().forEach(function(track) {
video.srcObject.getTracks().forEach(function(track) {
@@ -291,9 +294,19 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
@@ -291,9 +294,19 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) {
imageData = canvas.getImageData(maskStartX , maskStartY, maskWidth, maskHeight);
imageData = canvas.getImageData(maskStartX , maskStartY, maskWidth, maskHeight);
}
}
var code = jsQR(imageData.data, imageData.width, imageData.height, {
let code = null;
inversionAttempts: "dontInvert",
// 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) {
if (code) {
let topLeftCorner = code.location.topLeftCorner;
let topLeftCorner = code.location.topLeftCorner;
let topRightCorner = code.location.topRightCorner;
let topRightCorner = code.location.topRightCorner;
Loading