public void Display(IBitmapFrame Frame) { if (Frame is RepeatFrame) { return; } if (!IsVisible) { Frame.Dispose(); return; } var win = MainWindow.Instance; win.Dispatcher.Invoke(() => { win.DisplayImage.Image = null; _lastFrame?.Dispose(); _lastFrame = Frame; Frame = Frame.Unwrap(); switch (Frame) { case DrawingFrame drawingFrame: try { // TODO: Preview is not shown during Webcam only recordings // This check swallows errors var h = drawingFrame.Bitmap.Height; if (h == 0) { return; } } catch { return; } win.WinFormsHost.Visibility = Visibility.Visible; win.DisplayImage.Image = drawingFrame.Bitmap; break; case Texture2DFrame texture2DFrame: win.WinFormsHost.Visibility = Visibility.Collapsed; if (_d3D9PreviewAssister == null) { _d3D9PreviewAssister = new D3D9PreviewAssister(ServiceProvider.Get <IPlatformServices>()); _texture = _d3D9PreviewAssister.GetSharedTexture(texture2DFrame.PreviewTexture); using var surface = _texture.GetSurfaceLevel(0); _backBufferPtr = surface.NativePointer; } Invalidate(_backBufferPtr, texture2DFrame.Width, texture2DFrame.Height); break; } }); }
public void Display(IBitmapFrame frame) { if (frame is RepeatFrame) { return; } if (!_visible) { frame.Dispose(); return; } _previewWindow.Dispatcher.Invoke(() => { _previewWindow.DisplayImage.Image = null; _lastFrame?.Dispose(); _lastFrame = frame; if (frame is MultiDisposeFrame frameWrapper) { switch (frameWrapper.Frame) { case DrawingFrameBase drawingFrame: _previewWindow.WinFormsHost.Visibility = Visibility.Visible; _previewWindow.DisplayImage.Image = drawingFrame.Bitmap; break; case Texture2DFrame texture2DFrame: _previewWindow.WinFormsHost.Visibility = Visibility.Collapsed; if (_d3D9PreviewAssister == null) { _d3D9PreviewAssister = new D3D9PreviewAssister(ServiceProvider.Get <IPlatformServices>()); _texture = _d3D9PreviewAssister.GetSharedTexture(texture2DFrame.PreviewTexture); using (var surface = _texture.GetSurfaceLevel(0)) { _backBufferPtr = surface.NativePointer; } } Invalidate(_backBufferPtr, texture2DFrame.Width, texture2DFrame.Height); break; } } }); }