CDynamicOutputPin-Klasse
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Die CDynamicOutputPin
-Klasse implementiert einen Ausgabenadel, der dynamische Verbindungsherstellungen und Formatänderungen unterstützt.
Diese Klasse leitet sich von der CBaseOutputPin-Klasse ab und implementiert die IPinFlowControl-Schnittstelle . Es unterstützt mehrere Vorgänge, die für die Erstellung dynamischer Diagramme wichtig sind:
- Dynamische Wiederherstellung der Verbindung: Der Pin kann die Verbindung trennen und erneut verbinden, während der Filter noch aktiv ist (angehalten oder ausgeführt).
- Dynamische Formatänderung: Der Pin kann einen neuen Medientyp aushandeln, während der Filter noch aktiv ist, ohne erneut eine Verbindung herzustellen.
- Ablaufsteuerung: Der besitzereigene Filter (oder eine Anwendung) kann den Datenfluss vom Pin blockieren, ohne den Filter zu beenden.
Weitere Informationen finden Sie unter Dynamische Grapherstellung.
Der Pin weist drei mögliche Zustände auf: blockiert, entsperrt und ausstehend. Im Ausstehenden Zustand wartet der Pin auf den Abschluss eines Vorgangs für einen anderen Thread, bevor der Pin in den blockierten Zustand wechselt. Während der Pin blockiert ist, kann der Filter keine Daten über den Pin übermitteln oder die Verbindung des Pins ändern.
Um mehrere Threads zu koordinieren, muss der Besitzerfilter bestimmte Regeln befolgen. (Weitere Informationen zu Threads im Filterdiagramm finden Sie unter Threads und kritische Abschnitte.) Zunächst muss der Streamingthread immer die CDynamicOutputPin::StartUsingOutputPin-Methode aufrufen, bevor eine der folgenden Methoden aufgerufen wird:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
Anschließend muss die CDynamicOutputPin::StopUsingOutputPin-Methode aufgerufen werden.
Zweitens darf der Anwendungsthread keine der Methoden in der vorherigen Liste aufrufen. Drittens darf der Streamingthread die Klassenmethoden nicht aufrufen, mit denen der Pin blockiert oder aufgehoben wird. Diese Methoden sind : CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPin und CDynamicOutputPin::UnblockOutputPin.
Diese Regeln stellen sicher, dass der Anwendungsthread den Pin nicht blockieren kann, während der Streamingthread ihn verwendet, und umgekehrt. Nachdem der Streamingthread StartUsingOutputPin aufgerufen hat, wird der Pin erst blockiert, wenn der Streamingthread StopUsingOutputPin aufruft. Wenn der Pin hingegen blockiert ist, wartet StartUsingOutputPin , bis der Pin aufgehoben wird.
Um den Aufruf von StopUsingOutputPin zu vermeiden, können Sie die CAutoUsingOutputPin-Klasse verwenden. Es ruft StopUsingOutputPin automatisch auf, wenn es außerhalb des Bereichs geht.
Wenn der besitzende Filter das Filterdiagramm verknüpft oder verlässt (in seiner IBaseFilter::JoinFilterGraph-Methode ), muss er die CDynamicOutputPin::SetConfigInfo-Methode des Pins aufrufen.
Geschützte Membervariablen | Beschreibung |
---|---|
m_BlockStateLock | Kritischer Abschnitt, der den Blockierungszustand schützt. |
m_hUnblockOutputPinEvent | Ereignis, das signalisiert wird, wenn der Pin nicht blockiert wird. |
m_hNotifyCallerPinBlockedEvent | Ereignis, das signalisiert wird, wenn der Pin erfolgreich blockiert oder der Benutzer einen ausstehenden Block abbricht. |
m_BlockState | Blockierungszustand. |
m_dwBlockCallerThreadID | Der Bezeichner des Threads, der zuletzt die IPinFlowControl::Block-Methode an diesem Pin aufgerufen hat. |
m_dwNumOutstandingOutputPinUsers | Anzahl der Streamingthreads, die diesen Pin verwenden. |
m_hStopEvent | Ereignis, das signalisiert wird, wenn der Filter angehalten wird oder die Pin Daten leert. |
m_pGraphConfig | Zeiger auf die IGraphConfig-Schnittstelle , um dynamische Verbindungen durchzuführen. |
m_bPinUsesReadOnlyAllocator | Flag, das angibt, ob Die Beispiele aus dem Zuteilungsstift schreibgeschützt sind. |
Geschützte Methoden | Beschreibung |
SynchronousBlockOutputPin | Blockiert den Pin; wird erst zurückgegeben, wenn der Pin blockiert ist. |
AsynchronousBlockOutputPin | Blockiert den Pin; kann zurückgegeben werden, bevor der Pin blockiert wird. |
UnblockOutputPin | Hebt die Blockierung des Pins auf. |
BlockOutputPin | Blockiert den Pin. |
WaitEvent | Wartet, bis das angegebene Ereignis signalisiert wird. |
Öffentliche Methoden | Beschreibung |
CDynamicOutputPin | Konstruktormethode. |
~CDynamicOutputPin | Destruktormethode. |
SetConfigInfo | Gibt den IGraphConfig-Zeiger und das Stoppereignis an. |
DeliverBeginFlush | Fordert den verbundenen Eingabenadel an, um einen Löschvorgang zu starten. |
DeliverEndFlush | Fordert den verbundenen Eingabenadel an, um einen Löschvorgang zu beenden. |
Inaktiv | Benachrichtigt den Pin, dass der Filter beendet wurde. |
Aktiv | Benachrichtigt den Pin, dass der Filter jetzt aktiv ist. |
CompleteConnect | Schließt eine Verbindung mit einem Eingabenadel ab. Virtuellen. |
StartUsingOutputPin | Ruft Zugriff auf die Pin für einen Streamingvorgang ab. Virtuellen. |
StopUsingOutputPin | Gibt den Zugriff auf den Pin nach einem Streamingvorgang frei. Virtuellen. |
StreamingThreadUsingOutputPin | Bestimmt, ob ein Thread einen Streamingvorgang am Pin ausführt. Virtuellen. |
ChangeOutputFormat | Ändert dynamisch den Medientyp für die Verbindung und liefert neue Segmentinformationen. |
ChangeMediaType | Ändert dynamisch den Medientyp für die Verbindung. |
DynamicReconnect | Führt eine dynamische erneute Verbindung mit einem neuen Medientyp aus. |
IPin-Methoden | Beschreibung |
Trennen | Unterbricht die aktuelle Pinverbindung. |
IPinFlowControl-Methoden | Beschreibung |
Block | Blockiert oder hebt die Blockierung des Datenflusses aus dem Pin auf. |
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|