Condividi tramite


Pin porta video

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

Un dispositivo di acquisizione con una porta video hardware potrebbe usare le estensioni della porta video (VPE) in Microsoft® DirectX®. In tal caso, il filtro di acquisizione avrà un pin di porta video (VP). Nessun viaggio di dati video dal pin VP tramite il grafico del filtro. I fotogrammi video vengono invece prodotti nell'hardware e inviati direttamente alla memoria video. Il pin VP consente di inviare messaggi di controllo all'hardware.

È importante connettere il pin VP, anche se l'applicazione esegue solo l'acquisizione di file senza anteprima. Se si lascia il pin non connesso, il grafico non verrà eseguito correttamente. Questo è diverso dai pin di anteprima, che non devono essere connessi.

I diversi renderer video DirectShow forniscono supporto variabile per i pin VP:

  • Renderer video: connettere il pin VP al pin 0 nel filtro Mixer sovrapposizione e connettere il filtro Mixer di sovrapposizione al renderer video.
  • VMR-7: connettere il pin VP al filtro Gestione porte video e connettere La gestione porte video a VMR-7.
  • VMR-9: non è possibile usare VMR-9 se il dispositivo ha un pin VP, perché Direct3D 9 non supporta le porte video. Usare il renderer video o vmR-7.

Per gli scenari di porta video, è consigliabile sovrapporre Mixer e Video Renderer tramite Gestione porte video e VMR-7, perché non tutti i driver supportano La gestione porta video. In generale, il Mixer sovrapposizione è l'opzione più affidabile per le porte video.

Il metodo ICaptureGraphBuilder2::RenderStream inserisce automaticamente il mixer di sovrapposizione se è presente un pin VP. Se si sta creando il grafico senza usare questo metodo, è consigliabile verificare la presenza di un pin della porta video nel filtro di acquisizione e, se presente, connetterlo al filtro Mixer di sovrapposizione, come illustrato nel diagramma seguente.

connessione di un pin della porta video al filtro mixer di sovrapposizione.

È possibile usare il metodo ICaptureGraphBuilder2::FindPin per cercare un pin VP nel filtro di acquisizione:

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.
);

Dopo aver aggiunto il mixer di sovrapposizione al grafico, chiamare di nuovo FindPin per trovare il pin 0 nel mixer di sovrapposizione. Il pin 0 è sempre il primo pin di input del filtro.

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

Connettere i due pin chiamando IGraphBuilder::Connect.

pGraph->Connect(pVPPin, pOvPin);

Connettere quindi il pin di output di Overlay Mixer al filtro Video Renderer. È possibile nascondere il video chiamando i metodi IVideoWindow::p ut_AutoShow e IVideoWindow::p ut_Visible in Filter Graph Manager.

Per i tuner TV, il filtro di acquisizione potrebbe avere anche un pin VBI della porta video (PIN_CATEGORY_VIDEOPORT_VBI). In tal caso, connettersi al filtro Surface Allocator VBI . Per altre informazioni, vedere Visualizzazione di didascalie chiuse.

Argomenti di acquisizione avanzati

Uso del mixer di sovrapposizione in Acquisizione video