スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 一通りの確認は完了 | トップページ | 32Bit版のM4A出力を復活 »

32Bit版からM4A出力を削除

今は、AG-ムービーカッターの改良開発を行っていて、最終確認として、64Bit版Windows8.1の開発環境以外、具体的には、32Bit版Windows7と64Bit版Windows10での動作確認を行ったのだが、散々な目に合わされた。結局、32Bit版からはM4A出力機能を削除した。

作者製ソフトで、32Bit版と64Bit版で機能的に異なるモノは無かった筈なのだが、AG-ムービーカッターについては、32Bit版の機能は64Bit版よりも劣る、という事になる。

これは何故なのか、というと、Media FoundationのAAC Encoderを使ったM4A出力機能が、32Bit環境ではマトモに動作しないからだ。

具体的には、32Bit版のWindows7環境で32Bit版を動作させた場合ばかりではなく、64Bit版Windows8.1と64Bit版Windows10上で32Bit版を動作させた場合にも、マトモに動作しなかった。

上記を見ていると、AG-ムービーカッターの32Bit版にバグがある様に見えるかもしれないのだが、もしバグがあるとしても、それは、32Bit版のMedia Foundation仕様に対応できていない、という事になる筈だ。

何故なら、全く同じコードでビルドした64Bit版については、Windows7/8.1/10環境で問題なく動作しているからだ。

で、マトモに動作しない、というのはどういう状態なのか、というと、大体は、サンプルの書き込み用のメソッドがエラーを返してくるのだが、たまに、エラーせず、普通に動作している感じになる場合もある、という状態だ。

もっとも、エラーせずに普通に動作している様に見える場合には、出力ファイルもそれなりに正しいデータが書かれているので、出力ファイルを再生する事も出来るのだが、何故か、時間は少し長めになっている。

つまり、ノーエラーで出力できた場合にも、実際には、少し変なのだが、中には、出力中にAG-ムービーカッターがクラッシュする場合もある訳だ。

と、いう事で、32Bit版のAAC Encoderを使ったM4A出力機能は非常に不安定で、確実にエラー終了させる事も出来ない状況なので、機能自体を削除する事にした訳だ。

まあ、削除するのなら、64Bit版からも、合わせて削除してしまった方が、仕様的にはすっきりするのだが、作者的には、Macユーザーだったり、Androidユーザーだったりする訳なので、M4A出力機能はあった方が何かと便利な訳だ。

そして、巷のPCユーザーの多くも、既に64BitOSを使用している筈なので、32BitOSのバグに引きずられる格好で、64Bit版の機能を削るのも考え物な訳だ。

と、いう事なので、作者的には、気分が悪いのだが、32Bit版からだけ、M4A出力機能は削除した。

ちなみに、64Bit版Windows8.1とWindows10で普通に動作していた64Bit版についても、最初、64Bit版のWindows7ではマトモに動作しなかった。

この場合のマトモに、というのは、32Bit版とは明らかに挙動が異なり、出力自体は安定して行われたのだが、出力されたデータが音飛びみたいな感じになっていた。

結論から言うと、Windows7のMedia Foundationでだけ、AACエンコーダーにデータを書きこむ時のデータサイズがPCMサンプル数にして1024でなければならない、という仕様になっている感じな訳だ。

このため、その他環境でも、別段、1024毎にしても問題は発生しないので、内部的にリングバッファを一つ追加して、API呼び出し時のデータサイズをWindows7のMedia Foundationに合わせる形にした。

その結果、何とか、64Bit版Windows7では、M4A出力が出来る格好にできたので、まだ、救われるのだが、いずれにしても、Media FoundationのAAC Encoderの仕様は、OS毎に微妙に異なる感じだ。

もっとも、同じAACエンコーダーが使われる筈のMP4出力については、32Bit版でも問題なく動作している。

なので、本質的な問題はSink Writerにあって、マイクロソフト的には、MP4出力はムービーメーカー等で使っているので、Sink Writerのバグを修正したものの、M4A出力については、使っていないので、放置しているのかもしれない。

と、いう事で、やはり、人様の高級機能APIを使うと、何かとトラブる。

そういえば、今日は、2時間程度のMP4ファイルを再生し、その音声切り出しをしたりもしていたのだが、ここでもトラブった。

どうトラブったのか、というと、切り出し中に、メモリリークの様に、使用メモリ量がどんどん増えて、GBオーダーまで行ったので、32Bit版ではメモリ不足でクラッシュしたりした。

この問題の原因は、Media FoundationのSource Readerが、気を利かせたつもりで、AACデータしか採取する気がないのに、シーケンシャルにファイルアクセスして見つかったH.264データも、メモリにため込んでしまっていたから、だと思われる。

この問題に対する対策としては、映像データも読み込んでやれば良かったかもしれないのだが、それだと、こちら側のプログラム処理が面倒になるので、Seek動作を適時入れる様にした。

まあ、Seekを入るとメモリリーク現象が無くなる、なんてのは、普通は、夢にも思わない筈ではあるのだが。

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

AmuseGraphics

AmuseGraphics

(2016/05/04追加)

« 一通りの確認は完了 | トップページ | 32Bit版のM4A出力を復活 »

トラックバック

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

この記事へのトラックバック一覧です: 32Bit版からM4A出力を削除:

« 一通りの確認は完了 | トップページ | 32Bit版のM4A出力を復活 »

2017年10月
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