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