示例#1
0
        /// <summary>
        /// Constructor for VirtualCameraControl
        /// </summary>
        /// <param name="virtualCameraProxy"></param>
        public VirtualCameraControl(VirtualCameraProxy virtualCameraProxy)
        {
            VirtualCameraProxyInst = virtualCameraProxy;

            // UI initialization
            this.InitializeComponent();
            PopulateVirtualCamInfo();
        }
示例#2
0
        /// <summary>
        /// Register and start a new virtual camera
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void UIAddNewVirtualCameraDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            UIResultText.Text = ""; // clear error text
            var friendlyText = UIFriendlyName.Text;
            var isCameraWrappingChecked = UICameraWrappingCheckBox.IsChecked == true;
            var selectedIndex = UICameraToWrapList.SelectedIndex;
            VirtualCameraLifetime selectedLifetime = (VirtualCameraLifetime)(UILifetimeSelector.SelectedIndex);
            VirtualCameraAccess selectedAccess = (VirtualCameraAccess)(UIAccessSelector.SelectedIndex);
            try
            {
                if (m_virtualCameraControls.Find(x => x.VirtualCameraProxyInst.FriendlyName == UIFriendlyName.Text) != null)
                {
                    throw new Exception("A virtual camera with this name already exists");
                }

                // Important: We start a task here so as to not block the UI thread if the app request permission to access the Camera
                // (permission prompt runs on the UI thread)
                var fireAndForgetBackgroundTask = Task.Run( () => // fire-and-forget
                {
                    try
                    {
                        VirtualCameraProxy vcam = null;

                        if (isCameraWrappingChecked == true && selectedIndex >= 0)
                        {
                            var wrappedCamera = m_cameraDeviceList[selectedIndex];
                            vcam = VirtualCameraRegistrar.RegisterNewVirtualCamera(
                               VirtualCameraKind.CameraWrapper,
                               selectedLifetime,
                               selectedAccess,
                               friendlyText,
                               wrappedCamera.Id);
                        }
                        else
                        {
                            vcam = VirtualCameraRegistrar.RegisterNewVirtualCamera(
                               VirtualCameraKind.Synthetic,
                               selectedLifetime,
                               selectedAccess,
                               friendlyText,
                               "");
                        }
                        vcam.EnableVirtualCamera();

                        var fireAndForgetUITask = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
                        {
                            var vCamControl = new VirtualCameraControl(vcam);
                            vCamControl.VirtualCameraControlFailed += VirtualCameraControlFailed;
                            vCamControl.VirtualCameraControlRemoved += VirtualCameraControlRemoved;

                            m_virtualCameraControls.Add(vCamControl);

                            // force user to re-check that box triggering an update to available cameras
                            UICameraWrappingCheckBox.IsChecked = false;

                            try
                            {
                                await vCamControl.InitializeAsync();
                            }
                            catch (Exception ex)
                            {
                                UIResultText.Text = $"{ex.HResult} : {ex.Message}";
                            }

                            // refresh list view
                            UIVirtualCameraList.ItemsSource = null;
                            UIVirtualCameraList.ItemsSource = m_virtualCameraControls;
                        });
                    }
                    catch (Exception ex)
                    {
                        var fireAndForgetUITask = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                        {
                            UIResultText.Text = $"{ex.HResult} : {ex.Message}";
                        });
                    }
                });
            }
            catch (Exception ex)
            {
                UIResultText.Text = $"{ex.HResult} : {ex.Message}";
            }
        }