Condividi tramite


Creazione di un grafico di filtro VMR-9

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

Poiché il renderer di mix video 9 (VMR-9) non è il renderer video predefinito, un'applicazione che usa VMR-9 deve aggiungerla in modo esplicito al grafico e connetterla. Questa sezione presenta due approcci diversi per la creazione di grafici di filtro con VMR-9.

Uso di Capture Graph Builder

Capture Graph Builder è un oggetto helper per la creazione di grafici di filtro personalizzati. È possibile usarlo per compilare grafici VMR-9 come indicato di seguito:

  1. Creare e inizializzare Capture Graph Builder, come descritto nell'argomento Informazioni su Capture Graph Builder.

  2. Chiamare CoCreateInstance per creare vmR-9:

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. Chiamare IFilterGraph::AddFilter in Filter Graph Manager per aggiungere VMR-9 al grafico del filtro:

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. Chiamare IGraphBuilder::AddSourceFilter per aggiungere un filtro di origine per il file video:

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. Chiamare il metodo ICaptureGraphBuilder2::RenderStream per eseguire il rendering del flusso video in VMR:

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. Facoltativamente, chiamare di nuovo RenderStream per eseguire il rendering del flusso audio:

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

È possibile combinare diversi flussi video chiamando AddSourceFilter e RenderStream per ogni file di origine.

Uso di Filter Graph Manager

Se si preferisce non usare Capture Graph Builder, è possibile creare un grafico VMR-9 semplicemente usando i metodi in Filter Graph Manager, come indicato di seguito:

  1. Creare vmR-9 e aggiungerlo al grafico, come illustrato nella procedura precedente.
  2. Usare AddSourceFilter per aggiungere un filtro di origine per il file video, come illustrato nella procedura precedente.
  3. Se si vuole eseguire il rendering dell'audio, creare un'istanza del filtro Renderer DirectSound e aggiungerla al grafico del filtro.
  4. Usare il metodo IBaseFilter::EnumPins per trovare un pin di output nel filtro di origine. Per informazioni dettagliate, vedere Enumerazione dei pin .
  5. Eseguire una query sull'interfaccia Filter Graph Manager per l'interfaccia IFilterGraph2.
  6. Chiamare IFilterGraph2::RenderEx con il flag di AM_RENDEREX_RENDERTOEXISTINGRENDERERS. Questa chiamata esegue il rendering del pin di output usando solo i filtri del renderer già presenti nel grafico, in questo caso vmR-9 e DirectSound Renderer. In questo modo la logica Intelligent Connect impedisce l'aggiunta del renderer video predefinito al grafico, che lascerebbe vmR-9 non connesso.

Creazione di grafici con Capture Graph Builder