mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
Cleanup Capturer services.
This commit is contained in:
parent
138b339e07
commit
d04552152e
@ -224,13 +224,13 @@ namespace Remotely.Desktop.Linux.ViewModels
|
||||
});
|
||||
|
||||
serviceCollection.AddSingleton<IScreenCaster, ScreenCasterLinux>();
|
||||
serviceCollection.AddSingleton<IKeyboardMouseInput, X11Input>();
|
||||
serviceCollection.AddSingleton<IKeyboardMouseInput, KeyboardMouseInputLinux>();
|
||||
serviceCollection.AddSingleton<IClipboardService, ClipboardServiceLinux>();
|
||||
serviceCollection.AddSingleton<IAudioCapturer, AudioCapturerLinux>();
|
||||
serviceCollection.AddSingleton<CasterSocket>();
|
||||
serviceCollection.AddSingleton<IdleTimer>();
|
||||
serviceCollection.AddSingleton<Conductor>();
|
||||
serviceCollection.AddTransient<IScreenCapturer, X11Capture>();
|
||||
serviceCollection.AddTransient<IScreenCapturer, ScreenCapturerLinux>();
|
||||
|
||||
|
||||
ServiceContainer.Instance = serviceCollection.BuildServiceProvider();
|
||||
|
||||
@ -60,14 +60,14 @@ namespace Remotely.ScreenCast.Linux
|
||||
});
|
||||
|
||||
serviceCollection.AddSingleton<IScreenCaster, ScreenCasterLinux>();
|
||||
serviceCollection.AddSingleton<IKeyboardMouseInput, X11Input>();
|
||||
serviceCollection.AddSingleton<IKeyboardMouseInput, KeyboardMouseInputLinux>();
|
||||
serviceCollection.AddSingleton<IClipboardService, ClipboardServiceLinux>();
|
||||
serviceCollection.AddSingleton<IAudioCapturer, AudioCapturerLinux>();
|
||||
serviceCollection.AddSingleton<CasterSocket>();
|
||||
serviceCollection.AddSingleton<IdleTimer>();
|
||||
serviceCollection.AddSingleton<Conductor>();
|
||||
serviceCollection.AddSingleton<ChatHostService>();
|
||||
serviceCollection.AddTransient<IScreenCapturer, X11Capture>();
|
||||
serviceCollection.AddTransient<IScreenCapturer, ScreenCapturerLinux>();
|
||||
|
||||
ServiceContainer.Instance = serviceCollection.BuildServiceProvider();
|
||||
}
|
||||
|
||||
@ -10,9 +10,9 @@ using Remotely.ScreenCast.Core.Models;
|
||||
|
||||
namespace Remotely.ScreenCast.Linux.Services
|
||||
{
|
||||
public class X11Input : IKeyboardMouseInput
|
||||
public class KeyboardMouseInputLinux : IKeyboardMouseInput
|
||||
{
|
||||
public X11Input()
|
||||
public KeyboardMouseInputLinux()
|
||||
{
|
||||
Display = LibX11.XOpenDisplay(null);
|
||||
}
|
||||
@ -11,10 +11,10 @@ using System.Text;
|
||||
|
||||
namespace Remotely.ScreenCast.Linux.Services
|
||||
{
|
||||
public class X11Capture : IScreenCapturer
|
||||
public class ScreenCapturerLinux : IScreenCapturer
|
||||
{
|
||||
private readonly Dictionary<string, int> x11Screens = new Dictionary<string, int>();
|
||||
public X11Capture()
|
||||
public ScreenCapturerLinux()
|
||||
{
|
||||
Display = LibX11.XOpenDisplay(null);
|
||||
Init();
|
||||
@ -77,20 +77,14 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
public Bitmap PreviousFrame { get; set; }
|
||||
public string SelectedScreen { get; private set; } = Screen.PrimaryScreen.DeviceName;
|
||||
private Graphics Graphic { get; set; }
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var output in directxScreens.Values)
|
||||
{
|
||||
output.Dispose();
|
||||
}
|
||||
directxScreens.Clear();
|
||||
device?.Dispose();
|
||||
adapter?.Dispose();
|
||||
factory?.Dispose();
|
||||
DisposeDirectX();
|
||||
|
||||
CurrentFrame?.Dispose();
|
||||
PreviousFrame?.Dispose();
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetDisplayNames() => Screen.AllScreens.Select(x => x.DeviceName);
|
||||
|
||||
public void GetNextFrame()
|
||||
@ -146,6 +140,7 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
InitBitBlt();
|
||||
InitDirectX();
|
||||
}
|
||||
|
||||
public void SetSelectedScreen(string displayName)
|
||||
{
|
||||
if (displayName == SelectedScreen)
|
||||
@ -167,6 +162,17 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
ScreenChanged?.Invoke(this, CurrentScreenBounds);
|
||||
}
|
||||
|
||||
private void DisposeDirectX()
|
||||
{
|
||||
foreach (var output in directxScreens.Values)
|
||||
{
|
||||
output.Dispose();
|
||||
}
|
||||
directxScreens.Clear();
|
||||
device?.Dispose();
|
||||
adapter?.Dispose();
|
||||
factory?.Dispose();
|
||||
}
|
||||
private void GetBitBltFrame()
|
||||
{
|
||||
try
|
||||
@ -268,6 +274,7 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
|
||||
private void InitBitBlt()
|
||||
{
|
||||
bitBltScreens.Clear();
|
||||
Graphic = Graphics.FromImage(CurrentFrame);
|
||||
for (var i = 0; i < Screen.AllScreens.Length; i++)
|
||||
{
|
||||
@ -276,7 +283,7 @@ namespace Remotely.ScreenCast.Win.Services
|
||||
}
|
||||
private void InitDirectX()
|
||||
{
|
||||
Dispose();
|
||||
DisposeDirectX();
|
||||
|
||||
factory = new Factory1();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user