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.
|
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.
- 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.
- 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.
- 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.
- 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. |
Verwandte Themen