Video-Interlacing

In diesem Thema wird beschrieben, wie Medienquellen und Decoder videoübergreifende Inhalte verarbeiten sollten.

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

  • Progressiv oder interlaced. Ein Videostream kann progressive Frames, interlaced Frames oder eine Mischung aus beidem 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 im Pulldown 3:2 verwendet, wenn der Frame progressiv ist, der Stream jedoch interlaced ist. In diesem Kontext kann das erste Feld das obere oder untere Feld sein.

  • Verschachtelte Felder oder ein einzelnes Feld. Ein Beispiel kann entweder ein einzelnes Feld oder zwei verschachtelte Felder enthalten. Wenn ein Beispiel ein einzelnes Feld enthält, beträgt die Beispielhöhe die Hälfte der Framehöhe, da das Beispiel nur die Hälfte der Scanlinien für einen Frame enthält. Verschachtelte Felder werden empfohlen, es sei denn, die Merkmale des Quellinhalts legen etwas anderes vor.

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 hingegen vollständig progressive Frames ist, kann der EVR die Renderingpipeline optimieren. Das Hinzufügen eines Deinterlacingschritts zur Pipeline erhöht die Renderinglatenz.

Informationen zum Interlacing werden an zwei Stellen gespeichert:

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

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

Interlace-Informationen im Medientyp

Das MF_MT_INTERLACE_MODE-Attribut für den Medientyp beschreibt, wie der Stream als Ganzes ineinander gekettet wird. Der Wert dieses Attributs ist ein Member der MFVideoInterlaceMode-Enumeration . Ein Videomedientyp sollte immer über dieses Attribut verfügen.

  • Wenn der Stream nur progressive Frames ohne interlaced Frames enthält, verwenden Sie MFVideoInterlace_Progressive.
  • Wenn der Stream nur interlaced Frames enthält und jedes Beispiel zwei verschachtelte Felder enthält, verwenden Sie MFVideoInterlace_FieldInterleavedUpperFirst oder MFVideoInterlace_FieldInterleavedLowerFirst.
  • Wenn der Stream 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, welcher dieser beiden Werte verwendet wird. Wenn das Format nur obere Felder oder nur niedrigere Felder enthält, legen Sie den Wert fest, der dem Inhalt entspricht.
  • Wenn der Stream eine Mischung aus interlaced and progressive Frames enthält, oder wenn die Felddominanz wechselt, legen Sie den Medientyp auf MFVideoInterlace_MixedInterlaceOrProgressive fest. Verwenden Sie Beispielattribute, um jeden Frame zu beschreiben.

In der folgenden Tabelle ist dieses Attribut zusammengefasst.

MF_MT_INTERLACE_MODE Interlaced? Beispiele Erstes Feld
MFVideoInterlace_Progressive No Progressiver Frame Nicht verfügbar
MFVideoInterlace_FieldInterleavedUpperFirst Ja Verschachtelte Felder Obere erste
MFVideoInterlace_FieldInterleavedLowerFirst Ja Verschachtelte Felder Unten zuerst
MFVideoInterlace_FieldSingleUpper Ja Einzelfeld Obere erste
MFVideoInterlace_FieldSingleLower Ja Einzelfeld Unten zuerst
MFVideoInterlace_MixedInterlaceOrProgressive Kann variieren Verschachtelte Felder oder progressive Frames Kann variieren

 

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

Interlace-Flags in Beispielen

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

Alle in diesem Abschnitt aufgeführten Interlacingattribute verfügen über boolesche Werte. Effektiv kann jedes dieser Attribute drei Werte aufweisen: ENTWEDER TRUE, FALSE oder nicht festgelegt. Wenn kein Attribut festgelegt ist, wird der Wert dem Medientyp entnommen. Wenn ein Attribut festgelegt ist, überschreibt der Wert den Medientyp. Einige Kombinationen von Flags und Medientypen sind ungültig.

attribute BESCHREIBUNG
MFSampleExtension_Interlaced Wenn TRUE, wird der Frame mit Interlaced.If TRUE, the frame is interlaced. Bei FALSE ist der Frame progressiv.
Legen Sie dieses Attribut für jedes Beispiel fest, wenn der Medientyp MFVideoInterlace_MixedInterlaceOrProgressive ist.
MFSampleExtension_BottomFieldFirst Die Bedeutung dieses Flags hängt davon ab, ob die Beispiele verschachtelte Felder oder einzelne Felder enthalten.
  • Verschachtelte Felder: Bei TRUE ist das untere Feld zuerst. Wenn FALSE, ist das obere Feld zuerst.
  • Einzelne Felder: Bei TRUE enthält das Beispiel ein niedrigeres Feld. Bei FALSE enthält das Beispiel ein oberes Feld.
Legen Sie dieses Attribut für jedes Interlacebeispiel 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. Bei FALSE enthält das Beispiel verschachtelte Felder.

 

