private IImageCompression GetImageCompression(ImageCompressionType compressionType) { if (_compressionType == compressionType && _currentImageCompression != null) { return(_currentImageCompression); } _currentImageCompression?.Dispose(); _compressionType = compressionType; switch (compressionType) { case ImageCompressionType.ManagedJpg: return(_currentImageCompression = new JpgCompression(70)); case ImageCompressionType.TurboJpg: return(_currentImageCompression = new TurboJpgImageCompression(false)); case ImageCompressionType.NoCompression: return(_currentImageCompression = new NoCompression()); default: throw new ArgumentOutOfRangeException(nameof(compressionType), compressionType, null); } }
public UnsafeStreamCodec(IImageCompression imageCompression, UnsafeStreamCodecParameters parameters) { _sendFullImage = (parameters & UnsafeStreamCodecParameters.UpdateImageEveryTwoSeconds) == UnsafeStreamCodecParameters.UpdateImageEveryTwoSeconds; _keepCompressor = (parameters & UnsafeStreamCodecParameters.DontDisposeImageCompressor) == UnsafeStreamCodecParameters.DontDisposeImageCompressor; if (_sendFullImage) { _fullImageStopwatch = Stopwatch.StartNew(); } _checkBlock = new Size(50, 1); ImageCompression = imageCompression; ImageQuality = 70; }
private async Task Stop(bool remoteCancelled) { if (!IsStreaming) { return; } if (!remoteCancelled) { await ConnectionInfo.SendCommand(this, (byte)RemoteDesktopCommunication.Stop); } //important, else dead lock because this is UI thread and lock invokdes into UI thread -> block await Task.Run(() => { lock (_updateLock) { IsStreaming = false; } }); FramesPerSecond = 0; _framesReceived = 0; _cursorStreamCodec?.Dispose(); _streamCodec?.Dispose(); _currentImageCompression?.Dispose(); _remoteConnection?.Dispose(); _remoteConnection = null; _currentImageCompression = null; _cursorStreamCodec = null; _streamCodec = null; LogService.Send((string)Application.Current.Resources["StopRemoteDesktop"]); }