Freigeben über


Videoport-Pins

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

Ein Aufzeichnungsgerät mit einem Hardwarevideoport kann die Videoporterweiterungen (VPE) in Microsoft® DirectX® verwenden. Wenn ja, verfügt der Erfassungsfilter über einen Videoport-Pin (VP). Vom VP-Pin werden keine Videodaten durch das Filterdiagramm übertragen. Stattdessen werden Videoframes in Hardware erstellt und direkt an den Videospeicher gesendet. Der VP-Pin ermöglicht das Senden von Steuernachrichten an die Hardware.

Es ist wichtig, den VP-Pin zu verbinden, auch wenn Ihre Anwendung nur Dateierfassung ohne Vorschau ausführt. Wenn Sie den Pin nicht verbunden lassen, wird das Diagramm nicht ordnungsgemäß ausgeführt. Dies unterscheidet sich von Vorschaupins, 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 den Pin 0 am Filter "Overlay Mixer ", und verbinden Sie den Filter "Overlay Mixer" mit dem Videorenderer.
  • VMR-7: Verbinden Sie den VP-Pin mit dem Videoport-Manager-Filter , und verbinden Sie den Videoport-Manager mit der VMR-7.
  • VMR-9: Sie können 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 werden 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 den Overlay-Mixer automatisch 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 eins vorhanden ist, verbinden Sie ihn mit dem Filter "Überlagerungsmischer", wie im folgenden Diagramm gezeigt.

Verbinden eines Videoport-Pins mit dem Überlagerungsmischerfilter.

Sie können die ICaptureGraphBuilder2::FindPin-Methode verwenden, um nach einem VP-Pin für den Erfassungsfilter 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 dem Diagramm den Überlagerungsmischer hinzugefügt haben, rufen Sie FindPin erneut auf, um Pin 0 auf dem Überlagerungsmischer zu finden. Pin 0 ist immer der erste Eingabestift im Filter.

pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);

Verbinden Sie die beiden Pins, indem Sie IGraphBuilder:Connect aufrufen.

pGraph->Connect(pVPPin, pOvPin);

Verbinden Sie dann den Ausgabenadel 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 im Filter Graph-Manager aufrufen.

Bei TV-Tunern verfügt der Aufnahmefilter möglicherweise auch über einen Videoport-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.

Themen zur erweiterten Erfassung

Verwenden des Überlagerungsmischers in der Videoaufnahme