namespace SHH.CameraSdk;
///
/// 视频流动态配置项(运行时可调整参数容器)
/// 核心职责:承载无需重启流即可动态调整的视频参数,支持局部更新
/// 核心特性:
/// 1. Nullable 模式:仅非空字段会触发参数更新,避免全量重置导致的性能抖动
/// 2. 分类管理:按画面策略、帧率控制、传输输出、厂商扩展划分参数,逻辑清晰
/// 3. 空值检查:通过 IsEmpty 判断是否存在有效配置,避免无效底层 SDK 调用
///
public class DynamicStreamOptions
{
#region --- 1. 画面策略 (Resolution & Scaling) ---
///
/// 目标输出宽度(像素)
/// Nullable 规则:null = 保持当前配置;非 null = 触发图像缩放逻辑
/// 注意事项:建议与 TargetHeight 成对设置,避免画面比例失衡
///
public int? TargetWidth { get; set; }
///
/// 目标输出高度(像素)
/// Nullable 规则:null = 保持当前配置;非 null = 触发图像缩放逻辑
/// 协作关系:与 TargetWidth 配合使用,若仅设置其一,会按原始宽高比自动计算另一值
///
public int? TargetHeight { get; set; }
///
/// 图像放大开关
/// Nullable 规则:null = 保持当前策略;true = 允许放大;false = 禁止放大
/// 性能影响:禁止放大可节省插值计算资源,适合低性能设备
///
public bool? AllowEnlarge { get; set; }
///
/// 图像缩小开关
/// Nullable 规则:null = 保持当前策略;true = 允许缩小;false = 禁止缩小
/// 适用场景:禁止缩小可保留原始画质,适合需要高清分析的场景
///
public bool? AllowShrink { get; set; }
#endregion
#region --- 2. 频率控制 (Frame Rate Control) ---
///
/// 目标帧率(fps)
/// Nullable 规则:null = 不修改;非 null = 限定算法处理的输入帧率
/// 性能优化:降低此值可显著减少高分辨率下的 GPU/CPU 负荷(如 4K 从 30fps 降到 5fps)
///
public int? TargetFps { get; set; }
#endregion
#region --- 3. 传输与输出 (Transmission & Output) ---
///
/// Web 推流开关
/// Nullable 规则:null = 保持当前状态;true = 启动推流;false = 停止推流
/// 协作组件:开启后会将处理后的视频帧推送到流媒体服务器(如 FFmpeg/RTSP 服务器)
///
public bool? EnableStreamOutput { get; set; }
///
/// 渲染窗体句柄
/// Nullable 规则:null = 保持当前窗口;非 null = 切换到新窗口渲染
/// 适用场景:支持视频窗口拖拽、多显示器切换等交互操作
///
public IntPtr? RenderHandle { get; set; }
///
/// 码流类型切换
/// 取值规则:0 = 主码流(高清/大带宽);1 = 子码流(标清/低延迟);2 = 第三码流
/// Nullable 规则:null = 不切换;非 null = 执行码流切换
/// 注意事项:切换会销毁并重建预览句柄,可能导致短暂的画面中断
///
public int? StreamType { get; set; }
#endregion
#region --- 4. 厂商扩展 (Vendor Specific) ---
///
/// 厂商特有参数扩展字典
/// 用途:存放无法标准化的品牌专属功能参数
/// 示例:海康 "FocusMode"=Auto/Manual;大华 "SmartH264"=true/false
/// 注意事项:键值对需与对应厂商 SDK 的参数名一致,否则无效
///
public Dictionary VendorExtensions { get; set; } = new();
#endregion
#region --- 5. 配置有效性检查 ---
///
/// 逻辑空检查:判断当前配置包是否包含任何有效修改项
/// 使用场景:调用 SDK 前判断,避免无意义的底层调用,提升性能
///
public bool IsEmpty =>
TargetWidth is null &&
TargetHeight is null &&
AllowEnlarge is null &&
AllowShrink is null &&
TargetFps is null &&
EnableStreamOutput is null &&
RenderHandle is null &&
StreamType is null &&
VendorExtensions.Count == 0;
#endregion
}