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 を 使用して、コンテキスト情報を特定のピン インスタンスに関連付けることができます。 通常、これはピン/ストリーム拡張機能に使用され、ピン ディスパッチ テーブルで提供される作成ディスパッチで割り当てられます。 コンテキスト情報に割り当てられた動的メモリは、 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 バイト長になります)。 クライアントがこのメンバーを設定しない場合は、ストリーム ヘッダーの後に拡張情報がないことを示します。 このような状況では、各ストリーム ヘッダーは正確に sizeof (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 に移動するように伝えられたかどうかを判断する必要がある場合は、 KSPIN の DeviceState メンバーの値をその状態と比較することは信頼性の高い方法ではありません。 代わりに、ClientState メンバーを確認するか、SetDeviceState コールバックで変数を作成してから、この変数をチェックします。 SetDeviceState は 、KSPIN_DISPATCHのメンバーです。
「 オブジェクト バッグ」も参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Microsoft Windows XP 以降のオペレーティング システムおよび Microsoft DirectX 8.0 以降のバージョンで使用できます。 |
Header | ks.h (Ks.h を含む) |