Metodo IGraphConfig::Reconnect (strmif.h)

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

Il Reconnect metodo esegue una riconnessione dinamica tra due pin.

Sintassi

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

Parametri

[in] pOutputPin

Puntatore all'interfaccia IPin di un pin di output. Può essere NULL, nel qual caso pInputPin non deve essere NULL.

[in] pInputPin

Puntatore all'interfaccia IPin a un pin di input. Può essere NULL, nel qual caso pOutputPin non deve essere NULL.

[in] pmtFirstConnection

Puntatore a una struttura AM_MEDIA_TYPE che specifica il tipo di supporto per la prima connessione pin effettuata durante la riconnessione. Se questo parametro è NULL, la prima connessione può avere qualsiasi tipo di supporto.

[in] pUsingFilter

Puntatore a un filtro facoltativo da usare nella riconnessione. Il filtro deve essere già presente nel grafico. Può essere NULL.

[in] hAbortEvent

Handle per un evento. Se il chiamante è un filtro che chiama uno dei thread di elaborazione dati, questo parametro deve essere un handle per un evento che verrà segnalato quando il filtro viene inserito in uno stato arrestato. In caso contrario, questo parametro può essere NULL. Per altre informazioni, vedere la sezione Osservazioni.

[in] dwFlags

Combinazione di flag dall'enumerazione AM_GRAPH_CONFIG_RECONNECT_FLAGS , specificando come eseguire la riconnessione.

Valore restituito

Restituisce S_OK in caso di esito positivo. In caso contrario, restituisce un codice di errore che può essere uno dei valori seguenti o altri non elencati.

Codice restituito Descrizione
E_INVALIDARG
Argomento non valido. Ad esempio, sia pInputPin che pOutputPin sono NULL.
E_NOINTERFACE
Il pin di input non supporta IPinConnection.
VFW_E_CANNOT_CONNECT
Impossibile connettersi al filtro.
VFW_E_STATE_CHANGED
Stato del filtro modificato. Impossibile completare l'operazione.

Commenti

Se si specifica un solo pin, il metodo cercherà l'altro pin. Per impostazione predefinita, tuttavia, la ricerca ha esito negativo se raggiunge un filtro aggiunto al grafico tramite il metodo IFilterGraph::AddFilter . Per eseguire l'override di questo comportamento, chiamare IGraphConfig::SetFilterFlags e impostare il flag AM_FILTER_FLAGS_REMOVABLE sul filtro.

Il processo di riconnessione prevede diversi passaggi, la maggior parte dei quali gestiti all'interno di questo metodo:

  1. Prima di chiamare il metodo, assicurarsi di bloccare il flusso di dati lungo il percorso da riconfigurare. Per eseguire questa operazione, le applicazioni devono chiamare il metodo IPinFlowControl::Block . Se il chiamante è un filtro, anziché un'applicazione, il filtro può controllare internamente il flusso di dati.
  2. L'output e i pin di input specificati definiscono i punti iniziale e finale per la riconnessione. Il pin di input deve supportare l'interfaccia IPinConnection . Se si lascia uno di questi pin non specificati (passando un parametro NULL ), il metodo cerca nel grafico del filtro di trovare un pin candidato per la riconnessione. Per trovare un pin di input, cerca downstream dal pin di output; per trovare un pin di output, cerca upstream dal pin di input.
  3. Il metodo esegue il push di tutti i dati in sospeso tramite il grafico del filtro (tramite una chiamata interna a IGraphConfig::P ushThroughData).
  4. Se è stato specificato un filtro da inserire nel grafico, il metodo connette il pin di output iniziale al pin di input del filtro e connette il pin di output del filtro al pin di input finale. Se non si specifica un filtro, il metodo connette semplicemente il pin di output al pin di input. In entrambi i casi, il metodo inserisce tutti i filtri di trasformazione necessari per completare le connessioni. È tuttavia possibile eseguire l'override di questo comportamento impostando il flag appropriato. Per altre informazioni, vedere la descrizione del parametro dwFlags .
  5. Infine, il metodo inserisce i nuovi filtri in uno stato di esecuzione. Spetta al chiamante riavviare il flusso di dati. Le applicazioni possono eseguire questa operazione chiamando IPinFlowControl::Block senza flag.
Se un filtro chiama questo metodo in uno dei propri thread di elaborazione dati, crea il potenziale per un deadlock. Il metodo ottiene un blocco sul grafico del filtro, che può bloccare l'arresto del filtro alla ricezione di una chiamata a IMediaFilter::Stop. Per evitare questa situazione, il metodo accetta un handle per un oggetto evento fornito dal filtro. Il filtro deve segnalare l'evento se riceve una chiamata al relativo metodo Stop .

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione strmif.h (include Dshow.h)
Libreria Strmiids.lib

Vedi anche

Codici di errore e di esito positivo

Interfaccia IGraphConfig