DirectShowと戦うスレ Part 4
at TECH
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