Re: ogv再生につきまして ( No.1 ) |
- 名前:管理人 日時:2013/05/26 14:45
ご報告ありがとうございます
ただ、手元の環境では現象が再現しませんでした
ウインドウの右端を持って、とありますが、これは SetWindowSizeChangeEnableFlag を使用して
ウインドウのサイズを変更可能にしているということでしょうか?
一応こちらで試したことは、SetWindowSizeChangeEnableFlag でウインドウのサイズを変更可能に
した状態で ogv を再生中にウインドウの右端をつかんで3〜4秒間ウインドウサイズを広げたり
狭めたりということをしてから戻すというものです
よろしければグリグリする時間やお使いのPCのOSなどを教えて頂けないでしょうか?
あと、もしかしたら手元の最新バージョンでは別件の影響で直っている可能性もありますので、
よろしければこちらのバージョンをお試しになってみてください
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
Re: ogv再生につきまして ( No.2 ) |
- 名前:computermania 日時:2013/05/29 06:20
お忙しい中お返事有り難うございます!
最新版でやってみましたが、やはりまだ起こるようです。
SetWindowSizeChangeEnableFlagでウィンドウを可変にして大きさを変えたり、ウィンドウのタイトルバーを掴んでひっぱり回してもフリーズすることがあります。
いろいろと調べましたところ、OS等は関係なく、古いマシンでは頻繁に発生することがあるようで、新しいマシンでも高い負荷を与えてやれば発生するようです。
(OGVの多重再生等)
現在詳細な条件を調査中ですので、今しばらくお待ちください。
|
Re: ogv再生につきまして ( No.3 ) |
- 名前:computermania 日時:2013/05/30 05:14
あれからいろいろと試してみまして
やはりTheoraのデコードが重くなってくると、Theoraのデコードスレッドから戻ってこれない(?)ような感じとなりフリーズするようです。
透過、不透過、拡大、モードも試してみましたが関係なさそうです。
以下のソースで起動した後、可変ウィンドウにしてグリグリするとフリーズいたします。
ムービーを4つ再生していますが、速いマシンではもう少し増やすかSetMovieRightImageAlphaFlagをTRUEにすればちょうど良い重さになって再現できるかと思います。
ご確認くださいませ。
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i , j ;
SetGraphMode( 1280 , 720 , 32 ) ;
ChangeWindowMode(TRUE);
SetWindowSizeChangeEnableFlag(TRUE);
SetAlwaysRunFlag(TRUE);
SetWaitVSyncFlag(60);
SetBackgroundColor( 0,0,0 ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
/// 補間をバイリニアに
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
/// 描画先画面を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// SetMovieRightImageAlphaFlag( TRUE ) ;
int d0=LoadGraph("test.png");
int d1=LoadGraph("test1.ogv");
int d2=LoadGraph("test2.ogv");
int d3=LoadGraph("test3.ogv");
int d4=LoadGraph("test4.ogv");
PlayMovieToGraph(d0,DX_PLAYTYPE_LOOP);
PlayMovieToGraph(d1,DX_PLAYTYPE_LOOP);
PlayMovieToGraph(d2,DX_PLAYTYPE_LOOP);
PlayMovieToGraph(d3,DX_PLAYTYPE_LOOP);
PlayMovieToGraph(d4,DX_PLAYTYPE_LOOP);
// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
DrawGraph(0,0,d0,TRUE);
DrawGraph(50,50,d1,FALSE);
DrawGraph(100,100,d2,FALSE);
DrawExtendGraph(200,200,1500,1500,d3,TRUE);
DrawExtendGraph(0,0,1500,1500,d4,TRUE);
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
|
Re: ogv再生につきまして ( No.4 ) |
- 名前:bbotan 日時:2013/05/30 05:40
私も以前、普通のゲーム利用者がやらないくらいウィンドウを高速に振り回しまくると
青画面になる状態だったことがありますが、
ビデオカードのドライバ更新したらならなくなりました。
|
Re: ogv再生につきまして ( No.5 ) |
- 名前:管理人 日時:2013/06/02 18:31
載せて頂いたプログラムでも現象は再現しませんでした
負荷が足りていなかったので、以下のように少しだけ変更させて頂きました
#include "DxLib.h"
#define NUM (5)
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i , j ;
int d[NUM];
SetGraphMode( 1280 , 720 , 32 ) ;
ChangeWindowMode(TRUE);
SetWindowSizeChangeEnableFlag(TRUE);
SetAlwaysRunFlag(TRUE);
SetWaitVSyncFlag(60);
SetBackgroundColor( 0,0,0 ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
/// 補間をバイリニアに
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
/// 描画先画面を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
//SetMovieRightImageAlphaFlag( TRUE ) ;
int d0=LoadGraph("test.png");
for( i = 0; i < NUM; i++ )
{
d[i] = LoadGraph("test.ogv");
}
for( i = 0; i < NUM; i++ )
{
PlayMovieToGraph( d[i],DX_PLAYTYPE_LOOP);
}
// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
DrawGraph(0,0,d0,TRUE);
for( i = 0; i < NUM; i++ )
{
DrawExtendGraph( 0, 0, 1500, 1500, d[i], TRUE );
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
#define NUM を 20 にして激しく処理負荷が高い状態でウインドウのサイズをグリグリ
変更してみたりしましたが、重いながらもフリーズすることなく再生は続きました
こちらに上記プログラムをコンパイルした実行ファイルをアップしましたので、
よろしければ computermaniaさんの環境ではどのような結果になるか試してみて
頂けないでしょうか?
https://dxlib.xsrv.jp/file/SetFontSizeTest.zip
( 再生している test.ogv は含まれていませんのでご用意ください )
あと、よろしければテストで使用されている ogvファイルの解像度やビットレートを教えて頂けないでしょうか?
|
Re: ogv再生につきまして ( No.6 ) |
- 名前:computermania 日時:2013/06/09 10:44
お返事が遅くなりまして申し訳ございません。
いただきましたソースにて実行致ました所、以下の様な結果になりました。
x 713x1000 1285kbps 24f
x 1400x1000 1503kbps 24f
o 1280x720 8497kpbs 29.97f
o 1280x720 10336kbps 29.97f
x 320x240 85kbps 30f
x 800x600 1043kbps 24f
x 800x600 2452kbps 24f
変換はすべて
ffmpeg2theora-0.29
にて行っております。
zipの方のソースは中身が違うようで、ムービーの再生はできませんでしたので、掲示板内のソースを貼り付けて実行しております。
ご参考になれば幸いです。
引き続き調べてみます。
|
Re: ogv再生につきまして ( No.7 ) |
- 名前:computermania 日時:2013/06/10 10:16
もしかすると解像度等は関係なく、
Theora変換元ファイルにオーディオトラックがあるかないかが原因かもしれません。
引き続き調査しますので、今しばらくお待ちください。
|
Re: ogv再生につきまして ( No.8 ) |
- 名前:管理人 日時:2013/06/23 20:58
ご情報ありがとうございます
computermaniaさんの環境でも大丈夫な動画ファイルもあるんですね・・・
私の環境では相変わらず再現しませんが、ogvのデコードは別のスレッドで
処理をしているので、スレッド間のデータのやり取りで競合が発生して
デッドロックが起きてしまっている可能性があります
なので、ogv のデコード処理の部分を見直して、今までよりもデッドロックが
起きにくくなるように処理を少し変更してみました
そのバージョンをこちらにアップしましたので、よろしければお試しになってみてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
|