This commit is contained in:
Boki 2026-02-28 15:13:22 -05:00
parent bef61f841d
commit c3de5fdb63
107 changed files with 0 additions and 0 deletions

View 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();
}