スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 再移植はできた | トップページ | Ubuntu版だけ更新した »

バグもあったので

今日はWindows版AG-ムービーカッターの更新を適用したUbuntu版で新AGMモードのデコード性能を上げていたのだが、ほぼ従来モードと遜色無い程度まで上げられた。バグもあったので、Windows版も一緒にサイレントアップデートする。

バグというのは、タイミング依存で現象が出たり出なかったりするものなので、Windows版の確認時には不具合は出ていなかった。

しかし、Ubuntu版でRGB/YV12モードを使って分割並列エンコードの動作確認をしていると、たまに、エンコードの終盤でクラッシュする現象が見られたので、色々と確認してみると、バグが見つかった訳だ。

そのバグというのは、エンコード終了後に、エンコード用に使っていたクラスオブジェクトをDeleteするのだが、このクラスオブジェクトでは、非同期ディスク書き込みをするために、別スレッドを作成して使用していた。

で、Delete前には、出力ファイルのクローズ処理を行っていて、そのクローズ処理の中で、ディスク書き込みのフラッシュ処理を同期的に行い、書き込み終了後に、上記スレッドの終了要求も行っていた。

ただし、スレッドに終了要求を行う時点では、既にディスク書き込みは全て終了している形になるため、スレッドに終了要求を出した後、別段、スレッドの終了は待ってはいなかったのだ。

と、言うことで、これがバグだった訳だ。

何故なら、通常は、スレッドに終了要求を出せば、処理は瞬時に実行されるため、クラスオブジェクトのDelete時には上記の別スレッドは存在しなくなっているので問題は無いのだが、分割並列エンコード時には、上記のクラスオブジェクトを複数作って同時動作させているため、CPU負荷が高い。

さらに、RGB/YV12モードでのエンコード中にはディスク性能も使い切るため、仮想記憶の処理にも遅滞が発生し、Delete時にもスレッドが終了していない状況が発生してしまう可能性があった訳だ。

このような場合、Deleteでクラスオブジェクト用のメモリ領域が開放されてしまうと、上記の別スレッドは存在しないメモリを参照する形になってしまうため、プログラムはクラッシュしてしまう訳だ。

上記の通りなので、使い方や環境によっては、不具合は発生しないのだが、まだβリリースの段階なので、作者的には、気軽にバイナリを更新できる。なので、デコード性能の件もあるので、Windows版についても、Ubuntu版と同時に、バグを修正したバージョンを再度アップするつもりだ。

ちなみに、デコード性能については、現在アップしてあるUbuntu版が一番性能が良いのだが、そのバイナリを使って再生すると、CPU時間が35秒になるDCTモードのフルHD動画を、手元のバイナリで再生すると、CPU時間は37秒になっている。

で、今日、性能を上げた結果、上記の動画を高圧縮オプション付きのDCTモードでエンコードした動画を再生した場合のCPU時間は39秒になっている。そして、DCT+モードに高圧縮オプションを付けて再エンコードした動画の場合には、CPU時間は45秒になっている。

と、言うことで、新モードのデコード性能については、既存モードと遜色ないくらいにまで向上したのだが、これはデコードをシングルスレッドで動作させた場合で、マルチスレッドで動作させると負荷は2倍近く高くなる。

なので、現在アップしてあるWindows版ではデコードはマルチスレッドで動作させているのだが、次にアップするバイナリではシングルスレッド動作させる事にした。解像度が高い動画を再生する場合には性能が足りなくなる可能性もあるのだが、最近のCPUでなら、マルチスレッド動作させなくても、フルHD動画の再生くらいは楽にできる筈だ。

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

AG-ムービーカッター for Ubuntu 12.04LTS

AG-ムービーカッター for Ubuntu12.04LTS

(2013/12/07追加)

« 再移植はできた | トップページ | Ubuntu版だけ更新した »

トラックバック

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

この記事へのトラックバック一覧です: バグもあったので:

« 再移植はできた | トップページ | Ubuntu版だけ更新した »

2018年7月
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 のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

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

    ポリシーと規約 - Google