DirectShowと戦うスレ Part 4 at TECH
[2ch|▼Menu]
189:デフォルトの名無しさん
09/01/07 10:50:36
>>188
あ、エスパー的な質問でしたか。
とりあえずファイルをオープンするところをうpります

bool Open( const char *chrFileName )
{
 if( FAILED(CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&GraphBuilder )) ) return false;
 if( FAILED(GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl )) ) return false;
 if( FAILED(GraphBuilder->QueryInterface( IID_IMediaEventEx, (void **)&MediaEventEx )) ) return false;
 if( FAILED(GraphBuilder->QueryInterface( IID_IMediaSeeking, (void **)&MediaSeeking )) ) return false;
 if( FAILED(GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow )) ) return false;
 if( FAILED(GraphBuilder->QueryInterface( IID_IBasicAudio, (void **)&BasicAudio )) ) return false;
 if( FAILED(CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&BaseFilter )) ) return false;
 if( FAILED(BaseFilter->QueryInterface( IID_ISampleGrabber, (void **)&SampleGrabber )) ) return false;
 GraphBuilder->AddFilter( BaseFilter, L"Grabber" );
 AM_MEDIA_TYPE mt;
 ZeroMemory( &mt, sizeof( AM_MEDIA_TYPE ) );
 mt.majortype = MEDIATYPE_Video;
 mt.subtype = MEDIASUBTYPE_RGB24;
 mt.formattype = FORMAT_VideoInfo;
 if( SampleGrabber->SetMediaType( &mt ) != S_OK ) return false;
 WCHAR buff[512];
 ::ZeroMemory( buff, sizeof( buff ) );
 ::MultiByteToWideChar( CP_ACP, 0, chrFileName, strlen(chrFileName), buff, sizeof(buff) );
 if( FAILED(GraphBuilder->RenderFile( buff, NULL )) ) return false;
 if( PlayWnd != NULL ){
  VideoWindow->put_Owner( (OAHWND)PlayWnd );
  VideoWindow->put_WindowStyle( WS_CHILD|WS_CLIPSIBLINGS );
  if( FormWnd && MediaEventEx->SetNotifyWindow( (OAHWND)FormWnd, WM_GRAPHNOTIFY, 0 ) != S_OK ) return false;
 }



次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5104日前に更新/109 KB
担当:undef