VIDEOINFOHEADER2 構造体
VIDEOINFOHEADER2 構造体は、インターレース、コピー保護、ピクセルのアスペクト比情報を含む、ビデオ イメージのビットマップと色情報を記述する。
構文
typedef struct tagVIDEOINFOHEADER2 {
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
DWORD dwInterlaceFlags;
DWORD dwCopyProtectFlags;
DWORD dwPictAspectRatioX;
DWORD dwPictAspectRatioY;
union {
DWORD dwControlFlags;
DWORD dwReserved1;
};
DWORD dwReserved2;
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER2;
メンバ
rcSource
転送先バッファに送るソース ストリームの使用部分を指定する RECT 構造体。レンダラでは、このフィールドを使って、デコーダに伸縮またはクリッピングを指示できる。詳細については、「ビデオ レンダラにおける転送元矩形と転送先矩形」を参照すること。
rcTarget
転送先バッファのどの部分を使うかを指定する RECT 構造体。
dwBitRate
ビデオ ストリームのおおよそのデータ レート (ビット/秒)。
dwBitErrorRate
ビデオ ストリームのデータ エラー レート (ビット/秒)。
AvgTimePerFrame
ビデオ フレームの平均表示時間 (100 ナノ秒単位)。詳細については、「VIDEOINFOHEADER 構造体」の「注意」を参照すること。
dwInterlaceFlags
ビデオをインターレース処理する方法を指定するフラグ。このメンバは、以下のフラグのビットごとの組み合わせ (0 個でもよい) である。グループ 2 内のフラグどうしは両立せず、グループ 3 内のフラグどうしも両立しない (グループ 2 内のフラグは推奨されない)。グループ 1 内のフラグどうしは互いに組み合わせたり、グループ 2 やグループ 3 の 1 つのフラグと組み合わせることができる。フラグの組み合わせについては、このページの最後に記載されている表を参照すること。
フラグ | 説明 |
グループ 1 | |
AMINTERLACE_IsInterlaced | ストリームがインターレース方式である。このフラグがオフの場合、ビデオはプログレッシブなので、他のビットは意味がない。 |
AMINTERLACE_1FieldPerSample | 各メディア サンプルに 1 つのフィールドが含まれる。このフラグがオフの場合は、各メディア サンプルには 2 つのフィールドが含まれる。 |
AMINTERLACE_Field1First | フィールド 1 が先。このフラグがオフの場合は、フィールド 2 が先になる (先頭フィールドは、PAL ではフィールド 1、NTSC ではフィールド 2)。 |
グループ 2 | |
AMINTERLACE_FieldPatField1Only | ストリームにフィールド 2 はない。 |
AMINTERLACE_FieldPatField2Only | ストリームにフィールド 1 はない。 |
AMINTERLACE_FieldPatBothRegular | フィールド 1 ごとにフィールド 2 が必ず 1 つある。 |
AMINTERLACE_FieldPatBothIrregular | ストリームにはフィールド 1 とフィールド 2 が不規則に配置されている。 |
グループ 3 | |
AMINTERLACE_DisplayModeBobOnly | ディスプレイ モードはボブのみ。 |
AMINTERLACE_DisplayModeWeaveOnly | ディスプレイ モードはウィーヴのみ。 |
AMINTERLACE_DisplayModeBobOrWeave | ボブとウィーブの両方のモードがある。 |
未定義のフラグは 0 に設定すること。0 以外の場合、接続は拒否される。
dwCopyProtectFlags
ストリームの重複を制限しなければならないことを示す AMCOPYPROTECT_RestrictDuplication 値 (0x00000001) が設定されたフラグ。未定義の場合は、0 に指定すること。0 以外の場合、接続は拒否される。
dwPictAspectRatioX
画像のアスペクト比 (X ディメンジョン)。たとえば、16 × 9 インチ ディスプレイの場合は 16。
dwPictAspectRatioY
画像のアスペクト比 (Y ディメンジョン)。たとえば、16 × 9 インチ ディスプレイの場合は 9。
dwControlFlags, dwReserved1
このフィールドは元は dwReserved と呼ばれていたもので、0 に設定する必要がある。このフィールドは dwControlFlags という名前に変更され、現在は次のフラグのビットごとの OR の組み合わせ (0 個でもよい) を設定する必要がある。
AMCONTROL_USED | 0x00000001 |
AMCONTROL_PAD_TO_4x3 | 0x00000002 |
AMCONTROL_PAD_TO_16x9 | 0x00000004 |
これらのフラグは、出力矩形のアスペクト比を調べるためにデコーダが使う。AMCONTROL_USED フラグを使って、これらのフラグがサポートされているかどうかをテストする。ソース フィルタは、AMCONTROL_USED フラグを設定して、ダウンストリーム ピンで QueryAccept が成功するかどうかを調べる必要がある。拒否された場合、AMCONTROL フラグは使えないので、フィールドは 0 に設定する必要がある。AMCONTROL_PAD_TO_4x3 フラグは、イメージを 4x3 の領域に合うようにパディングして表示する必要があることを示している。AMCONTROL_PAD_TO_16x9 フラグは、イメージを 16x9 の領域に合うようにパディングして表示する必要があることを示している。これらのフラグの使い方については、「MPEG デコーダによる変換の前処理」を参照すること。
dwReserved2
将来的な使用のために予約されている。ゼロでなければならない。
bmiHeader
ビデオ イメージのビットマップの色情報およびディメンジョン情報が格納された BITMAPINFOHEADER 構造体。
注意
dwInterlaceFlags フィールドは、ビデオがインターレース方式かどうかを示し、さらに、インターレース方式であればメディア サンプル内のフィールドのフォーマットを示している。次の表に、オーバーレイ ミキサ フィルタと Video Mixing Renderer フィルタについて有効なインターレース モードを示す。
ディスプレイ モード | インターレース フラグ | 説明 |
プログレッシブ フレーム | なし | ビデオ ストリームはインターレース方式ではない。 |
非インターリーブ ボブ | AMINTERLACE_IsInterlaced |
AMINTERLACE_1FieldPerSample | AMINTERLACE_DisplayModeBobOnly |
ビデオ ストリーム全体がインターレース方式で、各メディア サンプルには 1 つのビデオ フィールドが含まれている。 |
インターリーブ ボブ | AMINTERLACE_IsInterlaced |
AMINTERLACE_DisplayModeBobOnly |
ビデオ ストリーム全体がインターレース方式である。各メディア サンプルには 2 つのビデオ フィールドが含まれている。メディア サンプルのフラグは最初に表示するフィールドを示す。 |
ウィーブ | AMINTERLACE_IsInterlaced |
AMINTERLACE_FieldPatBothRegular | AMINTERLACE_DisplayModeWeaveOnly |
ビデオ ストリームはインターレース方式で、各サンプルには 2 つのビデオ フィールドが含まれている。フィールドは非インターレース化すべきではない。 |
ボブまたはウィーブ | AMINTERLACE_IsInterlaced |
AMINTERLACE_DisplayModeBobOrWeave |
ビデオ ストリームは、プログレッシブとイターレース コンテンツとの間で異なる。各メディア サンプルには、プログレッシブ フレームまたは 2 つのビデオ フィールドのいずれかが含まれる。メディア サンプルのフラグは、コンテンツを表示する適切な方法を示している。 |
ビデオがインターレース方式の場合、メディア サンプルには、レンダリング要件に加えて、サンプルのコンテンツ (フィールド 1 またはフィールド 2 など) を説明するフラグが含まれる。これらのフラグを指定するには、各メディア サンプルの AM_SAMPLE2_PROPERTIES 構造体の dwTypeSpecificFlags メンバを設定する。次の表に、前の表に記載された各ディスプレイ モードに対応する有効なメディア サンプル フラグを示す。
ディスプレイ モード | メディア サンプル プロパティ | |
---|---|---|
プログレッシブ フレーム | なし | |
非インターリーブ ボブ | AM_VIDEO_FLAG_FIELD1 または AM_VIDEO_FLAG_FIELD2 | |
インターリーブ ボブ | フィールド 1 が先 | AM_VIDEO_FLAG_FIELD1FIRST |
フィールド 2 が先 | なし | |
ウィーブ | AM_VIDEO_FLAG_WEAVE | |
ボブまたはウィーブ | ボブ。フィールド 1 が先 | AM_VIDEO_FLAG_FIELD1FIRST |
ボブ。フィールド 2 が先 | なし | |
ウィーブ | AM_VIDEO_FLAG_WEAVE |
dwInterlaceFlags のフィールド パターン フラグを確認するには、次のようにビット マスク AMINTERLACE_FieldPatternMask を使う。
switch (dwInterlaceFlags & AMINTERLACE_FieldPatternMask)
{
case AMINTERLACE_FieldPatField1Only:
// ストリームにフィールド 2 はない。
case AMINTERLACE_FieldPatField2Only:
// ストリームにフィールド 1 はない。
case AMINTERLACE_FieldPatBothRegular:
// フィールド 1 ごとにフィールド 2 が必ず 1 つある。
case AMINTERLACE_FieldPatBothIrregular:
// フィールド 1 とフィールド 2 が不規則に配置されている。
}
dwInterlaceFlags のディスプレイ モード フラグを確認するには、次のようにビット マスク AMINTERLACE_DisplayModeMask を使う。
switch (dwInterlaceFlags & AMINTERLACE_DisplayModeMask)
{
case AMINTERLACE_DisplayModeBobOnly:
// ディスプレイ モードはボブのみ。
case AMINTERLACE_DisplayModeWeaveOnly:
// ディスプレイ モードはウィーブのみ。
case AMINTERLACE_DisplayModeBobOrWeave:
// ボブとウィーブの両方のモードがある。
}
要件
Dvdmedia.h をインクルードすること。