KSPIN_DESCRIPTOR_EX構造体 (ks.h)

KSPIN_DESCRIPTOR_EX 構造体は、特定のフィルターの種類のピンの種類の特性を記述します。

構文

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

メンバーズ

Dispatch

このピンの KSPIN_DISPATCH 構造体へのポインター。 このポインターは省略可能であり、通知を受信するクライアントのみが提供する必要があります。 ピン中心の処理 (データのルーティングに関係するフィルター、つまりハードウェア ドライバー) を実行する必要があるクライアントは、このディスパッチ テーブルとプロセス ディスパッチを提供する必要があります。 詳細については、KSPIN_DISPATCH を参照してください。

AutomationTable

このピンの KSAUTOMATION_TABLE 構造体へのポインター。 オートメーション テーブルには、ピンでサポートされているプロパティ、メソッド、およびイベントが含まれています。 このオートメーション テーブルは、すべてのピンに対して AVStream によって提供されるオートメーション テーブルとマージされます。 クライアントが AVStream によって既に提供されているプロパティ、イベント、またはメソッド ハンドラーを提供する場合、クライアントの実装は AVStream の実装よりも優先されます。

PinDescriptor

このメンバーは、KSPIN_DESCRIPTOR型の構造体を指定します。

Flags

ULONG 型の値を指定します。 これは、次の一覧に示すフラグの任意の組み合わせにすることができます。 ビットごとの OR を使用してフラグを指定します。ただし、KSPIN_FLAG_CRITICAL_PROCESSINGとKSPIN_FLAG_HYPERCRITICAL_PROCESSINGは相互に排他的です。 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSINGとKSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVALは相互に排他的です。 KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSINGとKSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSINGは相互に排他的です。 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLYとKSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATEは相互に排他的です。

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

ミニドライバーが、PASSIVE_LEVELではなく IRQL DISPATCH_LEVELでプロセスディスパッチが行われるよう要求することを示します。

KSPIN_FLAG_CRITICAL_PROCESSING

非同期処理が指定されている場合、またはシステムがPASSIVE_LEVELで実行されていて、DISPATCH_LEVELでプロセス呼び出しが行われる場合、処理はキューに登録された作業項目で実行されます。 このフラグは、遅延作業キューではなく、作業項目をクリティカル作業キューに配置する必要があることを示します。

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

非同期処理が指定されている場合、またはシステムがPASSIVE_LEVELで実行されていて、DISPATCH_LEVELでプロセス呼び出しが行われる場合、処理はキューに登録された作業項目で実行されます。 このフラグは、遅延作業キューまたはクリティカル作業キューではなく、作業項目を超クリティカル作業キューに配置する必要があることを示します。

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

ピンがデータを非同期的に処理する必要があることを示します。 このフラグが設定されている場合、AVStream は、追加のフレームを続行する前に、1 つのプロセス ディスパッチが呼び出されるのを待機しません。

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream は、ミニドライバーが明示的に KsXxxAttemptProcessingを呼び出す場合にのみ、処理ディスパッチを呼び出します。 データをハードウェアに転送する DPC 時間など、キューを直接ポーリングするクライアントに役立ちます。

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

データ フレームがキューに到着するたびに処理が行われる必要があることを示します。 このフラグが指定されていない場合、プロセス ディスパッチは、以前に空のキューにデータが到着したときにのみ呼び出されます。

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

処理を開始するために、このピンにフレームが必要ないことを示します。 キューにフレームが存在しない場合でも、AVStream が処理ディスパッチを呼び出すには、状態の変更で十分です。 このフラグは、フィルター中心のフィルターにのみ役立ちます。 使用可能なフレームがない場合、フィルターでこのフラグ遅延処理を指定しないピン。 このフラグを指定するピンは、この方法で処理を遅らせません。 ピンがこのフラグを指定した場合は、プロセス ディスパッチで使用可能なフレームを確認する必要があります。

KSPIN_FLAG_ENFORCE_FIFO

このフラグを指定すると、キューは先入れ先出し方式で IRP を強制的に処理します。 以前に送信された IRP の前にミニドライバーによって 1 つの IRP が完了した場合、以前の IRP がミニドライバーによって完了するまで、後の IRP は AVStream によって完了されません。

KSPIN_FLAG_GENERATE_MAPPINGS

