Videoport-Pins
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Ein Aufnahmegerät mit einem Hardwarevideoport kann die Videoporterweiterungen (VPE) in Microsoft® DirectX® verwenden. Wenn ja, verfügt der Aufnahmefilter über einen Videoport (VP)-Pin. Es werden keine Videodaten vom VP-Pin durch das Filterdiagramm übertragen. Stattdessen werden Videoframes in Hardware produziert und direkt an den Videospeicher gesendet. Der VP-Pin ermöglicht das Senden von Steuermeldungen an die Hardware.
Es ist wichtig, die VP-Pin zu verbinden, auch wenn Ihre Anwendung nur die Dateierfassung ohne Vorschau durchführt. Wenn Sie den Pin nicht verbunden lassen, wird das Diagramm nicht ordnungsgemäß ausgeführt. Dies unterscheidet sich von Vorschau-Pins, die nicht verbunden werden müssen.
Die verschiedenen DirectShow-Videorenderer bieten unterschiedliche Unterstützung für VP-Pins:
- Videorenderer: Verbinden Sie den VP-Pin an 0 im Overlay-Mixer Filter, und verbinden Sie den Overlay-Mixer-Filter mit dem Videorenderer.
- VMR-7: Verbinden Sie den VP-Pin mit dem VideoPort Manager Filter, und verbinden Sie den Videoport-Manager mit dem VMR-7.
- VMR-9: Sie können die VMR-9 nicht verwenden, wenn das Gerät über einen VP-Pin verfügt, da Direct3D 9 keine Videoports unterstützt. Verwenden Sie entweder den Videorenderer oder den VMR-7.
Für Videoportszenarien wird der Overlay-Mixer und der Videorenderer über den Videoport-Manager und VMR-7 empfohlen, da nicht alle Treiber den Videoport-Manager unterstützen. Im Allgemeinen ist der Overlay-Mixer die zuverlässigste Option für Videoports.
Die ICaptureGraphBuilder2::RenderStream-Methode fügt automatisch den Overlay-Mixer ein, wenn ein VP-Pin vorhanden ist. Wenn Sie das Diagramm erstellen, ohne diese Methode zu verwenden, sollten Sie nach einem Videoport-Pin für den Aufnahmefilter suchen, und wenn ein Diagramm vorhanden ist, verbinden Sie es mit dem Overlay-Mixer-Filter, wie im folgenden Diagramm dargestellt.
Sie können die ICaptureGraphBuilder2::FindPin Methode verwenden, um nach einem VP-Pin für den Aufnahmefilter zu suchen:
hr = pBuild->FindPin(
pCap, // Pointer to the capture filter.
PINDIR_OUTPUT, // Look for an output pin.
&PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
NULL, // Any media type.
FALSE, // Pin can be connected.
0, // Retrieve the first matching pin.
&pVPPin // Receives a pointer to the pin.
);
Nachdem Sie den Überlagerungsmischer zum Diagramm hinzugefügt haben, rufen Sie FindPin erneut auf, um pin 0 im Overlay-Mixer zu finden. Pin 0 ist immer der erste Eingabenadel auf dem Filter.
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
Verbinden Sie die beiden Pins, indem Sie IGraphBuilder::Connectaufrufen.
pGraph->Connect(pVPPin, pOvPin);
Verbinden Sie dann den Ausgabehefter des Overlay-Mixers mit dem Videorenderer-Filter. Sie können das Video ausblenden, indem Sie die methoden IVideoWindow::p ut_AutoShow und IVideoWindow::p ut_Visible methoden im Filter Graph Manager aufrufen.
Für TV-Tuner verfügt der Aufnahmefilter möglicherweise auch über einen VBI-Pin (PIN_CATEGORY_VIDEOPORT_VBI). Wenn ja, verbinden Sie diesen Pin mit dem VBI Surface Allocator Filter. Weitere Informationen finden Sie unter Anzeigen von Untertiteln.
Verwandte Themen