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構造体に及ぼす影響については、
KSPIN_FLAG_DISTINCT_TRAILING_EDGE
ピンに関連付けられているキューに末尾のエッジ ストリーム ポインターが必要であることを示します。 末尾のエッジ ポインターは、古いデータに複製ポインターが存在しない限り、キュー内の最も古いデータを指す特別なストリーム ポインターです。 先頭と末尾のエッジ ストリーム ポインターの間のウィンドウ内のデータ フレームは、少なくとも 1 つの参照カウントを持つと見なされ、
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
AVStream がこのピンを呼び出して、ピンがKSSTATE_RUNの場合にのみ処理することを示します。 最小処理状態を一時停止から実行に変更します。 AVStream はこのピンを呼び出して、フレームが到着した場合でも、 実行状態に移行するように指示した後、
KSPIN_FLAG_SPLITTER
このピン (出力ピン) がスプリッターであることを示します。 このフラグを指定するピンは、1 より大きい可能性のあるインスタンスの数を示す必要があります。 このピンの 2 番目のインスタンスが作成されると、AVStream は、元のピンに送信されたフレームが新しいピンにコピーされるように、スプリッターを自動的に設定します。 このコピーは AVStream によって自動的に行われることに注意してください。 通常、クライアント
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 ゲートに接続することによって取得できることに注意してください。
このフラグを使用する場合、ミニドライバーは、関連付けられているピン インスタンス
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
備考
KSPIN_DESCRIPTOR_EXの InstancesNecessary メンバーがアナログ ビデオ入力ピンに対して 0 に設定されている場合、AMCap と Blink は AVStream ドライバーでチューナおよびクロスバー インターフェイスを見つけられない可能性があります。 この問題を解決するには、このピン InstancesNecessary を 1 に設定します。
アロケーター フレーミングでは、アロケーター フレームでアライメントまたはサイズが特定の値であることが絶対に必要であると指定されているにもかかわらず、ピンのアロケーター フレーミング要件は無視される可能性があることに注意してください。 カーネル モード ドライバーが、それを割り当てるアップストリーム ユーザー モード フィルターに接続されていて、特定のアップストリーム フィルターのアロケーターがフレーム要件を理解していない場合は、これが発生する可能性があります (現在の特定の例には MPEG-2 スプリッターが含まれます)。
さらに、KSPIN_FLAG_DO_NOT_INITIATE_PROCESSINGを指定し、ピンが標準トランスポート メカニズムを使用する場合は、処理オブジェクトが必要です。 つまり、(フィルター レベルまたはピン レベルで) 何らかのプロセス ディスパッチが提供されている必要があります。この関数が呼び出されない場合でも、この状況で指定する必要があります。
AVStream と
必要条件
要件 | 価値 |
---|---|
ヘッダー | ks.h (Ks.h を含む) |