スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« ここでちょっとコード整理 | トップページ | 隙を生じぬ二段構え »

動きベクトルの圧縮形式

今は、Mirror-DTCの次バージョンを開発中で、大物の実装が大体は終わったので、コード整理やコードの最適化を行いつつ、変更内容を俯瞰したりしているのだが、ストリーミング圧縮時に出力している動きベクトルの圧縮形式は、専用のモノを用意した方が良さそうだ。

少し前に書いた様に、次バージョンのMirror-DTCのストリーミング圧縮では、ウインドウ移動だとかスクロールに対応する動きベクトル検出処理が追加され、現行版の映像圧縮で100Mbpsを越えるデータ転送量となるウインドウ移動時にも、データ転送量は20Mbps程度になる。

で、上記の圧縮率向上は、ちょっと見では、素晴らしいのだが、客観的に見れば、ウインドウ移動時には、基本的には、動きベクトルで移動量を通知するだけで、画像転送は見えていなかった背景部分の転送のみになる割には、20Mbpsというデータ転送量は多い訳だ。

これは何故なのか、というと、例えば、フルHD画面の場合、独立した動きベクトルを持てる領域は、1920/16 * 1080/16 = 8100個あって、X方向とY方向の移動量は独立なので、動きベクトル用のデータ個数は8100*2=16100個になる。

で、ストリーミング圧縮では、移動量として-128~128を選択できるので、データのビット数というのは、基本的には、8ビット程度になる訳だ。

当然の事ながら、動きが無い領域については、値を0にしてランレングス圧縮が効くようにしてあるので、動きがある領域が少ない場合には、データ個数は減るのだが、画面全体が変化している様な場合、1フレームあたり、ベクトル値の為だけに、16kB程度のデータ転送が行われる事になる。

つまり、60FPS転送時には16kB*60*8=8Mbitなので、現状では、フルHD-60FPS転送時に画面変化が激しいと、ベクトル転送用の為だけに8Mbps程度のデータ転送が行われる、という事を意味する訳だ。

この数字は結構大きいのだが、上記の説明を見ていると、致し方ないのかなあ、という気になる人もいるかもしれない。

しかし、上記の説明では、ベクトル値が-128~128までランダムに発生する事を前提にしているのだが、実際の所、そんな事は殆どあり得ない。

何故なら、一般動画用の動きベクトルは-16~16までしかチェックしていないので、その範囲になるし、ウインドウ移動やスクロール用のベクトルは数個しか検出しないので、数的に、影響力が少ないからだ。

にも関わらず、現状の圧縮形式で圧縮されたベクトルデータのサイズを見てみると、領域に変化があった場合の各データのビット数は平均すると8ビット程度になっていた。

で、普通に鑑みて、動画を見ている場合には、動きベクトルは-16~16までで表される筈なので、ランレングス圧縮等用の特殊コードを入れても、各データは6ビットで表現できても可笑しくない。

また、場面チェンジ時には、大体の領域がベクトル検出失敗コードで埋められる筈なので、各データは2ビット程度で表現できても可笑しくない。

更に、ウインドウ移動時やスクロール時にも、画面変化があった殆どの領域の動きベクトル値は同じになるので、場面チェンジ時と同様に、各データは2ビット程度で表現できても可笑しくは無い訳だ。

にも関わらず、現状では、各データは8ビット程度で表現されているのだが、これは、コーディングが面倒だったので、動きベクトルも、通常のDCT変換結果と同じ圧縮アルゴリズムを使っていたからだ。

と、いう事なので、Mirror-DTCでは、動きベクトル用に専用の圧縮方式を用意する事にしたので、明日は、そのコーディングを行う。

ちなみに、動きベクトルはAmuseGraphics系のAGM-DCT+でも使用していて、現状の圧縮方式は、これからの流用になるので、AGM-DCT+についても、変更の必要があるのか、というと、Mirror-DTCほどでもない。

これは何故なのか、というと、AGM-DCT+では、場面チェンジ時には、シーク特性を向上させる意味もあり、当該フレームをキーフレームにするので、動きベクトルを転送していないからだ。

また、現状のAGM-DCT+が想定している映像データは一般動画なので、殆どの動きベクトル値が同一値になる事は極めて稀だ。

なので、前述の話からすると、各データは6ビット程度で表現できてしかるべき所が、現状では8ビット程度になっている筈なので、まあ、少しは甘いのだが、とりあえずは、許容範囲かなあ、という程度ではある訳だ。

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

Mirror-DTC

Mirror-DTC

(2016/05/04追記)

« ここでちょっとコード整理 | トップページ | 隙を生じぬ二段構え »

トラックバック

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

この記事へのトラックバック一覧です: 動きベクトルの圧縮形式:

« ここでちょっとコード整理 | トップページ | 隙を生じぬ二段構え »

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

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

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