2013年6月18日火曜日

フォーム内で再生:DirectShow

フォームアプリケーションで再生 の記事を変更する。


とりあえず表示してみる。諸々の処理は省略してあります。
ボタンをクリックすると表示する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    IGraphBuilder *pGraph = NULL; 
    IMediaControl *pControl = NULL; 
    IMediaEvent   *pEvent = NULL;
    IVideoWindow  *pVideoWindow = NULL;
 
    // COM ライブラリを初期化する。 
    HRESULT hr = CoInitialize(NULL); 
    if (FAILED(hr)) 
    
     printf("ERROR - Could not initialize COM library"); 
     return
    
 
    // フィルタ グラフ マネージャを作成し、インターフェイスを問い合わせる。 
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,  
     IID_IGraphBuilder, (void **)&pGraph); 
    if (FAILED(hr)) 
    
     printf("ERROR - Could not create the Filter Graph Manager."); 
     return
    
 
    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); 
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
    hr = pGraph->QueryInterface(IID_IVideoWindow, (LPVOID*)&pVideoWindow);
 
    // グラフを作成する。 重要 : この文字列をシステム上のファイルに置き換える。 
    hr = pGraph->RenderFile(L"G:\\sampleMovie\\avi_divx5_mp3.avi", NULL); 
 
    // 描画先ウィンドウの設定
    HWND hWnd = reinterpret_cast< HWND & >(this->Handle);
    hr = pVideoWindow->put_Owner((OAHWND)hWnd);
    hr = pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);
    hr = pVideoWindow->SetWindowPosition(0,0,320,240);
    hr = pVideoWindow->put_Visible(OATRUE);
 
    // グラフを実行する。 
    hr = pControl->Run(); 
 
    pControl->Release(); 
    pEvent->Release(); 
    pGraph->Release(); 
   }
};

0 件のコメント:

コメントを投稿