スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« タッチで操作は複雑になる | トップページ | 何故か重いが »

なんとか再開

今は、Ubuntu上でネイティブに動作するAG-ムービーカッターを作っているのだが、色々とあって作業は中断していた。で、今日からまた作業を再開したのだが、とりあえず、AGM形式動画ファイルに対して静止画表示ができる所までは来た。

元々手元にあったAG-ムービーカッターのソースコードはWindows用なのだが、普通にC++で書いているため、Ubuntu用にする場合にも、完全オリジナルルーチンについては、そのままビルドする事も可能だ。

しかし、当然の事ながら、プログラム内部では、Win32APIも呼び出しているため、その部分についてはUbuntu用に変更しなければならない。

なので、まず、画面表示系については、Ubuntuではgtkmmが使えるため、それを使ってウインドウ表示だとか、メニュー表示だとかを出来るようにし、メモリ上のビットマップデータをウインドウ内に表示できる所まで確認した。

次に、ファイルアクセス用のAPIをUbuntu用に変更し、AGM形式ファイルのReadOpen処理が動作するのを確認しようとしたのだが、ファイルアクセス系のAPIコールは随所で頻繁に行っていた。

このため、オリジナルコードを変更すると、作業が大変になり、かつ、今回作成するコードをWindows用にフィードバックしようとする場合にも、そのままでは使えなくなるため、Ubuntu用コードでも、オリジナルコードをそのまま使えるように、ラッパーのような外部関数を作成して使用する形にする事にした。

で、それらを作って使ってみた所、AGM形式ファイルのReadOpen処理は正しく行えたような感じだったのだが、ファイルから画面データを読み込み、表示してみない事には、本当に正しく処理が行えているかどうかは判らなかった。

なので、次に、画面データを読み込み、表示させてみようとしたのだが、そのためには、AGM形式動画のデコード部を動作させなければならなかった。

問題は、AGM形式動画のデコード部はマルチスレッド動作になっていて、WindowsとUbuntuでは、マルチスレッド関係の処理コードはあまり似ていない、という事だった。

このため、まず、CreateThreadだとか、SetEventだとか、WaitForSingleObjectだとか、Mutex関係の処理コードについても、ラッパーを作る必要があり、一応、それらを作ってみたものの、それらを使うデコード処理ルーチンはフリーズしていた。

と、言うところまでが、先々週までの作業内容だったのだが、今日は、マルチスレッド関係のラッパー処理のデバックを行い、デコード処理が動作する所まで確認できた訳だ。つまり、やっと、AGM形式動画ファイルから画像データを読み出し、画面表示できるようになった。

なので、本当に動作しているかどうか判らなかったファイル処理系のラッパーについても、正しく動作している事が確認できた事になる。

ちなみに、Windows用のAG-ムービーカッターは32Bitアプリなので、SIMD命令としては、SSE2だけではなく、MMX命令も使っているのだが、UbuntuのC++コンパイラである所のg++では、VisualStudioで使っていたそれら用のイントリンシック命令がそのままコンパイルされた。

本当に正しく動作するコードが出力されているかどうかは半信半疑だったのだが、画像表示が出来た、という事は、これらについても、正しく動作している事が確認できた訳だ。

で、開発環境のUbuntuは64Bit版なのだが、MMX命令も普通に使えている感じだ。Windowsの64Bit環境では、VisualStudioに使用を許可されなかったのだが。

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

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

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

(2013/12/07追加)

« タッチで操作は複雑になる | トップページ | 何故か重いが »

トラックバック


この記事へのトラックバック一覧です: なんとか再開:

« タッチで操作は複雑になる | トップページ | 何故か重いが »

2020年4月
      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