Condividi tramite


Metodo CBaseOutputPin.Deliver

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

Il Deliver metodo fornisce un esempio multimediale al pin di input connesso.

Sintassi

virtual HRESULT Deliver(
   IMediaSample *pSample
);

Parametri

pSample

Puntatore all'interfaccia IMediaSample dell'esempio.

Valore restituito

Restituisce un valore HRESULT . I valori possibili includono quelli elencati nella tabella seguente.

Codice restituito Descrizione
S_OK
Operazione completata.
VFW_E_NOT_CONNECTED
Il pin non è connesso.

Commenti

Questo metodo chiama il metodo IMemInputPin::Receive nel pin di input. La ricezione può bloccare se il metodo IMemInputPin::ReceiveCanBlock restituisce S_OK.

Rilasciare l'esempio dopo aver chiamato questo metodo. Il pin di input potrebbe contenere un conteggio dei riferimenti nell'esempio, quindi non riutilizzare l'esempio. Chiamare sempre il metodo CBaseOutputPin::GetDeliveryBuffer per ottenere un nuovo esempio.

Tenere premuta la sezione critica del filtro prima di chiamare questo metodo. In caso contrario, il pin potrebbe essere disconnesso durante la chiamata al metodo. Se il filtro usa un thread di lavoro per recapitare esempi, tenere la sezione critica quando il filtro è pronto per recapitare un esempio. In caso contrario, è possibile contenere la sezione critica nel metodo IMemInputPin::Receive del filtro, in cui vengono elaborati esempi di filtro.

I thread di lavoro possono creare un potenziale deadlock. Quando il thread contiene la sezione critica, potrebbe attendere una modifica dello stato nel filtro. Allo stesso tempo, la modifica dello stato potrebbe attendere il completamento del thread. Per evitare questo problema, il codice di modifica dello stato deve segnalare un evento che termina il thread e quindi attendere il completamento del thread.

Requisiti

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

Vedi anche

Classe CBaseOutputPin