cameracv/libs/opencv/samples/winrt/JavaScript/js/AdvancedCapture.js

162 lines
5.4 KiB
JavaScript
Raw Permalink Normal View History

2023-05-18 21:39:43 +03:00
//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
//// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
//// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//// PARTICULAR PURPOSE.
////
//// Copyright (c) Microsoft Corporation. All rights reserved
(function () {
"use strict";
var cameraList = null;
var mediaCaptureMgr = null;
var captureInitSettings = null;
var page = WinJS.UI.Pages.define("/html/AdvancedCapture.html", {
ready: function (element, options) {
scenarioInitialize();
},
unload: function (element, options) {
// release resources
releaseMediaCapture();
}
});
function scenarioInitialize() {
// Initialize the UI elements
id("btnStartDevice").disabled = false;
id("btnStartDevice").addEventListener("click", startDevice, false);
id("btnStartPreview").disabled = true;
id("videoEffect").disabled = true;
id("btnStartPreview").addEventListener("click", startPreview, false);
id("cameraSelect").addEventListener("change", onDeviceChange, false);
id("videoEffect").addEventListener('change', addEffectToImageStream, false);
enumerateCameras();
}
function initCameraSettings() {
captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
captureInitSettings.streamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.video
// If the user chose another capture device, use it by default
var selectedIndex = id("cameraSelect").selectedIndex;
var deviceInfo = cameraList[selectedIndex];
captureInitSettings.videoDeviceId = deviceInfo.id;
}
// this function takes care of releasing the resources associated with media capturing
function releaseMediaCapture() {
if (mediaCaptureMgr) {
mediaCaptureMgr.close();
mediaCaptureMgr = null;
}
}
//Initialize media capture with the current settings
function startDevice() {
displayStatus("Starting device");
releaseMediaCapture();
initCameraSettings();
mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();
mediaCaptureMgr.initializeAsync(captureInitSettings).done(function (result) {
// Update the UI
id("btnStartPreview").disabled = false;
id("btnStartDevice").disabled = true;
displayStatus("Device started");
});
}
function startPreview() {
displayStatus("Starting preview");
id("btnStartPreview").disabled = true;
id("videoEffect").disabled = false;
var video = id("previewVideo");
video.src = URL.createObjectURL(mediaCaptureMgr, { oneTimeOnly: true });
video.play();
displayStatus("Preview started");
}
function addEffectToImageStream() {
var effectId = id("videoEffect").selectedIndex;
var props = new Windows.Foundation.Collections.PropertySet();
props.insert("{698649BE-8EAE-4551-A4CB-3EC98FBD3D86}", effectId);
mediaCaptureMgr.clearEffectsAsync(Windows.Media.Capture.MediaStreamType.videoPreview).then(function () {
return mediaCaptureMgr.addEffectAsync(Windows.Media.Capture.MediaStreamType.videoPreview, 'OcvTransform.OcvImageManipulations', props);
}).then(function () {
displayStatus('Effect has been successfully added');
}, errorHandler);
}
function enumerateCameras() {
displayStatus("Enumerating capture devices");
var cameraSelect = id("cameraSelect");
cameraList = null;
cameraList = new Array();
// Clear the previous list of capture devices if any
while (cameraSelect.length > 0) {
cameraSelect.remove(0);
}
// Enumerate cameras and add them to the list
var deviceInfo = Windows.Devices.Enumeration.DeviceInformation;
deviceInfo.findAllAsync(Windows.Devices.Enumeration.DeviceClass.videoCapture).done(function (cameras) {
if (cameras.length === 0) {
cameraSelect.disabled = true;
displayError("No camera was found");
id("btnStartDevice").disabled = true;
cameraSelect.add(new Option("No cameras available"));
} else {
cameras.forEach(function (camera) {
cameraList.push(camera);
cameraSelect.add(new Option(camera.name));
});
}
}, errorHandler);
}
function onDeviceChange() {
releaseMediaCapture();
id("btnStartDevice").disabled = false;
id("btnStartPreview").disabled = true;
id("videoEffect").disabled = true;
displayStatus("");
}
function suspendingHandler(suspendArg) {
displayStatus("Suspended");
releaseMediaCapture();
}
function resumingHandler(resumeArg) {
displayStatus("Resumed");
scenarioInitialize();
}
function errorHandler(err) {
displayError(err.message);
}
function failedEventHandler(e) {
displayError("Fatal error", e.message);
}
function displayStatus(statusText) {
SdkSample.displayStatus(statusText);
}
function displayError(error) {
SdkSample.displayError(error);
}
function id(elementId) {
return document.getElementById(elementId);
}
})();