Files
Ayay/SHH.CameraService/GrpcImpls/ImageFactory/PipelineConfigurator.cs

83 lines
3.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.Extensions.Hosting;
using SHH.CameraSdk;
namespace SHH.CameraService;
/// <summary>
/// 图像处理管道配置服务(基于责任链模式)
/// <para>核心职责:</para>
/// <para>1. 组装图像处理集群的执行顺序,形成 "缩放 → 增强" 的固定流程</para>
/// <para>2. 将组装好的管道挂载到全局路由,统一接收驱动层输出的帧数据</para>
/// <para>设计说明:</para>
/// <para>- 采用责任链模式,支持动态扩展处理节点(如后续新增滤镜、裁剪等功能)</para>
/// <para>- 依赖 IHostedService 生命周期,确保在应用启动时完成管道初始化</para>
/// <para>- 与 GlobalPipelineRouter 强关联,是帧数据进入处理流程的唯一入口</para>
public class PipelineConfigurator : IHostedService
{
#region --- ---
/// <summary>
/// 图像缩放集群实例(责任链第一节点)
/// 功能:根据配置缩放帧分辨率、控制图像放大/缩小开关
/// </summary>
private readonly ImageScaleCluster _scale;
/// <summary>
/// 图像增强集群实例(责任链第二节点)
/// 功能:调整图像亮度、对比度等增强效果(基于 ProcessingConfigManager 配置)
/// </summary>
private readonly ImageEnhanceCluster _enhance;
#endregion
#region --- ---
/// <summary>
/// 初始化管道配置服务实例
/// </summary>
/// <param name="scale">图像缩放集群(通过 DI 注入,已预设并行度和配置管理器)</param>
/// <param name="enhance">图像增强集群(通过 DI 注入,已预设并行度和配置管理器)</param>
public PipelineConfigurator(ImageScaleCluster scale, ImageEnhanceCluster enhance)
{
_scale = scale;
_enhance = enhance;
}
#endregion
#region --- IHostedService ---
/// <summary>
/// 启动服务:组装责任链并挂载到全局路由
/// <para>执行时机:应用启动时,在所有 Singleton 服务初始化完成后触发</para>
/// </summary>
/// <param name="cancellationToken">服务停止令牌(用于响应应用关闭信号)</param>
/// <returns>异步任务(无返回值)</returns>
public Task StartAsync(CancellationToken cancellationToken)
{
// 1. 建立责任链关系:缩放集群处理完成后,将帧数据传递给增强集群
// 设计逻辑Scale 是入口节点Enhance 是后续节点,可按需求插入更多处理节点
_scale.SetNext(_enhance);
// 2. 将责任链入口挂载到全局路由:驱动层输出的所有帧数据都会进入该管道
// 关键作用:统一帧数据处理入口,屏蔽驱动层与处理层的直接依赖
GlobalPipelineRouter.SetProcessor(_scale);
// 启动日志:打印管道组装结果,便于运维排查
Console.WriteLine("[Pipeline] 图像处理链组装完成: ImageScaleCluster -> ImageEnhanceCluster");
Console.WriteLine("[Pipeline] 提示:帧数据将按 '缩放 → 增强' 顺序处理,可通过 GlobalPipelineRouter 调整流程");
return Task.CompletedTask;
}
/// <summary>
/// 停止服务:空实现(无资源需要释放)
/// <para>说明:图像处理集群的资源释放由各自的 Dispose 方法管理,此处无需额外操作</para>
/// </summary>
/// <param name="cancellationToken">服务停止令牌</param>
/// <returns>空异步任务</returns>
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
#endregion
}