2013年6月18日火曜日

フォーム内で再生:DirectShow

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


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

 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 件のコメント:

コメントを投稿