Share via


Uso dei fotogrammi video

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il video non compresso è una sequenza di bitmap riprodotte in successione rapida, in genere a una frequenza di circa 30 fotogrammi al secondo. Poiché la maggior parte dei video entra in un grafico di filtro DirectShow in un formato compresso, il flusso video in genere passa attraverso un decodificatore per la decompressione. Molti decodificatori generano dati in un formato YUV e lasciano la conversione finale a RGB per l'hardware video appena prima del rendering. Se un decodificatore usa l'accelerazione video DirectX, l'hardware video esegue operazioni aggiuntive per decodificare l'immagine. Pertanto, la decompressione finale delle bitmap potrebbe non essere eseguita fino a quando i dati non raggiungono l'hardware video.

Tuttavia, per eseguire molti tipi di analisi video, elaborazione o modifica, è spesso necessario lavorare su bitmap non compresse in un tipo di formato RGB o YUV prima di eseguire il rendering o la scrittura nel file. Questo lavoro viene in genere eseguito all'interno di un filtro di trasformazione basato sulla classe di base CTransformFilter , in particolare nel metodo Transform . Questo metodo riceve un puntatore a un oggetto IMediaSample che incapsula i dati video. Il metodo IMediaSample::GetPointer restituisce un puntatore al primo byte dei dati non elaborati. Per i frame non compressi, questi dati sono costituiti da pixel a cui è possibile accedere o modificare direttamente dal filtro. Le sezioni seguenti forniscono informazioni in background che consentono di usare in modo efficace i dati DIB in questo modo.

Nota

È anche possibile modificare i bit usando funzioni GDI, GDI+, DirectDraw o Direct3D, ma queste tecniche non rientrano nell'ambito di questo articolo.

 

Questa sezione contiene i seguenti argomenti: