Path: blob/master/samples/winrt/JavaScript/js/AdvancedCapture.js
16339 views
//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF1//// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO2//// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A3//// PARTICULAR PURPOSE.4////5//// Copyright (c) Microsoft Corporation. All rights reserved67(function () {8"use strict";910var cameraList = null;11var mediaCaptureMgr = null;12var captureInitSettings = null;1314var page = WinJS.UI.Pages.define("/html/AdvancedCapture.html", {1516ready: function (element, options) {17scenarioInitialize();18},1920unload: function (element, options) {21// release resources22releaseMediaCapture();23}24});2526function scenarioInitialize() {27// Initialize the UI elements28id("btnStartDevice").disabled = false;29id("btnStartDevice").addEventListener("click", startDevice, false);30id("btnStartPreview").disabled = true;31id("videoEffect").disabled = true;32id("btnStartPreview").addEventListener("click", startPreview, false);33id("cameraSelect").addEventListener("change", onDeviceChange, false);3435id("videoEffect").addEventListener('change', addEffectToImageStream, false);3637enumerateCameras();38}3940function initCameraSettings() {41captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();42captureInitSettings.streamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.video4344// If the user chose another capture device, use it by default45var selectedIndex = id("cameraSelect").selectedIndex;46var deviceInfo = cameraList[selectedIndex];47captureInitSettings.videoDeviceId = deviceInfo.id;48}4950// this function takes care of releasing the resources associated with media capturing51function releaseMediaCapture() {52if (mediaCaptureMgr) {53mediaCaptureMgr.close();54mediaCaptureMgr = null;55}56}5758//Initialize media capture with the current settings59function startDevice() {60displayStatus("Starting device");61releaseMediaCapture();62initCameraSettings();6364mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();65mediaCaptureMgr.initializeAsync(captureInitSettings).done(function (result) {66// Update the UI67id("btnStartPreview").disabled = false;68id("btnStartDevice").disabled = true;69displayStatus("Device started");70});71}7273function startPreview() {74displayStatus("Starting preview");75id("btnStartPreview").disabled = true;76id("videoEffect").disabled = false;77var video = id("previewVideo");78video.src = URL.createObjectURL(mediaCaptureMgr, { oneTimeOnly: true });79video.play();80displayStatus("Preview started");81}8283function addEffectToImageStream() {84var effectId = id("videoEffect").selectedIndex;85var props = new Windows.Foundation.Collections.PropertySet();86props.insert("{698649BE-8EAE-4551-A4CB-3EC98FBD3D86}", effectId);8788mediaCaptureMgr.clearEffectsAsync(Windows.Media.Capture.MediaStreamType.videoPreview).then(function () {89return mediaCaptureMgr.addEffectAsync(Windows.Media.Capture.MediaStreamType.videoPreview, 'OcvTransform.OcvImageManipulations', props);90}).then(function () {91displayStatus('Effect has been successfully added');92}, errorHandler);93}9495function enumerateCameras() {96displayStatus("Enumerating capture devices");97var cameraSelect = id("cameraSelect");98cameraList = null;99cameraList = new Array();100101// Clear the previous list of capture devices if any102while (cameraSelect.length > 0) {103cameraSelect.remove(0);104}105106// Enumerate cameras and add them to the list107var deviceInfo = Windows.Devices.Enumeration.DeviceInformation;108deviceInfo.findAllAsync(Windows.Devices.Enumeration.DeviceClass.videoCapture).done(function (cameras) {109if (cameras.length === 0) {110cameraSelect.disabled = true;111displayError("No camera was found");112id("btnStartDevice").disabled = true;113cameraSelect.add(new Option("No cameras available"));114} else {115cameras.forEach(function (camera) {116cameraList.push(camera);117cameraSelect.add(new Option(camera.name));118});119}120}, errorHandler);121}122123function onDeviceChange() {124releaseMediaCapture();125id("btnStartDevice").disabled = false;126id("btnStartPreview").disabled = true;127id("videoEffect").disabled = true;128displayStatus("");129}130131function suspendingHandler(suspendArg) {132displayStatus("Suspended");133releaseMediaCapture();134}135136function resumingHandler(resumeArg) {137displayStatus("Resumed");138scenarioInitialize();139}140141function errorHandler(err) {142displayError(err.message);143}144145function failedEventHandler(e) {146displayError("Fatal error", e.message);147}148149function displayStatus(statusText) {150SdkSample.displayStatus(statusText);151}152153function displayError(error) {154SdkSample.displayError(error);155}156157function id(elementId) {158return document.getElementById(elementId);159}160})();161162163