Hatena::ブログ(Diary)

Kir Royal

2008-11-12

DirectShowを使用してファイルを作成する際に使うフィルタ

| 18:31

DirectShowを使いあるファイルから異なったフォーマットのファイルを出力する際に出力フォーマットの名前を設定する.

これは,FileWriter Filterを使いIFileSinkFilter インターフェイスでファイル名を設定することにより実現が可能

//

// Filter Graph 変数

IFraphBuilder* pGraphBuilder;// これの初期化などは今回は省略

// File Writer Filterの設定

IBaseFilter *pFileWriterFilter = NULL;

hr = CoCreateInstance(CLSID_FileWriter, NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void**)&pFileWrite);

if(FAILED(hr)){/**** Error処理をする ****/}

// File Writer FilterをGraphに追加する

hr = pGraphBuilder->AddFilter(pFileWrite, L"File write");

if(FAILED(hr)){/**** Error処理をする ****/}

// 出力ファイル名を設定

IFileSinkFilter *pFileSinkFilter = NULL; pFileWrite->QueryInterface(IID_IFileSinkFilter, (void**)&pFileSinkFilter);

// 今回はC:\\tmp.wavというファイル名にする

hr = pFileSinkFilter->SetFileName(L"C:\\tmp.wav", NULL);

if(FAILED(hr)){/**** Error処理をする ****/}

pFileSinkFilter->Release();

後の接続は通常と一緒

2008-10-31

DirectShow RenderFileメソッドを使ったときの各フォーマットに対応するフィルタグラフ

| 14:34

  • Windows Media Video
    • WM ASF Reader->WMVideo Decoder DMO->Video Renderer(VMR Input)
  • DV-AVI(TYPE1)
    • File Source(Async)->AVI Splitter->DV Splitter->DV Decoder->Video Renderer(VMR Input)
  • DV-AVI(TYPE2)
    • File Source(Async)->AVI Splitter->DV Decoder->Video Renderer(VMR Input)
  • AVI
    • File Source(Async)->AVI Splitter->MJPEG Decompressor->Color Space Converter->Video Renderer(VMR Input)
    • File Source(Async)->AVI Splitter->AVI Decompressor->Video Renderer(VMR Input)
  • MPEG
    • File Source(Async)->MPEG-I Stream Splitter->MPEG Video Decoder->Video Renderer(VMR Input)
フィルタCLSID*1備考
File SourceCLSID_AsyncReaderIGraphBuilder::AddFileSource()を使う
AVI SplitterCLSID_AviSplitter
AVI DecompressorCLSID_AVIDec
Color Space ConverterCLSID_Colour
DV SplitterCLSID_DVSplitter
DV DecoderCLSID_DVVideoCodec
ffdshow Video Filter{0B390488-D80F-4A68-8408-48DC199F0E97}
MJPEG DecompressorCLSID_MjpegDec
MPEG-I Stream SplitterCLSID_MPEG1Splitter
MPEG-I Video DecoderCLSID_CMpegVideoCodec
QuickTime Movie ParserCLSID_QuickTimeParser
Video RendererCLSID_VideoRenderer
WMVideo Decoder DMO{32564D57-0000-0010-8000-00AA00389B71}
FileSource CLSID_AsyncReaderIGraphBuilder::AddFileSource()を使う
AVI SplitterCLSID_AviSplitter
AVI DecompressorCLSID_AVIDec
Color Space ConverterCLSID_Colour
DV SplitterCLSID_DVSplitter
DV DecoderCLSID_DVVideoCodec
ffdshow Video Filter{0B390488-D80F-4A68-8408-48DC199F0E97}
MJPEG DecompressorCLSID_MjpegDec
MPEG-I Stream SplitterCLSID_MPEG1Splitter
MPEG-I Video DecoderCLSID_CMpegVideoCodec
QuickTime Movie ParserCLSID_QuickTimeParser
Video RendererCLSID_VideoRenderer
WMVideo Decoder DMO{32564D57-0000-0010-8000-00AA00389B71}

参照HP DirectShow

*1:CLSIDはhttp://msdn.microsoft.com/en-us/library/ms783348(VS.85).aspxを参照して調べる

2008-10-24

DirectShow関連tips

| 17:51

参考HP

  • 構造体
    • WAVEFORMATEX
      • この構造体には、すべてのウェーブフォーム オーディオ データ形式に共通のフォーマット情報のみが含まれる。
    • PIN_INFO構造体
      • ピンに関する情報が格納される