スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 音声オフセット機能を追加 | トップページ | とりあえず完成させる »

誰かのバグから回避

今は、AG-ムービーカッターの改良開発を行っていて、オンラインヘルプを除いて、予定していた変更は終了した。なので、今日は細かい不具合を修正したりしていたのだが、一番大きな問題は、Windows8.1では、MPEG1動画のエンコードでクラッシュしていた事だ。

何故、クラッシュしていたのか、というと、MPEG1動画のデコードではDirectShowが使われるのだが、そのグラフを作成してくれるDirectShowのRenderFileメソッドで、以下の様な例外が発生していたからだ。

ハンドルされない例外が 0x00007FF8D05B1129 (igdumdim64.dll) で発生しました(AGMEdit.exe 内): 0xC0000094: Integer division by zero。

で、同様の現象は、現行版でも発生するのだが、同じ事をやっても、Windows7環境とWindows10環境では問題は発生していない。

更に言えば、エンコード時にクラッシュするMPEG1動画も、普通に再生する分には、問題は発生していない。

つまり、Windows8.1環境で、同じMPEG1動画に対して、二つ以上のDirectShowグラフを作成しようとした場合に限り、上記の例外が発生する訳だ。

なので、同時に二つのDirectShowグラフを作成する事がないAGMPlayerでは、問題は発生しなかったのだが、上記の問題はMPEG1デコーダーの問題なのか、というと、そうでもない様なのだ。

何故なら、MPEG1ファイルの代わりに、MSRLEファイルを使っても、同様のクラッシュが発生したからなのだが、それでは、どのファイルでも問題が発生するのか、というと、そうでもなくて、WMVやMJPGなんかのMedia Foundationでもサポートされているファイルの場合、強制的にDirectShowを使う格好にしても、問題は発生しなかった。

と、いう事で、少し不可思議な現象なのだが、作者的には、最初、DirectShowというのはCOM絡みのシステムになる訳なので、COM関係の初期化方法だとかに問題があるのかなあ、と、思っていた訳だ。

しかし、更に面白い現象として、Graphedit.exeに上記のMPEG1ファイルをドロップしてグラフを作成している状態で、上記の操作を行った場合には、例外は発生しなくなった。

つまり、AG-ムービーカッターのプロセスとは無関係のプロセス上での操作がAG-ムービーカッターでの例外の発生有無を左右した訳なので、作者的には、AG-ムービーカッターのコードは無罪にした。

で、更にGraphedit上でのグラフ状態を変えながら現象の発生有無を見てみると、MPEG Video Decoderの出力に接続されているVideo Rendererを削除すると、現象が発生する様になる事が判った。

逆に言うと、MPEG Video Decoderの出力にVideo Rendererが接続されているグラフがマシン上に一つでもあれば、問題は発生しない感じだった訳だ。

なので、AG-ムービーカッターで、普通にGrapheditと同様のグラフをダミーで作成してみた所、現象は発生しなくなった。

と、いう事なので、この現象はAG-ムービーカッター以外の誰かのバグが原因と思われるので、その内、そのバグは誰かに修正され、問題は発生しなくなる可能性もある。

そうなった場合、回避処理は無駄なモノとなるのだが、実際問題としては、今日の時点では、問題は固定的に発生しているので、AG-ムービーカッターとしては、回避処理を入れずにリリースする訳にも行かない。

なので、今日は、上記の最後に書いた方法で、問題を回避する処理を入れたのだが、回避処理としては、無駄なグラフを一つ作成するだけなので、グラフ作成には二倍の時間がかかる事になるのだが、それ以外には特に性能的な問題等も発生しない。

ちなみに、igdumdim64.dllというのをネットで調べてみると、Intel HD Graphics用のデバイスドライバの一部、という事になっていた。

なので、例外を発生させているのは、DirectShowデコーダーではなく、Video Rendererかもしれないのだが、その原因を作っているのは、古いDirectShowデコーダーかもしれない。

いずれにしても、問題が発生する状況は特殊なので、バグを仕込んでいる開発者としても、そのバグが存在する事を把握できていない可能性は高いかもしれない。

= この記事に関連する公開中ソフト =

AmuseGraphics

AmuseGraphics

(2016/05/04追加)

« 音声オフセット機能を追加 | トップページ | とりあえず完成させる »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/62654592

この記事へのトラックバック一覧です: 誰かのバグから回避:

« 音声オフセット機能を追加 | トップページ | とりあえず完成させる »

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google