Video Interlacing
Questo argomento descrive come le origini multimediali e i decodificatori devono gestire contenuti video interlacciati.
Per decodificare e eseguire il rendering corretto del video interlaced, sono necessarie le informazioni seguenti:
Progressivo o interlacciato. Un flusso video può contenere fotogrammi progressivi, fotogrammi interlacciati o una combinazione di entrambi.
Dominanza del campo. La dominanza del campo descrive il campo visualizzato per primo, il campo superiore o il campo inferiore.
Ripetere il primo campo. Questo flag viene usato nel pulldown 3:2, quando il frame è progressivo, ma il flusso viene interlacciato. In questo contesto, il primo campo può essere superiore o inferiore.
Campi interleaved o campi singoli. Un esempio può contenere un singolo campo o due campi interleaved. Se un esempio contiene un singolo campo, l'altezza di esempio è metà dell'altezza del fotogramma, perché l'esempio contiene solo la metà delle righe di analisi per un frame. I campi interleaved sono consigliati a meno che le caratteristiche del contenuto di origine non determinino altrimenti.
Una di queste caratteristiche può cambiare da un esempio al successivo. Tuttavia, i componenti video devono conoscere qualcosa sul contenuto complessivo prima dell'inizio dello streaming. Ad esempio, se il video è interlacciato, il renderer video avanzato (EVR) deve riservare la memoria video per il denterlacing. Se il video è completamente progressivo, invece, EVR può ottimizzare la pipeline di rendering. L'aggiunta di un passaggio di deinterlacing alla pipeline aumenta la latenza di rendering.
Le informazioni sull'interlacciamento vengono archiviate in due posizioni:
Le informazioni generali sull'interlacciamento in un flusso vengono posizionate nel tipo di supporto. Per altre informazioni sui tipi di supporti, vedere Tipi di supporti.
Le informazioni che possono essere modificate con ogni esempio vengono inserite nell'esempio come attributo. Per altre informazioni sugli esempi, vedere Esempi multimediali.
Informazioni interlace nel tipo di supporto
L'attributo MF_MT_INTERLACE_MODE nel tipo di supporto descrive il modo in cui il flusso viene interlacciato. Il valore di questo attributo è un membro dell'enumerazione MFVideoInterlaceMode . Un tipo di supporto video deve sempre avere questo attributo.
- Se il flusso contiene solo fotogrammi progressivi, senza fotogrammi interlacciati, usare MFVideoInterlace_Progressive.
- Se il flusso contiene solo frame interlacciati e ogni esempio contiene due campi interleaved, usare MFVideoInterlace_FieldInterleavedUpperFirst o MFVideoInterlace_FieldInterleavedLowerFirst.
- Se il flusso contiene solo fotogrammi interlacciati e ogni esempio contiene un singolo campo, usare MFVideoInterlace_FieldSingleUpper o MFVideoInterlace_FieldSingleLower. Se i campi si alternano tra superiore e inferiore, non importa quale di questi due valori viene usato. Se il formato contiene solo campi superiori o solo campi inferiori, impostare il valore corrispondente al contenuto.
- Se il flusso contiene una combinazione di fotogrammi interlacciati e progressivi o se il dominio del campo passa, impostare il tipo di supporto su MFVideoInterlace_MixedInterlaceOrProgressive. Usare gli attributi di esempio per descrivere ogni frame.
La tabella seguente riepiloga questo attributo.
MF_MT_INTERLACE_MODE | Interlacciato? | Esempi | Primo campo |
---|---|---|---|
MFVideoInterlace_Progressive | No | Cornice progressiva | Non applicabile |
MFVideoInterlace_FieldInterleavedUpperFirst | Sì | Campi interleaved | Prima superiore |
MFVideoInterlace_FieldInterleavedLowerFirst | Sì | Campi interleaved | Primo livello inferiore |
MFVideoInterlace_FieldSingleUpper | Sì | Campo singolo | Prima superiore |
MFVideoInterlace_FieldSingleLower | Sì | Campo singolo | Primo livello inferiore |
MFVideoInterlace_MixedInterlaceOrProgressive | Può variare | Campi interleaved o fotogrammi progressivi | Può variare |
I campi interleaved e i singoli campi non possono essere misti. Il passaggio da uno a un altro richiede una modifica del tipo di supporto.
Flag interlace su esempi
Le informazioni che possono cambiare da un esempio al successivo sono indicate usando attributi di esempio. Usare l'interfaccia IMFSample per ottenere o impostare questi attributi.
Tutti gli attributi interlacing elencati in questa sezione hanno valori booleani. In modo efficace, ognuno di questi attributi può avere tre valori: TRUE, FALSE o non impostato. Se un attributo non è impostato, il valore viene preso dal tipo di supporto. Se viene impostato un attributo, il valore esegue l'override del tipo di supporto. Alcune combinazioni di flag e tipi di supporti non sono valide.
Attributo | Descrizione |
---|---|
MFSampleExtension_Interlaced | Se TRUE, la cornice viene interlacciata. Se FALSE, il frame è progressivo. Impostare questo attributo su ogni esempio se il tipo di supporto è MFVideoInterlace_MixedInterlaceOrProgressive. |
MFSampleExtension_BottomFieldFirst | Il significato di questo flag dipende dal fatto che gli esempi contengano campi interleaved o singoli campi.
|
MFSampleExtension_RepeatFirstField | Se TRUE, il primo campo viene ripetuto. Se FALSE o non è impostato, il primo campo non viene ripetuto. |
MFSampleExtension_SingleField | Se TRUE, l'esempio contiene un singolo campo. Se FALSE, l'esempio contiene campi interleaved. |
La tabella seguente mostra quali flag sono necessari, facoltativi o vietati, in base al tipo di supporto.
Tipo supporto | Flag interlacciato | BottomFieldFirst Flag | RepeatFirstField Flag | SingleField Flag |
---|---|---|---|---|
Progressivo | Opzionale; se impostato, deve essere FALSE. | Non impostare. | Non impostare. | Non impostare. |
Campi interleaved | Opzionale; se impostato, deve essere TRUE. | Opzionale; se impostato, deve corrispondere al tipo di supporto. | Non impostare. | Opzionale; se impostato, deve essere FALSE. |
Campi singoli | Opzionale; se impostato, deve essere TRUE. | Obbligatorio. | Non impostare. | Impostare su TRUE. |
Mixed | Obbligatorio. | Obbligatorio. | Obbligatorio. | Opzionale; se impostato, deve essere FALSE. |
Nei casi in cui l'attributo è facoltativo, il tipo di supporto definisce già le informazioni. È valido impostare l'attributo in modo che corrisponda, ma non obbligatorio.
Ad esempio, se il tipo di supporto è MFVideoInterlace_Progressive, implica che tutti i fotogrammi nel flusso siano progressivi. È pertanto possibile impostare l'attributo MFSampleExtension_Interlaced su FALSE oppure lasciare l'attributo non impostato.
Consigli
Questa sezione contiene raccomandazioni per vari tipi di contenuto.
- Il video è costituito da tutti i fotogrammi progressivi.
Impostare il tipo di supporto su MFVideoInterlace_Progressive.
Non impostare l'attributo MFSampleExtension_Interlaced o impostarlo su FALSE in ogni frame.
Non impostare gli attributi MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstField o MFSampleExtension_SingleField .
- Il video è costituito da tutti i campi interlacciati con la stessa dominanza dei campi. Gli esempi contengono campi interleaved.
Impostare il tipo di supporto su MFVideoInterlace_FieldInterleavedUpperFirst o MFVideoInterlace_FieldInterleavedLowerFirst.
Non impostare l'attributo MFSampleExtension_Interlaced o impostarlo su TRUE in ogni frame.
Non impostare l'attributo MFSampleExtension_BottomFieldFirst o impostare il valore su ogni fotogramma in modo che corrisponda al tipo di supporto.
Non impostare l'attributo MFSampleExtension_RepeatFirstField o impostarlo su FALSE in ogni frame.
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su FALSE in ogni frame.
- Il video contiene una combinazione di fotogrammi interlacciati e progressivi, con campi ripetuti e dominanza di campo variabile (ad esempio, video DVD).
Impostare il tipo di supporto su MFVideoInterlace_MixedInterlaceOrProgressive.
In ogni frame impostare gli attributi MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirst e MFSampleExtension_RepeatFirstField .
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su FALSE in ogni frame.
- Il video è interlacciato e gli esempi contengono singoli campi.
Impostare il tipo di supporto su MFVideoInterlace_FieldSingleUpper o MFVideoInterlace_FieldSingleLower.
In ogni frame impostare l'attributo MFSampleExtension_BottomFieldFirst .
Non impostare l'attributo MFSampleExtension_Interlaced o impostarlo su TRUE in ogni frame.
Non impostare l'attributo MFSampleExtension_RepeatFirstField o impostarlo su FALSE in ogni frame.
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su TRUE in ogni frame.
La maggior parte dei contenuti video rientra in una di queste categorie.
Mapping MPEG-2
Per il contenuto MPEG-2, usare i mapping seguenti per convertire i flag MPEG-2 in attributi di esempio di Media Foundation.
picture_structure
Valore | Attributo di esempio |
---|---|
frame | = MFSampleExtension_SingleField FALSE |
top_field |
= MFSampleExtension_SingleField VERO = MFSampleExtension_BottomFieldFirst FALSE |
bottom_field |
= MFSampleExtension_SingleField VERO = MFSampleExtension_BottomFieldFirst VERO |
progressive_frame
Valore | Attributo di esempio |
---|---|
0 | = MFSampleExtension_Interlaced VERO |
1 | = MFSampleExtension_Interlaced FALSE |
top_field_first
Valore | Attributo di esempio |
---|---|
0 | = MFSampleExtension_BottomFieldFirst VERO |
1 | = MFSampleExtension_BottomFieldFirst FALSE |
repeat_first_field
Valore | Attributo di esempio |
---|---|
0 | = MFSampleExtension_RepeatFirstField FALSE |
1 | = MFSampleExtension_RepeatFirstField VERO |
esempi di Single-Field
Se il tipo di supporto è MFVideoInterlace_FieldSingleUpper o MFVideoInterlace_FieldSingleLower, significa che ogni esempio contiene un singolo campo. Tuttavia, il tipo di supporto descrive l'intero frame. Pertanto, ogni buffer contiene solo la metà del numero di righe di campo specificato nel tipo di supporto. Ad esempio, se il tipo di supporto descrive il video come 720 × 480, ogni campo contiene 240 righe di analisi e pertanto ogni buffer contiene solo 240 righe di pixel. Se si scrive un componente che accetta tipi di supporti con esempi a campo singolo, è necessario tenere presente questo aspetto quando si accede ai dati nel buffer.
La stessa regola si applica all'apertura geometrica (attributo MF_MT_GEOMETRIC_APERTURE ) e all'apertura minima dello schermo (attributo MF_MT_MINIMUM_DISPLAY_APERTURE ). Queste aree vengono specificate in termini di intero frame, non dei singoli campi.
Mapping DirectShow
In DirectShow le informazioni di interlacciamento per esempio sono contenute nel membro dwTypeSpecificFlags della struttura AM_SAMPLE2_PROPERTIES . La tabella seguente illustra gli attributi equivalenti per Media Foundation.
Flag di esempio DirectShow | Attributo di esempio media Foundation |
---|---|
AM_VIDEO_FLAG_INTERLEAVED_FRAME | = MFSampleExtension_SingleField FALSO. |
AM_VIDEO_FLAG_FIELD1 |
= MFSampleExtension_Interlaced VERO. = 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. Questo flag indica che il driver non deve deinterlace i due campi. |
AM_VIDEO_FLAG_FIELD1FIRST | = MFSampleExtension_BottomFieldFirst FALSE. Se il contenuto è interlacciato e il flag di AM_VIDEO_FLAG_FIELD1FIRST non è presente, impostare questo attributo su TRUE. |
AM_VIDEO_FLAG_REPEAT_FIELD | = MFSampleExtension_RepeatFirstField TRUE. Se il flag AM_VIDEO_FLAG_REPEAT_FIELD non è presente, impostare questo attributo su FALSE. |
Se l'esempio DirectShow non contiene flag di esempio, usare il valore di dwInterlaceFlags dalla struttura VIDEOINFOHEADER2 :
Flag interlace directShow | Attributo di esempio media Foundation |
---|---|
AMINTERLACE_IsInterlaced | = MFSampleExtension_Interlaced TRUE. |
AMINTERLACE_1FieldPerSample | = MFSampleExtension_SingleField TRUE. |
AMINTERLACE_Field1First | = MFSampleExtension_BottomFieldFirst FALSE. |
Argomenti correlati