Condividi tramite


Codifica video interlacciata (Microsoft Media Foundation)

I dati video destinati all'uso con i computer sono in genere progressivi, ovvero ogni fotogramma viene codificato come singola immagine. Alcuni dispositivi, come i televisori, non visualizzano una cornice contemporaneamente, ma come due immagini. Una delle immagini o dei campi contiene tutte le righe numerate pari. L'altro campo contiene i dati per tutte le righe numerate dispari. Il video codificato con più campi per fotogramma viene chiamato interlacciato, perché viene eseguito il rendering passando tra il campo pari e il campo dispari.

In passato, il contenuto video interlacciato è sempre stato de-interlacciato prima della codifica con il codec di Windows Media Video. A partire da Windows Media 9 Series, tuttavia, il codificatore video supporta la compressione del contenuto interlacciato senza prima convertirlo in progressivo. La gestione dell'interlacciamento in un file codificato è importante se il rendering del contenuto viene mai eseguito su uno schermo interlacciato, ad esempio un televisore. Questa funzionalità è di crescente importanza, poiché il supporto per i contenuti basati su Windows Media si diffonde in lettori DVD, set-top box e altri componenti elettronici home.

Il modo più semplice per codificare e distribuire video interlacciati consiste nello sviluppare l'applicazione usando Windows Media Format SDK e archiviare il contenuto nei file ASF. Le informazioni interlacciate sui frame vengono passate al codec usando le estensioni dell'unità dati, che funzionano bene per il contenuto ASF, ma sono un po' più difficili da supportare in altri contenitori. Per altre informazioni sulle estensioni delle unità dati, vedere Uso delle estensioni unità dati.

Per supportare la codifica interlacciata sono necessari due passaggi principali: ottenere le informazioni sul frame al codificatore e recapitare le informazioni all'applicazione di rendering. Questi passaggi sono descritti nei paragrafi seguenti.

Video interlacciato e codificatore

Il primo passaggio della codifica del video con interlacciamento gestito consiste nel configurare il codificatore per codificare i campi interlacciati. A tale scopo, impostare la proprietà MFPKEY_INTERLACEDCODINGENABLED su TRUE. In questo modo il codificatore viene preparato per ricevere campioni interlacciati. Ogni esempio di input deve contenere entrambi i campi.

Ogni esempio elaborato con il codificatore dopo l'attivazione della codifica interlacciata deve avere un'estensione dell'unità dati collegata. Si presuppone che i campioni senza l'estensione dell'unità dati prevista siano progressivi. Il GUID che identifica l'estensione è D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. I valori passati dagli oggetti di Windows Media Format SDK sono definiti nella tabella seguente.

Valore Descrizione
0x00000020 Specifica che l'esempio viene codificato prima con il campo inferiore. Questo valore è significativo solo se combinato con il valore interlacciato.
0x00000040 Specifica che l'esempio viene codificato prima con il campo superiore. Questo valore è significativo solo se combinato con il valore interlacciato.
0x00000080 Specifica che l'esempio è interlacciato. Questo è l'unico valore significativo per le DMO codec.

 

Uno dei primi due valori viene sempre combinato con 0x80 usando un OR bit per bit prima di essere impostato nell'esempio. Tuttavia, il codificatore controlla solo 0x80 e ignora il resto dell'estensione. Se l'estensione identifica l'esempio come interlacciato, il codificatore mantiene l'interlacciamento di esempio nel flusso compresso e incorpora un flag di indicazione nel flusso in modo che il decodificatore possa identificare i frame interlacciati. Ogni esempio interlacciato è contrassegnato, in modo che il contenuto di origine che sia una combinazione di elementi progressivi e interlacciati può essere codificato in un flusso insieme.

L'oggetto writer di Windows Media Format SDK include le estensioni dell'unità dati del tipo di contenuto negli esempi che scrive nella sezione dati del contenitore ASF da usare al momento del rendering.

Lettura e rendering di video interlacciati

Il decodificatore identifica i campioni interlacciati in base al flag impostato nel flusso dal codificatore. Come impostazione predefinita, il decodificatore rimuove i campioni e restituisce output progressivi. L'applicazione lettore può configurare il decodificatore per elaborare gli output con interlacciamento gestito impostando la proprietà MFPKEY_DECODER_DEINTERLACING .

La difficoltà nella riproduzione video interlacciata si verifica dopo che il decodificatore fornisce i campioni. Il renderer (scheda video o chip in un dispositivo) non può visualizzare correttamente il contenuto video senza sapere quale campo è quello. Nelle applicazioni che usano Windows Media Format SDK, l'estensione dell'unità dati del tipo di contenuto viene recuperata dagli esempi non compressi e può essere passata al dispositivo.

Quando si usano direttamente gli oggetti codec, nessuno di questi trasferimenti di dati è automatico. È necessario implementare il supporto dell'estensione unità dati, sia negli oggetti buffer che nel contenitore usato per il contenuto codificato. I tipi più comuni di contenitori multimediali (ad esempio AVI) non supportano i metadati a livello di esempio. È possibile implementare il proprio sistema per archiviare i dati nel file e associarlo a singoli esempi, ma solo un lettore personalizzato potrebbe recuperarlo.

Nota

L'impostazione della proprietà MFPKEY_INTERLACEDCODINGENABLED su TRUE e quindi non l'invio di esempi con l'estensione dell'unità dati di tipo contenuto collegata può causare l'arresto anomalo del codificatore. Impostare il codificatore per la codifica interlacciata solo se sono presenti campioni interlacciati da distribuire.

 

Uso dei video