视频捕获属性集

视频捕获属性设置设备和流的组相关属性。 微型驱动程序应尽可能实现 ksmedia.h 头文件中定义的标准属性集,例如 KSPROPSETID_PinPROPSETID_ALLOCATOR_CONTROL。 如果其中一个标准属性集提供相同的功能,微型驱动程序应避免定义新的属性集。

用户模式应用程序通常调用 COM 接口来控制属性设置。 然后,COM 接口通过 Win32 DeviceIoControl API 向微型驱动程序发送和接收流和适配器属性集。 每个属性集的参考页描述了用户模式应用程序调用以控制该集的内核流式处理属性的 COM 接口。

根据微型驱动程序使用哪个内核流式处理接口 (AVStream 或 Stream 类) ,微型驱动程序会指定它以不同方式支持的视频捕获属性集。 例如,如果微型驱动程序使用 AVStream 接口,则它会在封装在 KSPROPERTY_SET 结构中的递归层次结构中指定其属性。 如果微型驱动程序使用 Stream 类接口,则它会在 HW_STREAM_HEADER 结构中指定其属性。 Microsoft 定义了多个宏,驱动程序开发人员可以使用这些宏来指定其微型驱动程序支持的属性,无论其微型驱动程序使用哪种内核流式处理接口。

有关如何在微型驱动程序使用 AVStream 接口时支持属性和属性集的详细信息,请参阅 GitHub 上的 Windows 驱动程序示例存储库中的 AVStream Filter-Centric模拟捕获驱动程序 (Avssamp) AVStream 模拟硬件示例驱动程序 (AVSHwS) 示例微型驱动程序。

有关如何在微型驱动程序使用 Stream 类接口时支持属性和属性集的详细信息,请参阅 支持属性集

硬件和流属性集

属性集被分类为属于硬件或特定流。 硬件属性集适用于所有设备并影响所有流。 例如,用于相机定位 的PROPSETID_VIDCAP_CAMERACONTROL会影响所有输出流,因此被归类为硬件属性集。 请注意,某些属性集(如控制单个输出流的压缩行为的 PROPSETID_VIDCAP_VIDEOCOMPRESSION)作为硬件属性集实现,该属性集包含特定流的索引。 此方法是必需的,因为当引脚未连接时,流属性集不可用。 硬件属性集始终可用。

下表列出了视频捕获微型驱动程序使用的主要属性集。 它还指示属性集是影响视频捕获硬件还是影响单个视频捕获流。 该列表还指示是否需要微型驱动程序来实现属性集。

属性集 硬件属性集 视频捕获属性集 必需
PROPSETID_ALLOCATOR_CONTROL Y
PROPSETID_TUNER Y
PROPSETID_VIDCAP_CAMERACONTROL Y
PROPSETID_VIDCAP_CROSSBAR Y
PROPSETID_VIDCAP_DROPPEDFRAMES Y Y
PROPSETID_VIDCAP_TVAUDIO Y
PROPSETID_VIDCAP_VIDEOCOMPRESSION Y
PROPSETID_VIDCAP_VIDEOCONTROL Y
PROPSETID_VIDCAP_VIDEODECODER Y
PROPSETID_VIDCAP_VIDEOPROCAMP Y

微型驱动程序必须至少报告捕获期间丢弃的帧数,如上表所示。 对所有其他属性集的支持是可选的,具体取决于设备的功能。 强烈建议仅提供一组有限的捕获帧速率的相机实现 PROPSETID_VIDCAP_VIDEOCONTROL ,以允许视频会议应用程序充分利用系统带宽。

属性设置默认值和范围

属性可以支持默认值和范围。 用户界面元素(如滑块和滚动条)使用此信息,如下图所示。

显示用户界面元素(如滑块和滚动条)如何使用默认值和范围的属性对话框的屏幕截图。

默认值和范围信息在 属性定义的KSPROPERTY_VALUES 结构中提供。 此结构包含指向静态表的指针,该表由一个或多个 KSPROPERTY_MEMBERSLIST 结构实例组成。 在 KSPROPERTY_MEMBERSLIST 结构中,微型驱动程序可以指定默认值或值范围。 可通过最小值、最大值和单步执行值指定值范围。 将 KSPROPERTY_MEMBERSHEADER 结构的 MembersFlags 成员设置为KSPROPERTY_MEMBER_RANGES值,以指示KSPROPERTY_MEMBERSLIST结构是值的范围。 KSPROPERTY_MEMBERSLIST 结构还用于指定属性的默认值。 这是通过将KSPROPERTY_MEMBERSHEADER的 MembersFlags 成员设置为KSPROPERTY_MEMBER_VALUE值来完成的。