image = {
if (camera) {
const stream = navigator.mediaDevices
? navigator.mediaDevices.getUserMedia({ video: true })
: new Promise((y, n) => navigator.getUserMedia({ video: true }, y, n));
const video = html`<video autoplay=true playsinline=true></video>`;
video.style.maxWidth = "100%";
yield stream.then(stream => {
if ("srcObject" in video) video.srcObject = stream;
else video.src = URL.createObjectURL(stream);
invalidation.then(() => {
stream.getTracks().forEach(t => t.stop());
URL.revokeObjectURL(video.src);
});
return video;
});
while (true) {
yield video;
}
} else {
yield new Promise((resolve, reject) => {
const image = new Image();
image.onload = () => resolve(image);
image.onerror = reject;
image.crossOrigin = "anonymous";
image.src = url;
});
}
}