Condividi tramite


Anteprima video (DirectShow)

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

Per compilare un grafico di anteprima video, chiamare il metodo ICaptureGraphBuilder2::RenderStream come indicato di seguito:

ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder
// Initialize pBuild (not shown).

IBaseFilter *pCap; // Video capture filter.

/* Initialize pCap and add it to the filter graph (not shown). */

hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCap, NULL, NULL);

In questo esempio si presuppone quanto segue:

Il primo parametro del metodo ICaptureGraphBuilder2::RenderStream specifica una categoria di pin; per un grafico di anteprima, usare PIN_CATEGORY_PREVIEW. Il secondo parametro specifica un tipo di supporto, come GUID di tipo principale. Per il video, usare MEDIATYPE_Video. I dispositivi DV offrono audio e video interleaved, per cui il tipo di supporto è MEDIATYPE_Interleaved. Per altre informazioni sull'acquisizione DV, vedere Digital Video in DirectShow.

Il terzo parametro è un puntatore all'interfaccia IBaseFilter del filtro di acquisizione. I due parametri successivi non sono necessari in questo esempio. Vengono usati per specificare filtri aggiuntivi che potrebbero essere necessari per eseguire il rendering del flusso. Impostando l'ultimo parametro su NULL , Capture Graph Builder seleziona un renderer predefinito per il flusso, in base al tipo di supporto. Per il video, Capture Graph Builder usa sempre il filtro Del renderer video come renderer predefinito.

Nota

In Windows XP e versioni successive, anche se il renderer di missaggio video (VMR) è il renderer video predefinito per i metodi IGraphBuilder , non è il renderer predefinito per il metodo RenderStream . In qualsiasi piattaforma, Capture Graph Builder usa sempre il filtro del renderer video precedente, a meno che non si specifichi diversamente.

 

Anche se la categoria di pin viene specificata come PIN_CATEGORY_PREVIEW, non importa se il filtro ha effettivamente un pin di anteprima; potrebbe avere un pin di porta video o semplicemente un pin di acquisizione. In entrambi i casi, Capture Graph Builder compila automaticamente il grafico corretto.

Il diagramma seguente mostra il grafico più semplice possibile per la visualizzazione in anteprima del video.

grafico di anteprima video

In questo diagramma il filtro di acquisizione ha un pin di anteprima, che si connette direttamente al renderer video.

Se il filtro di acquisizione include solo un pin di acquisizione, Capture Graph Builder inserisce un filtro Tee intelligente , che suddivide il flusso in un flusso di acquisizione e in un flusso di anteprima. Questo argomento è descritto in modo più dettagliato in Combinazione di acquisizione video e anteprima.

In alcuni casi, il flusso video deve passare attraverso il filtro Mixer di sovrapposizione. In tal caso, il metodo RenderStream lo aggiunge automaticamente al grafico.

Combinazione di acquisizione video e anteprima

Acquisizione video