ビデオ インターレース

このトピックでは、メディア ソースとデコーダーでインターレースビデオ コンテンツを処理する方法について説明します。

インターレースビデオを正しくデコードしてレンダリングするには、次の情報が必要です。

  • プログレッシブまたはインターレース。 ビデオ ストリームには、プログレッシブ フレーム、インターレース フレーム、または両方の組み合わせを含めできます。

  • フィールドの支配。 フィールドの支配は、最初に表示されるフィールド、上のフィールド、または下のフィールドを表します。

  • 最初のフィールドを繰り返します。 このフラグは、フレームがプログレッシブでストリームがインターレースされている場合に、3:2 プルダウンで使用されます。 このコンテキストでは、最初のフィールドは上または下のフィールドにできます。

  • インターリーブ フィールドまたは単一フィールド。 サンプルでは、1 つのフィールドまたは 2 つのインターリーブ フィールドを保持できます。 サンプルに 1 つのフィールドが含まれている場合、サンプルの高さはフレームの高さの半分になります。サンプルにはフレームのスキャン行の半分だけが含まれているためです。 ソース コンテンツの特性に特に指定がない限り、インターリーブ フィールドをお勧めします。

これらの特性は、1 つのサンプルから次のサンプルに変更できます。 ただし、ビデオ コンポーネントは、ストリーミングを開始する前に、コンテンツ全体について何かを知っている必要があります。 たとえば、ビデオがインターレースされている場合、拡張ビデオ レンダラー (EVR) は、インターレース解除のためにビデオ メモリを予約する必要があります。 一方、ビデオが完全にプログレッシブ フレームである場合、EVR はレンダリング パイプラインを最適化できます。 パイプラインにインターレース解除ステップを追加すると、レンダリングの待機時間が長くなる。

インターレースに関する情報は、次の 2 つの場所に格納されます。

  • ストリーム内のインターレースに関する一般的な情報は、メディアの種類に配置されます。 メディアの種類の詳細については、「メディアの種類」 を参照してください

  • 各サンプルで変更できる情報は、属性としてサンプルに配置されます。 サンプルの詳細については、「メディア サンプル」 を参照してください

メディアの種類のインターレース情報

メディア の _ 種類の MF MT _ INTERLACE _ MODE 属性は、ストリーム全体がどのようにインターレースされるのかについて説明します。 この属性の値は 、MFVideoInterlaceMode 列挙型のメンバーです。 ビデオ メディアの種類には、常にこの属性が必要です。

  • ストリームにプログレッシブ フレームのみを含み、インターレース フレームがない場合は、MFVideoInterlace Progressive を使用 _ します。
  • ストリームにインターレース されたフレームだけが含まれている場合、すべてのサンプルに 2 つのインターリーブ フィールドが含まれている場合は、MFVideoInterlace _ FieldInterleavedUpperFirst または MFVideoInterlace _ FieldInterleavedLowerFirst を使用します。
  • ストリームにインターレース フレームだけが含まれている場合、すべてのサンプルに 1 つのフィールドが含まれている場合は、MFVideoInterlace _ FieldSingleUpper または MFVideoInterlace _ FieldSingleLower を使用します。 フィールドが上位と下位の間で切り替わる場合、これら 2 つの値のどちらが使用されるかは関係ありません。 形式に上位フィールドまたは下位フィールドが含まれている場合は、コンテンツに対応する値を設定します。
  • ストリームにインターレースフレームとプログレッシブ フレームの組み合わせが含まれている場合、またはフィールドの支配が切り替わる場合は、メディアの種類を MFVideoInterlace _ MixedInterlaceOrProgressive に設定します。 各フレームを記述するには、サンプル属性を使用します。

この属性の概要を次の表に示します。

MF _ MT _ インターレース _ モード インター レース。 サンプル 最初のフィールド
MFVideoInterlace _ プログレッシブ いいえ プログレッシブ フレーム 適用できません
MFVideoInterlace _ FieldInterleavedUpperFirst はい インターリーブ フィールド 上位の最初
MFVideoInterlace _ FieldInterleavedLowerFirst はい インターリーブ フィールド Lower first
MFVideoInterlace _ FieldSingleUpper はい 単一フィールド 上位の最初
MFVideoInterlace _ FieldSingleLower はい 単一フィールド Lower first
MFVideoInterlace _ MixedInterlaceOrProgressive 異なる場合があります インターリーブ フィールドまたはプログレッシブ フレーム 異なる場合があります

インターリーブ されたフィールドと 1 つのフィールドを混在することはできません。 1 つから別のメディアに切り替えるには、メディアの種類を変更する必要があります。

サンプルのインターレース フラグ

あるサンプルから次のサンプルに変更できる情報は、サンプル属性を使用して示されます。 これらの属性 を取得または設定するには、IMFSample インターフェイスを使用します。

このセクションに記載されているインターレース属性には、すべてブール値があります。 実際には、これらの各属性には 、TRUE、FALSE、 または設定されていない3 つの値を指定できます。 属性が設定されていない場合、値はメディアの種類から取得されます。 属性が設定されている場合、値はメディアの種類をオーバーライドします。 フラグとメディアの種類の一部の組み合わせが無効です。

属性 説明
MFSampleExtension_Interlaced TRUE 場合、フレームはインターレースされます。 FALSE の場合、フレームはプログレッシブになります。
メディアの種類が選択されている場合は、すべてのサンプルでこの属性を設定MFVideoInterlace_MixedInterlaceOrProgressive。
MFSampleExtension_BottomFieldFirst このフラグの意味は、サンプルにインターリーブ フィールドと単一フィールドの関係によって異なります。
  • インターリーブ フィールド: TRUE の場合、下位フィールドが最初になります。 FALSE の場合、上位フィールドが最初になります。
  • 単一フィールド: TRUE の場合、サンプルには下位フィールドが含まれます。 FALSE の場合、サンプルには上位フィールドが含まれている。
メディアの種類が 1 つ以上の値である場合は、すべてのインターレース MFVideoInterlace_FieldSingleUpperこの属性MFVideoInterlace_FieldSingleLower設定MFVideoInterlace_MixedInterlaceOrProgressive。
MFSampleExtension_RepeatFirstField TRUE の場合、最初のフィールドが繰り返されます。 FALSE の場合、または設定されていない場合、最初のフィールドは繰り返し実行されます。
MFSampleExtension_SingleField TRUE の場合、サンプルには 1 つのフィールドが含まれる。 FALSE の場合、サンプルにはインターリーブ フィールドが含まれます。

次の表は、メディアの種類に基づいて、必須、省略可能、または禁止されているフラグを示しています。

メディアの種類 インターレース フラグ BottomFieldFirst フラグ RepeatFirstField フラグ SingleField フラグ
プログレッシブ 省略可能。が設定されている場合、 は FALSE である 必要があります 設定しない。 設定しない。 設定しない。
インターリーブ フィールド 省略可能。が設定されている場合、 は TRUE である 必要があります 省略可能。が設定されている場合、 はメディアの種類と一致する必要があります。 設定しない。 省略可能。が設定されている場合、 は FALSE である 必要があります
1 つのフィールド 省略可能。が設定されている場合、 は TRUE である 必要があります 必須。 設定しない。 TRUE に設定します
混在 必須。 必須。 必須。 省略可能。が設定されている場合、 は FALSE である 必要があります

属性が省略可能な場合、メディアの種類によって情報が既に定義されています。 属性を一致に設定すると有効ですが、必須ではありません。

たとえば、メディアの種類が MFVideoInterlace Progressive の場合、ストリーム内のすべてのフレームがプログレッシブ _ である必要があります。 したがって 、MFSampleExtension _ Interlaced 属性を FALSE に設定するか、属性を設定しないままにできます。

推奨事項

このセクションでは、さまざまな種類のコンテンツに関する推奨事項について説明します。

  1. ビデオはすべてプログレッシブ フレームです。
  • メディアの種類を [MFVideoInterlace _ Progressive] に設定します。

  • MFSampleExtension _ Interlaced 属性を設定したり、すべてのフレームで FALSE に設定したりしない。

  • MFSampleExtension BottomFieldFirst、MFSampleExtension _ **_ RepeatFirstField、**または MFSampleExtension _ SingleField 属性は設定しない。

  1. ビデオはすべて、同じフィールド支配を持つインターレースフィールドです。 サンプルには、インターリーブフィールドが含まれています。
  • メディアの種類を [MFVideoInterlace _ FieldInterleavedUpperFirst] または [MFVideoInterlace _ FieldInterleavedLowerFirst] に設定します。

  • MFSampleExtension _ Interlaced 属性を設定したり、すべてのフレームで TRUE に設定したりしない。

  • MFSampleExtension _ BottomFieldFirst 属性を設定したり、メディアの種類に合わせてすべてのフレームの値を設定したりしません。

  • MFSampleExtension _ RepeatFirstField 属性を設定したり、すべてのフレームで FALSE に設定したりしない。

  • MFSampleExtension _ SingleField 属性を設定したり、すべてのフレームで FALSE に設定したりしない。

  1. ビデオには、インターレースフレームとプログレッシブ フレームの組み合わせが含まれています。フィールドが繰り返され、フィールドの支配が異なります (DVD ビデオなど)。
  • メディアの種類を [MFVideoInterlace _ MixedInterlaceOrProgressive] に設定します。

  • すべてのフレームで 、MFSampleExtension _ Interlaced 属性 、MFSampleExtension _ BottomFieldFirst 属性、 および MFSampleExtension _ RepeatFirstField 属性を設定します。

  • MFSampleExtension _ SingleField 属性を設定したり、すべてのフレームで FALSE に設定したりしない。

  1. ビデオはインターレースされ、サンプルには 1 つのフィールドが含まれています。
  • メディアの種類を [MFVideoInterlace _ FieldSingleUpper] または [MFVideoInterlace _ FieldSingleLower] に設定します。

  • すべてのフレームで 、MFSampleExtension _ BottomFieldFirst 属性を設定 します。

  • MFSampleExtension _ Interlaced 属性を設定したり、すべてのフレームで TRUE に設定したりしない。

  • MFSampleExtension _ RepeatFirstField 属性を設定したり、すべてのフレームで FALSE に設定したりしない。

  • MFSampleExtension _ SingleField 属性を設定したり、すべてのフレームで TRUE に 設定したりしない。

