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_HEADERDataUsed メンバーを参照してください。 「KSSTREAM_POINTER_OFFSET」も参照してください。

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

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

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

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

KSPIN_FLAG_SPLITTER

このピン (出力ピン) がスプリッターであることを示します。 このフラグを指定するピンは、1 より大きい可能性のあるインスタンスの数を示す必要があります。 このピンの 2 つ目のインスタンスが作成されると、AVStream によってスプリッターが自動的に設定され、元のピンに送信されたフレームが新しいピンにコピーされます。 このコピーは AVStream によって自動的に行われることに注意してください。 通常クライアントは NULL 以外の DelegateBranch ポインターと 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 ケースに対して効果的にこれを行います。 「フィルター中心の処理」も参照してください。

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

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

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 の場合、pin は指定子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 スプリッターのデータ範囲の交差

要件

要件
Header ks.h (Ks.h を含む)

こちらもご覧ください

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject