跳过导航,直接进入主要内容跳过导航,直接进入主要内容跳过导航,直接进入主要内容

成像服务:ImagingParams 接缝

成像参数(亮度、对比度、饱和度、聚焦……)是宿主硬件——库把一个极小 的 trait 翻译成三个 ONVIF 动作。

安装

cargo add onvif-device-rs@0.7.0  # crate 名与仓库(onvif-rs)不同

接缝

use onvif_device_rs::imaging::{ImagingParams, ImagingParamError};

struct MyCameraControls { /* v4l2 / ISP 句柄…… */ }

impl ImagingParams for MyCameraControls {
    /// 按 ONVIF 名称(如 "Brightness")读参数。
    fn get_param(&self, name: &str) -> Result<f64, ImagingParamError> {
        // 把 ONVIF 名称翻译为你的控制项,并归一化到 [0.0, 1.0]
    }
    /// 写参数;value 已归一化到 [0.0, 1.0]。
    fn set_param(&self, name: &str, value: f64) -> Result<(), ImagingParamError> {
        // 把 [0,1] 缩放到你的硬件量程
    }
    /// 可选:GetImagingSettings 上报的曝光/白平衡模式。
    /// 默认上报 "AUTO"(历史线上值)。
}

线上取值统一归一化到 [0.0, 1.0]——你的实现负责双向映射到硬件量程。

错误变成语义正确的 fault

pub enum ImagingParamError {
    InvalidName(String),                    // → Sender/InvalidArg fault
    OutOfRange { value: f64, min: f64, max: f64 }, // → Sender/OutOfRange fault
    Io(String),                             // → Receiver/action fault
}

返回对的变体,客户端就看到对的 SOAP fault——信封不需要你构造。

一行注册

use std::sync::Arc;
use onvif_device_rs::imaging::register_imaging_actions;

register_imaging_actions(&mut soap, Arc::new(MyCameraControls { /* ... */ }));

注册 GetImagingSettings、SetImagingSettings、GetOptions(名称/ min/max 来自你 get_param 的拒绝或文档集合——见 examples/imaging_demo.rs,其中也演示了越界请求触发 fault)。

可访问性增强功能已加载,支持焦点管理、键盘导航和屏幕阅读器