Classe CTransformFilter

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine 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, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Gerarchia di classi ctransformfilter

La CTransformFilter classe è una classe base per l'implementazione dei filtri di trasformazione. Questa classe è progettata per implementare un filtro di trasformazione con un pin di input e un pin di output. Usa allocatori separati per il pin di input e il pin di output. Per creare un filtro che elabora i dati sul posto, usare la classe CTransInPlaceFilter .

Questo filtro usa la classe CTransformInputPin per il pin di input e la classe CTransformOutputPin per il pin di output. In genere, non è necessario eseguire l'override di queste classi di pin. La maggior parte dei metodi pin chiama i metodi corrispondenti nella CTransformFilter classe , quindi è possibile eseguire l'override dei metodi di filtro, se necessario. Il filtro crea entrambi i pin nel metodo CTransformFilter::GetPin . Se si esegue l'override delle classi pin, è necessario eseguire l'override di GetPin per creare i pin personalizzati.

Per usare questa classe, derivare una nuova classe da CTransformFilter e implementare i metodi seguenti:

Potrebbe essere necessario eseguire l'override anche di altri metodi, a seconda dei requisiti del filtro.

Tipi di supporti

Il pin di input di questo filtro non propone alcun tipo di supporto; si basa sul filtro upstream per proporre i tipi di supporti per la connessione. Il motivo di questa progettazione è che nella maggior parte dei casi, il filtro upstream può fornire altre informazioni sul formato. Ad esempio, con i formati video, il filtro upstream conosce le dimensioni del video e la frequenza dei fotogrammi, mentre il filtro di trasformazione non è in grado di determinare queste informazioni. Per modificare questo comportamento, eseguire l'override del metodo GetMediaType del pin di input. Quando il filtro upstream propone un tipo di supporto, il pin di input chiama il metodo CheckInputType del filtro (virtuale puro).

Finché il pin di input non è connesso, il pin di output rifiuta tutte le connessioni e non restituisce alcun tipo di supporto preferito. Dopo la connessione del pin di input, il pin di output restituisce un elenco di tipi preferiti chiamando il metodo GetMediaType del filtro. Controlla i tipi di output per la connessione tramite il metodo CheckTransform del filtro. Entrambi i metodi sono puramente virtuali. In genere, il tipo di input determinerà in parte i tipi di output accettabili.

A seconda del filtro, è possibile registrare alcuni tipi di supporti supportati del filtro, in modo che l'oggetto Filter Mapper possa individuare il filtro. Per altre informazioni, vedere Come registrare i filtri DirectShow.

Streaming

Questa classe non accoda i dati di output. Ogni esempio di output viene recapitato all'interno del metodo IMemInputPin::Receive . Il metodo Receive chiama il metodo Transform del filtro (anche virtuale puro) per elaborare i dati.

Per altre informazioni sull'uso di questa classe, vedere Scrittura di filtri di trasformazione.

Variabili membro protette Descrizione
m_bEOSDelivered Flag che indica se il filtro ha inviato una notifica end-of-stream.
m_bSampleSkipped Flag che indica se l'esempio più recente è stato eliminato.
m_bQualityChanged Flag che indica se la qualità è cambiata.
m_csFilter Sezione critica che protegge lo stato del filtro.
m_csReceive Sezione critica che protegge lo stato di streaming.
m_pInput Puntatore al pin di input.
m_pOutput Puntatore al pin di output.
Metodi pubblici Descrizione
CTransformFilter Metodo del costruttore.
~ CTransformFilter Metodo distruttore.
GetPinCount Recupera il numero di pin nel filtro. Virtuale.
GetPin Recupera un pin. Virtuale.
Transform Trasforma un esempio di input per produrre un esempio di output. Virtuale.
StartStreaming Chiamato quando il filtro passa allo stato sospeso. Virtuale.
StopStreaming Chiamato quando il filtro passa allo stato arrestato. Virtuale.
AlterQuality Notifica al filtro che viene richiesta una modifica della qualità. Virtuale.
SetMediaType Chiamato quando il tipo di supporto è impostato su uno dei pin del filtro. Virtuale.
CheckConnect Determina se una connessione pin è adatta. Virtuale.
BreakConnect Rilascia un pin da una connessione. Virtuale.
CompleteConnect Completa una connessione pin. Virtuale.
Ricevere Riceve un esempio di supporto, lo elabora e distribuisce un esempio di output al filtro downstream. Virtuale.
InitializeOutputSample Recupera un nuovo esempio di output e lo inizializza.
EndOfStream Notifica al filtro che non sono previsti dati aggiuntivi dal pin di input. Virtuale.
BeginFlush Avvia un'operazione di scaricamento. Virtuale.
EndFlush Termina un'operazione di scaricamento. Virtuale.
NewSegment Notifica al filtro ricevuto esempi multimediali dopo che questa chiamata viene raggruppata come segmento. Virtuale.
Metodi virtuali pure Descrizione
CheckInputType Verifica se un tipo di supporto specificato è accettabile per l'input.
CheckTransform Verifica se un tipo di supporto di input è compatibile con un tipo di supporto di output.
DecideBufferSize Imposta i requisiti del buffer del pin di output.
GetMediaType Recupera un tipo di supporto preferito per il pin di output.
Metodi IMediaFilter Descrizione
Stop Arresta il filtro.
Sospendi Sospende il filtro.
Metodi IBaseFilter Descrizione
FindPin Recupera il pin con l'identificatore specificato.

Requisiti

Requisito Valore
Intestazione
Transfrm.h (includere Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)