このフラグを指定すると、ミニドライバーがそのフレームを参照するストリーム ポインターをロックすると、AVStream によってキューに置かれたフレームの散布図/収集マッピングが自動的に生成されます。 この機能を使用するクライアントは、KsDeviceRegisterAdapterObject 関数を使用して、DMA アダプター オブジェクトを AVStream に登録する必要があります。 このフラグがKSSTREAM_HEADER構造体に及ぼす影響については、KSSTREAM_HEADER の dataUsed メンバーの を参照してください。 KSSTREAM_POINTER_OFFSETも参照してください。

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

ピンに関連付けられているキューに末尾のエッジ ストリーム ポインターが必要であることを示します。 末尾のエッジ ポインターは、古いデータに複製ポインターが存在しない限り、キュー内の最も古いデータを指す特別なストリーム ポインターです。 先頭と末尾のエッジ ストリーム ポインターの間のウィンドウ内のデータ フレームは、少なくとも 1 つの参照カウントを持つと見なされ、KsPinGetTrailingEdgeStreamPointer と、Xxx または KsStreamPointerUnlock 関数のいずれかの KsStreamPointerAdvance を使用して、ウィンドウの外に移動するまで完了しません。 このフラグを指定しないピンには、末尾のエッジ ストリーム ポインターがありません。

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

AVStream がこのピンを呼び出して、ピンがKSSTATE_RUNの場合にのみ処理することを示します。 最小処理状態を一時停止から実行に変更します。 AVStream はこのピンを呼び出して、フレームが到着した場合でも、 実行状態に移行するように指示した後、を処理します。 このフラグを指定し、フィルター中心のフィルターの一部であるピンは、指定されたピンがKSSTATE_RUNされていない場合、フィルターは処理されません。

KSPIN_FLAG_SPLITTER

このピン (出力ピン) がスプリッターであることを示します。 このフラグを指定するピンは、1 より大きい可能性のあるインスタンスの数を示す必要があります。 このピンの 2 番目のインスタンスが作成されると、AVStream は、元のピンに送信されたフレームが新しいピンにコピーされるように、スプリッターを自動的に設定します。 このコピーは AVStream によって自動的に行われることに注意してください。 通常、クライアント は、以外の NULLDelegateBranch を持ち、CopySource ポインター プロセス ピンを無視できます。 これらのメンバーは、ピンが分割分岐の一部であり、AVStream によって自動的に処理されることを示します。 DirectX 8.0 より後のリリースでは、このフラグはフィルター中心フィルターとピン中心フィルターの両方のピンに対して機能します。 以前のリリースでは、フィルター中心のフィルターのピンに対してのみこのフラグがサポートされています。

KSPIN_FLAG_USE_STANDARD_TRANSPORT

このフラグは、標準のトランスポート メカニズムを使用するようにピンを強制します。 ピン上の他のすべてのチェック (通信の種類、中の種類、インターフェイスの種類など) をオーバーライドします。 このフラグとKSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORTの両方を指定すると、標準トランスポートが使用されます。 このフラグは、他のすべてのチェックをオーバーライドします。

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

ピンが標準のトランスポート メカニズムを使用していないことを示します。 標準トランスポート メカニズムを使用しないピンは、パイプ セクションに属していないため、関連付けられたキューはありません。

KSPIN_FLAG_FIXED_FORMAT

このピンが固定データ形式を使用することを示します。 データ形式を設定しようとすると、STATUS_INVALID_DEVICE_REQUESTが返されます。

KSPIN_FLAG_GENERATE_EOS_EVENTS

このピンが接続イベントのサポート要求を処理することを示します。

KSPIN_FLAG_RENDERER

このピンがフレームをレンダリングできることを指定します。

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

フィルター中心のフィルター ピンで指定した場合、対象のピンの種類の 1 つ以上のインスタンスに、データを処理するために使用可能なフレームが必要であることを示します。 KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSINGと相互に排他的です。

この動作は、KsPinAttachOrGate を使用して、手動で OR ゲートをピンのすべてのインスタンスのフレーム ゲートとして設定し、この OR ゲートをフィルターの AND ゲートに接続することによって取得できることに注意してください。

