Trasmissione da un file di tipo 2

Per trasmettere un file di tipo 2 durante l'anteprima, usare il grafico di filtro illustrato nel diagramma seguente.

tipo 2 trasmesso con anteprima

Un file di tipo 2 ha due flussi, un flusso audio e un flusso video con codifica DV. Questo grafico usa il filtro muxer DV per combinare i flussi audio e video. Invia il flusso con interfoliazione al filtro MSDV, ma suddivide nuovamente il flusso per l'anteprima.

Compilare questo grafico come segue:

// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");

// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source", 
    &pFileSource);

hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);

// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);

Questo codice esegue diverse chiamate a RenderStream:

I primi due connettono il filtro di origine al separatore AVI e al separatore AVI al Mux DV. Nella prima chiamata, il generatore di grafici di acquisizione aggiunge automaticamente il separatore AVI al grafo e connette uno dei pin di output di AVI Splitter alla Mux DV. Nella seconda chiamata, il generatore di grafici di acquisizione trova il secondo pin di output del separatore AVI e lo connette al Mux DV.

La terza chiamata a RenderStream connette il muxer DV al filtro infinito del Pin Tee. La chiamata successiva connette un flusso dal tee di pin infinito al filtro di acquisizione MSDV. Questo flusso viene trasmesso al dispositivo. L'ultima chiamata a RenderStream compila la sezione di anteprima del grafo.

Se non si desidera visualizzare l'anteprima durante la trasmissione, è possibile omettere il numero infinito di Pin Tee e connettere semplicemente il mux DV al filtro MSDV:

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);

Video digitale in DirectShow