Sdílet prostřednictvím


Prokládání videa

Toto téma popisuje, jak by zdroje médií a dekodéry měly zpracovávat prokládané videoobsáh.

K správnému dekódování a vykreslení interlacovaného videa je potřeba následující informace:

  • Progresivní nebo prokládání. Stream videa může obsahovat progresivní snímky, prokládání snímků nebo kombinaci obou.

  • Dominantní pole. Dominanta pole popisuje, které pole se zobrazí jako první, horní nebo dolní pole.

  • Opakujte první pole. Tento příznak se používá v tahu 3:2, když je rám progresivní, ale proud je propletený. V tomto kontextu může být prvním polem horní nebo dolní pole.

  • Prokládané pole nebo jedno pole. Ukázka může obsahovat jedno pole nebo dvě prokládání polí. Pokud vzorek obsahuje jedno pole, výška vzorku je polovina výšky rámce, protože vzorek obsahuje pouze polovinu čar skenování pro rámeček. Prokládání polí se doporučuje, pokud nejsou diktovány vlastnosti zdrojového obsahu jinak.

Každá z těchto charakteristik se může změnit z jednoho vzorku na další. Komponenty videa ale potřebují vědět něco o celkovém obsahu před zahájením streamování. Pokud je například video prokládání, musí vylepšený renderer videa (EVR) rezervovat paměť videa pro deinterlacing. Pokud je video zcela progresivní snímky, na druhé straně může EVR optimalizovat kanál vykreslování. Přidání kroku deinterlacingu do kanálu zvyšuje latenci vykreslování.

Informace o prokládání se ukládají na dvou místech:

  • Obecné informace o prokládání v datovém proudu se umístí do typu média. Další informace o typech médií naleznete v tématu Typy médií.

  • Informace, které se dají změnit s každou ukázkou, se umístí do vzorku jako atribut. Další informace o ukázkách najdete v tématu Ukázky médií.

Informace o prokládání v typu média

Atribut MF_MT_INTERLACE_MODE typu média popisuje způsob prokládání datového proudu jako celku. Hodnota tohoto atributu je členem MFVideoInterlaceMode výčtu. Typ média videa by měl mít vždy tento atribut.

  • Pokud datový proud obsahuje pouze progresivní snímky bez prokládání snímků, použijte MFVideoInterlace_Progressive.
  • Pokud datový proud obsahuje pouze prokládání snímků a každý vzorek obsahuje dvě prokládání polí, použijte MFVideoInterlace_FieldInterleavedUpperFirst nebo MFVideoInterlace_FieldInterleavedLowerFirst.
  • Pokud datový proud obsahuje pouze prokládání snímků a každý vzorek obsahuje jedno pole, použijte MFVideoInterlace_FieldSingleUpper nebo MFVideoInterlace_FieldSingleLower. Pokud se pole střídají mezi horní a dolní, nezáleží na tom, která z těchto dvou hodnot se použije. Pokud formát obsahuje jenom horní pole nebo jenom malá pole, nastavte hodnotu odpovídající obsahu.
  • Pokud datový proud obsahuje kombinaci prokládaného a progresivního rámce, nebo pokud se přepne dominantní pole, nastavte typ média na MFVideoInterlace_MixedInterlaceOrProgressive. Jednotlivé snímky popisují pomocí ukázkových atributů.

Následující tabulka shrnuje tento atribut.

MF_MT_INTERLACE_MODE Prokládaný? Vzorky První pole
MFVideoInterlace_Progressive Ne Progresivní rámec Nejde použít
MFVideoInterlace_FieldInterleavedUpperFirst Ano Prokládání polí První horní
MFVideoInterlace_FieldInterleavedLowerFirst Ano Prokládání polí První dolní
MFVideoInterlace_FieldSingleUpper Ano Jedno pole První horní
MFVideoInterlace_FieldSingleLower Ano Jedno pole První dolní
MFVideoInterlace_MixedInterlaceOrProgressive Může se lišit Prokládané pole nebo progresivní rámce Může se lišit

 

Prokládané pole a jednotlivá pole nelze kombinovat. Přechod z jednoho na druhý vyžaduje změnu typu média.

Prokládání příznaků na ukázkách

Informace, které se můžou změnit z jedné ukázky na další, jsou označené pomocí ukázkových atributů. K získání nebo nastavení těchto atributů použijte rozhraní MMFSample.

