rename
This commit is contained in:
parent
bef61f841d
commit
c3de5fdb63
107 changed files with 0 additions and 0 deletions
38
src/Automata.Screen/FramePipeline.cs
Normal file
38
src/Automata.Screen/FramePipeline.cs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
namespace Poe2Trade.Screen;
|
||||
|
||||
public class FramePipeline : IDisposable
|
||||
{
|
||||
private readonly IScreenCapture _capture;
|
||||
private readonly List<IFrameConsumer> _consumers = [];
|
||||
|
||||
public FramePipeline(IScreenCapture capture)
|
||||
{
|
||||
_capture = capture;
|
||||
}
|
||||
|
||||
public IScreenCapture Capture => _capture;
|
||||
|
||||
public void AddConsumer(IFrameConsumer consumer) => _consumers.Add(consumer);
|
||||
public void RemoveConsumer(IFrameConsumer consumer) => _consumers.Remove(consumer);
|
||||
|
||||
/// <summary>
|
||||
/// Capture one frame, dispatch to all consumers in parallel, then dispose frame.
|
||||
/// </summary>
|
||||
public async Task ProcessOneFrame()
|
||||
{
|
||||
using var frame = _capture.CaptureFrame();
|
||||
if (frame == null) return;
|
||||
|
||||
if (_consumers.Count == 1)
|
||||
{
|
||||
_consumers[0].Process(frame);
|
||||
}
|
||||
else
|
||||
{
|
||||
var tasks = _consumers.Select(c => Task.Run(() => c.Process(frame)));
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() => _capture.Dispose();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue