Per usare video interlacciati
[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da Lettore di origine e Writer sink. Lettore di origine e Writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi Lettore di origine e Writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Esistono due tipi di base di codifica video: progressivo e interlacciato. Nella codifica progressiva ogni fotogramma è una rappresentazione codificata di un fotogramma di video. Nella codifica interlacciata ogni fotogramma è una rappresentazione codificata di tutte le righe pari di pixel nel video o di tutte le righe dispari. Ogni cornice interlacciata è chiamata campo, quindi ci sono campi dispari e persino campi. Un display interlacciato (come un televisore) esegue il rendering dei campi uno alla volta, campi alternati. Un display progressivo esegue il rendering di fotogrammi tutti contemporaneamente.
Il codec di Windows Media Video 9 Advanced Profile offre supporto per la gestione dell'interlacciamento nei flussi compressi.
Quando usare il video interlacciato
La codifica del video interlacciato è utile solo quando il contenuto viene visualizzato in un dispositivo interlacciato. Il contenuto che deve essere visualizzato in un televisore (tramite un set-top box o altro dispositivo) potrebbe essere necessario interlacciare. Il contenuto che deve essere visualizzato esclusivamente in un computer non deve essere codificato come interlacciato.
Per codificare video interlaced come video progressivo, è necessario configurare le impostazioni di input. Per altre informazioni, vedere To Deinterlace Video.
Ordine campi
La maggior parte delle origini del video interlacciato, ad esempio schede di acquisizione video, offre esempi video che includono entrambi i campi interleavedi tra loro. Il risultato è come un fotogramma completo del video, ad eccezione del fatto che le righe dispari e persino vengono spostate leggermente in tempo. Non esiste uno standard universale in base al quale campo nell'esempio video interleaved si verifica per la prima volta.
È consigliabile consentire agli utenti di specificare l'ordine di campo quando si passano esempi interlacciati all'applicazione.
Codifica video interlacciato
Per usare la codifica interlacciata, seguire questa procedura:
- Configurare il flusso video nel profilo per usare l'estensione dell'unità dati del tipo di contenuto chiamando il metodo IWMStreamConfig2::AddDataUnitExtension . Il GUID dell'estensione di esempio per l'estensione del tipo di contenuto è WM_SampleExtensionsGUID_ContentType.
- Impostare il flusso nel profilo e configurare il writer con il profilo come normale.
- Prima di passare esempi interlacciati al writer, chiamare il metodo IWMWriterAdvanced2::SetInputSetting per impostare l'impostazione di input g_wszInterlacedCoding su TRUE.
- Per ogni esempio interlacciato passato al writer, chiamare il metodo INSSBuffer3::SetProperty per impostare il tipo di contenuto. I valori dei tipi di contenuto sono combinazioni dei flag nella tabella seguente.
Flag | Descrizione |
---|---|
WM_CT_INTERLACED | Impostare sempre questo flag quando si codifica il contenuto interlacciato. Se si usa questo flag senza impostare un flag di ordine di campo (WM_CT_BOTTOM_FIELD_FIRST o WM_CT_TOP_FIELD_FIRST) il codec presuppone che il campo superiore sia il primo. Se il codec usa l'ordine di campo errato, non dovrebbe esserci alcun impatto sulla qualità dell'immagine, ma l'efficienza della codifica sarà interessata. |
WM_CT_BOTTOM_FIELD_FIRST | Se combinato con il flag WM_CT_INTERLACED, questo flag indica che il campo inferiore (il campo a partire dalla seconda riga dell'esempio) si verifica per la prima volta. |
WM_CT_TOP_FIELD_FIRST | Se combinato con il flag WM_CT_INTERLACED, questo flag indica che il campo superiore (il campo a partire dalla prima riga dell'esempio) si verifica per la prima volta. |
WM_CT_REPEAT_FIRST_FIELD | Indica che il primo campo dell'esempio deve essere ripetuto nella riproduzione. Questo flag viene usato per il video creato dal processo di telecine. Se non viene impostato alcun flag dell'ordine di campo insieme a questo flag, si presuppone che il campo superiore venga eseguito per la prima volta. |
Nota
Se il flag di WM_CT_INTERLACED non è impostato, si presuppone che l'esempio contenga un fotogramma video progressivo.
Decodifica video interlacciato
Quando si decodifica il video interlacciato, è necessario impostare l'impostazione g_wszAllowInterlacedOutput su TRUE usando il metodo IWMReaderAdvanced2::SetOutputSetting . In caso contrario, il codec offre fotogrammi progressivi.
L'estensione dell'unità dati del tipo di contenuto viene mantenuta negli esempi di output. È necessario passare l'orientamento del campo al dispositivo di rendering per garantire la riproduzione corretta.