Všechny atributy prokládání uvedené v této části mají logické hodnoty. Každý z těchto atributů může mít tři hodnoty: buď TRUE, FALSEnebo nenastavit. Pokud atribut není nastaven, je hodnota převzata z typu média. Pokud je atribut nastaven, hodnota přepíše typ média. Některé kombinace příznaků a typů médií nejsou platné.

Atribut Popis
MFSampleExtension_Interlaced Pokud TRUE, je rámeček prokládání. Pokud FALSE, rám je progresivní.
Tento atribut nastavte pro každou ukázku, pokud je typ média MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_BottomFieldFirst Význam tohoto příznaku závisí na tom, jestli vzorky obsahují prokládané pole nebo jednotlivá pole.
  • Prokládání polí: Pokud TRUE, je nejprve dolní pole. Pokud FALSE, je první horní pole.
  • Jedno pole: Pokud TRUE, obsahuje ukázka nižší pole. Pokud false, obsahuje ukázka horní pole.
Tento atribut nastavte u každého prokládání vzorku, pokud je typ média MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower nebo MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_RepeatFirstField Pokud true, první pole se opakuje. Pokud hodnotu FALSE nebo nenastavíte, první pole se neopakuje.
MFSampleExtension_SingleField Pokud TRUE, obsahuje ukázka jedno pole. Pokud false, obsahuje ukázka prokládání polí.

 

Následující tabulka uvádí, které příznaky jsou povinné, volitelné nebo zakázané na základě typu média.

Typ média Prokládaný příznak Příznak BottomFieldFirst RepeatFirstField – příznak Příznak SingleField
Pokrokový Volitelný; pokud je nastavena, musí být FALSE. Nenastavujte. Nenastavujte. Nenastavujte.
Prokládání polí Volitelný; pokud je nastavena, musí být TRUE. Volitelný; pokud je nastaveno, musí odpovídat typu média. Nenastavujte. Volitelný; pokud je nastavena, musí být FALSE.
Jedno pole Volitelný; pokud je nastavena, musí být TRUE. Požadovaný. Nenastavujte. Nastavte hodnotu TRUE.
Smíšený Požadovaný. Požadovaný. Požadovaný. Volitelný; pokud je nastavena, musí být FALSE.

 

V případech, kdy je atribut volitelný, typ média již definuje informace. Je platné nastavit atribut tak, aby odpovídal, ale není povinný.

Pokud je například typ média MFVideoInterlace_Progressive, znamená to, že všechny snímky ve streamu jsou progresivní. Proto můžete buď nastavit atribut MFSampleExtension_Interlaced na FALSE, nebo ponechat atribut bez nastavení.

Doporučení

Tato část obsahuje doporučení pro různé typy obsahu.

  1. Video je všechny progresivní snímky.
  • Nastavte typ média na MFVideoInterlace_Progressive.

  • Nenastavujte atribut MFSampleExtension_Interlaced nebo ho nastavte na FALSE na každém snímku.

  • Nenastavujte atributy MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldani MFSampleExtension_SingleField.

  1. Video je všechny prokládaná pole se stejnou dominantou polí. Ukázky obsahují prokládané pole.
  • Nastavte typ média na MFVideoInterlace_FieldInterleavedUpperFirst nebo MFVideoInterlace_FieldInterleavedLowerFirst.

  • Nenastavujte atribut MFSampleExtension_Interlaced nebo ho nastavte na TRUE na každém snímku.

  • Nenastavujte atribut MFSampleExtension_BottomFieldFirst nebo nastavte hodnotu na každém snímku tak, aby odpovídala typu média.

  • Nenastavujte atribut MFSampleExtension_RepeatFirstField nebo ho nastavte na FALSE na každém snímku.

  • Nenastavujte atribut MFSampleExtension_SingleField nebo ho nastavte na hodnotu FALSE na každém snímku.

  1. Video obsahuje kombinaci prokládaných a progresivních snímků s opakovanými poli a různou dominantou polí (například DVD video).
  • Nastavte typ média na MFVideoInterlace_MixedInterlaceOrProgressive.

  • Na každém snímku nastavte atributy MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirsta MFSampleExtension_RepeatFirstField.

  • Nenastavujte atribut MFSampleExtension_SingleField nebo ho nastavte na hodnotu FALSE na každém snímku.

  1. Video je prokládání a ukázky obsahují jednotlivá pole.
  • Nastavte typ média na MFVideoInterlace_FieldSingleUpper nebo MFVideoInterlace_FieldSingleLower.

  • Na každém snímku nastavte atribut MFSampleExtension_BottomFieldFirst.

  • Nenastavujte atribut MFSampleExtension_Interlaced nebo ho nastavte na TRUE na každém snímku.

  • Nenastavujte atribut MFSampleExtension_RepeatFirstField nebo ho nastavte na FALSE na každém snímku.

  • Nenastavujte atribut MFSampleExtension_SingleField nebo ho nastavte na TRUE na každém snímku.

