Condividi tramite


Per usare video interlacciato

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da lettore di origine e scrittore di sink. lettore di origine e sink writer sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine e scrittore di destinazione invece di 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 viene chiamata campo , quindi sono presenti campi dispari e campi pari. Un display interlacciato (ad esempio un televisore) esegue il rendering dei campi uno alla volta, alternando i campi. Una visualizzazione progressiva esegue il rendering dei fotogrammi contemporaneamente.

Il codec Profilo avanzato di Windows Media Video 9 offre il supporto per la gestione dell'interlacciamento nei flussi compressi.

Quando usare video interlacciato

La codifica di video interlacciati è utile solo quando il contenuto viene visualizzato in un dispositivo interlacciato. Il contenuto che deve essere visualizzato su un televisore (tramite un set-top box o un altro dispositivo) potrebbe dover essere interlacciato. Il contenuto che deve essere visualizzato esclusivamente su un display del computer non deve essere codificato come interlacciato.

Per codificare video interlacciati come video progressivo, è necessario configurare le impostazioni di input. Per altre informazioni, vedere Per deinterlacciare i video.

Ordine dei campi

La maggior parte delle origini di video interlacciati, ad esempio schede di acquisizione video, fornisce esempi video che includono entrambi i campi interleavati tra loro. Il risultato è come un fotogramma completo del video, ad eccezione del fatto che le righe dispari e pari vengono spostate leggermente nel tempo. Non esiste uno standard universale in base al quale il campo nel campione video interlacciato viene visualizzato per primo nel tempo.

È consigliabile consentire agli utenti di specificare l'ordine dei campi quando si passano esempi interlacciati all'applicazione.

Codifica video interlacciato

Per usare la codifica interlacciata, seguire questa procedura:

  1. Configura il flusso video nel profilo per utilizzare 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.
  2. Impostare il flusso nel profilo e configurare il writer con il profilo come di consueto.
  3. Prima di passare esempi interlacciati al writer, chiamare il metodo IWMWriterAdvanced2::SetInputSetting per impostare l'impostazione di input g_wszInterlacedCoding su TRUE.
  4. Per ogni esempio interlacciato che si passa al writer, si deve chiamare il metodo INSSBuffer3::SetProperty per impostare il tipo di contenuto. I valori del tipo di contenuto sono combinazioni dei flag nella tabella seguente.
Bandiera Descrizione
WM_CT_INTERLACED Impostare sempre questo flag quando si codifica il contenuto interlacciato. Se si usa questo flag senza impostare un flag dell'ordine dei campi (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 dei campi errato, non dovrebbe esserci alcun impatto sulla qualità dell'immagine, ma l'efficienza della codifica sarà influenzata.
WM_CT_BOTTOM_FIELD_FIRST Se combinato con il flag WM_CT_INTERLACED, questo flag indica che il campo inferiore (il campo che inizia con la seconda riga nell'esempio) si verifica per primo nel tempo.
WM_CT_TOP_FIELD_FIRST Se combinato con il flag WM_CT_INTERLACED, questo flag indica che il campo superiore (il campo che inizia con la prima riga nel campione) si presenta per primo nel tempo.
WM_CT_REPEAT_FIRST_FIELD Indica che il primo campo dell'esempio deve essere ripetuto durante la riproduzione. Questo flag viene usato per video creato da pellicola tramite il processo di telecine. Se non viene impostato alcun flag di ordine di campo insieme a questo flag, si presuppone che il campo superiore comparire per primo.

Nota

Se il flag WM_CT_INTERLACED non è impostato, si presuppone che l'esempio contenga un fotogramma video progressivo.

Decodifica di video interlacciati

Quando si decodifica un video interlacciato, è necessario impostare l'impostazione g_wszAllowInterlacedOutput su TRUE usando il metodo IWMReaderAdvanced2::SetOutputSetting. In caso contrario, il codec fornirà fotogrammi progressivi.

L'estensione dell'unità dati del tipo di contenuto viene mantenuta negli esempi di output. Devi passare l'orientamento del campo al dispositivo di rendering per garantire una riproduzione corretta.

argomenti avanzati