Trasmettere dal file Type-2

Per trasmettere un file type-2 durante l'anteprima, usare il grafico del filtro illustrato nel diagramma seguente.

type-2 transmit with preview

Un file type-2 include due flussi, un flusso audio e un flusso video con codifica DV. Questo grafico usa il filtro DV Muxer per combinare i flussi audio e video. Invia il flusso interleaved al filtro MSDV, ma suddivide nuovamente il flusso per l'anteprima.

Compilare questo grafico come indicato di seguito:

// 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 a AVI Splitter e AVI Splitter al DV Mux. Nella prima chiamata, capture Graph Builder aggiunge automaticamente il splitter AVI al grafico e connette uno dei pin di output di AVI Splitter al DV Mux. Nella seconda chiamata, capture Graph Builder trova il secondo pin di output di AVI Splitter e lo connette al DV Mux.

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

Se non si vuole visualizzare l'anteprima durante la trasmissione, è possibile omettere il tee pin infinito e semplicemente connettere il mux DV al filtro MSDV:

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

Video digitale in DirectShow