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

指向缓冲区的指针。 客户端可以使用 Context 将上下文信息与特定的 pin 实例相关联。 通常,它用于引脚/流扩展,并在引脚调度表中提供的创建调度中分配。 请注意,为上下文信息分配的任何动态内存都应使用 KsAddItemToObjectBag 放置在固定实例的对象包中。 创建引脚时,Context 初始化为父 KSFILTERContext 成员的值。 请参阅 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) 。 客户端可以在引脚创建调度中设置此设置。

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 回滚到其以前的值。 状态转换失败并在处理过程中检查此成员的微型驱动程序应注意此事件序列。

注解

在许多方面,引脚是筛选器行为的重点。 这反映在引脚结构具有大量成员的事实中。 许多微型驱动程序需要优化引脚行为,并维护其他与引脚关联的上下文。 对于具有相当传统的引脚行为的筛选器,无需进行额外的优化或上下文。 在许多情况下,默认引脚行为已足够;使用 以筛选器为中心的处理访问引脚。

出于同步目的,此对象的生存期为从调用微型驱动程序的 PreCreate 调度函数开始的间隔,并在微型驱动程序的 Close 调度函数返回时结束(假设该函数不返回STATUS_PENDING)。 如果它返回STATUS_PENDING,则当客户端通过调用 KsCompletePendingRequest 指示关闭请求完成时,对象的生存期结束。

如果微型驱动程序需要确定是否被告知要转到特定的 KSSTATE,将 KSPINDeviceState 成员的值与该状态进行比较不是可靠的方法。 而是查看 ClientState 成员,或在 SetDeviceState 回调中创建变量,然后检查此变量。 SetDeviceStateKSPIN_DISPATCH 的成员。

另请参阅 对象包

要求

要求
最低受支持的客户端 在 Microsoft Windows XP 及更高版本的操作系统以及 Microsoft DirectX 8.0 及更高版本中可用。
标头 ks.h (包括 Ks.h)

另请参阅

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest