Freigeben über


Video Interlacing

In diesem Thema wird beschrieben, wie Medienquellen und Decoder interlaced Videoinhalte behandeln sollten.

Um interlaced-Video richtig zu decodieren und zu rendern, sind die folgenden Informationen erforderlich:

  • Progressive oder interlaced. Ein Videostream kann progressive Frames, interlaced Frames oder eine Mischung aus beiden enthalten.

  • Felddominanz. Die Felddominanz beschreibt, welches Feld zuerst, das obere Feld oder das untere Feld angezeigt wird.

  • Wiederholen Sie das erste Feld. Dieses Flag wird in 3:2-Pulldown verwendet, wenn der Frame progressiv ist, aber der Datenstrom interlaced ist. In diesem Kontext kann das erste Feld das obere oder untere Feld sein.

  • Überlappende Felder oder einzelne Felder. Ein Beispiel kann ein einzelnes Feld oder zwei überlappende Felder enthalten. Wenn ein Beispiel ein einzelnes Feld enthält, ist die Beispielhöhe die Hälfte der Framehöhe, da das Beispiel nur die Hälfte der Scanlinien für einen Frame enthält. Interleavierte Felder werden empfohlen, es sei denn, die Merkmale des Quellinhalts diktieren andernfalls.

Jedes dieser Merkmale kann sich von einer Stichprobe zur nächsten ändern. Videokomponenten müssen jedoch etwas über den gesamten Inhalt wissen, bevor das Streaming beginnt. Wenn das Video beispielsweise interlaced ist, muss der erweiterte Videorenderer (EVR) Den Videospeicher für die Deinterlacing reservieren. Wenn das Video völlig progressive Frames ist, kann der EVR hingegen die Renderingpipeline optimieren. Durch Hinzufügen eines Deinterlacingschritts zur Pipeline wird die Renderinglatenz erhöht.

Informationen über Interlacing werden an zwei Stellen gespeichert:

  • Allgemeine Informationen zur Interlacing in einem Datenstrom werden im Medientyp platziert. Weitere Informationen zu Medientypen finden Sie unter Medientypen.

  • Informationen, die sich bei den einzelnen Beispielen ändern können, werden im Beispiel als Attribut platziert. Weitere Informationen zu Beispielen finden Sie unter Medienbeispiele.

Interlace Information im Medientyp

Das attribut MF_MT_INTERLACE_MODE für den Medientyp beschreibt, wie der Datenstrom als Ganzes interlaced wird. Der Wert dieses Attributs ist ein Element der MFVideoInterlaceMode- Enumeration. Ein Videomedientyp sollte immer dieses Attribut aufweisen.

  • Wenn der Datenstrom nur progressive Frames enthält, ohne verkettete Frames, verwenden Sie MFVideoInterlace_Progressive.
  • Wenn der Datenstrom nur interlaced Frames enthält und jedes Beispiel zwei überlappende Felder enthält, verwenden Sie MFVideoInterlace_FieldInterleavedUpperFirst oder MFVideoInterlace_FieldInterleavedLowerFirst.
  • Wenn der Datenstrom nur interlaced Frames enthält und jedes Beispiel ein einzelnes Feld enthält, verwenden Sie MFVideoInterlace_FieldSingleUpper oder MFVideoInterlace_FieldSingleLower. Wenn die Felder zwischen oben und unten wechseln, spielt es keine Rolle, welche dieser beiden Werte verwendet werden. Wenn das Format nur obere Felder oder nur untere Felder enthält, legen Sie den Wert fest, der dem Inhalt entspricht.
  • Wenn der Datenstrom eine Mischung aus interlacierten und progressiven Frames enthält oder wenn die Felddominanz schaltert, legen Sie den Medientyp auf MFVideoInterlace_MixedInterlaceOrProgressive fest. Verwenden Sie Beispielattribute, um jeden Frame zu beschreiben.

In der folgenden Tabelle wird dieses Attribut zusammengefasst.

MF_MT_INTERLACE_MODE Verflochten? Proben Erstes Feld
MFVideoInterlace_Progressive Nein Progressiver Rahmen Nicht zutreffend
MFVideoInterlace_FieldInterleavedUpperFirst Ja Überlappende Felder Oben zuerst
MFVideoInterlace_FieldInterleavedLowerFirst Ja Überlappende Felder Unten zuerst
MFVideoInterlace_FieldSingleUpper Ja Einzelnes Feld Oben zuerst
MFVideoInterlace_FieldSingleLower Ja Einzelnes Feld Unten zuerst
MFVideoInterlace_MixedInterlaceOrProgressive Kann variieren Interleavierte Felder oder progressive Frames Kann variieren

 

Zwischengespeicherte Felder und einzelne Felder können nicht gemischt werden. Der Wechsel von einem zu einem anderen erfordert eine Änderung des Medientyps.

Interlace Flags on Samples

Informationen, die von einem Beispiel zum nächsten geändert werden können, werden mithilfe von Beispielattributen angegeben. Verwenden Sie die IMFSample Schnittstelle, um diese Attribute abzurufen oder festzulegen.

Alle in diesem Abschnitt aufgeführten Interlacing-Attribute weisen boolesche Werte auf. Effektiv kann jedes dieser Attribute drei Werte aufweisen: entweder TRUE, FALSE-oder nicht festgelegt. Wenn kein Attribut festgelegt ist, wird der Wert aus dem Medientyp übernommen. Wenn ein Attribut festgelegt ist, überschreibt der Wert den Medientyp. Einige Kombinationen von Flags und Medientypen sind ungültig.

Attribut Beschreibung
MFSampleExtension_Interlaced Wenn TRUE, wird der Frame ineinander verkettet. Wenn FALSE-, ist der Frame progressiv.
Legen Sie dieses Attribut für jedes Beispiel fest, wenn der Medientyp MFVideoInterlace_MixedInterlaceOrProgressive ist.
MFSampleExtension_BottomFieldFirst Die Bedeutung dieser Kennzeichnung hängt davon ab, ob die Stichproben überlappende Felder oder einzelne Felder enthalten.
  • Interleaved fields: If TRUE, the lower field is first. Wenn FALSE, ist das obere Feld zuerst.
  • Einzelne Felder: Wenn TRUE-, enthält das Beispiel ein unteres Feld. Wenn FALSE-, enthält das Beispiel ein oberes Feld.
Legen Sie dieses Attribut für jedes Interlace-Beispiel fest, wenn der Medientyp MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower oder MFVideoInterlace_MixedInterlaceOrProgressive ist.
MFSampleExtension_RepeatFirstField Wenn TRUE, wird das erste Feld wiederholt. Wenn FALSE oder nicht festgelegt ist, wird das erste Feld nicht wiederholt.
MFSampleExtension_SingleField Wenn TRUE-, enthält das Beispiel ein einzelnes Feld. Wenn FALSE-enthält das Beispiel überlappende Felder.

 

In der folgenden Tabelle ist dargestellt, welche Flags je nach Medientyp erforderlich, optional oder verboten sind.

Medientyp Interlaced Flag BottomFieldFirst-Flag RepeatFirstField-Flag SingleField-Flag
Progressiv Wahlfrei; wenn festgelegt, muss FALSEsein. Nicht festgelegt. Nicht festgelegt. Nicht festgelegt.
Überlappende Felder Wahlfrei; wenn festgelegt, muss TRUEsein. Wahlfrei; falls festgelegt, muss der Medientyp übereinstimmen. Nicht festgelegt. Wahlfrei; wenn festgelegt, muss FALSEsein.
Einzelne Felder Wahlfrei; wenn festgelegt, muss TRUEsein. Erforderlich. Nicht festgelegt. Auf TRUE-festgelegt.
Gemischt Erforderlich. Erforderlich. Erforderlich. Wahlfrei; wenn festgelegt, muss FALSEsein.

 

In den Fällen, in denen das Attribut optional ist, definiert der Medientyp bereits die Informationen. Es ist gültig, um das Attribut so festzulegen, dass es übereinstimmt, aber nicht erforderlich.

Wenn der Medientyp beispielsweise MFVideoInterlace_Progressive ist, bedeutet dies, dass alle Frames im Datenstrom progressiv sind. Daher können Sie entweder das attribut MFSampleExtension_Interlaced auf FALSEfestlegen oder das Attribut nicht festlegen.

Empfehlungen

Dieser Abschnitt enthält Empfehlungen für verschiedene Arten von Inhalten.

  1. Das Video ist alle progressiven Frames.
  • Legen Sie den Medientyp auf MFVideoInterlace_Progressive fest.

  • Legen Sie das attribut "MFSampleExtension_Interlaced" nicht fest, oder legen Sie es für jeden Frame auf FALSE- fest.

  • Legen Sie die Attribute MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldoder MFSampleExtension_SingleField nicht fest.

  1. Das Video ist alle verketteten Felder mit derselben Felddominanz. Beispiele enthalten interleavierte Felder.
  • Legen Sie den Medientyp auf MFVideoInterlace_FieldInterleavedUpperFirst oder MFVideoInterlace_FieldInterleavedLowerFirst fest.

  • Legen Sie das attribut "MFSampleExtension_Interlaced" nicht fest, oder legen Sie es für jeden Frame auf TRUE- fest.

  • Legen Sie das attribut "MFSampleExtension_BottomFieldFirst" nicht fest, oder legen Sie den Wert für jeden Frame fest, der dem Medientyp entspricht.

  • Legen Sie das attribut "MFSampleExtension_RepeatFirstField" nicht fest, oder legen Sie es für jeden Frame auf FALSE- fest.

  • Legen Sie das attribut MFSampleExtension_SingleField nicht fest, oder legen Sie es für jeden Frame auf FALSE- fest.

  1. Das Video enthält eine Mischung aus verketteten und progressiven Frames, mit wiederholten Feldern und unterschiedlicher Felddominanz (z. B. DVD-Video).
  • Legen Sie den Medientyp auf MFVideoInterlace_MixedInterlaceOrProgressive fest.

  • Legen Sie für jeden Frame die Attribute MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirstund MFSampleExtension_RepeatFirstField fest.

  • Legen Sie das attribut MFSampleExtension_SingleField nicht fest, oder legen Sie es für jeden Frame auf FALSE- fest.

  1. Das Video ist verkettet und Beispiele enthalten einzelne Felder.
  • Legen Sie den Medientyp auf MFVideoInterlace_FieldSingleUpper oder MFVideoInterlace_FieldSingleLower fest.

  • Legen Sie für jeden Frame das attribut MFSampleExtension_BottomFieldFirst fest.

  • Legen Sie das attribut "MFSampleExtension_Interlaced" nicht fest, oder legen Sie es für jeden Frame auf TRUE- fest.

  • Legen Sie das attribut "MFSampleExtension_RepeatFirstField" nicht fest, oder legen Sie es für jeden Frame auf FALSE- fest.

  • Legen Sie das attribut "MFSampleExtension_SingleField" nicht fest, oder legen Sie es für jeden Frame auf TRUE- fest.

Die meisten Videoinhalte fallen in eine dieser Kategorien.

MPEG-2-Zuordnungen

Verwenden Sie für MPEG-2-Inhalte die folgenden Zuordnungen, um die MPEG-2-Flags in Media Foundation-Beispielattribute zu konvertieren.

picture_structure

Wert Beispiel-Attribut
Rahmen MFSampleExtension_SingleField = FALSCH-
top_field MFSampleExtension_SingleField = TRUE-
MFSampleExtension_BottomFieldFirst = FALSE-
bottom_field MFSampleExtension_SingleField = TRUE-
MFSampleExtension_BottomFieldFirst = TRUE-

 

