DXライブラリのPlayMovie関数について質問なのですが、
今までは動画再生に、
LoadGraph → PlayMovieToGraph → DrawGraph
をしていた者ですが、見た感じフレーム数の面で
PlayMovie 関数の方が処理が軽かったため、
そちらに移行しようとしています。
しかしPlayMovie 関数を使ってみると動画を再生する瞬間に画面が荒れます。
時には、ピンク色で時には黄緑色です。
また、完全にその色に埋まるわけではなく、
毎回横向きの模様で荒れます。
この模様も毎回変わるみたいです。
MediaPlayerなどでの再生では問題ありません。
また、以前の方法ではこのようなことはありませんでした。
これは、仕様でしょうか?
それとも、環境かなにかですかね・・?
こちらに、動画の情報を記載しておきます。
[opening.mpg]
800x600 29.97fps 1:1 VBR
MPEG1-LayerII 44.10kHz 192.00kb/s CBR Stereo
[Extra][3]
SCR : 00:02:00.731 (120.731sec)
GOP : 00:01:59.834 (119.834sec)
RATE : 00:00:04.094 (4.094sec)
[MPEG1] 00:02:00.731 (120.731sec) / 53,669,892Bytes
真空波動研 090212 / DLL 090212
一応環境も載せておきます。
Windows XP SP3
Borland Devloper
コンパイラ: BCC
グラフィックカード: Sis 740
ライブラリver: 2.25
*以下、後日追加したものです。
追加で質問があるので、よかったらこちらもお願いします。
質問2
PlayMovie関数をウィンドウモードで開始させる際に、
ウィンドウを非アクティブにしてから再生開始をしてみるとウィンドウのフレームなしで、最前面に勝手に動画だけが浮き上がってきます。
これは回避不可でしょうか?
質問3
また同じく、PlayMovie関数でDX_MOVIEPLAYTYPE_BCANCEL を第三引数に用いた場合ですが、
再生中でウィンドウズバーのほかのタスクをクリックした場合でも反応して動画がスキップされてしまいます。
ウィンドウがアクティブでかつ画面内をクリックした時だけ、スキップできるようにはなりませんか?
なお、SetAlwaysRunFlag(true);
によって動画は常に再生されるようにしています。
やはり、スキップ面では、PlayMovieToGraph を使った方が都合が良いのでしょうか?
長々とした質問ですみません。
よろしくお願いします<(_ _)>
PlayMovie 関数
Re:PlayMovie 関数
>PlayMovie関数の方が処理が軽かったため、
>ウィンドウのフレームなしで、最前面に勝手に動画だけが浮き上がってきます
PlayMovie()そのものは、普通に LoadBmpToGraph()~PlayMovieToGraph()で再生し
それを内部でループさせて表示しているだけなので、基本的には処理内容的には
自前で表示する場合とほとんど同じはずです。
が、これは推測ですが、Vista以外での PlayMovie()は可能ならオーバーレイサーフェースで
再生しようとします。
そのため、処理が軽くなる反面、諸々の現象が起きているのではないでしょうか。
多分(試していません)ですが、LoadGraph()ではなく、 LoadBmpToGraph()を使って
第4引数に DX_MOVIESURFACE_OVERLAYを指定すれば同じ現象になるかと思います。
>スキップ面では、PlayMovieToGraph を使った方が都合が良いのでしょうか?
PlayMovie()では細かくキャンセル条件を指定できないので、
PlayMovieToGraph()を使う方がいいかと思います。