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を使用して、ピン インスタンスのオブジェクト バッグに配置する必要があることに注意してください。 コンテキスト は、ピンの作成時に親 KSFILTER の Context メンバーの値に初期化されます。 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 接続ハンドシェイクをサポートしていることを示します。 これは、このピンと接続されているピンの間の接続が 2 つの 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 前の値にロールバックします。 状態遷移に失敗し、処理中にこのメンバーをチェックするミニドライバーは、この一連のイベントに注意する必要があります。
備考
多くの点で、ピンはフィルター動作の焦点です。 これは、ピン構造に多数のメンバーが含まれているという事実に反映されます。 多くのミニドライバーは、ピンの動作を調整し、追加のピンに関連付けられたコンテキストを維持する必要があります。 かなり従来のピン動作を持つフィルターの場合、追加の絞り込みまたはコンテキストは必要ありません。 多くの場合、既定のピン動作で十分です。ピン は Filter-Centric Processingを使用 してアクセス されます。
同期の目的で、このオブジェクトの有効期間は、ミニドライバーの 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 を含む) |
関連項目
KsAddItemToObjectBag の