Files
TheXamlGuy/Media/Capture/RemoteMediaCapture.cs
T
2022-11-01 15:26:08 +00:00

61 lines
1.9 KiB
C#

namespace TheXamlGuy.Media.Capture;
public class RemoteMediaCapture : IRemoteMediaCapture
{
private readonly Dictionary<IRemoteMediaFrameSource, IRemoteMediaFrameReader> frameReaderCache = new();
public IRemoteMediaFrameSource? FrameSource { get; private set; }
public async Task<IRemoteMediaFrameReader?> CreateFrameReaderAsync(IRemoteMediaFrameSource frameSource)
{
if (frameSource is not null)
{
if (frameReaderCache.TryGetValue(frameSource, out IRemoteMediaFrameReader? frameReader))
{
return frameReader;
}
if (frameSource is IRemoteMediaFrameReaderFactory frameReaderFactory)
{
frameReader = frameReaderFactory.Factory();
frameReaderCache.Add(frameSource, frameReader);
}
return await Task.FromResult(frameReader);
}
return default;
}
public void Initialize(IRemoteMediaCaptureInitializationSettings initializationSettings)
{
FrameSource = initializationSettings.Source;
}
public async Task<LowLagPhotoCapture?> PrepareLowLagPhotoCaptureAsync()
{
IRemoteMediaFrameSource? frameSource = FrameSource;
if (FrameSource is null)
{
if (await RemoteMediaFrameSource.FindAllAsync() is IReadOnlyList<IRemoteMediaFrameSource> { Count: > 0 } sourceGroups)
{
frameSource = sourceGroups[0];
}
}
if (frameSource is not null)
{
IMediaFrameReader? frameReader = await CreateFrameReaderAsync(frameSource);
if (frameReader is not null)
{
LowLagPhotoCapture photoCapture = new(frameReader);
await frameReader.StartAsync();
return photoCapture;
}
}
return default;
}
}