前提・実現したいこと
C++のDirectShowを用いて動画を再生するプログラムで動画を綺麗に再生したい.
コードはDirectShowドキュメントに乗っているサンプルコードそのままです.
発生している問題
動画を再生すると,モノクロの巨大なノイズが画面の半分近くを埋め尽くして,フレームも少しずつしか進みません.
該当のソースコード
C++
1#include <dshow.h> 2void main(void) 3{ 4 IGraphBuilder *pGraph = NULL; 5 IMediaControl *pControl = NULL; 6 IMediaEvent *pEvent = NULL; 7 8 // COM ライブラリを初期化する。 9 HRESULT hr = CoInitialize(NULL); 10 if (FAILED(hr)) 11 { 12 printf("ERROR - Could not initialize COM library"); 13 return; 14 } 15 16 // フィルタ グラフ マネージャを作成し、インターフェイスを問い合わせる。 17 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 18 IID_IGraphBuilder, (void **)&pGraph); 19 if (FAILED(hr)) 20 { 21 printf("ERROR - Could not create the Filter Graph Manager."); 22 return; 23 } 24 25 hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); 26 hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); 27 28 // グラフを作成する。 → ここでhrがfalseになる 29 hr = pGraph->RenderFile(L"C:\Example.avi", NULL); 30 if (SUCCEEDED(hr)) 31 { 32 // グラフを実行する。 33 hr = pControl->Run(); 34 if (SUCCEEDED(hr)) 35 { 36 // 完了するまで待機する。 37 long evCode; 38 pEvent->WaitForCompletion(INFINITE, &evCode); 39 } 40 } 41 pControl->Release(); 42 pEvent->Release(); 43 pGraph->Release(); 44 CoUninitialize(); 45}
試したこと
フリーで落ちているサンプル動画は問題なく再生できました.ノイズの発生する動画はデータ速度が689kbpsとサンプル動画と比較して極端に低く,それが原因かもしれません.
補足情報(FW/ツールのバージョンなど)
Windows10 64bit
C++ VisualStudio2017
回答1件
あなたの回答
tips
プレビュー