void PrepareInternalObjects() { emptyVideoFrame = new Interop.VideoFrame { Width = 0, Height = 0, LineStride = 0, FourCC = _enableAlpha ? Interop.FourCC.UYVA : Interop.FourCC.UYVY, FrameFormat = Interop.FrameFormat.Progressive, Data = IntPtr.Zero, Metadata = IntPtr.Zero }; if (_send == null) { _send = _captureMethod == CaptureMethod.GameView ? SharedInstance.GameViewSend : Interop.Send.Create(_ndiName); } if (_converter == null) { _converter = new FormatConverter(_resources); } if (_onReadback == null) { _onReadback = OnReadback; } }
void ReleaseSenderObjects() { // Total synchronization: This may cause a frame hiccup, but it's // needed to dispose the readback buffers safely. AsyncGPUReadback.WaitAllRequests(); // Game view capture method: Leave the sender instance without // disposing (we're not the owner) but synchronize it. It's needed to // dispose the readback buffers safely too. if (SharedInstance.IsGameViewSend(_send)) { _send.SendVideoAsync(); // Sync by null-send _send = null; } // Private objet disposal _send?.Dispose(); _send = null; _pool?.Dispose(); _pool = null; _converter?.Dispose(); _converter = null; // We don't dispose _onReadback because it's reusable. }
void PrepareSenderObjects() { // Game view capture method: Borrow the shared sender instance. if (_send == null && captureMethod == CaptureMethod.GameView) { _send = SharedInstance.GameViewSend; } // Private object initialization if (_send == null) { _send = Interop.Send.Create(ndiName); } if (_pool == null) { _pool = new ReadbackPool(); } if (_converter == null) { _converter = new FormatConverter(_resources); } if (_onReadback == null) { _onReadback = OnReadback; } }
void ReleaseInternalObjects() { _send?.Dispose(); _send = null; _converter?.Dispose(); _converter = null; }
void ReleaseInternalObjects() { if (_send != null && !SharedInstance.IsGameViewSend(_send)) { _send.Dispose(); } _send = null; _converter?.Dispose(); _converter = null; }
void PrepareInternalObjects() { if (_send == null) { _send = Interop.Send.Create(_ndiName); } if (_converter == null) { _converter = new FormatConverter(_resources); } if (_onReadback == null) { _onReadback = OnReadback; } }
void PrepareInternalObjects() { if (_send == null) { _send = _captureMethod == CaptureMethod.GameView ? SharedInstance.GameViewSend : Interop.Send.Create(_ndiName); } if (_converter == null) { _converter = new FormatConverter(_resources); } if (_onReadback == null) { _onReadback = OnReadback; } }