Classe CTransInPlaceFilter

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

La CTransInPlaceFilter classe è progettata per i filtri di trasformazione sul posto, ovvero filtri che modificano i dati di input anziché copiare i dati tra buffer. Per usare questa classe, derivare una nuova classe da CTransInPlaceFilter e implementare i metodi seguenti:

Questa classe usa la classe CTransInPlaceInputPin per il pin di input e la classe CTransInPlaceOutputPin per il pin di output. In genere, non è necessario eseguire l'override di queste classi di pin. Il filtro crea entrambi i pin nel metodo CTransInPlaceFilter::GetPin . Se si esegue l'override delle classi pin, è necessario eseguire l'override di GetPin per creare i pin personalizzati.

Questa classe è progettata in modo che il tipo di input corrisponda sempre al tipo di output. Quando possibile, il filtro usa un singolo allocatore per entrambe le connessioni pin.

Tipi di supporti preferiti

Se il pin di output è già connesso, il pin di input offre i tipi preferiti del filtro downstream. In realtà restituisce semplicemente l'oggetto enumeratore del filtro downstream. In caso contrario, non ha tipi preferiti. Il pin di output ha lo stesso comportamento, ma inverso: se il pin di input è già connesso, il pin di output offre i tipi preferiti del filtro upstream. In caso contrario, non ha tipi preferiti

Aggiungi connessioni

Quando un pin si connette, il filtro in genere riconnette l'altro pin per assicurarsi che entrambi i pin usino lo stesso tipo di supporto e lo stesso allocatore. Il meccanismo per la riconnessione dei pin è descritto in Riconnessione dei pin. Sono possibili due scenari: il pin di input si connette per primo o il pin di output si connette per primo.

Si supponga che il pin di input si connetta per primo. Vengono eseguiti i passaggi seguenti:

  1. Il pin di input chiama il metodo CheckInputType del filtro per controllare il tipo di supporto.
  2. Il filtro upstream seleziona un allocatore. A questo punto, il pin di input non ha requisiti di allocatore e accetta qualsiasi allocatore per la connessione. Se il filtro upstream richiede un allocatore, il pin ne crea uno nuovo. Per motivi descritti a breve, questo allocatore non verrà usato nella connessione finale. Viene fornito solo per completare questa fase del processo di connessione.

Successivamente, quando il pin di output si connette:

  1. Il pin di output chiama il metodo CheckInputType del filtro per controllare il tipo di supporto. Chiama anche IPin::QueryAccept nel filtro upstream. In questo modo si garantisce che il pin di input possa modificare il tipo di supporto in modo che corrisponda.
  2. Il pin di output chiama il metodo CheckInputType del filtro per controllare il tipo di supporto. Chiama anche IPin::QueryAccept nel filtro upstream. In questo modo si garantisce che il pin di input possa modificare il tipo di supporto in modo che corrisponda.
  3. Il pin di output chiama il metodo CheckInputType del filtro per controllare il tipo di supporto. Chiama anche IPin::QueryAccept nel filtro upstream. In questo modo si garantisce che il pin di input possa modificare il tipo di supporto in modo che corrisponda.
  4. Questa volta, il metodo GetAllocator del pin di input restituisce l'allocatore downstream e GetAllocatorRequirements restituisce i requisiti dell'allocatore del filtro downstream. Il pin di input accetta qualsiasi allocatore scelto dal filtro upstream.
  5. Questa volta, il metodo GetAllocator del pin di input restituisce l'allocatore downstream e GetAllocatorRequirements restituisce i requisiti dell'allocatore del filtro downstream. Il pin di input accetta qualsiasi allocatore scelto dal filtro upstream.

Si consideri ora lo scenario opposto, in cui il pin di output è il primo pin per la connessione.

  1. Il pin di output chiama il metodo CheckInputType del filtro per controllare il tipo di supporto.
  2. Seleziona un allocatore, che preferisce usare l'allocatore del filtro downstream.

Quindi, quando il pin di input si connette:

  1. Il pin di input controlla il tipo di supporto chiamando CheckInputType sul filtro e chiamando QueryAccept sul pin di output del filtro downstream.
  2. Se il tipo di input non corrisponde al tipo di output, il filtro riconnette il pin di output.
  3. Il filtro upstream seleziona un allocatore. Il metodo GetAllocator del pin di input restituisce l'allocatore downstream e il pin di input accetta qualsiasi allocatore selezionato dal filtro upstream.
  4. Il filtro usa lo stesso allocatore per la connessione downstream, eventualmente sovrascrivendo l'allocatore downstream originale.

Questa sequenza di eventi cambia leggermente se uno degli allocatori coinvolti è di sola lettura, perché l'allocatore downstream deve essere scrivibile. In tal caso, il filtro potrebbe usare due allocatori separati.

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

Variabili membro protette Descrizione
m_bModifiesData Indica se il filtro modifica i dati di esempio.
Metodi protetti Descrizione
Copia Copia un esempio multimediale.
InputPin Recupera un puntatore al pin di input del filtro.
OutputPin Recupera un puntatore al pin di output del filtro.
TypesMatch Determina se il tipo di supporto di input corrisponde al tipo di supporto di output.
UsingDifferentAllocators Determina se i pin di input e output usano allocatori diversi.
Metodi pubblici Descrizione
CTransInPlaceFilter Metodo del costruttore.
GetPin Recupera un pin.
GetMediaType Recupera un tipo di supporto preferito per il pin di output.
DecideBufferSize Imposta i requisiti del buffer del pin di output.
CheckTransform Controlla se un tipo di supporto di input è compatibile con un tipo di supporto di output.
CompleteConnect Completa una connessione pin.
Ricevere Riceve un campione multimediale, lo elabora e lo distribuisce al filtro downstream.
Metodi virtuali pure Descrizione
Transform Trasforma un esempio sul posto.

Requisiti

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