Skip to content

Commit 1fc7d67

Browse files
committed
browser should flip media horizontally; handle racing condition when starting camera
1 parent 37d5620 commit 1fc7d67

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/browser/src/createQRScannerInternal.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,12 @@ module.exports = function () {
314314
function (mediaStream) {
315315
activeMediaStream = mediaStream;
316316
var video = getVideoPreview();
317+
if (!video) {
318+
// video not ready yet
319+
const code = currentCameraIndex ? 4 : 3
320+
error(code) // FRONT_CAMERA_UNAVAILABLE : BACK_CAMERA_UNAVAILABLE
321+
return
322+
}
317323
// Older browsers may not have srcObject
318324
if ("srcObject" in video) {
319325
video.srcObject = mediaStream;
@@ -337,6 +343,9 @@ module.exports = function () {
337343
tempCanvas.height = camera.height;
338344
tempCanvas.width = camera.width;
339345
var tempCanvasContext = tempCanvas.getContext("2d");
346+
// Mirror horizontally: https://stackoverflow.com/a/3129152/1237919
347+
tempCanvasContext.translate(tempCanvas.width, 0)
348+
tempCanvasContext.scale(-1, 1)
340349
tempCanvasContext.drawImage(
341350
videoElement,
342351
0,
@@ -397,23 +406,22 @@ module.exports = function () {
397406
"display:block;position:fixed;top:50%;left:50%;" +
398407
"width:auto;height:auto;min-width:100%;min-height:100%;z-index:" +
399408
ZINDEXES.preview +
400-
";-moz-transform: translateX(-50%) translateY(-50%);-webkit-transform: " +
401-
"translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);" +
409+
";transform:translateX(-50%) translateY(-50%) rotateY(180deg);" +
402410
"background-size:cover;background-position:50% 50%;background-color:#FFF;"
403411
);
404412
videoPreview.addEventListener("loadeddata", function () {
405413
bringPreviewToFront();
406414
});
407415

416+
// Still image is displayed when preview is paused.
408417
var stillImg = document.createElement("div");
409418
stillImg.setAttribute("id", ELEMENTS.still);
410419
stillImg.setAttribute(
411420
"style",
412421
"display:block;position:fixed;top:50%;left:50%;visibility: hidden;" +
413422
"width:auto;height:auto;min-width:100%;min-height:100%;z-index:" +
414423
ZINDEXES.still +
415-
";-moz-transform: translateX(-50%) translateY(-50%);-webkit-transform: " +
416-
"translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);" +
424+
";transform:translateX(-50%) translateY(-50%);" +
417425
"background-size:cover;background-position:50% 50%;background-color:#FFF;"
418426
);
419427

0 commit comments

Comments
 (0)