はじめまして。
DirectShowで動画再生のプログラムを作っているのですが、
表示ウインドウがフルスクリーンモードの状態で動画再生を行うと画面が黒いままで表示がされない現象があり困っております。
お詳しい方おられましたら教えていただきたいです。
現状は、
ウインドウモードの状態から動画再生を行うと正常に再生されます。
フルスクリーンモードでは、正常に再生されたり、表示がされなかったり不安定です。
BGMは正しく鳴っています。
ソースコード
IGraphBuilder *m_pGraphBuilder;
IMediaControl *m_pMediaControl;
IMediaEventEx *m_pMediaEvent;
IMediaSeeking *m_pMediaSeek;
IVideoWindow *m_pVideoWindow;
HRESULT hr;
// COMを初期化
hr = CoInitialize(NULL);
if (FAILED(hr))
{
return S_FALSE;
}
// FilterGraphを生成
hr = CoCreateInstance ( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(VOID **)&m_pGraphBuilder);
if (FAILED(hr))
{
return S_FALSE;
}
// MediaControlインターフェース取得
hr = m_pGraphBuilder->QueryInterface(IID_IMediaControl,
(VOID **)&m_pMediaControl);
if (FAILED(hr))
{
return S_FALSE;
}
hr = m_pGraphBuilder->QueryInterface(IID_IMediaEvent,
(VOID **)&m_pMediaEvent);
if (FAILED(hr))
{
return S_FALSE;
}
hr = m_pGraphBuilder->QueryInterface(IID_IMediaSeeking,
(VOID **)&m_pMediaSeek);
if (FAILED(hr))
{
return S_FALSE;
}
hr = m_pGraphBuilder->QueryInterface(IID_IVideoWindow,
(VOID **)&m_pVideoWindow);
if (FAILED(hr))
{
return S_FALSE;
}
// Graphを生成
hr = m_pGraphBuilder->RenderFile(wstrSearchPath, NULL);
if (FAILED(hr))
{
return S_FALSE;
}
LONGLONG Current;
LONGLONG Stop;
hr = m_pMediaSeek->GetAvailable( &Current, &Stop );
hr = m_pVideoWindow->put_Owner((OAHWND)hWindow);
if (FAILED(hr))
{
return S_FALSE;
}
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);
if (FAILED(hr))
{
return S_FALSE;
}
RECT rect;
GetClientRect ( hWindow, &rect );
hr = m_pVideoWindow->SetWindowPosition( 0, 0, rect.right, rect.bottom );
if (FAILED(hr))
{
return S_FALSE;
}
// 再生開始
hr = m_pMediaControl->Run();
DirectShowでフルスクリーンでの動画再生方法について
Re:DirectShowでフルスクリーンでの動画再生方法について
IVideoWindow::put_FullScreenMode
http://msdn.microsoft.com/ja-jp/library/cc369761.aspx
再生を開始する前に、これはどこかで呼んでいますか?
http://msdn.microsoft.com/ja-jp/library/cc369761.aspx
再生を開始する前に、これはどこかで呼んでいますか?
Re:DirectShowでフルスクリーンでの動画再生方法について
IVideoWindow::put_FullScreenModeは使っておりません。
フルスクリーン状態でput_FullScreenModeを使いますと、フルスクリーン表示になりませんでした。
フルスクリーンの解像度は640*480、動画の解像度も640*480なのですが、なぜが左上に小さく表示されます。
ウインドウモード状態でput_FullScreenModeを使いますと動画再生時の表示はフルスクリーンになるのですが、
フルスクリーン状態から切り替えなしに動画再生をする必要があるため困っております。

フルスクリーン状態でput_FullScreenModeを使いますと、フルスクリーン表示になりませんでした。
フルスクリーンの解像度は640*480、動画の解像度も640*480なのですが、なぜが左上に小さく表示されます。
ウインドウモード状態でput_FullScreenModeを使いますと動画再生時の表示はフルスクリーンになるのですが、
フルスクリーン状態から切り替えなしに動画再生をする必要があるため困っております。

Re:DirectShowでフルスクリーンでの動画再生方法について
なるほど。そうですか。
んー、再現できる全体のコード(ウインドウの生成とかフルスクリーン化のあたりとか)が
あるといいんですが。
フルスクリーンウインドウって ChangeDisplaySettings()と併用して作ったものですか?
#追記 簡単なフルスクリーンの動画再生サンプルを作ってみました。
PlayMovie関数は再生待ちと解放周りを追加しただけで、Hashimoさんが書かれたコードと
ほとんど変わりはありません。
左クリックでフルスクリーン化、右クリックで再生開始です。
再生中はウインドウ処理が全部止まっていますので注意して下さい。
MovieFilePath変数が動画ファイルパスになっています。適当に変えて試してみて下さい。

んー、再現できる全体のコード(ウインドウの生成とかフルスクリーン化のあたりとか)が
あるといいんですが。
フルスクリーンウインドウって ChangeDisplaySettings()と併用して作ったものですか?
#追記 簡単なフルスクリーンの動画再生サンプルを作ってみました。
PlayMovie関数は再生待ちと解放周りを追加しただけで、Hashimoさんが書かれたコードと
ほとんど変わりはありません。
左クリックでフルスクリーン化、右クリックで再生開始です。
再生中はウインドウ処理が全部止まっていますので注意して下さい。
MovieFilePath変数が動画ファイルパスになっています。適当に変えて試してみて下さい。
