スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 別PCでも同じ問題を確認 | トップページ | 不具合修正パックを更新 »

狙い撃ちで使用禁止

既に書いてきた様に、Windows10のApril 2018 Updateで更新されたマイクロソフト製のMedia Foundation用MJPEGデコーダーには問題がある感じで、更新後、MJPEGのAVIファイルでは色々と問題が出るのだが、AmuseGraphicsでは、狙い撃ちで使用禁止にする。

AmuseGraphics系ソフトのデコード処理では、Media FoundationとDirectShowの両方が使える様になっている。

なので、Media Foundation用のMJPEGデコーダーに問題が出るのなら、DirectShowの方を使えば良いのだが、ここの所書いてきた様に、DirectShowを優先する格好にしてしまうと、問題が出ているMJPEGデコーダー以外についても、DirectShow側に対応デコーダーがあると、それが使われてしまう、という副作用が出てしまう訳だ。

で、DirectShowというのは古いインタフェースで、AGM形式的にも、これ用のデコーダーを用意しているのだが、つまりは、サードパーティー製のデコーダーも簡単に拡張されてきたインタフェースでもある訳だ。

これに対して、Media Foundationというのは、Windows Vistaで追加されたインタフェースで、DRMに対応できる点を除けば、一般にはメリットは少ないので、サードパーティー製のデコーダーが、ほぼ、存在しない、という特徴もある。

つまり、DirectShowを優先すると、得体のしれないサードパーティー製デコーダーが使われて不具合が発生するリスクが高まるので、作者的には、AmuseGraphics系ソフトでは、mp4エンコードではMedia Foundation用のエンコーダーを使っている事もあり、デコーダーについても、基本的には、Media Foundationを優先していた訳だ。

と、いう事なので、作者的には、元々、Media Foundation用のデコーダーを優先利用させてきていたAGMPlayer/AmuseGraphicsでDirectShowを優先する格好にするのには勇気がいる訳だ。

なので、更に色々と調べてみたのだが、今回の問題は、どうみても、Media Foundation用のMJPEGデコーダー単体の問題の様だった訳だ。

具体的には、Media Foundation用のデコーダーは出力形式を選べるのだが、mp4デコーダーなんかでは、YV12形式での出力も可能なのに対し、MJPEGデコーダーでは、圧縮形式上、その形式での出力は行えず、YUY2形式での出力が選択される事になる訳だ。

つまり、問題はデコーダーではなく、この出力形式を選択した場合のMedia Foundationの挙動、という事だったかもしれないので、作者的には、mp4デコーダーにも、この形式で出力させてみたりもした訳だ。

しかし、mp4デコーダーでは、YUY2形式で出力させても問題は出なかったし、更に、出力形式をRGB32に変更して確認してみても、mp4デコーダーでは問題が発生せず、MJPEGデコーダーでは問題が出た訳だ。

と、いう事なので、とりあえず、問題はMedia Foundationというよりも、MJPEGデコーダーにある感じなので、作者的には、これだけを使わない格好での対応にする事にした訳だ。

そうする事により、変更の影響は、DirectShowを優先した場合よりも、少なくなる筈なので、とりあえず、GW明けには、EdaxBoard等のリリースも行う事にしてあるので、こちらの変更については、明日にでもやっておく事にした。

ちなみに、MJPEGデコーダーを使っているAGMPlayerとAmuseGraphicsが、何故、クラッシュするのか、というと、MJPEGデコーダーとのやりとりでは何らエラーは出ていないのだが、そのデコード結果を受け取る為にMJPEGデコーダーにデータバッファを要求すると、メモリ領域が正しく確保されていないポインタが渡されてきている感じになっているからだ。

具体的には、MJPEGデコーダーにデータを要求しても、高さ方向の解像度が半分になってしまっているので、渡されたポインタを使って全領域を読み込もうとすると存在しないメモリにアクセスしてしまう場合があるので、その結果として例外が発生し、その例外に対する処理ルーチンを持たせていない作者製ソフトは、そのまま、クラッシュしている格好になる。

で、例外が発生しない様に読み込む領域を半分にしてみても、そこには正しい画像は格納されていないので、エクスプローラの様に、クラッシュさせない場合にも、そのアイコン画像の様に、ノイズの様な画像しか取得できない訳だ。

と、いう事なので、今回の問題は普通のエラーチェックを強化してみてもどうにもならない問題で、クラッシュを回避したければ、例外が発生した場合の処理ルーチンを追加する等の追加作業が必要になる。しかし、何度も書いてきた様に、作者製ソフトでは、そういう無駄なコード追加は行わない事にしている訳だ。

つまり、「致命的なエラーが発生しました」、というメッセージを表示する為だけにコード量を増やすのは「労多くして益少なし」なので、今回の問題への対処方法としては、そんな例外を発生させるデコーダーは使わない様にする、という事になる訳だ。

« 別PCでも同じ問題を確認 | トップページ | 不具合修正パックを更新 »

トラックバック

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

この記事へのトラックバック一覧です: 狙い撃ちで使用禁止:

« 別PCでも同じ問題を確認 | トップページ | 不具合修正パックを更新 »

2018年11月
        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  

広告

プライバシーポリシー

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

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

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google