//// 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); } })();