次の方法で共有


Type-2 の DV ファイルへのキャプチャ

type-2 の DV AVI ファイルには、DV ビデオを含むストリームとオーディオを含むストリームの、2 つのストリームがある。プレビュー中に type-2 ファイルをキャプチャするには、次の図に示すフィルタ グラフを使う。

プレビュー中の Type-2 キャプチャ

このグラフは、type-1 キャプチャで使うグラフとほぼ同じである (「Type-1 の DV ファイルへのキャプチャ」を参照すること)。ただし、キャプチャ ストリームは、AVI Mux フィルタに到達する前に DV スプリッタ フィルタを通過する。したがって、AVI Mux は、オーディオ ストリームと DV エンコードのビデオ ストリームの、2 つのストリームを受け取る。

次のように、グラフを作成する。

ICaptureGraphBuilder2 *pBuilder;  // キャプチャ グラフ ビルダ。
IBaseFilter           *pDV;       // DV キャプチャ フィルタ (MSDV)。
IBaseFilter           *pAviMux    // Avi Mux フィルタ。
IBaseFilter           *pDVSplit;  // DV スプリッタ。

// pDV を初期化する (省略)。
// Capture Graph Builder を作成し、初期化する (省略)。

// DV スプリッタを作成し、フィルタ グラフに追加する。
hr = CoCreateInstance(CLSID_DVSplitter, 0, CLSCTX_INPROC_SERVER,
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVSplit));
hr = pGraph->AddFilter(pDVSplit, L"DV Splitter");

// グラフのファイル作成セクションを作成する。
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,
    OLESTR("C:\\Example2.avi"), &pAviMux, 0);

// DV スプリッタにキャプチャ ピンを接続し、DV スプリッタから AVI Mux に
// 一方のストリームをレンダリングする。
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, 
    pDV, pDVSplit, pAviMux);

// DV スプリッタから AVI Mux に他方のストリームをレンダリングする。
hr = pBuilder->RenderStream(0, 0, pDVSplit, 0, pAviMux);

// プレビュー ストリームをレンダリングする。
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Interleaved, 
    pDV, 0, 0);

// 忘れずにすべてのインターフェイスを解放する。
  1. DV スプリッタを作成し、フィルタ グラフに追加する。
  2. ICaptureGraphBuilder2::SetOutputFileName を呼び出して、AVI Mux フィルタをファイル ライタ フィルタに接続する。
  3. ICaptureGraphBuilder2::RenderStream を呼び出して、MSDV キャプチャ フィルタを DV スプリッタに接続する。また、この呼び出しでは、DV スプリッタの出力ピンの 1 つも AVI Mux に接続される。
  4. 再度 RenderStream を呼び出して、DV スプリッタの別のピンを AVI Mux に接続する。
  5. 3 回目の RenderStream の呼び出しで、プレビュー ストリームをレンダリングする。ビデオをプレビューしない場合、この手順は省略すること。