Většina obsahu videa spadá do jedné z těchto kategorií.

Mapování MPEG-2

U obsahu MPEG-2 použijte následující mapování k převodu příznaků MPEG-2 na ukázkové atributy Media Foundation.

picture_structure

Hodnota Ukázkový atribut
rám MFSampleExtension_SingleField = FALSE
top_field MFSampleExtension_SingleField = TRUE
MFSampleExtension_BottomFieldFirst = FALSE
bottom_field MFSampleExtension_SingleField = TRUE
MFSampleExtension_BottomFieldFirst = TRUE

 

progressive_frame

Hodnota Ukázkový atribut
0 MFSampleExtension_Interlaced = TRUE
1 MFSampleExtension_Interlaced = FALSE

 

top_field_first

Hodnota Ukázkový atribut
0 MFSampleExtension_BottomFieldFirst = TRUE
1 MFSampleExtension_BottomFieldFirst = FALSE

 

repeat_first_field

Hodnota Ukázkový atribut
0 MFSampleExtension_RepeatFirstField = FALSE
1 MFSampleExtension_RepeatFirstField = TRUE

 

Ukázky Single-Field

Pokud je typ média MFVideoInterlace_FieldSingleUpper nebo MFVideoInterlace_FieldSingleLower, znamená to, že každý vzorek obsahuje jedno pole. Typ média ale popisuje celý rámec. Proto každá vyrovnávací paměť obsahuje pouze polovinu počtu řádků pole zadaných v typu média. Pokud například typ média popisuje video jako 720 × 480, každé pole obsahuje 240 řádků skenování, a proto každá vyrovnávací paměť obsahuje pouze 240 řádků pixelů. Pokud napíšete komponentu, která přijímá typy médií s ukázkami s jedním polem, musíte vzít v úvahu tento fakt při přístupu k datům ve vyrovnávací paměti.

Stejné pravidlo platí pro geometrické závorky (MF_MT_GEOMETRIC_APERTURE atribut) a minimální clonu zobrazení (MF_MT_MINIMUM_DISPLAY_APERTURE atribut). Tyto oblasti jsou určeny z hlediska celého rámce, nikoli jednotlivých polí.

Mapování DirectShow

V directShow jsou informace prokládání jednotlivých vzorků obsaženy v dwTypeSpecificFlags člen struktury AM_SAMPLE2_PROPERTIES. Následující tabulka uvádí ekvivalentní atributy pro Media Foundation.

Ukázkový příznak DirectShow Ukázkový atribut Media Foundation
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. (Tento příznak označuje, že ovladač by neměl deinterlace obou polí.)
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = FALSE. Pokud je obsah prokládání a příznak AM_VIDEO_FLAG_FIELD1FIRST není k dispozici, nastavte tento atribut na TRUE.
AM_VIDEO_FLAG_REPEAT_FIELD MFSampleExtension_RepeatFirstField = TRUE. Pokud příznak AM_VIDEO_FLAG_REPEAT_FIELD není k dispozici, nastavte tento atribut na FALSE.

 

Pokud ukázka DirectShow neobsahuje ukázkové příznaky, použijte hodnotu dwInterlaceFlags ze struktury VIDEOINFOHEADER2:

DirectShow prokládání příznaku Ukázkový atribut Media Foundation
AMINTERLACE_IsInterlaced MFSampleExtension_Interlaced = TRUE.
AMINTERLACE_1FieldPerSample MFSampleExtension_SingleField = TRUE.
AMINTERLACE_Field1First MFSampleExtension_BottomFieldFirst = FALSE.

 

typy médií videa

typy médií