DOBON.NETプログラミング掲示板過去ログ
AudioVideoPlayback::Video終了後のエラー
題名: AudioVideoPlayback::Video終了後のエラー
著者: masa
日時: 2011/01/10 10:43:18
ID: 27983
この記事の返信元:
(なし)
この記事への返信:
(なし)
ツリーを表示
環境/言語:[Windows XP SP3 / Visual Studio 2005 / Visual C++ CLR マネージアプリケーション]
分類:[.NET]
2011/01/10(Mon) 10:47:20 編集(投稿者)
お久しぶりです。masaです。
現在、スクリプトを読み込んで動作する、ゲームエンジンもどきを作成しています。
途中でビデオの再生が必要になったので、以下のコードで実装しました。
//
// ビデオの再生
//
public: System::Void PlayVideo(String^ Path) {
// ビデオを開く
Microsoft::DirectX::AudioVideoPlayback::Video^ Video = gcnew Microsoft::DirectX::AudioVideoPlayback::Video("MOV\\" + Path);
// ビデオが終了したなら、イベント発生
Video->Ending += gcnew System::EventHandler(this,&Form1::StopVideo);
// 自分のフォームに描画
Video->Owner = this;
// なぜか、ウィンドウのサイズが変わってしまうので、修正
this->ClientSize = this->Size;
Video->Size = this->ClientSize;
// 再生
Video->Play();
// 終わるまで待機
while (Video->State.ToString() == "Running" && this->Created) {
Application::DoEvents();
}
// ストップ
Video->Stop();
// フォームに残骸が残るので、新しいフォームをオーナーにする
Form^ frm = gcnew Form();
Video->Owner = frm;
// フォームを閉じる
frm->Close();
C++では、Disposeができないので、nullにする
Video = nullptr;
}
//
// ビデオをストップ
//
public: System::Void StopVideo(System::Object^ sender, System::EventArgs^ e) {
// senderからAudioVideoPlayback::Videoにする
Microsoft::DirectX::AudioVideoPlayback::Video^ Video = (Microsoft::DirectX::AudioVideoPlayback::Video^)sender;
// ビデオを止める
Video->Stop();
}
このソースで、とりあえず動くのですが、謎がいくつかあります。
・ウィンドウのサイズが勝手に変わる。
これは、AudioVideoPlaybackがビデオに合わせてサイズを変えてくれるそうですが、
ウィンドウが小さくなります...
・ビデオが終了しても、最後のコマのままになる。
これは、新しいフォームをオーナーにすることで回避しましたが、これが下のエラーの原因?
それで、このコードを使用し、ビデオを再生、終了した後に
ウィンドウを最小化すると、AudioVideoPlaybackの例外エラーが発生します。
以下、エラー内容です。
アプリケーションでエラーが発生しました。
-2147024809 (E_INVALIDARG)
場所 Microsoft.DirectX.AudioVideoPlayback.Video.set_Size(Size value)
場所 Microsoft.DirectX.AudioVideoPlayback.Video.OnOwnerResize(Object sender, EventArgs e)
場所 System.Windows.Forms.Control.OnResize(EventArgs e)
場所 System.Windows.Forms.Form.OnResize(EventArgs e)
場所 System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
場所 System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
場所 System.Windows.Forms.Control.UpdateBounds()
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ContainerControl.WndProc(Message& m)
場所 System.Windows.Forms.Form.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
長くなってしまって、申し訳ありませんが、謎と、エラーの原因、できれば解決方法も教えていただけると幸いです。
どなたか、回答をお願いします。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
2011/01/10(Mon) 10:47:20 編集(投稿者)
お久しぶりです。masaです。
現在、スクリプトを読み込んで動作する、ゲームエンジンもどきを作成しています。
途中でビデオの再生が必要になったので、以下のコードで実装しました。
//
// ビデオの再生
//
public: System::Void PlayVideo(String^ Path) {
// ビデオを開く
Microsoft::DirectX::AudioVideoPlayback::Video^ Video = gcnew Microsoft::DirectX::AudioVideoPlayback::Video("MOV\\" + Path);
// ビデオが終了したなら、イベント発生
Video->Ending += gcnew System::EventHandler(this,&Form1::StopVideo);
// 自分のフォームに描画
Video->Owner = this;
// なぜか、ウィンドウのサイズが変わってしまうので、修正
this->ClientSize = this->Size;
Video->Size = this->ClientSize;
// 再生
Video->Play();
// 終わるまで待機
while (Video->State.ToString() == "Running" && this->Created) {
Application::DoEvents();
}
// ストップ
Video->Stop();
// フォームに残骸が残るので、新しいフォームをオーナーにする
Form^ frm = gcnew Form();
Video->Owner = frm;
// フォームを閉じる
frm->Close();
C++では、Disposeができないので、nullにする
Video = nullptr;
}
//
// ビデオをストップ
//
public: System::Void StopVideo(System::Object^ sender, System::EventArgs^ e) {
// senderからAudioVideoPlayback::Videoにする
Microsoft::DirectX::AudioVideoPlayback::Video^ Video = (Microsoft::DirectX::AudioVideoPlayback::Video^)sender;
// ビデオを止める
Video->Stop();
}
このソースで、とりあえず動くのですが、謎がいくつかあります。
・ウィンドウのサイズが勝手に変わる。
これは、AudioVideoPlaybackがビデオに合わせてサイズを変えてくれるそうですが、
ウィンドウが小さくなります...
・ビデオが終了しても、最後のコマのままになる。
これは、新しいフォームをオーナーにすることで回避しましたが、これが下のエラーの原因?
それで、このコードを使用し、ビデオを再生、終了した後に
ウィンドウを最小化すると、AudioVideoPlaybackの例外エラーが発生します。
以下、エラー内容です。
アプリケーションでエラーが発生しました。
-2147024809 (E_INVALIDARG)
場所 Microsoft.DirectX.AudioVideoPlayback.Video.set_Size(Size value)
場所 Microsoft.DirectX.AudioVideoPlayback.Video.OnOwnerResize(Object sender, EventArgs e)
場所 System.Windows.Forms.Control.OnResize(EventArgs e)
場所 System.Windows.Forms.Form.OnResize(EventArgs e)
場所 System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
場所 System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
場所 System.Windows.Forms.Control.UpdateBounds()
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ContainerControl.WndProc(Message& m)
場所 System.Windows.Forms.Form.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
長くなってしまって、申し訳ありませんが、謎と、エラーの原因、できれば解決方法も教えていただけると幸いです。
どなたか、回答をお願いします。