数字窗口概述
两个新的数字窗口控件为提供高分辨率本机传感器的相机提供数字平移、倾斜和缩放机制,以便应用程序可以选择性地专注于会议室中的人脸或标记板等对象,同时保持相机传感器的最佳保真度。
这使应用程序能够获取此类对象的更详细图像,而无需更改媒体分辨率。 数字窗口 MSXU 控件面向整个相机传感器,而不是单个管道或终结点。
数字窗口控件MSXU_CONTROL_DIGITALWINDOW
数字窗口 MSXU 控件指定相机在流式传输时相机的视野和缩放。 此控件可能是平移、倾斜和缩放的替代项。 此控件仅在相机主动流式传输时适用。
有关详细信息,请参阅 Microsoft 扩展中的 2.2.2.11 数字窗口控件到 USB 视频类 1.5 规范。
数字窗口配置控件MSXU_CONTROL_DIGITALWINDOW_CONFIG
数字窗口配置 MSXU 控件指定给定所有可用分辨率的相机缩放限制。 分辨率独立于媒体类型,因此将两种媒体类型广告相同的显示分辨率合并为一种功能。
有关详细信息,请参阅 Microsoft 扩展中的 2.2.2.12 数字窗口配置控件,了解详细信息。
实现概述
下图演示了相机捕获的典型会议室场景。
图像传感器捕获的内容多于流式传输到客户端应用程序的图像,该图像显示在红色边界框中。 橙色边界框说明了给定所选纵横比的相机捕获的视野。 对于数字窗口控件,默认边界框是此橙色框。 沿边给出的坐标显示此框的边界。 传感器的输出会相应地裁剪并缩放到此框中的输出媒体分辨率。
图像中标注的标记板是一个感兴趣的对象。 如果应用程序希望专注于此对象,它可能会设置数字窗口以包含它。
绿色边界框通过本示例中的数字窗口控件设置。 它包含感兴趣的主要对象,标记板。 该矩形可能包含超出感兴趣的对象的数据,因为该对象可能不是矩形,也可能不是从侧面查看,或者它可能与媒体类型没有相同的纵横比。
数字窗口维护输出格式的纵横比,相机会纵向扩展传感器输出以匹配。 指定的坐标始终相对于原始的默认边界框。
与 UVC 1.5 数字窗口控件的关系
下面的新数字窗口 MSXU 控件执行的功能几乎与在 4.2.2.1.19 第 4.2.2.19 节下 UVC 1.5 类规范中找到的CT_DIGITAL_WINDOW_CONTROL完全相同。
UVC 1.5 类specification.pdf可在 USB 视频类规范网站下载。
但是,存在一些重要的差异。
拉伸
指定的CT_DIGITAL_WINDOW_CONTROL允许应用程序将窗口设置为仅受GET_MIN、GET_MAX和GET_RES值的任意坐标集。 若要在输出窗口中适应此视野,此行为要求相机拒绝应合法标准版T_CUR请求的内容,或者实现图像的重新采样或重新缩放,这些图像可能会水平或垂直扭曲图像,即更改纵横比。
由于扭曲可能是不可取的,因此可以通过拒绝此类请求来避免在CT_DIGITAL_WINDOW_CONTROL实现中避免这种扭曲,但数字窗口 MSXU 控件在输出分辨率的纵横比下维护视场。 因此,重新缩放不是此 MSXU 控件中的功能或选项。
自动人脸框架
CT_DIGITAL_WINDOW_CONTROL没有任何人脸跟踪的概念。 另一方面,CT_REGION_OF_INTEREST_CONTROL确实有这样一个概念,但这主要用于检测、报告和可能更新 3A 控件感兴趣的区域。 从理论上讲,如果将其实现为自动更新控件,则可以利用CT_REGION_OF_INTEREST_CONTROL,这样相机驱动程序就可以利用该控件同步平移、倾斜或缩放CT_DIGITAL_WINDOW_CONTROL。
此新控件允许直接控制人脸跟踪,通过倾斜、平移或数字缩放来调整视野,使人脸的可见程度与实际一样多。 此外,此控件上使用的人脸跟踪与任何兴趣控制区域无关。
人脸跟踪的方法依赖于实现。
每帧元数据
原始 UVC 1.5 没有每帧元数据的概念。 Microsoft 扩展了 UVC 规范,以支持框架的有效负载标头中嵌入的元数据。 可以通过MSXU_CONTROL_METADATA控件启用此支持。
此外,CT_DIGITAL_WINDOW_CONTROL不指定控件是同步更新还是异步更新或自动更新。 此外,该控件还包括用于相机本身更改动画的单步执行信息。 这意味着数字平移、倾斜和缩放可能需要大量时间才能完成。 但是,由于该控件已设置为新坐标,因此不清楚完成需要多长时间,以及何时或如何报告转换完成。 更糟的是,当前帧的视野中不存在有关何处的信息。
可以通过相机注入的每帧元数据来解析此歧义性,但无法要求CT_DIGITAL_WINDOW_CONTROL直接支持每帧元数据,因为每帧元数据超出了 UVC 规范的范围。
纵横比
目前还不清楚或未定义CT_DIGITAL_WINDOW_CONTROL如何处理不同的纵横比。 若要正确裁剪视图字段,UVC 1.5 控件报告的GET_DEF和GET_CUR值需要在每次探测/提交后更改以匹配当前方面。 若要正确处理此问题,CT_DIGITAL_WINDOW_CONTROL应该是自动更新控件,驱动程序需要不缓存GET_DEF结果,而是针对相机公开的每个分辨率再次查询此值。
尝试将数字窗口控件映射到特定分辨率时,这种复杂性可能会造成发现问题。 在对相机支持的所有媒体类型执行探测或提交之前,你可能事先不知道相机默认将使用的传感器视野的哪个部分。 这为发现给定分辨率的任何门廊值带来了潜在问题,因为这些值依赖于传感器的视场通常由该格式相对于传感器上可用的总视图字段使用。
功能
数字窗口与多个现有控件相关:
平移
Tilt
缩放
如果相机对这些控件中的任何控件使用数字实现,则必须更改数字窗口报告的值以匹配相同的视野。 同样,数字窗口必须更改这些控件报告的值。 这些控件的所有数字实现必须相互更新才能保持同步。
Microsoft 不定义这些控件之间的关系,仅定义最后一个集控件优先的关系。
感兴趣的区域
由于数字窗口会更改明显的视图字段(FOV),因此每当向此控件发出标准版T 时,通过任何感兴趣的区域(ROI)控件选择的坐标都应重置为其默认值。 当前 ROI 控件的列表包括:
KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_PROPERTY_ID
KSPROPERTY_CAMERACONTROL_EXTENDED_ROI_CONFIGCAPS/KSPROPERTY_CAMERACONTROL_EXTENDED_ROI_ISPCONTROL
此外,这些兴趣区域控件指定其相对于输出窗口的区域,因此它们指定的坐标始终是当前视图中的矩形。 由于“数字窗口”控件更改了当前视野,因此必须由相机重新映射一个“区域”矩形,以适应当前数字窗口。 例如,如果当前数字窗口的 (OriginX, OriginY) 为 (0.0, 0.0)和 WindowSize 为 0.5,如果指定了兴趣区域(0.0、0.0)、(0.5、0.5),则相机必须将兴趣区域矩形重新映射到默认视野中对应于(0.0、0.0)、(0.25、0.25)的像素。 这应类似于平移、倾斜和缩放控件的明显行为,并符合这些兴趣区域控件。
流式处理
由于可用的有效数字窗口值依赖于当前纵横比,因此相机必须已选择媒体类型和流式处理接口,才能强制实施 MinWindowSize。
信息性值
报告的 NonUpscalingWindowSize 也按分辨率报告,但它仅向应用程序提供信息。 此值通知应用程序要设置为 WindowSize 的值,以便不对源图像进行升值。 这样,应用程序就可以根据相机传感器保真度范围的限制捕获图像。
元数据属性
如果相机播发MSXU_CONTROL_DIGITALWINDOW,MSXU_CONTROL_DIGITALWINDOW_CONFIG并在MSXU_CONTROL_METADATA上设置了非零缓冲区大小,则相机必须为每个帧发出MF_CAPTURE_METADATA_DIGITAL_WINDOW属性。 它可以通过设备 MFT 或原始元数据缓冲区中包含MetadataId_DigitalWindow(值 7)属性来提供此功能。 如何在第 2.2.3.1 节 Microsoft 标准格式元数据中进一步介绍元数据属性。
此元数据用于报告应用于当前示例的数字窗口。 它通过用值MetadataId_DigitalWindow和结构的大小初始化KSCAMERA_METADATA_ITEMHEADER,并将数字窗口控件中应用的 OriginX、OriginY 和 WindowSize 值复制到关联的KSCAMERA_EXTENDEDPROP_DIGITALWINDOW_标准版TTING 结构中来执行此操作。
另请参阅
KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGCAPS
KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW
KSCAMERA_EXTENDEDPROP_DIGITALWINDOW_CONFIGCAPS
KSCAMERA_EXTENDEDPROP_DIGITALWINDOW_CONFIGCAPSHEADER