Interlacciamento video
In questo argomento viene descritto come le origini multimediali e i decodificatori devono gestire il contenuto video interlacciato.
Per decodificare ed eseguire correttamente il rendering del video interlacciato, sono necessarie le informazioni seguenti:
Progressivo o interlacciato. Un flusso video può contenere fotogrammi progressivi, fotogrammi interlacciati o una combinazione di entrambi.
Dominanza dei campi. La dominanza dei campi 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 è interlacciato. In questo contesto, il primo campo può essere il campo superiore o inferiore.
Campi interleavati o campo singolo. Un esempio può contenere un singolo campo o due campi interleaved. Se un campione contiene un singolo campo, l'altezza del campione è metà dell'altezza del fotogramma, perché l'esempio contiene solo la metà delle linee di analisi per un fotogramma. I campi interleaved sono consigliati a meno che le caratteristiche del contenuto di origine non determinino diversamente.
Una di queste caratteristiche può cambiare da un campione all'altro. 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 dinterlacing. 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 inserite 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 Media Samples.
Informazioni interlacciate nel tipo di supporto
L'attributo MF_MT_INTERLACE_MODE sul tipo di supporto descrive il modo in cui il flusso nel suo complesso viene interlacciato. Il valore di questo attributo è un membro dell'enumerazioneMFVideoInterlaceMode. Un tipo di supporto video deve avere sempre questo attributo.
- Se il flusso contiene solo frame progressivi, senza frame 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 frame 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 campo dominanza cambia, 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? | Campioni | Primo campo |
---|---|---|---|
MFVideoInterlace_Progressive | No | Frame progressivo | Non applicabile |
MFVideoInterlace_FieldInterleavedUpperFirst | Sì | Campi interleaved | Primo superiore |
MFVideoInterlace_FieldInterleavedLowerFirst | Sì | Campi interleaved | Prima in basso |
MFVideoInterlace_FieldSingleUpper | Sì | Campo singolo | Primo superiore |
MFVideoInterlace_FieldSingleLower | Sì | Campo singolo | Prima in basso |
MFVideoInterlace_MixedInterlaceOrProgressive | Può variare | Campi interleavati o fotogrammi progressivi | Può variare |
I campi interleaved e i singoli campi non possono essere misti. Per passare da uno a un altro è necessario modificare il tipo di supporto.
Flag interlacciati su esempi
Le informazioni che possono passare da un esempio a quello successivo sono indicate usando gli attributi di esempio. Usare l'interfacciaIMFSample per ottenere o impostare questi attributi.
Tutti gli attributi di interlacciamento elencati in questa sezione hanno valori booleani. In effetti, ognuno di questi attributi può avere tre valori: TRUE, FALSEo meno impostato. Se un attributo non è impostato, il valore viene ricavato 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 meno impostato, il primo campo non viene ripetuto. |
MFSampleExtension_SingleField | Se TRUE, l'esempio contiene un singolo campo. Se FALSE, l'esempio contiene campi interleaved. |
Nella tabella seguente vengono illustrati i flag obbligatori, facoltativi o non consentiti in base al tipo di supporto.
Tipo di 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. |
Misto | 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 FALSEoppure 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 fotogramma.
Non impostare gli attributi MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldo MFSampleExtension_SingleField.
- Il video è costituito da tutti i campi interlacciati con la stessa dominanza del campo. 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 fotogramma.
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 fotogramma.
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su false su ogni fotogramma.
- Il video contiene una combinazione di fotogrammi interlacciati e progressivi, con campi ripetuti e dominanza del campo variabile (ad esempio, video DVD).
Impostare il tipo di supporto su MFVideoInterlace_MixedInterlaceOrProgressive.
In ogni frame impostare gli attributi MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirste MFSampleExtension_RepeatFirstField.
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su false su ogni fotogramma.
- 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 fotogramma.
Non impostare l'attributo MFSampleExtension_RepeatFirstField o impostarlo su false in ogni fotogramma.
Non impostare l'attributo MFSampleExtension_SingleField o impostarlo su TRUE in ogni fotogramma.
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 |
---|---|
cornice | MFSampleExtension_SingleField = false |
top_field |
MFSampleExtension_SingleField = TRUE MFSampleExtension_BottomFieldFirst = false |
bottom_field |
MFSampleExtension_SingleField = TRUE MFSampleExtension_BottomFieldFirst = TRUE |
progressive_frame
Valore | Attributo di esempio |
---|---|
0 | MFSampleExtension_Interlaced = TRUE |
1 | MFSampleExtension_Interlaced = FALSE |
top_field_first
Valore | Attributo di esempio |
---|---|
0 | MFSampleExtension_BottomFieldFirst = TRUE |
1 | MFSampleExtension_BottomFieldFirst = false |
repeat_first_field
Valore | Attributo di esempio |
---|---|
0 | MFSampleExtension_RepeatFirstField = false |
1 | MFSampleExtension_RepeatFirstField = TRUE |
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 fotogramma. 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 conto di questo fatto quando si accede ai dati nel buffer.
La stessa regola si applica all'apertura geometrica (attributoMF_MT_GEOMETRIC_APERTURE) e all'apertura minima dello schermo ( attributoMF_MT_MINIMUM_DISPLAY_APERTURE). Queste aree vengono specificate in termini di intero frame, non dei singoli campi.
Mapping DirectShow
In DirectShow, le informazioni sull'interlacciamento per esempio sono contenute nel dwTypeSpecificFlags membro della struttura AM_SAMPLE2_PROPERTIES. La tabella seguente illustra gli attributi equivalenti per Media Foundation.
Flag di esempio DirectShow | Attributo di esempio di 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. 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 AM_VIDEO_FLAG_FIELD1FIRST non è presente, impostare questo attributo su TRUE. |
AM_VIDEO_FLAG_REPEAT_FIELD | MFSampleExtension_RepeatFirstField = TRUE. Se il flag di 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 interlacciamento DirectShow | Attributo di esempio di Media Foundation |
---|---|
AMINTERLACE_IsInterlaced | MFSampleExtension_Interlaced = TRUE. |
AMINTERLACE_1FieldPerSample | MFSampleExtension_SingleField = TRUE. |
AMINTERLACE_Field1First | MFSampleExtension_BottomFieldFirst = FALSE. |
Argomenti correlati