Condividi tramite


Introduzione alle classi di base del filtro

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice utilizzi MediaPlayer, IMFMediaEngine e Acquisizione audio/video 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 di 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 asserisce se viene scaricata mentre il numero di oggetti è maggiore di zero. In questo modo è più semplice tenere traccia delle perdite causate da problemi di conteggio dei riferimenti.

Tutte le classi di base che supportano le interfacce COM derivano da CUnknown, che eredita CBaseObject. La classe CUnknown supporta il conteggio dei riferimenti, QueryInterfacee l'aggregazione. Per altre informazioni, vedere How to Implement IUnknown.

classi filtro e pin

Le classi seguenti supportano la creazione di oggetti di 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 connessioni IMemInputPin. Questa classe deriva da CBasePin.

 

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

Classe Descrizione
CSource Classe di base per i filtri di origine. Questa classe è progettata per la creazione di origini push. Non è adatto per i sistemi pull, ad esempio i lettori di file. Per creare pin di output per questa classe, usare la classeCSourceStream.
CTransformFilter Classe di base per i filtri di trasformazione. Questa classe copia i 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. Più specializzata è la classe di base, minore sarà il codice che sarà necessario scrivere nella classe derivata.

oggetti di supporto

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 esse:

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