progressive_frame

Wert Beispiel-Attribut
0 MFSampleExtension_Interlaced = TRUE-
1 MFSampleExtension_Interlaced = FALSE-

 

top_field_first

Wert Beispiel-Attribut
0 MFSampleExtension_BottomFieldFirst = TRUE-
1 MFSampleExtension_BottomFieldFirst = FALSE-

 

repeat_first_field

Wert Beispiel-Attribut
0 MFSampleExtension_RepeatFirstField = FALSE-
1 MFSampleExtension_RepeatFirstField = TRUE-

 

Single-Field Beispiele

Wenn der Medientyp MFVideoInterlace_FieldSingleUpper oder MFVideoInterlace_FieldSingleLower ist, bedeutet dies, dass jedes Beispiel ein einzelnes Feld enthält. Der Medientyp beschreibt jedoch den gesamten Frame. Daher enthält jeder Puffer nur die Hälfte der Feldzeilen, die im Medientyp angegeben sind. Wenn der Medientyp beispielsweise das Video als 720 × 480 beschreibt, enthält jedes Feld 240 Scanzeilen und enthält daher nur 240 Pixelzeilen. Wenn Sie eine Komponente schreiben, die Medientypen mit Einzelfeldbeispielen akzeptiert, müssen Sie diese Tatsache berücksichtigen, wenn Sie auf die Daten im Puffer zugreifen.

Die gleiche Regel gilt für die geometrische Blende (MF_MT_GEOMETRIC_APERTURE Attribut) und die minimale Anzeigeblende (MF_MT_MINIMUM_DISPLAY_APERTURE Attribut). Diese Bereiche werden im Hinblick auf den gesamten Frame und nicht in den einzelnen Feldern angegeben.

DirectShow-Zuordnungen

In DirectShow sind pro Beispiel Interlacing-Informationen in der dwTypeSpecificFlags Member der AM_SAMPLE2_PROPERTIES Struktur enthalten. In der folgenden Tabelle sind die entsprechenden Attribute für Media Foundation aufgeführt.

DirectShow-Beispielflagge Media Foundation-Beispiel-Attribut
AM_VIDEO_FLAG_INTERLEAVED_FRAME MFSampleExtension_SingleField = FALSE.
AM_VIDEO_FLAG_FIELD1 MFSampleExtension_Interlaced = TRUE.
MFSampleExtension_SingleField = TRUE.
MFSampleExtension_BottomFieldFirst = FALSE.
AM_VIDEO_FLAG_FIELD2 MFSampleExtension_Interlaced = TRUE.
MFSampleExtension_SingleField = TRUE.
MFSampleExtension_BottomFieldFirst = TRUE.
AM_VIDEO_FLAG_WEAVE MFSampleExtension_Interlaced = FALSE. (Dieses Kennzeichen gibt an, dass der Treiber die beiden Felder nicht deinterlace.)
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = FALSE. Wenn der Inhalt interlaced ist und das flag AM_VIDEO_FLAG_FIELD1FIRST nicht vorhanden ist, legen Sie dieses Attribut auf TRUEfest.
AM_VIDEO_FLAG_REPEAT_FIELD MFSampleExtension_RepeatFirstField = TRUE. Wenn das AM_VIDEO_FLAG_REPEAT_FIELD Flag nicht vorhanden ist, legen Sie dieses Attribut auf FALSE-fest.

 

Wenn das DirectShow-Beispiel keine Beispielflags enthält, verwenden Sie den Wert von dwInterlaceFlags aus der VIDEOINFOHEADER2-Struktur:

DirectShow-Interlace-Flag Media Foundation-Beispiel-Attribut
AMINTERLACE_IsInterlaced MFSampleExtension_Interlaced = TRUE.
AMINTERLACE_1FieldPerSample MFSampleExtension_SingleField = TRUE.
AMINTERLACE_Field1First MFSampleExtension_BottomFieldFirst = FALSE.

 

videomedientypen

Medientypen