描画方式を少し変えた
今日は、Java版のMirror-DTCクライアントの描画方式を少し変更した。C++版ではマウスカーソルは透明ウインドウをフレームとは別に用意して描画していたのだが、Java版では透明ウインドウが使えないため、デスクトップ画像の上に表示していたのだが、ここを少し変えた。
« 2011年5月 | トップページ | 2011年7月 »
今日は、Java版のMirror-DTCクライアントの描画方式を少し変更した。C++版ではマウスカーソルは透明ウインドウをフレームとは別に用意して描画していたのだが、Java版では透明ウインドウが使えないため、デスクトップ画像の上に表示していたのだが、ここを少し変えた。
Mirror-DTCのJava版クライアントの開発は、まだTCP接続モードの実装が残っているのだが、現時点での作者の印象は、予想外に、Javaは使えるなあ、というものだ。なので、MacOSX用にMirror-DTCサーバーをJavaで作れるかどうかを、ちょっと調べて見た。
今日は、Mirror-DTCのJava版クライアントに音声/映像圧縮モードを実装した。すでに動作していて、それなりの性能も出ているのだが、C++版ではSSE2命令を使って高速化してあった分、Java版では、映像圧縮を使うと結構重い。それでも、4コアなら、30FPS出ない事も無い。
昨日書いていたように、今日は、Java版のMirror-DTCクライアントの性能アップ施策を色々とやってみた。当然の事ながら、それでもC++版よりは遅いのだが、大体は、2倍遅い程度かもしれない。もっとも、Windows環境ではDirect3Dを使えない分、相対的にCPU使用率は高い。
今日はMirror-DTCのJava版クライアントの描画性能を上げてみていたのだが、まあまあ速くなった。現状でも、やはり、C++版よりは2~3倍くらいは遅いのだが、元々のC++版がかなり高速なため、それでも、YouTubeの小窓程度なら、30FPS程度のフレームレートで見れる。
最近は、Mirror-DTCのJava版クライアントを開発している関係で、MacBookをMacOSXで使う機会が増えているのだが、今のバージョンには、DockにApp Storeへのアクセス用アイコンが追加されている。一度使ってみたかったので、今日はxcode4を買ってみた。
昨日書いていたように、今日はMirror-DTCのJava版クライアントにクリップボード転送機能を追加し、その後、Javaの画像処理ルーチンを使ってみたりしたのだが、スケーリングを綺麗にしようとすると、現状よりも遅くなった。なので、自前のルーチンでもう少し高速化する。
今日はMirror-DTCのJava版クライアントのファイル転送機能をデバックして動くようにした。ギガビットイーサー接続だと、数百MB程度のファイル転送でも、あまり時間はかからないため、ネットワーク系の処理ルーチンの性能はそれほど悪くは無いのかもしれない。
今日は、Mirror-DTCのJava版クライアントにファイル転送機能を実装したのだが、この機能では複数のスレッドが連携動作するため、イベントによる同期処理が幾つかあった。このため、イベント処理用のクラスを作り、既存ルーチンにも適用した。するとフリーズしなくなった。
昨日書いたように、今日はMirror-DTCのJava版クライアントにモニターモードを追加した。モニターモードというのは、リモート操作を禁止して、サーバー側の画面を表示するだけにするモードなのだが、このモード時には、マウスで画面の拡大/縮小/スクロールが可能になる。
Mirror-DTCのJava版クライアントでは、ScrollPaneを使って画像のスクロールを行なうようにしてあったのだが、スクロールバーを表示しない状態で使うと、setScrollPositionメソッドが正しく動作してくれなかったため、使用を諦め、Scrollbarオブジェクトを使う方式に変更した。
この1ヶ月くらい、Mirror-DTCのJava版クライアントを作ってきているのだが、何とか、キーボード入力にも実用上は困らない程度には対応できそうなので、先は見えたかもしれない。現状では細かい部分に色々と問題が残っていて、性能的にも最適化未の状態なのだが。
今日は、Mirror-DTCのJava版クライアントにキーバインド設定機能を追加し、MacOSXで動作しているMacbook上で試してみたのだが、Javaは、Macbookでも、"\"と、"]"キーで同じKeycodeを返してきた。どういう作り方をすれば、こんな変な事になるのだろう?
昨日書いたように、今日はMirror-DTCのJava版クライアント用にスクリーンキーボードを実装し、動作確認を行なった。PrtScrnや半角/全角キーなんかの特殊キーの入力も出来たので、最悪、コレを使えば、Windows用では無いキーボードのマシンでも、キー操作は可能になる。
Mirror-DTCのJava版クライアント用に、スクリーンキーボードを作成してみている。Windowsにはスクリーンキーボードは標準搭載されているため、キー入力用には必須でもないのだが、キーバインドの変更時にキーボード画像が無いと不便なので、ついでに作ることにした。
今日は、Mirror-DTCのJava版クライアント用に、先送りにしていたキー入力処理の更新をやってみたのだが、問題点の幾つかは解決できたものの、幾つかは解決できなかった。多分、WindowsとMacでは異なる処理が必要になるため、特別な機能を追加する必要がありそうだ。
今日は、Mirror-DTCのJava版クライアントに基本オプション機能を追加した。つまり、「画像転送」/「音声転送」/「操作対象」関連の機能を追加した。この辺の機能は大体はサーバー側で実現しているため、クライアント処理は単純なのだが、作業量は結構あった。
今日は、Mirror-DTCのJava版クライアントに表示倍率の変更機能を追加した。元々は、ウインドウに合わせる状態にしてあったため、スクロールバーが表示される事は無かったのだが、今日の機能追加で、必要に応じて、スクロールバーも表示されるようになった。
Mirror-DTCのJava版クライアントは現時点でUDP接続を使ってYV12モードでウインドウに合わせる状態で、一応、リモート操作も可能になっている。なので、今週は、それ以外の機能部分についても移植を進めていく事になる。全機能が実装できたら、性能向上を検討する。
少し前に、面倒なテレビは要らない、という記事で、作者は地デジの受信機器を持っていない、と、書いたのだが、試してみた所、室内アンテナで受信出来たので、地デジ用TVと、従来のアナログTVに接続するチューナーと、パソコン用のワンセグチューナーを買ってみた。
Mirror-DTCのJava版クライアントは、それなりに動くようになったので、今日は、細かい部分の作りこみを行なっていた。Java用という事で少しC++版とは変えているのだが、その辺については、その内、纏めて書く筈なので、今日は、話題のWii Uについて考えてみた。
昨日書いたように、今日はMirror-DTCのJava版クライアントにマウス/キー入力機能を実装していたのだが、マウス入力については問題は無いものの、キー入力については色々と問題が出ている。当然のように、特殊キーも日本語も駄目なのだが、普通のキーも少し変だ。
Mirror-DTCのJava版クライアントは、一応、それなりに動作するようになってきたため、性能を見てみたのだが、CPUの使用率を見ている限りでは、C++版と比べて、3倍くらいしか遅くない。正確には、重いだけなので、CPUが高速なら、30FPSくらいは出るかもしれない。
あるサイトで紹介されてから、AG-デスクトップレコーダーは作者のサイトでのダウンロード数が伸び、Mirror-DTCの収録依頼があった雑誌からも追加収録依頼があった。で、今日、Vectorにも、作者的には初めての「レビュー記事」が載った。まあ、世の中、そんなもんだ。
今日はMirror-DTCのJava版クライアントの画像処理関連を作りこんでいたのだが、まだ何とも言えない状況だ。画面表示が出来ない、という事にはなる筈は無いのだが、何FPS出るかは微妙だ。ただ、音声再生は無問題になったので、最低ラインは確保したことになる。
昨日のOutOfMemoryErrorの原因はすぐに判ったので修正した。まあ、作者はガーベージコレクタ付きのメモリ管理ルーチンなんかも実装した事はあるので、あたりはすぐに付いたのだが、一般に言われているほど、Javaは本当に初心者にやさしい言語なのだろうか?
昨日書いた問題の原因は判り、修正したため、音声の再生は調子よく行なわれるようになった。しかし、今度は、30秒も動かしていると、OutOfMemoryErrorというのが起きてプログラムが落ちるようになった。オブジェクトのdeleteを出来なくしておいて、それはないだろう。
Mirror-DTCのJava版クライアント開発は、それなりに進んでいて、既に画像/音声データの受信はできていて、それらを処理する構造も組めている。ただし、画像データのデコードは面倒なので、まず、音声の再生を行なってみているのだが、何だか、少し変だ。
Mirror-DTCのJava版クライアントは、やっと、格好がついてきた。JavaアプリとWindows用C++アプリでは、データやイベントの扱い方が異なるため、色々と試行錯誤していたのだが、扱い方が固定し始めたので作業も捗っている。ただし、残作業は、まだまだ多い。