mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.4 KiB
161 lines
5.4 KiB
//// 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); |
|
} |
|
})();
|
|
|