ほとんどのビデオ コンテンツは、これらのカテゴリの 1 つに分類されます。

MPEG-2 マッピング

MPEG-2 コンテンツの場合は、次のマッピングを使用して、MPEG-2 フラグをサンプル属性メディア ファンデーション変換します。

picture _ 構造体

サンプル属性
frame MFSampleExtension _SingleField = FALSE
top _ フィールド MFSampleExtension _SingleField = TRUE
MFSampleExtension _BottomFieldFirst = FALSE
bottom _ フィールド MFSampleExtension _SingleField = TRUE
MFSampleExtension _BottomFieldFirst = TRUE

プログレッシブ _ フレーム

サンプル属性
0 MFSampleExtension _インターレース = TRUE
1 MFSampleExtension _インターレース = FALSE

top _ field _ first

サンプル属性
0 MFSampleExtension _BottomFieldFirst = TRUE
1 MFSampleExtension _BottomFieldFirst = FALSE

最初のフィールド _ を繰り _ 返す

サンプル属性
0 MFSampleExtension _RepeatFirstField = FALSE
1 MFSampleExtension _RepeatFirstField = TRUE

Single-Fieldサンプル

メディアの種類が MFVideoInterlace _ FieldSingleUpper または MFVideoInterlace FieldSingleLower の場合は、各サンプルに 1 つのフィールドが含まれる _ ことを意味します。 ただし、メディアの種類はフレーム全体を表します。 したがって、各バッファーには、メディアの種類で指定されたフィールド行の数の半分だけが含まれます。 たとえば、メディアの種類でビデオが 720 × 480 と記述されている場合、各フィールドには 240 のスキャン行が含まれているため、各バッファーには 240 行のピクセルしか含め "ない" と表示されます。 単一フィールド サンプルを使用してメディアの種類を受け入れるコンポーネントを記述する場合は、バッファー内のデータにアクセスするときにこの事実を考慮する必要があります。

同じルールが、ジオメトリックアパーチャ(MF _ MT GEOMETRIC _ _ APERTURE 属性) と最小表示絞り (MF MT MINIMUM DISPLAY APERTURE 属性) _ _ _ にも _ 適用 されます。 これらの領域は、個々のフィールドではなく、フレーム全体の観点から指定されます。

DirectShowマッピング

このDirectShowサンプルごとのインターレース情報は 、AM _ SAMPLE2 _ PROPERTIES 構造体の dwTypeSpecificFlags メンバーに含まれている必要があります。 次の表は、 の同等の属性をメディア ファンデーション。

DirectShow サンプル フラグ メディア ファンデーションの属性
AM _ VIDEO _ FLAG _ INTERLEAVED _ FRAME MFSampleExtension _SingleField = FALSE
AM _ VIDEO _ FLAG _ FIELD1 MFSampleExtension _インターレース = TRUE
MFSampleExtension _SingleField = TRUE
MFSampleExtension _BottomFieldFirst = FALSE
AM _ VIDEO _ FLAG _ FIELD2 MFSampleExtension _インターレース = TRUE
MFSampleExtension _SingleField = TRUE
MFSampleExtension _BottomFieldFirst = TRUE
AM _ ビデオ _ フラグ _ の振り分け MFSampleExtension _インターレース = FALSE。 (このフラグは、ドライバーが 2 つのフィールドのインターレースを解除しなきを示します)。
AM _ VIDEO _ FLAG _ FIELD1FIRST MFSampleExtension _BottomFieldFirst = FALSE。 コンテンツがインターレースされ、AM VIDEO _ _ FLAG _ FIELD1FIRSTフラグが存在しない場合は、この属性を TRUE に設定します。
AM _ ビデオ _ フラグ _ の繰り返 _ しフィールド MFSampleExtension _RepeatFirstField = TRUE。 AM _ VIDEO _ FLAG REPEAT FIELD _ フラグが _ 存在しない場合は、この属性を FALSE に 設定します

サンプル DirectShowにサンプル フラグが含まれている場合は 、VIDEOINFOHEADER2 構造体の dwInterlaceFlags の値を使用します。

DirectShowインターレース フラグ メディア ファンデーションの属性
AMINTERLACE _ IsInterlaced MFSampleExtension _インターレース = TRUE
AMINTERLACE _ 1FieldPerSample MFSampleExtension _SingleField = TRUE
AMINTERLACE _ Field1First MFSampleExtension _BottomFieldFirst = FALSE

ビデオ メディアの種類

メディアの種類