KSPIN_DESCRIPTOR_EX 结构 (ks.h)

KSPIN_DESCRIPTOR_EX结构描述给定筛选器类型上的引脚类型的特征。

语法

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

成员

Dispatch

指向此引脚 KSPIN_DISPATCH 结构的指针。 此指针是可选的,只能由希望接收通知的客户端提供。 需要执行以引脚为中心的处理 (与数据路由相关的筛选器(换句话说,硬件驱动程序) )的客户端必须提供此调度表和进程调度。 有关详细信息 ,请参阅KSPIN_DISPATCH

AutomationTable

指向此引脚 KSAUTOMATION_TABLE 结构的指针。 自动化表包含引脚支持的属性、方法和事件。 此自动化表与 AVStream 为所有引脚提供的自动化表合并。 如果客户端提供 AVStream 已经提供的任何属性、事件或方法处理程序,则客户端的实现将取代 AVStream 的实现。

PinDescriptor

此成员指定 KSPIN_DESCRIPTOR类型的结构。

Flags

指定 ULONG 类型的值。 这可以是以下列表中所列标志的任意组合。 使用按位 OR 指定标志,但有以下例外情况:KSPIN_FLAG_CRITICAL_PROCESSING和KSPIN_FLAG_HYPERCRITICAL_PROCESSING是互斥的。 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING和KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL是互斥的。 KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING和KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING是互斥的。 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY和KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE是互斥的。

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

指示微型驱动程序请求在 IRQL DISPATCH_LEVEL而不是PASSIVE_LEVEL进行进程调度。

KSPIN_FLAG_CRITICAL_PROCESSING

如果已指定异步处理,或者系统在PASSIVE_LEVEL运行,并且进程调用在DISPATCH_LEVEL传入,则会在排队的工作项中完成处理。 此标志指示工作项应放置在关键工作队列上,而不是延迟的工作队列。

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

如果已指定异步处理,或者系统在PASSIVE_LEVEL运行,并且进程调用在DISPATCH_LEVEL传入,则会在排队的工作项中完成处理。 此标志指示工作项应放置在超关键工作队列上,而不是延迟的工作队列或关键工作队列。

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

指示引脚应异步处理数据。 如果设置了此标志,AVStream 不会等待调用一个进程调度,然后再继续处理其他帧。

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

仅当微型驱动程序显式调用 KsXxxAttemptProcessing 时,AVStream 才会调用处理调度。 对于打算在 DPC 时间直接轮询队列以将数据传输到硬件的客户端非常有用。

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

指示每次数据帧到达队列时都应进行处理。 如果未指定此标志,则仅当数据到达以前为空的队列时,才会调用进程调度。

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

指示此图钉上不需要帧即可开始处理。 即使队列中不存在帧,状态更改现在也足以导致 AVStream 调用处理调度。 此标志仅适用于以筛选器为中心的筛选器。 未指定此标志的引脚在筛选器上延迟处理(如果它们没有可用的帧)。 指定此标志的固定不会以这种方式延迟处理。 如果引脚指定此标志,则进程调度负责检查可用帧。

KSPIN_FLAG_ENFORCE_FIFO

指定此标志会导致队列强制以先入先出的方式处理 IRP。 如果微型驱动程序在之前发送的 IRP 之前完成了一个 IRP,则在早期 IRP 由微型驱动程序完成之前,AVStream 不会完成较晚的 IRP。

KSPIN_FLAG_GENERATE_MAPPINGS

指定此标志会使 AVStream 在微型驱动程序锁定引用该帧的流指针时自动生成排队帧的散点/收集映射。 打算使用此功能的客户端需要通过 KsDeviceRegisterAdapterObject 函数将其 DMA 适配器对象注册到 AVStream。 有关此标志对KSSTREAM_HEADER结构的影响,请参阅 KSSTREAM_HEADERDataUsed 成员。 另请参阅 KSSTREAM_POINTER_OFFSET

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

指示与引脚关联的队列应具有尾随边缘流指针。 尾随边缘指针是一种特殊的流指针,指向队列中最早的数据,除非克隆指针存在于旧数据上。 窗口内前导和尾随边缘流指针之间的任何数据帧都被视为至少有一个引用计数,并且直到它们通过使用 KsPinGetTrailingEdgeStreamPointerKsStreamPointerAdvanceXxxKsStreamPointerUnlock 函数之一向前移动尾随边缘,才会完成。 未指定此标志的图钉没有尾随边缘流指针。

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

指示 AVStream 应仅在引脚处于KSSTATE_RUN时调用此引脚进行处理。 将最小处理状态从暂停更改为运行。 AVStream 在告知其进入运行状态 ,会调用此引脚进行处理,即使帧到达也是如此。 指定此标志并且是以筛选器为中心的筛选器的一部分的任何引脚,如果给定的引脚不在KSSTATE_RUN中,则不会处理筛选器。

KSPIN_FLAG_SPLITTER

