/// <summary> /// Constructor for VirtualCameraControl /// </summary> /// <param name="virtualCameraProxy"></param> public VirtualCameraControl(VirtualCameraProxy virtualCameraProxy) { VirtualCameraProxyInst = virtualCameraProxy; // UI initialization this.InitializeComponent(); PopulateVirtualCamInfo(); }
/// <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}"; } }