このフラグを使用する場合、ミニドライバーは、関連付けられているピン インスタンス KsPinAttachAndGate または KsPinAttachOrGate 呼び出すことはできません。 (フラグは、単純な OR ケースに対して効果的にこれを行います。Filter-Centric 処理も参照してください。

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

フィルター中心 ピンで指定した場合、フラグが設定された 1 つ以上の pin インスタンスが実行状態のときに処理が発生する可能性があることを示します。 データを処理するには、停止していないピンがすべて少なくとも一時停止している必要があります。 対応するピンが出力ピンであり、このピンがインプレース変換に関係している場合は、このフラグを使用しないでください。

KSPIN_FLAG_DENY_USERMODE_ACCESS

このフラグは、この特定のピンへのユーザー モード アクセスを禁止します。

KSPIN_FLAG_IMPLEMENT_CLOCK

このピンが、グラフ マネージャーがマスター クロックとして選択できるクロックを公開することを示します。 AVStream クロックも参照してください。

InstancesPossible

このピンのインスタンスの最大数を含む ULONG 型の値を指定します。 指定された型のこの数を超えるピンをインスタンス化しようとすると失敗します。 インスタンス化されたピンの数に制限を設定しない場合は、KSINSTANCE_INDETERMINATEに設定します。

InstancesNecessary

フィルターが適切に機能するために最小処理レベル以上の状態である必要がある、特定のピンの種類の最小ピン数を含む ULONG 型の値を指定します。 既定では、最小処理レベルはKSSTATE_PAUSEですが、ミニドライバーは、この構造体の Flags メンバーをKSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLYまたはKSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATEに設定することで、既定の動作を変更できます。 この種類のピンのインスタンス数がないフィルターの状態を変更しようとすると失敗します。 「解説」セクションの追加情報を参照してください。

AllocatorFraming

このピン型のアロケーター フレーム要件を含む KSALLOCATOR_FRAMING_EX 構造体へのポインター。 アロケーター フレームは、メモリアラインメント要件、最大フレーム サイズ、最小フレーム サイズなどの項目を指定します。 このメンバーは、このピンがアロケーター フレーム プロパティをサポートしていないことを示す NULLを できます。

IntersectHandler

データ交差を処理するドライバー定義 KStrIntersectHandlerEx 関数へのポインター。 このメンバーが NULL場合、ピンは指定子KSDATAFORMAT_SPECIFIER_NONEを持つデータ範囲のデータ交差クエリを処理します。 交差ハンドラー関数は、クエリから 1 つのデータ範囲を受け取り、データ範囲のピン リストから 1 つのデータ範囲を受け取ります。 これらの範囲の型、サブタイプ、および指定子 GUID は一致することが保証されますが、一部はワイルドカードである場合があります。 この関数は、データ範囲が一致しないことを示すか、2 つのデータ範囲の交差部分で最適なデータ形式を生成します。 詳細については、AVStream のデータ範囲交差の を参照してください。

備考

KSPIN_DESCRIPTOR_EXの InstancesNecessary メンバーがアナログ ビデオ入力ピンに対して 0 に設定されている場合、AMCap と Blink は AVStream ドライバーでチューナおよびクロスバー インターフェイスを見つけられない可能性があります。 この問題を解決するには、このピン InstancesNecessary を 1 に設定します。

アロケーター フレーミングでは、アロケーター フレームでアライメントまたはサイズが特定の値であることが絶対に必要であると指定されているにもかかわらず、ピンのアロケーター フレーミング要件は無視される可能性があることに注意してください。 カーネル モード ドライバーが、それを割り当てるアップストリーム ユーザー モード フィルターに接続されていて、特定のアップストリーム フィルターのアロケーターがフレーム要件を理解していない場合は、これが発生する可能性があります (現在の特定の例には MPEG-2 スプリッターが含まれます)。

さらに、KSPIN_FLAG_DO_NOT_INITIATE_PROCESSINGを指定し、ピンが標準トランスポート メカニズムを使用する場合は、処理オブジェクトが必要です。 つまり、(フィルター レベルまたはピン レベルで) 何らかのプロセス ディスパッチが提供されている必要があります。この関数が呼び出されない場合でも、この状況で指定する必要があります。

AVStream と AVStream Splittersのデータ範囲の交差を します。

必要条件

要件 価値
ヘッダー ks.h (Ks.h を含む)

関連項目

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject