スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« ダイアログを作成中 | トップページ | 着々と完成に近づく »

再生は可能に

今は、Ubuntu版AG-ムービーカッターの開発フェーズで、まずは、「音声ファイルの加工」機能用のダイアログを作成している。今日の時点でダイアログ部品の実装は完了し、テスト用の再生は可能になっているのだが、加工機能の適用はこれからだ。

少し前に書いた筈なのだが、Ubuntu版ソフトの開発時には、Windows / macOS版ソフトの開発時に使用している様なGUIでダイアログ部品を配置するツールは使用していない。
 
なので、部品の位置合わせは、適当な位置に配置したダイアログを作成後、それを動作させ、その表示を見ながら、それらしい位置に修正する格好になっている。
 
このため、部品数が70程度ある「音声ファイルの加工」ダイアログでは、ダイアログ部品の配置位置を決めるだけでも大変なのだが、当然のことながら、それらの部品には色々と機能がある訳だ。
 
つまり、コンボボックスには選択肢があるので、それらを設定しておく必要があるし、テキストボックスにもデフォルト文字列を入力しておく必要があったりする。
 
また、状況に応じて、各部品の入力は禁止したり許可したりする必要もあるのだが、これらの設定については、昨日の時点で大体は終了していた。
 
なので、今日は、このダイアログの本来の機能について実装を進めたのだが、とりあえず、「再生」ボタンを押すと、指定された音声ファイルを再生出来る様にはなった。
 
同時に、シーク用のスライダーだとか、現在の再生位置を表示するテキスト、更には、レベルメーターの表示も行える様になっているのだが、今日の実装で最も大変だったのは、メモリ破壊が発生したので、その問題を回避する必要が生じた事だ。
 
具体的には、ダイアログの表示開始タイミングだとか、表示終了タイミングで、アプリケーションがクラッシュしてしまったのだが、その原因は、普通に鑑みれば、コンパイラか標準Cライブラリのバグになる筈だ。
 
何故なら、スタックオーバーフロー等が発生する筈がない状況で、スタックが破壊された旨の表示が行われていたからなのだが、この問題は「-fno-stack-protector」というオプションを付けてビルドし直すと、とりあえずは無くなった。
 
上記のオプションはスタックチェックを禁止するオプションなので、当然と言えば当然のことなのだが、その後、更に、色々と変更していると、また、クラッシュが発生し始めた訳だ。
 
なので、そのクラッシュを発生させなくするのが大変だったのだが、こういうクラッシュは、Ubuntu版に関しては、過去の開発でも度々遭遇している。
 
で、大体は、クラス変数にしていた変数をグローバル変数にしたりすることで回避してきたのだが、これはつまり、標準のCライブラリでは、メモリのアロケーション処理とフリー処理が、複雑な場合には、多分、メモリ境界問題なんかが発生して、クラッシュに至る感じな訳だ。
 
なので、これまでも、極力、メモリアロケーションと解放が複雑にならない様に工夫してきたのだが、ここのところ書いてきた様に、「音声ファイルの加工」ダイアログは、作者製ソフトの中でもダイアログ部品が最も多い感じのダイアログになっているので、このダイアログを生成する時には、70程度もあるダイアログ部品が、同時にアロケーションされる格好になる。
 
と、いうことなので、メモリアロケーションと解放処理で問題が発生していたのだが、今日の時点では、ダイアログ生成前に生成していたファイル指定ダイアログの消去を先に行い、同時にアロケーションされているメモリ領域が減る格好にすることで、何とか、クラッシュは回避できる様になった。
 
上記の通り、Ubuntu版の開発時には、メモリのアロケーションと解放は鬼門なのだが、今までの経験上、問題が発生しているのはダイアログの生成/解放時に限られるので、問題の本質はgtkのダイアログ部品のメモリアロケーション要求にあるのかもしれない。
 

« ダイアログを作成中 | トップページ | 着々と完成に近づく »

トラックバック


この記事へのトラックバック一覧です: 再生は可能に:

« ダイアログを作成中 | トップページ | 着々と完成に近づく »

2019年9月
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