KSPIN 结构 (ks.h)
KSPIN 结构描述实例化引脚。
语法
typedef struct _KSPIN {
const KSPIN_DESCRIPTOR_EX *Descriptor;
KSOBJECT_BAG Bag;
PVOID Context;
ULONG Id;
KSPIN_COMMUNICATION Communication;
BOOLEAN ConnectionIsExternal;
KSPIN_INTERFACE ConnectionInterface;
KSPIN_MEDIUM ConnectionMedium;
KSPRIORITY ConnectionPriority;
PKSDATAFORMAT ConnectionFormat;
PKSMULTIPLE_ITEM AttributeList;
ULONG StreamHeaderSize;
KSPIN_DATAFLOW DataFlow;
KSSTATE DeviceState;
KSRESET ResetState;
KSSTATE ClientState;
} KSPIN, *PKSPIN;
成员
Descriptor
指向此特定引脚的引脚描述符的指针。 有关详细信息,请参阅 KSPIN_DESCRIPTOR_EX。
Bag
此成员指定此特定引脚实例的KSOBJECT_BAG(KSOBJECT_BAG结构等效于类型 PVOID)。 对象包 是用于将动态内存与特定 AVStream 对象关联的结构。 当引脚关闭时,固定对象包中的任何内容都会自动清理。
Context
指向缓冲区的指针。 客户端可以使用 上下文 将上下文信息与特定的引脚实例相关联。 这通常用于固定/流扩展,并在 pin 调度表中提供的创建调度中分配。 请注意,使用 KsAddItemToObjectBag将为上下文信息分配的任何动态内存放在固定实例的对象包中。 上下文 初始化为创建引脚时父 KSFILTER 的 上下文 成员的值。 请参阅 AVStream 对象层次结构。
Id
此成员指定引脚类型标识符。 这是为给定筛选器类型提供的引脚描述符数组中的索引。
Communication
此成员指定KSPIN_COMMUNICATION_NONE、KSPIN_COMMUNICATION_SINK、KSPIN_COMMUNICATION_SOURCE、KSPIN_COMMUNICATION_BOTH或KSPIN_COMMUNICATION_BRIDGE。 有关每个值的含义,请参阅 KSPROPERTY_PIN_COMMUNICATION。
ConnectionIsExternal
此成员指定一个布尔值,如果 TRUE,则指示连接的引脚不支持 AVStream 连接握手。 如果 FALSE,则指示连接的引脚支持 AVStream 连接握手。 这表明此引脚与连接到的引脚之间的连接是否为两个 AVStream 引脚之间的连接。
ConnectionInterface
此成员包含一个 KSPIN_INTERFACE 结构,用于标识用于连接的接口。 创建图钉时,图形生成器会提供此信息。
ConnectionMedium
此成员包含一个 KSPIN_MEDIUM 结构,用于标识此引脚应使用的连接介质。 创建图钉时,图形生成器会提供此信息。
ConnectionPriority
此成员包含指定连接优先级的 KSPRIORITY 结构。 创建图钉时,图形生成器会提供此信息。
ConnectionFormat
指向指定连接数据格式的 KSDATAFORMAT 结构的指针。 此信息最初由图形生成器在创建引脚时提供,可以通过属性访问或格式更改插入到流中的消息进行更改。 对此成员的访问由筛选器控件互斥体同步。 客户端不应更改此成员。
AttributeList
指向 KSMULTIPLE_ITEM 结构的指针,该结构指定在创建引脚期间提供的属性列表,用于描述连接。 指定此引脚的数据流方向(KSPIN_DATAFLOW_IN或KSPIN_DATAFLOW_OUT)。 此信息是固定的静态属性,显示在引脚描述符中。 此处缓存了它以在 PASSIVE_LEVEL 上的 IRQL 进行访问。
StreamHeaderSize
此成员指示此引脚的每个 KSSTREAM_HEADER 结构的大小(以字节为单位)。 客户端通常用于输出引脚,可以将此值设置为大于 sizeof (KSSTREAM_HEADER) 且分配了扩展的流标头(每个流标头将 StreamHeaderSize 字节)。 如果客户端未设置此成员,则表示没有扩展信息遵循流标头。 在这种情况下,每个流标头 大小(KSSTREAM_HEADER)。 客户端可以在 pin 创建调度中设置此值。
DataFlow
此成员指定引脚的数据流方向。 可能的设置是 KSPIN_DATAFLOW_IN 和KSPIN_DATAFLOW_OUT。 此信息是固定的静态属性,显示在相关的 KSPIN_DESCRIPTOR 结构中。 此处缓存了它以在 PASSIVE_LEVEL 上的 IRQL 进行访问。
DeviceState
此成员包含类型为 KSSTATE 的枚举,该枚举用于标识该引脚被告知要转换到的状态。 不一定与管道的状态相同,它通过 AVStrMiniPinSetDeviceState报告。 最初KSSTATE_STOP,当 AVStream 收到连接状态属性集 IOCTL 时,此成员会更改。 使用 筛选器控制互斥体同步访问。 微型驱动程序不应更改此成员。 请参阅下面的“备注”部分的说明。 另请参阅 ClientState 成员。
ResetState
此成员包含一个 KSRESET 类型的枚举,该枚举标识引脚的当前重置状态。 可能的设置是KSRESET_BEGIN和KSRESET_END。 此成员最初设置为KSRESET_END,并通过属性访问进行更改。 筛选器控件互斥体同步对此成员的访问。 客户端不应更改此成员。
ClientState
此成员指定当前设置引脚的 KSSTATE。 在调用 AVStrMiniPinSetDeviceState 之前立即更新。 如果此回调例程失败,AVStream 会将 ClientState 回滚到其以前的值。 在处理过程中失败并检查此成员的微型驱动程序应注意此事件序列。
言论
在许多方面,引脚是筛选器行为的焦点。 这反映在引脚结构具有大量成员的事实中。 许多微型驱动程序需要优化引脚行为并维护其他引脚关联的上下文。 对于具有相当传统的引脚行为的筛选器,不需要额外的优化或上下文。 在许多情况下,默认引脚行为已足够;使用 Filter-Centric 处理访问引脚。
出于同步目的,此对象的生存期是从调用微型驱动程序的 PreCreate 调度函数开始的间隔,并在微型驱动程序的 Close 调度函数返回时结束,假设该函数不返回STATUS_PENDING。 如果它确实返回STATUS_PENDING,则当客户端通过调用 KsCompletePendingRequest指示完成关闭请求时,对象的生存期将结束。
如果微型驱动程序需要确定是否被告知要转到特定 KSSTATE,将 KSPIN DeviceState 成员的值与该状态进行比较不是可靠的方法。 请改为查看 ClientState 成员,或在 setDeviceState 回调 中创建变量,然后检查此变量。 SetDeviceState 是 KSPIN_DISPATCH的成员。
另请参阅 对象包。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Microsoft Windows XP 及更高版本的作系统和 Microsoft DirectX 8.0 及更高版本中提供。 |
标头 | ks.h (包括 Ks.h) |