Die folgende Tabelle zeigt, welche Flags erforderlich, optional oder verboten sind, basierend auf dem Medientyp.

Medientyp Interlaced Flag BottomFieldFirst-Flag RepeatFirstField-Flag SingleField-Flag
progressiv Optional; wenn festgelegt, muss FALSE sein. Legen Sie keinen Wert fest. Legen Sie keinen Wert fest. Legen Sie keinen Wert fest.
Verschachtelte Felder Optional; wenn festgelegt, muss TRUE sein. Optional; wenn festgelegt, muss mit dem Medientyp übereinstimmen. Legen Sie keinen Wert fest. Optional; wenn festgelegt, muss FALSE sein.
Einzelne Felder Optional; wenn festgelegt, muss TRUE sein. Erforderlich. Legen Sie keinen Wert fest. Auf TRUE festgelegt.
Mixed Erforderlich. Erforderlich. Erforderlich. Optional; wenn festgelegt, muss FALSE sein.

 

In den Fällen, in denen das Attribut optional ist, definiert der Medientyp die Informationen bereits. Es ist gültig, das Attribut für die Übereinstimmung festzulegen, aber nicht erforderlich.

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

Empfehlungen

Dieser Abschnitt enthält Empfehlungen für verschiedene Inhaltstypen.

  1. Das Video besteht aus progressiven Frames.
  • Legen Sie den Medientyp auf MFVideoInterlace_Progressive fest.

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

  • Legen Sie nicht die Attribute MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstField oder MFSampleExtension_SingleField fest.

  1. Das Video besteht aus Interlac-Feldern mit der gleichen Felddominanz. Beispiele enthalten verschachtelte Felder.
  • Legen Sie den Medientyp auf MFVideoInterlace_FieldInterleavedUpperFirst oder MFVideoInterlace_FieldInterleavedLowerFirst fest.

  • Legen Sie das MFSampleExtension_Interlaced-Attribut nicht für jeden Frame auf TRUE fest.

  • Legen Sie nicht das MFSampleExtension_BottomFieldFirst-Attribut fest, oder legen Sie den Wert für jeden Frame so fest, dass er dem Medientyp entspricht.

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

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

  1. Das Video enthält eine Mischung aus interlaced 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_BottomFieldFirst und MFSampleExtension_RepeatFirstField fest.

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

  1. Das Video ist mit Interlacing versehen, und Die 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 MFSampleExtension_Interlaced-Attribut nicht für jeden Frame auf TRUE fest.

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

  • Legen Sie nicht das MFSampleExtension_SingleField-Attribut 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 Beispielattribute
frame = MFSampleExtension_SingleField FALSE
top_field = MFSampleExtension_SingleField STIMMT
= MFSampleExtension_BottomFieldFirst FALSE
bottom_field = MFSampleExtension_SingleField STIMMT
= MFSampleExtension_BottomFieldFirst STIMMT

 

progressive_frame

Wert Beispielattribute
0 = MFSampleExtension_Interlaced STIMMT
1 = MFSampleExtension_Interlaced FALSE

 

top_field_first

Wert Beispielattribute
0 = MFSampleExtension_BottomFieldFirst STIMMT
1 = MFSampleExtension_BottomFieldFirst FALSE

 

repeat_first_field

Wert Beispielattribute
0 = MFSampleExtension_RepeatFirstField FALSE
1 = MFSampleExtension_RepeatFirstField STIMMT

 

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 Anzahl von Feldzeilen, die im Medientyp angegeben sind. Wenn der Medientyp das Video beispielsweise als 720 × 480 beschreibt, enthält jedes Feld 240 Scanzeilen, und daher enthält jeder Puffer nur 240 Zeilen pixel. Wenn Sie eine Komponente schreiben, die Medientypen mit Einzelfeldbeispielen akzeptiert, müssen Sie diesen Fakt berücksichtigen, wenn Sie auf die Daten im Puffer zugreifen.

Die gleiche Regel gilt für die geometrische Blende (attribut MF_MT_GEOMETRIC_APERTURE ) und die minimale Anzeigeöffnung (MF_MT_MINIMUM_DISPLAY_APERTURE Attribut). Diese Bereiche werden in Bezug auf den gesamten Frame und nicht für die einzelnen Felder angegeben.

DirectShow-Zuordnungen

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

DirectShow-Beispielflag Media Foundation-Beispielattribute
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 Flag gibt an, dass der Treiber die beiden Felder nicht deinterlacen sollte.)
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 TRUE fest.
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-Beispielattribute
AMINTERLACE_IsInterlaced = MFSampleExtension_Interlaced TRUE.
AMINTERLACE_1FieldPerSample = MFSampleExtension_SingleField TRUE.
AMINTERLACE_Field1First = MFSampleExtension_BottomFieldFirst FALSE.

 

Videomedientypen

Medientypen