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

指向缓冲区的指针。 客户端可以使用 上下文 将上下文信息与特定的引脚实例相关联。 通常,这用于固定/流扩展,并在引脚调度表中提供的创建调度中分配。 请注意,为上下文信息分配的任何动态内存都应使用 KsAddItemToObjectBag 放置在固定实例的对象包中。 上下文初始化为创建引脚时父 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) 。 此信息是固定的静态属性,显示在引脚描述符中。 此处缓存用于在 IRQL 上访问PASSIVE_LEVEL。

StreamHeaderSize

此成员指示此引脚的每个 KSSTREAM_HEADER 结构的大小(以字节为单位)。 通常用于输出引脚,客户端可以将此值设置为大于 sizeof (KSSTREAM_HEADER) 的任何值,并且每个流标头分配的扩展流标头 (每个流标头都将是 StreamHeaderSize 字节长) 。 如果客户端未设置此成员,则表示没有扩展信息遵循流标头。 在这种情况下,每个流标头的大小正好 (KSSTREAM_HEADER) 客户端可以在 pin 创建调度中设置此值。

DataFlow

此成员指定引脚的数据流方向。 可能的设置是 KSPIN_DATAFLOW_IN 和KSPIN_DATAFLOW_OUT。 此信息是固定的静态属性,显示在相关 KSPIN_DESCRIPTOR 结构中。 此处缓存用于在 IRQL 上访问PASSIVE_LEVEL。

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 及更高版本中提供。
Header ks.h (包括 Ks.h)

另请参阅

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest