Condividi tramite


Introduzione alle classi di base del filtro

[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.

Questo articolo descrive la libreria di classi di base Microsoft DirectShow. Questa libreria è destinata agli sviluppatori di filtri, ma gli autori di applicazioni potrebbero trovare alcune delle classi helper e le utilità di debug utili. La libreria di classi di base non è tuttavia necessaria per la programmazione DirectShow.

Le sezioni seguenti riepilogano le classi di base più importanti nella libreria.

Classi di oggetti COM

Le classi seguenti supportano la creazione di oggetti COM:

Classe Descrizione
CBaseObject Classe oggetto base.
CUnknown Implementa l'interfaccia IUnknown .

 

La maggior parte delle classi DirectShow deriva da CBaseObject. Questa classe fornisce assistenza per il debug mantenendo un conteggio di tutti gli oggetti attivi nella DLL in fase di esecuzione. Nelle compilazioni di debug la DLL afferma se viene scaricata mentre il numero di oggetti è maggiore di zero. In questo modo è più facile tenere traccia delle perdite causate dai problemi di conteggio dei riferimenti.

Tutte le classi di base che supportano interfacce COM derivano da CUnknown, che eredita CBaseObject. La classe CUnknown supporta il conteggio dei riferimenti, QueryInterface e aggregazione. Per altre informazioni, vedere Come implementare IUnknown.

Filtrare e aggiungere classi

Le classi seguenti supportano la creazione di oggetti filtro e pin DirectShow:

Classe Descrizione
CBaseFilter Classe di base per i filtri. Implementa l'interfaccia IBaseFilter .
CBasePin Classe di base per i pin. Implementa le interfacce IPin e IQualityControl .
CBaseInputPin Classe di base per i pin di input che usano il trasporto di memoria locale. Implementa l'interfaccia IMemInputPin . Questa classe deriva da CBasePin.
CBaseOutputPin Classe di base per i pin di output che usano le connessioni IMemInputPin . Questa classe deriva da CBasePin.

 

Le classi seguenti sono utili per la creazione di tipi più specializzati di filtri:

Classe Descrizione
CSource Classe di base per i filtri di origine. Questa classe è progettata per la creazione di origini push. Non è adatto per le origini pull, ad esempio i lettori di file. Per creare pin di output per questa classe, usare la classe CSourceStream .
CTransformFilter Classe di base per i filtri di trasformazione. Questa classe esegue una copia sui dati. I pin per questa classe sono CTransformInputPin e CTransformOutputPin.
CTransInPlaceFilter Classe di base per i filtri di trasformazione che non copiano i dati. Questa classe esegue l'elaborazione dei dati direttamente sui dati di input prima di passarla a valle. I pin per questa classe sono CTransInPlaceInputPin e CTransInPlaceOutputPin.
CVideoTransformFilter Classe di base per i filtri di trasformazione video. Questa classe deriva da CTransformFilter e aggiunge il supporto per il controllo qualità.
CBaseRenderer Classe di base per i filtri del renderer. Il pin di input per questa classe è CRendererInputPin.
CBaseVideoRenderer Classe di base per i renderer video. Questa classe deriva da CBaseRenderer.

 

Per usare queste classi, è necessario derivare la propria classe e scrivere codice per supportare le funzionalità specifiche del filtro. La classe di base più specializzata, meno codice sarà necessario scrivere nella classe derivata.

Oggetti helper

Le classi seguenti implementano oggetti helper usati da filtri e pin. La maggior parte di queste classi può essere usata senza derivare nuove classi da loro:

Classe Descrizione
CPullPin Oggetto Helper per i pin di input nei filtri del parser. Supporta le connessioni IAsyncReader con origini pull.
COutputQueue Oggetto Helper per i pin di output che esempi di coda per il recapito in un thread di lavoro.
CSourceSeeking Oggetto Della Guida per l'implementazione della ricerca in un filtro di origine con esattamente un pin di output. Questa classe non è progettata per i filtri con più pin, ad esempio parser.
CEnumPins Oggetto enumeratore per l'enumerazione dei pin in un filtro. Implementa l'interfaccia IEnumPins .
CEnumMediaTypes Oggetto enumeratore per enumerare i tipi di supporti preferiti in un pin. Implementa l'interfaccia IEnumMediaTypes .
CMemAllocator Oggetto allocatore di memoria. Implementa l'interfaccia IMemAllocator .
CMediaSample Oggetto di esempio multimediale. Implementa l'interfaccia IMediaSample2 .
CBaseReferenceClock Classe di base per gli orologi di riferimento. Implementa l'interfaccia IReferenceClock .
CMediaType Oggetto Helper per la modifica di strutture AM_MEDIA_TYPE .