53 lines
2.0 KiB
C#
53 lines
2.0 KiB
C#
|
|
namespace SHH.CameraSdk;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 元数据变更差异描述符(只读结构体)
|
|||
|
|
/// 核心职责:对比设备当前运行元数据与最新拉取元数据的差异,明确变更类型及业务影响
|
|||
|
|
/// 协作场景:指导上层模块执行差异化处理(如仅刷新UI、重启流、调整功能按钮)
|
|||
|
|
/// </summary>
|
|||
|
|
public readonly struct MetadataDiff
|
|||
|
|
{
|
|||
|
|
#region --- 差异类型属性 (Change Type Properties) ---
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设备基础描述信息变更(如名称、位置)
|
|||
|
|
/// 业务影响:仅需刷新 UI 显示文字,无需中断当前流
|
|||
|
|
/// </summary>
|
|||
|
|
public bool NameChanged { get; init; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 设备能力集变更(如新增/移除对讲、截图功能)
|
|||
|
|
/// 业务影响:需调整 UI 功能按钮的可用性,无需中断流
|
|||
|
|
/// </summary>
|
|||
|
|
public bool CapabilityChanged { get; init; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 致命/破坏性变更(如设备型号、编码格式变更)
|
|||
|
|
/// 业务影响:必须销毁当前流实例并重启,否则会导致流异常或崩溃
|
|||
|
|
/// </summary>
|
|||
|
|
public bool IsMajorChange { get; init; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 分辨率/帧率档位列表变更
|
|||
|
|
/// 业务影响:需重新校验当前流参数是否合法,非法则自动降级到可用档位
|
|||
|
|
/// </summary>
|
|||
|
|
public bool ResolutionProfilesChanged { get; init; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 全局变更标识:是否存在任何类型的元数据变更
|
|||
|
|
/// 业务用途:快速判断是否需要执行后续差异化处理逻辑
|
|||
|
|
/// </summary>
|
|||
|
|
public bool HasChanges => NameChanged || CapabilityChanged || IsMajorChange || ResolutionProfilesChanged;
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region --- 快捷实例 (Quick Instances) ---
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 无变更状态的快捷实例
|
|||
|
|
/// 业务用途:元数据刷新后无变化时直接返回,避免重复创建空对象
|
|||
|
|
/// </summary>
|
|||
|
|
public static MetadataDiff None => new();
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
}
|