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,则 AVStream 不会完成以后的 IRP,直到早期 IRP 由微型驱动程序完成。

KSPIN_FLAG_GENERATE_MAPPINGS

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

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

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

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 情况,标志有效地为你执行此操作。另请参阅 Filter-Centric 处理

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,尽管微型驱动程序可以通过将此结构的 标志 成员设置为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 中的 数据范围交集。

言论

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

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

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

AVStreamAVStream 拆分器中的数据范围交集。

要求

要求 价值
标头 ks.h (包括 Ks.h)

另请参阅

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject