Esempio n. 1
0
        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;
                    }
                }
            });
        }
Esempio n. 3
0
        public void Dispose()
        {
            _previewWindow.Dispatcher.Invoke(() =>
            {
                _previewWindow.DisplayImage.Image = null;

                _lastFrame?.Dispose();
                _lastFrame = null;

                if (_d3D9PreviewAssister != null)
                {
                    Invalidate(IntPtr.Zero, 0, 0);

                    _texture.Dispose();

                    _d3D9PreviewAssister.Dispose();

                    _d3D9PreviewAssister = null;
                }
            });
        }
Esempio n. 4
0
        public void Dispose()
        {
            var win = MainWindow.Instance;

            win.Dispatcher.Invoke(() =>
            {
                win.DisplayImage.Image      = null;
                win.WinFormsHost.Visibility = Visibility.Collapsed;

                _lastFrame?.Dispose();
                _lastFrame = null;

                if (_d3D9PreviewAssister != null)
                {
                    Invalidate(IntPtr.Zero, 0, 0);

                    _texture.Dispose();

                    _d3D9PreviewAssister.Dispose();

                    _d3D9PreviewAssister = null;
                }
            });
        }