KS_FRAME_INFO構造体 (ksmedia.h)
KS_FRAME_INFO 構造体は、ビデオ ストリームの KSSTREAM_HEADER 構造を拡張します。
構文
typedef struct tagKS_FRAME_INFO {
ULONG ExtendedHeaderSize;
DWORD dwFrameFlags;
LONGLONG PictureNumber;
LONGLONG DropCount;
HANDLE hDirectDraw;
HANDLE hSurfaceHandle;
RECT DirectDrawRect;
union {
LONG lSurfacePitch;
DWORD Reserved1;
};
DWORD Reserved2;
union {
struct {
DWORD Reserved3;
DWORD Reserved4;
};
ULONGLONG FrameCompletionNumber;
};
} KS_FRAME_INFO, *PKS_FRAME_INFO;
メンバーズ
ExtendedHeaderSize
この構造体のサイズをバイト単位で指定します。
dwFrameFlags
キャプチャされたフレームに関する追加情報を示すフラグを指定します。 キャプチャ中に、ミニドライバーは、このメンバーを、ksmedia.hで定義されている次のいずれかの値に設定します。
旗 | 意味 |
---|---|
KS_VIDEO_FLAG_FRAME | 完全なフレームを示します。 |
KS_VIDEO_FLAG_FIELD1 | 2 フィールド シーケンスのフィールド 1 を示します。 |
KS_VIDEO_FLAG_FIELD2 | 2 フィールド シーケンスのフィールド 2 を示します。 |
KS_VIDEO_FLAG_I_FRAME | 他のフレームを参照せずに、このフレームを完全にデコードできることを示します。 |
KS_VIDEO_FLAG_P_FRAME | これが予測フレームであることを示します。 |
KS_VIDEO_FLAG_B_FRAME | これは双方向フレームであることを示します。 |
PictureNumber
現在の図番号を表すカウントを指定します。 KSSTATE_ACQUIREへの移行時に、この値を初期化または更新します。
DropCount
キャプチャされなかった画像の数を指定します。 キャプチャ中に、ミニドライバーはこのメンバーを設定します。 フレームをキャプチャする必要があるが、キャプチャされなかった場合は常に、このカウンターをインクリメントする必要があります。この状態は、通常、キャプチャ中にバッファーが使用できない場合に発生します。 KSSTATE_ACQUIREへの移行時に、この値を初期化または更新します。
hDirectDraw
DirectDraw へのユーザー モード ハンドルを指定します。 このハンドルは、プレビューまたはオーバーレイの目的で DirectDraw サーフェイスにキャプチャする場合にのみミニドライバーに提供されます。
hSurfaceHandle
DirectDraw サーフェイスに対するユーザー モード ハンドルを指定します。 このハンドルは、プレビューまたはオーバーレイの目的で DirectDraw サーフェイスにキャプチャする場合にのみミニドライバーに提供されます。
DirectDrawRect
ロックされている DirectDraw サーフェスの部分を指定します。 通常、これはサーフェス全体です。
lSurfacePitch
サーフェス ピッチ (ストライドとも呼ばれます) が含まれています。
Reserved1
予約済みであり、ミニドライバーでは使用しないでください。
Reserved2
予約済みであり、ミニドライバーでは使用しないでください。
Reserved3
予約済みであり、ミニドライバーでは使用しないでください。
Reserved4
予約済みであり、ミニドライバーでは使用しないでください。
FrameCompletionNumber
完了したキュー内のフレームの識別シーケンス番号。 この番号は、適切なフレーム順序を確認するために使用されます。 この値が 0 の場合、フレームは取り消されました。
このメンバーは、Windows 8.1 以降で使用できます。
備考
KS_FRAME_INFO 構造体は、キャプチャされたフレームに関する情報を返す方法と、DirectDraw サーフェイスにキャプチャするときに使用される Microsoft DirectDraw ハンドルを渡す方法を提供します。
PictureNumber メンバー数は、現在の画像の数を表します。これは、デバイスに応じて次の 2 つの方法のいずれかで計算されます。
ストリームが開始されてからの時間を測定し、フレーム期間で除算します。 この方法は、独自のクロックを提供しないデバイスに適しています。 例えば:
PictureNumber = ElapsedTime / FrameDuration;
キャプチャされたフレームの数とドロップされたフレームの数をまとめて追加します。 この方法は、独自のクロックを提供するデバイスに適しています。 例えば:
PictureNumber = FramesCaptured + FramesDropped;
PictureNumber 計算し、DropCount をするときは、ストリームを開いたときに指定されたフレーム期間を使用することが重要です。これは、デバイスが実際にイメージを生成する速度と必ずしも一致しない可能性があります。 たとえば、USB カメラでは 7.5 fps の画像しか生成できませんが、クライアントは 8 fps でストリームを開く可能性があります。 この場合、すべての計算で 8 fps の数値を使用する必要があります。
PictureNumber と DropCount の更新 詳細については、「ビデオのキャプチャ」を参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ksmedia.h (Ksmedia.h を含む) |