スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 最初の山は越えた | トップページ | 部品は出来た感じ »

雰囲気はつかめた

今は、Mirror-DTCの次バージョンを開発中で、とりあえず、AGM-DCT+相当のエンコーダーを追加したのだが、このエンコーダーは、そのまま使うと重くなる。なので、元々、そのまま使うつもりは無かったので、今日は、どういう感じで使うか雰囲気を確かめてみた。

今日は、Mirror-DTC側に実装したエンコーダー側を完全体に変更しつつ、処理性能なんかも見ていたのだが、AGM-DCT+というのは、映像圧縮で使っているAGM-DCTよりもダイナミックなエンコードを行う。

具体的には、AGM-DCTの場合、基本的には、キャプチャー画面をDCT変換してそのまま使うのだが、AGM-DCT+の場合、前回のDCT変換結果を逆DCT変換した結果とキャプチャー画像の差分をDCT変換する。

なので、AGM-DCTと比べると、逆変換が必要になる分、重くなるのだが、にも関わらず、こういう処理形態にしてあるのは、動き補償を導入するために必要になるからだ。

普通に考えると、動き補償は前回のキャプチャー結果と今回のキャプチャー結果から行えそうに思えるかもしれないのだが、DCT変換結果には誤差が発生するので、そういう事をやっていると、誤差が蓄積されてしまう訳だ。

このため、その誤差が含まれている前回のDCT変換結果を逆DCT変換したデータとの差分を取る事で、DCT変換毎に、前回のDCT変換時に発生した誤差も含めて修正出来る様にしてある訳だ。

その結果として、DCT変換結果の誤差は、何回かDCT変換を行っていると消えていく感じになるので、この特性を利用すると、DCT変換の基本精度をある程度低くしておいても、定常的に画像が汚くなる事を防げる訳だ。

つまり、AGM-DCT+では、AGM-DCTよりも品質値を低くしておいても、それなりの出力画像が得られるので、実質的に、AGM-DCTよりも圧縮率を高く出来る訳だ。

もっとも、上記の様な方式になっている関係で、AGM-DCTの場合には、キャプチャー画像の特定領域に変化が無かった場合には、その領域のエンコードを行わない格好に出来るのに対し、AGM-DCT+を単純に適用すると、そういう芸当が出来ない。

このため、AGM-DCT+をそのまま使った場合には、普通は、画面変化が全くない領域が大半を占めるリモートデスクトップソフトのキャプチャー画面では、処理負荷がMirror-DTCの既存コーデックと比べると、異常に高くなってしまう。

と、いう事なので、作者的には、AGM-DCT+をMirror-DTCにはそのまま使う事は出来ないのだが、それでは、どういう感じで使うのか、というと、画面変化がある領域に対してのみ、適用する格好にする。

具体的には、画面変化が無い領域については、とりあえず、AGM-DCT相当のエンコードを1回行って、その後は、画面変化が発生しない限り、エンコードを行わない格好にする。

そして、この画面変化が無い領域については、タイミングを見計らって、最終的には、RGBデータにまで置き換える事で、画質の向上も目指す。

何故、複数の段階に分けるのか、というと、現行のAGM-DCT+でも、領域によっては、AGM-DCT相当のエンコードを行う格好になっているからだ。

つまり、AmuseGraphics系で使用しているAGM-DCT+でも、差分をDCT変換するよりも、新規キャプチャーデータを素直にDCT変換した方がデータ量が少なくて済む場合には、そういうエンコード形態をとる格好になっているので、画面変化が全くない領域について、同様の単純なDCT変換を行わせる格好にしておけば、その後、すぐに画面変化が発生する事になったとしても、そのままAGM-DCT+の処理系の中で扱える格好になる訳だ。

と、いう事で、明日から、そんな感じの処理系を作る格好になるのだが、多分、そんなに時間はかからない筈だ。

ちなみに、少し前に書いていた様に、作者環境では、Desktop Duplication APIを適用したサーバーを使用しても、Mirror-DTCでは、フルHD全画面動画の60FPS転送は行えていなかったのだが、その原因は、クライアント側の処理性能不足だったみたいだ。

具体的には、現行のクライアントでは、画面描画にDirect2Dを使用しているのだが、60FPS転送時には、相対的に、その描画処理に時間がかかってしまうので、デコード処理をやっている暇が無くなっていた訳だ。

なので、今日は、パイプラインを一段増やし、Direct2D描画処理中にもデコード処理を行える格好にした。

それでも、まだ、デコード処理が少し間に合っていない感じなのだが、これは、デコード処理はエンコード処理ほど重くないので、現行版では、シングルスレッド処理にしてあったからだ。

なので、今回の開発では、デコード処理のマルチスレッド化も行うことになるかもしれないのだが、とりあえず、その前に、ストリーミングモードの処理系を完成させる事にする。

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

Mirror-DTC

Mirror-DTC

(2016/05/04追記)

« 最初の山は越えた | トップページ | 部品は出来た感じ »

トラックバック

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

この記事へのトラックバック一覧です: 雰囲気はつかめた:

« 最初の山は越えた | トップページ | 部品は出来た感じ »

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

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google