DXライブラリでのMP4ファイルの扱いについて
Posted: 2015年5月23日(土) 15:49
はじめまして、「K(けー)」という者です。
C言語歴は1年ちょっとで、その前にJavaでAndroidアプリやコマンドライン上でプレイできるゲームを作ったことがあるので、ほどほど以下程度の知識はあります。
DirectX周りの知識は殆どありません…。
DXライブラリのリファレンスには、ムービーグラフィックハンドルを使用してムービーを再生する方法が載っていました。
これをウインドウモードで実行して、.mp4ファイルを開こうとすると、ムービーグラフィックハンドルの作成に失敗しているようで、
ソフトがすぐに終了してしまいます(GetMovieStateToGraph()関数が1を返していないのを確認しました)。
以下、実行した時のログファイルの抜粋です。
1256:テクスチャ描画情報の作成に失敗しました
1257:右記のグラフィックファイルの格納用グラフィック領域の作成に失敗しました:m.mp4
バッファ(?)がうまく作成できていないようですが、これはDXライブラリあるいはDirectX等の仕様に起因しているためでしょうか?
因みに、.wmv形式、.mpg形式、.avi形式ではこのようなことはありませんでした。
開発環境: Microsoft VisualStudio2013 Ultimate Update 4
OS: Windows8
DXライブラリバージョン: 3.12e
言語: C言語
ソースは以下のようなコードです。
DXライブラリリファレンスのPlayMovieToGraph関数から少し付け足ししたものです。
C言語歴は1年ちょっとで、その前にJavaでAndroidアプリやコマンドライン上でプレイできるゲームを作ったことがあるので、ほどほど以下程度の知識はあります。
DirectX周りの知識は殆どありません…。
DXライブラリのリファレンスには、ムービーグラフィックハンドルを使用してムービーを再生する方法が載っていました。
これをウインドウモードで実行して、.mp4ファイルを開こうとすると、ムービーグラフィックハンドルの作成に失敗しているようで、
ソフトがすぐに終了してしまいます(GetMovieStateToGraph()関数が1を返していないのを確認しました)。
以下、実行した時のログファイルの抜粋です。
1256:テクスチャ描画情報の作成に失敗しました
1257:右記のグラフィックファイルの格納用グラフィック領域の作成に失敗しました:m.mp4
バッファ(?)がうまく作成できていないようですが、これはDXライブラリあるいはDirectX等の仕様に起因しているためでしょうか?
因みに、.wmv形式、.mpg形式、.avi形式ではこのようなことはありませんでした。
開発環境: Microsoft VisualStudio2013 Ultimate Update 4
OS: Windows8
DXライブラリバージョン: 3.12e
言語: C言語
ソースは以下のようなコードです。
DXライブラリリファレンスのPlayMovieToGraph関数から少し付け足ししたものです。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
int MovieGraphHandle;
//ウインドウモードに変更
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが発生したら終了
}
// ムービーファイルをロードします。
MovieGraphHandle = LoadGraph("m.mp4");
// ムービーを再生状態にします
PlayMovieToGraph(MovieGraphHandle);
// ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です
// 戻り値が1の間は再生状態ですのでループを続けます
while (ProcessMessage() == 0 && GetMovieStateToGraph(MovieGraphHandle) == 1) {
// ムービー映像を画面いっぱいに描画します
DrawExtendGraph(0, 0, 640, 480, MovieGraphHandle, FALSE);
// ウエイトをかけます、あまり速く描画すると画面がちらつくからです
WaitTimer(17);
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}