KSSTREAM_HEADER 構造体 (ks.h)
KSSTREAM_HEADER構造体は、ストリーミング ドライバー ピンから読み取られるか、ストリーミング ドライバー ピンに書き込まれるデータのパケットを記述する可変長構造体です。
構文
typedef struct {
ULONG Size;
ULONG TypeSpecificFlags;
KSTIME PresentationTime;
LONGLONG Duration;
ULONG FrameExtent;
ULONG DataUsed;
PVOID Data;
ULONG OptionsFlags;
ULONG Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
メンバー
Size
構造体のサイズをバイト単位で指定します。 これは、少なくとも sizeof(KSSTREAM_HEADER) である必要があります。
TypeSpecificFlags
データ形式に固有のフラグを指定します。 TypeSpecificFlags で現在サポートされているフラグは、KS_AM_UseNewCSSKeyのみです。 このフラグは、ヘッダーの直後にあるデータ サンプルが、新しいタイトル キーが適用される最初のデータ サンプルであるため、ハードウェア デコーダーが次のキューに入っている CSS (コンテンツ スクランブル システム) 復号化キーに切り替える必要があることを示します。
PresentationTime
関連するストリーム バッファーの表示時間を 100 ナノ秒単位で指定する KSTIME 構造体。 詳細については、「解説」を参照してください。
Duration
プレゼンテーション時間 (100 ナノ秒単位) と同じ単位で、このストリーム セグメントの継続時間を指定します。 使用しない場合は 0 に設定します。
FrameExtent
フレーム全体のサイズを指定します。 フレーム・エクステント内の領域はフィルターで使用でき、ストリーム操作の結果の有効なデータ・サイズは DataUsed メンバーに反映されます。
DataUsed
書き込み操作の場合、このメンバーは、下位レベルのドライバーにフレームを送信するときに有効なフレーム内のバイト数を指定します。 ヘッダーは書き込み操作では変更されません。ただし、IO_STATUS_BLOCK 構造体の Information メンバーには、実際に書き込まれた合計バイト数が含まれます。 読み取り操作の場合、このメンバーは下位レベルのドライバーにフレームを送信するときに使用されず、0 に設定する必要があります。 戻り値の場合、このメンバーには、このフレームに実際に入力されたバイト数が含まれており、IO_STATUS_BLOCK構造体の Information メンバーには、実際に使用されるヘッダーのリストのサイズが含まれます。 ミニドライバーが KSPIN_DESCRIPTOR_EXでKSPIN_FLAG_GENERATE_MAPPINGSを指定する場合、ストリーム ポインターがフレームを超えて拡張されると、 DataUsed は Count から Remaining ( KSSTREAM_POINTER_OFFSET のメンバー) に設定されることに注意してください。 ドライバーがこのフラグを指定しない場合、ミニドライバーは DataUsed の設定を担当します。
Data
データ バッファーの仮想アドレスを指定します。
OptionsFlags
データ ストリームのさまざまな属性を指定します。 OptionsFlags メンバーには、次の表に示す値を指定できます。
値 | 説明 |
---|---|
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY | このパケットに含まれるデータの前に、データ ストリームに不連続性があることを指定します。 これは、フィルターがデータを処理する前に内部状態をリセットする必要がある可能性があることを意味します。 実際のデータ バッファーをアタッチする必要はありません。 |
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID | この構造体の Duration メンバーが有効であることを指定します。 |
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE | このフレームが写真シーケンスの末尾を表していることを示します。 |
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM | このフレームがデータ ストリームの末尾を表していることを示します。 |
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE | ストリームが一時停止されている場合は、このバッファーをフラッシュする必要があります。 このフラグは、たとえばライブ データ ソースによって使用され、一時停止すると現在のデータが古くなります。 |
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO | KSSTREAM_HEADERの後にKS_FRAME_INFO構造があることを示します。 |
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA | このデータ バッファーは、ループされたデータの先頭です。 ドライバーは、明示的に停止するまで、このデータをループする必要があります。 |
KSSTREAM_HEADER_OPTIONSF_METADATA | KSSTREAM_HEADERの後にKS_FRAME_INFOに続くKSSTREAM_METADATA_INFOがあることを示します。 このフラグは、KSPROPERTY_CAMERACONTROL_EXTENDED_METADATAがサポートされている場合にのみ存在します。 |
KSSTREAM_HEADER_OPTIONSF_PREROLL | このバッファー内のデータは、デバイスの状態を準備するために使用されます。 これはストリーム固有のオプションです。 |
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT | データ ストリームは、スプライシングの自然なポイントにあります。 クライアントは、たとえば、MPEG ビデオなどのフレーム間圧縮を使用するデータを送信するときに、この時点で接続しても安全であることを示すためにこれを使用します。 |
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY | このパケットの後のデータ ストリームに不連続性があります。 このフラグは、ストリーム データの末尾を示す位置指向インターフェイスに使用できます。 実際のデータ バッファーをアタッチする必要はありません。 |
KSSTREAM_HEADER_OPTIONSF_TIMEVALID | この構造体の PresentationTime メンバーが有効であることを指定します。 このバッファーに有効なタイムスタンプが関連付けられていることを示します。 |
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED | このストリームのデータ形式が変更されたことを示します。 このフラグが設定されている場合、 Data メンバーには、新しい形式を含む KSDATAFORMAT 構造体が含まれます。 このフラグは、以前に動的型の変更をネゴシエートしたストリームに対してのみ有効です。 書き込み操作の場合は、メディア サンプルの代わりに新しいデータ形式を含めます。 メディア固有の拡張サイズが変更された場合、このヘッダーは、指定されたストリーム要求のヘッダーの一覧の最後のヘッダーである必要があります。 読み取り要求中は、新しい形式がKSPROPERTY_CONNECTION_DATAFORMATによって取得されるまで、それ以上の I/O は保留中のままになります。 書き込み操作の場合、ヘッダーを拡張することはできません。また、書き込み操作の唯一のヘッダーにする必要があります。 |
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER | ストリーム ヘッダーの Data メンバーが、 VRAM_SURFACE_INFO型の構造体を指していることを指定します。 システム提供の KS プロキシ モジュールは、このフラグを 設定して、VRAM に直接キャプチャしていることを示します。 |
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER | KSSTREAM_HEADERの Data メンバーに、元のバッファーのカーネル モード コピーが含まれていることを指定します。 Ksproxy は、WVDDM (Windows Vista ディスプレイ ドライバー モデル) キャプチャ中の小さなデータ転送に対してこのフラグを設定します。 このフラグが設定されていない場合、KS は データ バッファーへの直接 I/O を使用します。 |
Reserved
内部使用のために予約されています。
注釈
この構造は、データ パケット内のデータの種類に固有の追加情報によってメモリ内で実行できます。
通常、プレゼンテーション時間は 100 ナノ秒単位です。ただし、今回の標準形式はデータ形式に基づいています。 KSSTREAM_HEADERのスケーリング小数部として を使用して、プレゼンテーション時間を正規化できます。PresentationTime.Numerator をKSSTREAM_HEADERで割った値です。PresentationTime.Denominator .
丸め誤差を減らすために、変換では最初に分子を使用し、次に分母を使用する必要があります。 たとえば、オーディオ ストリームでは、現在の時刻がデータ ストリーム内のバイト オフセットとして表示される場合があります。
#define BITS_PER_BYTE8
#define NANOSECONDS10000000
StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;
IOCTL_KS_READ_STREAMでは、ストリーム ヘッダーの一部が呼び出しによって入力されます。 各KSSTREAM_HEADER。DataUsed 要素には、読み取られた実際のバイト数 (各KSSTREAM_HEADER以下) が含まれます。FrameExtent。 pIrp-IoStatus.Information> 要素には、返されるヘッダー データの合計サイズ (少なくとも 1 つの sizeof(KSSTREAM_HEADER) が含まれます。
IOCTL_KS_WRITE_STREAMでは、メンバー要素を初期化し、各KSSTREAM_HEADERする必要があります。DataUsed 要素には、書き込むバイト数が含まれます。 書き込まれた実際の合計バイト数は、pIrp-IoStatus.Information> で返されます。 これは、すべてのKSSTREAM_HEADERの合計以下です。ヘッダー内の DataUsed 要素。
IKsReferenceClock インターフェイスを使用して、KSSTREAM_HEADERの PresentationTime メンバーに配置するタイムスタンプを取得する場合は、「AVStream Clocks」を参照してください。
要件
要件 | 値 |
---|---|
Header | ks.h (Ks.h を含む) |