reset the _active flag to false if starting the camera fails

This commit is contained in:
danimoh committed 2018-01-23 22:15:34 -06:00
1 parent 5f6026512c
commit c3a69b66a7
3 files changed
+15 -11

No files matched your search

+9 -9
View File
@@ -1,14 +1,14 @@
'use strict';export default class QrScanner{constructor(video,onDecode,canvasSize=QrScanner.DEFAULT_CANVAS_SIZE){this.$video=video;this.$canvas=document.createElement("canvas");this._onDecode=onDecode;this._active=false;this.$canvas.width=canvasSize;this.$canvas.height=canvasSize;this._sourceRect={x:0,y:0,width:canvasSize,height:canvasSize};this.$video.addEventListener("canplay",()=>this._updateSourceRect());this.$video.addEventListener("play",()=>{this._updateSourceRect();this._scanFrame()},false);
this._qrWorker=new Worker(QrScanner.WORKER_PATH)}_updateSourceRect(){const smallestDimension=Math.min(this.$video.videoWidth,this.$video.videoHeight);const sourceRectSize=Math.round(2/3*smallestDimension);this._sourceRect.width=this._sourceRect.height=sourceRectSize;this._sourceRect.x=(this.$video.videoWidth-sourceRectSize)/2;this._sourceRect.y=(this.$video.videoHeight-sourceRectSize)/2}_scanFrame(){if(this.$video.paused||this.$video.ended)return false;requestAnimationFrame(()=>{QrScanner.scanImage(this.$video,
this._sourceRect,this._qrWorker,this.$canvas,true).then(this._onDecode,(error)=>{if(error!=="QR code not found.")console.error(error)}).then(()=>this._scanFrame())})}_getCameraStream(facingMode,exact=false){const constraintsToTry=[{width:{min:1024}},{width:{min:768}},{}];if(facingMode){if(exact)facingMode={exact:facingMode};constraintsToTry.forEach((constraint)=>constraint.facingMode=facingMode)}return this._getMatchingCameraStream(constraintsToTry)}_getMatchingCameraStream(constraintsToTry){if(constraintsToTry.length===
0)return Promise.reject("Camera not found.");return navigator.mediaDevices.getUserMedia({video:constraintsToTry.shift()}).catch(()=>this._getMatchingCameraStream(constraintsToTry))}start(){if(this._active)return Promise.resolve();this._active=true;clearTimeout(this._offTimeout);let facingMode="environment";return this._getCameraStream("environment",true).catch(()=>{facingMode="user";return this._getCameraStream()}).then((stream)=>{this.$video.srcObject=stream;this._setVideoMirror(facingMode)})}stop(){if(!this._active)return;
this._active=false;this.$video.pause();this._offTimeout=setTimeout(()=>{this.$video.srcObject.getTracks()[0].stop();this.$video.srcObject=null},3E3)}_setVideoMirror(facingMode){const scaleFactor=facingMode==="user"?-1:1;this.$video.style.transform="scaleX("+scaleFactor+")"}setGrayscaleWeights(red,green,blue){this._qrWorker.postMessage({type:"grayscaleWeights",data:{red,green,blue}})}static scanImage(imageOrFileOrUrl,sourceRect=null,worker=null,canvas=null,fixedCanvasSize=false,alsoTryWithoutSourceRect=
false){const promise=new Promise((resolve,reject)=>{worker=worker||new Worker(QrScanner.WORKER_PATH);let timeout,onMessage,onError;onMessage=(event)=>{if(event.data.type!=="qrResult")return;worker.removeEventListener("message",onMessage);worker.removeEventListener("error",onError);clearTimeout(timeout);if(event.data.data!==null)resolve(event.data.data);else reject("QR code not found.")};onError=()=>{worker.removeEventListener("message",onMessage);worker.removeEventListener("error",onError);clearTimeout(timeout);
reject("Worker error.")};worker.addEventListener("message",onMessage);worker.addEventListener("error",onError);timeout=setTimeout(onError,3E3);QrScanner._loadImage(imageOrFileOrUrl).then((image)=>{const imageData=QrScanner._getImageData(image,sourceRect,canvas,fixedCanvasSize);worker.postMessage({type:"decode",data:imageData},[imageData.data.buffer])}).catch(reject)});if(sourceRect&&alsoTryWithoutSourceRect)return promise.catch(()=>QrScanner.scanImage(imageOrFileOrUrl,null,worker,canvas,fixedCanvasSize));
else return promise}static _getImageData(image,sourceRect=null,canvas=null,fixedCanvasSize=false){canvas=canvas||document.createElement("canvas");const sourceRectX=sourceRect&&sourceRect.x?sourceRect.x:0;const sourceRectY=sourceRect&&sourceRect.y?sourceRect.y:0;const sourceRectWidth=sourceRect&&sourceRect.width?sourceRect.width:image.width||image.videoWidth;const sourceRectHeight=sourceRect&&sourceRect.height?sourceRect.height:image.height||image.videoHeight;if(!fixedCanvasSize&&(canvas.width!==sourceRectWidth||
canvas.height!==sourceRectHeight)){canvas.width=sourceRectWidth;canvas.height=sourceRectHeight}const context=canvas.getContext("2d",{alpha:false});context.imageSmoothingEnabled=false;context.drawImage(image,sourceRectX,sourceRectY,sourceRectWidth,sourceRectHeight,0,0,canvas.width,canvas.height);return context.getImageData(0,0,canvas.width,canvas.height)}static _loadImage(imageOrFileOrUrl){if(imageOrFileOrUrl instanceof HTMLCanvasElement||imageOrFileOrUrl instanceof HTMLVideoElement||window.ImageBitmap&&
imageOrFileOrUrl instanceof window.ImageBitmap||window.OffscreenCanvas&&imageOrFileOrUrl instanceof window.OffscreenCanvas)return Promise.resolve(imageOrFileOrUrl);else if(imageOrFileOrUrl instanceof Image)return QrScanner._awaitImageLoad(imageOrFileOrUrl).then(()=>imageOrFileOrUrl);else if(imageOrFileOrUrl instanceof File||imageOrFileOrUrl instanceof URL||typeof imageOrFileOrUrl==="string"){const image=new Image;if(imageOrFileOrUrl instanceof File)image.src=URL.createObjectURL(imageOrFileOrUrl);
else image.src=imageOrFileOrUrl;return QrScanner._awaitImageLoad(image).then(()=>{if(imageOrFileOrUrl instanceof File)URL.revokeObjectURL(image.src);return image})}else return Promise.reject("Unsupported image type.")}static _awaitImageLoad(image){return new Promise((resolve,reject)=>{if(image.complete&&image.naturalWidth!==0)resolve();else{let onLoad,onError;onLoad=()=>{image.removeEventListener("load",onLoad);image.removeEventListener("error",onError);resolve()};onError=()=>{image.removeEventListener("load",
onLoad);image.removeEventListener("error",onError);reject("Image load error")};image.addEventListener("load",onLoad);image.addEventListener("error",onError)}})}}QrScanner.DEFAULT_CANVAS_SIZE=400;QrScanner.WORKER_PATH="/library/qr-scanner/qr-scanner-worker.min.js";
0)return Promise.reject("Camera not found.");return navigator.mediaDevices.getUserMedia({video:constraintsToTry.shift()}).catch(()=>this._getMatchingCameraStream(constraintsToTry))}start(){if(this._active)return Promise.resolve();this._active=true;clearTimeout(this._offTimeout);let facingMode="environment";return this._getCameraStream("environment",true).catch(()=>{facingMode="user";return this._getCameraStream()}).then((stream)=>{this.$video.srcObject=stream;this._setVideoMirror(facingMode)}).catch((e)=>
{this._active=false;throw e;})}stop(){if(!this._active)return;this._active=false;this.$video.pause();this._offTimeout=setTimeout(()=>{this.$video.srcObject.getTracks()[0].stop();this.$video.srcObject=null},3E3)}_setVideoMirror(facingMode){const scaleFactor=facingMode==="user"?-1:1;this.$video.style.transform="scaleX("+scaleFactor+")"}setGrayscaleWeights(red,green,blue){this._qrWorker.postMessage({type:"grayscaleWeights",data:{red,green,blue}})}static scanImage(imageOrFileOrUrl,sourceRect=null,worker=
null,canvas=null,fixedCanvasSize=false,alsoTryWithoutSourceRect=false){const promise=new Promise((resolve,reject)=>{worker=worker||new Worker(QrScanner.WORKER_PATH);let timeout,onMessage,onError;onMessage=(event)=>{if(event.data.type!=="qrResult")return;worker.removeEventListener("message",onMessage);worker.removeEventListener("error",onError);clearTimeout(timeout);if(event.data.data!==null)resolve(event.data.data);else reject("QR code not found.")};onError=()=>{worker.removeEventListener("message",
onMessage);worker.removeEventListener("error",onError);clearTimeout(timeout);reject("Worker error.")};worker.addEventListener("message",onMessage);worker.addEventListener("error",onError);timeout=setTimeout(onError,3E3);QrScanner._loadImage(imageOrFileOrUrl).then((image)=>{const imageData=QrScanner._getImageData(image,sourceRect,canvas,fixedCanvasSize);worker.postMessage({type:"decode",data:imageData},[imageData.data.buffer])}).catch(reject)});if(sourceRect&&alsoTryWithoutSourceRect)return promise.catch(()=>
QrScanner.scanImage(imageOrFileOrUrl,null,worker,canvas,fixedCanvasSize));else return promise}static _getImageData(image,sourceRect=null,canvas=null,fixedCanvasSize=false){canvas=canvas||document.createElement("canvas");const sourceRectX=sourceRect&&sourceRect.x?sourceRect.x:0;const sourceRectY=sourceRect&&sourceRect.y?sourceRect.y:0;const sourceRectWidth=sourceRect&&sourceRect.width?sourceRect.width:image.width||image.videoWidth;const sourceRectHeight=sourceRect&&sourceRect.height?sourceRect.height:
image.height||image.videoHeight;if(!fixedCanvasSize&&(canvas.width!==sourceRectWidth||canvas.height!==sourceRectHeight)){canvas.width=sourceRectWidth;canvas.height=sourceRectHeight}const context=canvas.getContext("2d",{alpha:false});context.imageSmoothingEnabled=false;context.drawImage(image,sourceRectX,sourceRectY,sourceRectWidth,sourceRectHeight,0,0,canvas.width,canvas.height);return context.getImageData(0,0,canvas.width,canvas.height)}static _loadImage(imageOrFileOrUrl){if(imageOrFileOrUrl instanceof
HTMLCanvasElement||imageOrFileOrUrl instanceof HTMLVideoElement||window.ImageBitmap&&imageOrFileOrUrl instanceof window.ImageBitmap||window.OffscreenCanvas&&imageOrFileOrUrl instanceof window.OffscreenCanvas)return Promise.resolve(imageOrFileOrUrl);else if(imageOrFileOrUrl instanceof Image)return QrScanner._awaitImageLoad(imageOrFileOrUrl).then(()=>imageOrFileOrUrl);else if(imageOrFileOrUrl instanceof File||imageOrFileOrUrl instanceof URL||typeof imageOrFileOrUrl==="string"){const image=new Image;
if(imageOrFileOrUrl instanceof File)image.src=URL.createObjectURL(imageOrFileOrUrl);else image.src=imageOrFileOrUrl;return QrScanner._awaitImageLoad(image).then(()=>{if(imageOrFileOrUrl instanceof File)URL.revokeObjectURL(image.src);return image})}else return Promise.reject("Unsupported image type.")}static _awaitImageLoad(image){return new Promise((resolve,reject)=>{if(image.complete&&image.naturalWidth!==0)resolve();else{let onLoad,onError;onLoad=()=>{image.removeEventListener("load",onLoad);image.removeEventListener("error",
onError);resolve()};onError=()=>{image.removeEventListener("load",onLoad);image.removeEventListener("error",onError);reject("Image load error")};image.addEventListener("load",onLoad);image.addEventListener("error",onError)}})}}QrScanner.DEFAULT_CANVAS_SIZE=400;QrScanner.WORKER_PATH="/library/qr-scanner/qr-scanner-worker.min.js";
//# sourceMappingURL=qr-scanner.min.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sources":["qr-scanner.js"],"names":["QrScanner","video","onDecode","canvasSize","DEFAULT_CANVAS_SIZE","$video","$canvas","document","createElement","_onDecode","_active","width","height","_sourceRect","x","y","addEventListener","_updateSourceRect","_scanFrame","_qrWorker","Worker","WORKER_PATH","smallestDimension","Math","min","videoWidth","videoHeight","sourceRectSize","round","paused","ended","requestAnimationFrame","scanImage","then","error","console","facingMode","exact","constraintsToTry","forEach","constraint","_getMatchingCameraStream","length","Promise","reject","navigator","mediaDevices","getUserMedia","shift","catch","resolve","clearTimeout","_offTimeout","_getCameraStream","stream","srcObject","_setVideoMirror","pause","setTimeout","getTracks","stop","scaleFactor","style","transform","red","green","blue","postMessage","type","data","imageOrFileOrUrl","sourceRect","worker","canvas","fixedCanvasSize","alsoTryWithoutSourceRect","promise","timeout","onMessage","onError","event","removeEventListener","_loadImage","image","imageData","_getImageData","buffer","sourceRectX","sourceRectY","sourceRectWidth","sourceRectHeight","context","getContext","alpha","imageSmoothingEnabled","drawImage","getImageData","HTMLCanvasElement","HTMLVideoElement","window","ImageBitmap","OffscreenCanvas","Image","_awaitImageLoad","File","URL","src","createObjectURL","revokeObjectURL","complete","naturalWidth","onLoad"],"mappings":"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 truncated
{"version":3,"sources":["qr-scanner.js"],"names":["QrScanner","video","onDecode","canvasSize","DEFAULT_CANVAS_SIZE","$video","$canvas","document","createElement","_onDecode","_active","width","height","_sourceRect","x","y","addEventListener","_updateSourceRect","_scanFrame","_qrWorker","Worker","WORKER_PATH","smallestDimension","Math","min","videoWidth","videoHeight","sourceRectSize","round","paused","ended","requestAnimationFrame","scanImage","then","error","console","facingMode","exact","constraintsToTry","forEach","constraint","_getMatchingCameraStream","length","Promise","reject","navigator","mediaDevices","getUserMedia","shift","catch","resolve","clearTimeout","_offTimeout","_getCameraStream","stream","srcObject","_setVideoMirror","e","pause","setTimeout","getTracks","stop","scaleFactor","style","transform","red","green","blue","postMessage","type","data","imageOrFileOrUrl","sourceRect","worker","canvas","fixedCanvasSize","alsoTryWithoutSourceRect","promise","timeout","onMessage","onError","event","removeEventListener","_loadImage","image","imageData","_getImageData","buffer","sourceRectX","sourceRectY","sourceRectWidth","sourceRectHeight","context","getContext","alpha","imageSmoothingEnabled","drawImage","getImageData","HTMLCanvasElement","HTMLVideoElement","window","ImageBitmap","OffscreenCanvas","Image","_awaitImageLoad","File","URL","src","createObjectURL","revokeObjectURL","complete","naturalWidth","onLoad"],"mappings":"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 truncated
+5 -1
View File
@@ -79,11 +79,15 @@ export default class QrScanner {
.catch(() => {
// we (probably) don't have an environment camera
facingMode = 'user';
return this._getCameraStream();
return this._getCameraStream(); // throws if we can't access the camera
})
.then(stream => {
this.$video.srcObject = stream;
this._setVideoMirror(facingMode);
})
.catch(e => {
this._active = false;
throw e;
});
}