タイプ2のファイルからの送信

プレビュー中にタイプ2のファイルを送信するには、次の図に示すフィルターグラフを使用します。

種類-2 送信 (プレビューあり)

タイプ2のファイルには、1つのオーディオストリームと1つの DV エンコードされたビデオストリームの2つのストリームがあります。 このグラフでは、 DV マルチプレクサー フィルターを使用して、オーディオストリームとビデオストリームを結合します。 インターリーブされたストリームを MSDV フィルターに送信しますが、プレビューのためにストリームを再び分割します。

次のように、このグラフを作成します。

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

このコードでは、 Renderstream をいくつか呼び出します。

最初の2つは、ソースフィルターを AVI スプリッターに接続し、AVI スプリッターを DV Mux に接続します。 最初の呼び出しでは、キャプチャグラフビルダーによって自動的に AVI スプリッターがグラフに追加され、AVI スプリッターの出力ピンの1つが DV Mux に接続されます。 2番目の呼び出しでは、キャプチャグラフビルダーによって AVI スプリッターの2番目の出力ピンが検索され、DV Mux に接続されます。

Renderstream の3番目の呼び出しでは、DV マルチプレクサーを無限ピンの t フィルターに接続します。 次の呼び出しでは、無限の Pin から MSDV キャプチャフィルターに1つのストリームを接続します。 このストリームはデバイスに送信されます。 Renderstream への最後の呼び出しでは、グラフのプレビューセクションがビルドされます。

送信中にプレビューを使用しない場合は、無限の Pin を省略することができます。また、DV Mux を MSDV フィルターに接続するだけです。

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

DirectShow でのデジタルビデオ