Files
Ayay/SHH.CameraSdk/Core/Pipeline/GlobalPipelineRouter.cs

41 lines
1.4 KiB
C#

namespace SHH.CameraSdk;
/// <summary>
/// [改道分发中心] 全局管道路由器
/// 职责:驱动层只管把数据扔到这里,不用关心后面是缩放、增强还是直接分发。
/// </summary>
public static class GlobalPipelineRouter
{
// 当前激活的处理器 (默认可为空,为空则直接透传)
private static IFrameProcessor? _currentProcessor;
/// <summary>
/// 配置具体的处理策略 (在 Program.cs 中初始化)
/// </summary>
public static void SetProcessor(IFrameProcessor processor)
{
_currentProcessor = processor;
}
/// <summary>
/// [驱动层入口] 提交帧数据
/// </summary>
public static void Enqueue(long deviceId, SmartFrame frame, FrameDecision decision)
{
// Optimized: [原因] 撤回冗余的 AddRef。实测发现 ProcessingPipeline.TrySubmit
// 内部已包含 AddRef 逻辑,此处若再加会导致引用计数无法归零,进而撑爆帧池导致卡死。
frame.AddRef();
if (_currentProcessor != null)
{
// 场景 A: 有处理器 (如缩放服务) -> 改道进入处理器
_currentProcessor.Enqueue(deviceId, frame, decision);
}
else
{
// 场景 B: 无处理器 -> 直接进入全局分发中心 (回退到原始逻辑)
GlobalProcessingCenter.Submit(deviceId, frame, decision);
}
}
}