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 をインクルードすること。