Classe CDynamicOutputPin
[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.
La CDynamicOutputPin
classe implementa un pin di output che supporta le riconnessioni dinamiche e le modifiche al formato.
Questa classe deriva dalla classe CBaseOutputPin e implementa l'interfaccia IPinFlowControl . Supporta diverse operazioni importanti per la compilazione dinamica del grafico:
- Riconnessione dinamica: il pin può disconnettersi e riconnettersi mentre il filtro è ancora attivo (sospeso o in esecuzione).
- Modifica del formato dinamico: il pin può negoziare un nuovo tipo di supporto mentre il filtro è ancora attivo, senza riconnettersi.
- Controllo del flusso: il filtro proprietario (o un'applicazione) può bloccare il flusso di dati dal pin senza arrestare il filtro.
Per altre informazioni, vedere Compilazione dinamica del grafo.
Il pin ha tre possibili stati: bloccato, sbloccato e in sospeso. Nello stato in sospeso , il pin è in attesa del completamento di un'operazione su un altro thread, prima che il pin passi allo stato bloccato. Mentre il pin è bloccato, il filtro non può recapitare i dati tramite il pin o modificare la connessione del pin.
Per coordinare più thread, il filtro proprietario deve seguire determinate regole. Per altre informazioni sui thread nel grafico dei filtri, vedere Thread e sezioni critiche. Prima di tutto, il thread di streaming deve chiamare sempre il metodo CDynamicOutputPin::StartUsingOutputPin prima di chiamare uno dei metodi seguenti:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
Successivamente, deve chiamare il metodo CDynamicOutputPin::StopUsingOutputPin .
In secondo luogo, il thread dell'applicazione non deve chiamare nessuno dei metodi nell'elenco precedente. In terzo luogo, il thread di streaming non deve chiamare i metodi di classe che bloccano o sbloccano il pin. Questi metodi sono: CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPin e CDynamicOutputPin::UnblockOutputPin.
Queste regole assicurano che il thread dell'applicazione non possa bloccare il pin mentre il thread di streaming lo usa e viceversa. Dopo che il thread di streaming ha chiamato StartUsingOutputPin, il pin non verrà bloccato fino a quando il thread di streaming chiama StopUsingOutputPin. Viceversa, se il pin è bloccato, StartUsingOutputPin attende fino a quando il pin non viene sbloccato.
Per evitare di dimenticare di chiamare StopUsingOutputPin, è possibile usare la classe CAutoUsingOutputPin . Chiama StopUsingOutputPin automaticamente quando esce dall'ambito.
Quando il filtro proprietario unisce o lascia il grafico del filtro (nel relativo metodo IBaseFilter::JoinFilterGraph ), deve chiamare il metodo CDynamicOutputPin::SetConfigInfo del pin.
Variabili membro protette | Descrizione |
---|---|
m_BlockStateLock | Sezione critica che protegge lo stato di blocco. |
m_hUnblockOutputPinEvent | Evento segnalato quando il pin non è bloccato. |
m_hNotifyCallerPinBlockedEvent | Evento segnalato quando il pin si blocca correttamente o l'utente annulla un blocco in sospeso. |
m_BlockState | Stato di blocco. |
m_dwBlockCallerThreadID | Identificatore del thread che ha chiamato l'ultimo metodo IPinFlowControl::Block su questo pin. |
m_dwNumOutstandingOutputPinUsers | Numero di thread di streaming che usano questo pin. |
m_hStopEvent | Evento segnalato quando il filtro si arresta o il pin scarica i dati. |
m_pGraphConfig | Puntatore all'interfaccia IGraphConfig per l'esecuzione di riconnessioni dinamiche. |
m_bPinUsesReadOnlyAllocator | Flag che specifica se i campioni dell'allocatore del pin sono di sola lettura. |
Metodi protetti | Descrizione |
SynchronousBlockOutputPin | Blocca il pin; non restituisce finché il pin non viene bloccato. |
AsynchronousBlockOutputPin | Blocca il pin; potrebbe restituire prima che il pin venga bloccato. |
UnblockOutputPin | Sblocca il pin. |
BlockOutputPin | Blocca il pin. |
WaitEvent | Attende fino a quando non viene segnalato l'evento specificato. |
Metodi pubblici | Descrizione |
CDynamicOutputPin | Metodo del costruttore. |
~CDynamicOutputPin | Metodo distruttore. |
SetConfigInfo | Specifica il puntatore IGraphConfig e l'evento di arresto. |
DeliverBeginFlush | Richiede al pin di input connesso di avviare un'operazione di scaricamento. |
DeliverEndFlush | Richiede il pin di input connesso per terminare un'operazione di scaricamento. |
Inactive | Notifica al pin che il filtro è stato arrestato. |
Attivo | Notifica al pin che il filtro è ora attivo. |
CompleteConnect | Completa una connessione a un pin di input. Virtuale. |
StartUsingOutputPin | Ottiene l'accesso al pin per un'operazione di streaming. Virtuale. |
StopUsingOutputPin | Rilascia l'accesso al pin dopo un'operazione di streaming. Virtuale. |
StreamingThreadUsingOutputPin | Determina se un thread esegue un'operazione di streaming sul pin. Virtuale. |
ChangeOutputFormat | Modifica dinamicamente il tipo di supporto per la connessione e fornisce nuove informazioni di segmento. |
ChangeMediaType | Modifica dinamicamente il tipo di supporto per la connessione. |
DynamicReconnect | Esegue una riconnessione dinamica con un nuovo tipo di supporto. |
Metodi IPin | Descrizione |
Disconnetti | Interrompe la connessione di pin corrente. |
Metodi IPinFlowControl | Descrizione |
Blocca | Blocca o sblocca il flusso di dati dal pin. |
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Libreria |
|