指示此引脚 (输出引脚) 是拆分器。 指定此标志的固定应指示多个可能大于 1 的实例。 创建此引脚的第二个实例时,AVStream 会自动设置拆分器,以便将发送到原始引脚的帧复制到新引脚。 请注意,此复制由 AVStream 自动完成。 客户端 通常 可以忽略具有非 NULLDelegateBranchCopySource 指针的进程引脚。 这些成员指示引脚是拆分器分支的一部分,并由 AVStream 自动处理。 在 DirectX 8.0 后的版本中,此标志适用于以筛选器为中心的筛选器和以引脚为中心的筛选器上的引脚。 较旧版本仅支持以筛选器为中心的筛选器上的引脚的此标志。

KSPIN_FLAG_USE_STANDARD_TRANSPORT

此标志强制引脚使用标准传输机制。 它替代引脚上 (通信类型、介质类型、接口类型等 ) 的所有其他检查。 指定此标志和KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT会导致使用标准传输。 此标志将替代所有其他检查。

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

指示引脚不使用标准传输机制。 不使用标准传输机制的引脚将不属于管道部分,并且不会具有关联的队列。

KSPIN_FLAG_FIXED_FORMAT

指示此引脚使用固定数据格式。 任何设置数据格式的尝试都返回STATUS_INVALID_DEVICE_REQUEST。

KSPIN_FLAG_GENERATE_EOS_EVENTS

指示此引脚处理连接事件支持请求。

KSPIN_FLAG_RENDERER

指定此图钉能够呈现帧。

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

在以筛选器为中心的筛选器引脚上指定时,指示有问题的引脚类型的一个或多个实例必须具有可用的帧才能处理数据。 与KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING互斥。

请注意,可以通过 KsPinAttachOrGate 获取此行为,方法是手动将 OR 门设置为引脚的每个实例的帧门,并将此 OR 门连接到筛选器的 AND 门。

使用此标志时,微型驱动程序无法在关联的固定实例上调用 KsPinAttachAndGateKsPinAttachOrGate 。 (对于简单的 OR 案例,标志可以有效地执行此操作。) 另请参阅 以筛选器为中心的处理

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

以筛选器为中心的 引脚上指定时,指示当一个或多个标记的引脚实例处于运行状态时,可能会进行处理。 所有未停止的引脚仍必须至少处于暂停状态才能处理数据。 如果相应的引脚是输出引脚,并且此引脚涉及就地转换,请不要使用此标志。

KSPIN_FLAG_DENY_USERMODE_ACCESS

此标志阻止用户模式访问此特定引脚。

KSPIN_FLAG_IMPLEMENT_CLOCK

指示此引脚公开可由图形管理器选择为主时钟的时钟。 另请参阅 AVStream 时钟

InstancesPossible

指定 ULONG 类型的值,该值包含此引脚的最大可能实例数。 任何实例化超过给定类型的引脚数的尝试都失败。 设置为 KSINSTANCE_INDETERMINATE 对实例化引脚数没有限制。

InstancesNecessary

指定 ULONG 类型的值,该值包含给定引脚类型的最小引脚数,这些引脚必须处于或高于筛选器正常运行的最低处理级别。 默认情况下,最小处理级别为KSSTATE_PAUSE,但微型驱动程序可以通过将此结构的 Flags 成员设置为 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 或 KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 来修改默认行为。 任何更改没有此类型引脚实例数的筛选器的状态的尝试都失败。 请参阅“备注”部分中的其他信息。

AllocatorFraming

指向包含此引脚类型的分配器框架要求的 KSALLOCATOR_FRAMING_EX 结构的指针。 分配器帧指定内存对齐要求、最大帧大小和最小帧大小等项。 此成员可以为 NULL,表示此引脚不支持分配器取帧属性。

IntersectHandler

指向驱动程序定义的 KStrIntersectHandlerEx 函数的指针,用于处理数据交集。 如果此成员为 NULL,则引脚使用说明符KSDATAFORMAT_SPECIFIER_NONE处理数据范围的数据交集查询。 交集处理程序函数从查询接收单个数据范围,从数据范围的引脚列表中接收单个数据范围。 保证这些范围的类型、子类型和说明符 GUID 匹配,但有些可能是通配符。 函数要么指示数据区域不匹配,要么在两个数据区域的交集中生成最佳数据格式。 有关详细信息 ,请参阅 AVStream 中的数据范围交集

注解

如果 KSPIN_DESCRIPTOR_EX 的 InstancesNecessary 成员对于模拟视频输入引脚设置为零,AMCap 和 Blink 可能无法在 AVStream 驱动程序上找到调谐器和交叉条接口。 若要解决此问题,请将此引脚 的 InstancesNecessary 设置为 1。

请注意,尽管分配器框架指定对齐或大小绝对需要为特定值,但可能会忽略引脚的分配器帧要求。 如果内核模式驱动程序连接到为其分配的上游用户模式筛选器,并且特定上游筛选器的分配器不了解帧要求,则 (当前特定示例(包括 MPEG-2 拆分器) )可能会发生这种情况。

此外,如果指定KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING并且引脚使用标准传输机制,则必须具有处理对象。 这意味着必须在筛选器级别或引脚级别) (提供一些进程调度;即使从不调用此函数,也必须在这种情况下提供它。

AVStream 和 AVStream 拆分器中的数据范围交集

要求

要求
Header ks.h (包括 Ks.h)

另请参阅

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject