ページ 11

DXライブラリでのMP4ファイルの扱いについて

Posted: 2015年5月23日(土) 15:49
by K(けー)
はじめまして、「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関数から少し付け足ししたものです。

コード:

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;        // ソフトの終了
}

Re: DXライブラリでのMP4ファイルの扱いについて

Posted: 2015年5月23日(土) 15:50
by K(けー)
自己レスです。
以下、ログファイルの全文を載せます。長いです…。

0:システムの情報を出力します
15: DXライブラリ Ver3.12e
15: 論理プロセッサの数 : 8
15: OS Windows8 ( Build 9200 )
115: 現時点のCPU動作速度:大体2.15GHz
116: MMX命令を使用します
117: SSE命令が使用可能です
117: SSE2命令が使用可能です
118: CPUベンダ:GenuineIntel
120: CPU名: Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz
121:COMの初期化... 成功しました
131:メモリ総量:8071.27MB 空きメモリ領域:3799.34MB
132:タイマーの精度を検査します
132:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
133: パフォーマンスカウンターを使用します タイマー精度 : 2338.436000 KHz
134: ソフトの二重起動検査... 二重起動はされていませんでした
135:ウインドウクラスを登録します... 登録に成功しました
136:ウインドウモード起動用のウインドウを作成します
138:ウインドウの作成に成功しました
139:ウインドウを表示します
152:IMEを無効にしました
153:ウインドウスタイルをウインドウモード用に変更します... 完了
178:DirectInput関係初期化処理
179: XInput DLL の読み込み中... 成功
184: DirectInput7 の取得中... 成功
211: 引き続き初期化処理... 初期化成功
213: ジョイパッドの初期化...
222: ジョイパッドの初期化は正常に終了しました
223: マウスデバイスの初期化... 初期化成功
224: キーボードデバイスの初期化... 初期化成功
226:DirectInput 関連の初期化は正常に終了しました
229:XAudio2 の初期化を行います
235: XAudio2_8.dll を使用します
235: XAudio2 インターフェースの取得と初期化を行います.... 成功 Ver2.8
264:XAudio2 の初期化は正常に終了しました
271:DirectDraw オブジェクトの取得を行います.... 成功
279:引き続き初期化処理... 初期化に成功しました
309:IDirect3D9Ex オブジェクトを取得します.... 成功
312:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
595:成功
596:Driver:igdumd32.dll Description:Intel(R) HD Graphics 4000
597:画面のフォーマットは D3DFMT_X8R8G8B8 です
598:16bit Zバッファフォーマットは D3DFMT_D16 です
598:24bit Zバッファフォーマットは D3DFMT_D24X8 です
599:32bit Zバッファフォーマットは D3DFMT_D24X8 です
600:16bit カラーフォーマットは D3DFMT_R5G6B5 です
600:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
601:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です
601:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
602:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です
603:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
603:DXT1テクスチャフォーマットはD3DFMT_DXT1 です
604:DXT2テクスチャフォーマットはD3DFMT_DXT2 です
605:DXT3テクスチャフォーマットはD3DFMT_DXT3 です
605:DXT4テクスチャフォーマットはD3DFMT_DXT4 です
606:DXT5テクスチャフォーマットはD3DFMT_DXT5 です
606:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です
607:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
608:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
608:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です
609:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です
609:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です
610:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です
611:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
611:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です
612:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です
612:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です
613:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
613:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です
614:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です
615:一度に描画できるプリミティブの最大数:1048575
615:対応している最大頂点インデックス:16777215
616:同時にレンダリングできるバッファの数:4
616:最大テクスチャサイズ 幅:8192 高さ:8192
617:テクスチャステージテンポラリレジスタ:使用可
618:減算合成のハードウェア対応:ネイティブ
618:ハードウェア頂点シェーダーバージョンコード:300
619:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し
619:ピクセルシェーダーバージョンコード:300
641:バックバッファロック転送の時間:1999nsec 一時的な描画可能バッファを使用した転送の時間:1421nsec
642:バックバッファロックを使用しません
643:Zバッファを作成します.... 成功
697:プログラマブルシェーダーを使用します

762:フォントの初期化を行います
764:フォントの初期化は正常に終了しました
792:文字コードバッファの初期化を行います... 完了しました
1256:テクスチャ描画情報の作成に失敗しました
1257:右記のグラフィックファイルの格納用グラフィック領域の作成に失敗しました:m.mp4
2259:フォントの初期化を行います
2261:フォントの初期化は正常に終了しました
2312:Direct3DDevice9 の解放 2
2322:d3d9.dll の解放 1
2338:DirectInput 関連の終了処理... 完了
2360:ウインドウを閉じようとしています
2363:ウインドウが破棄されようとしています
2364:ソフトを終了する準備が整いました
2479:
2481:Alloc memory dump
2482: Total size:0(0.000kb) Alloc num:0
2484:

Re: DXライブラリでのMP4ファイルの扱いについて

Posted: 2015年5月23日(土) 17:35
by hide
http://dixq.net/forum/viewtopic.php?f=3&t=16568
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1175

mp4といってもいろいろあるので、mp4だからどうであると一概にはいえないと思います。

Re: DXライブラリでのMP4ファイルの扱いについて

Posted: 2015年5月24日(日) 12:46
by K(けー)
ご回答ありがとうございます。

.mp4というファイル形式のみではなんとも言えない、
DirectXやDXライブラリだけの話ではない、ということですか…
ご提示いただいたリンクを参考に、自分の方でも調べてみます。