THE PSP攻略+α ~SONYへの挑戦状~

PSP関連ブログ?いいえ、ただのゆとりブログです

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

吉里吉里2のTLGフォーマットはPSPでも高速展開なのか? 

前に言ってたPSP関係で画像云々と言ってたのはこれのこと。
期待外れな内容だったのなら申し訳ない。
前回に吉里吉里2の記事を書いたが、この吉里吉里2に使われるTLG形式はPNGより圧縮率が高く、PNGより展開速度が速いというPSPにはもってこいの形式だと感じたのでPNG、JPEGとサイズや展開速度を比べてみた。


まず、TLG形式の仕様と、その他フォーマットとの比較を見てみる。


・TLG5 画像
 フルカラーの画像にのみ対応しています。可逆圧縮を行います。一つの画像中にアルファチャンネル ( 透過度 ) の情報を持たせることができます。
 圧縮率はさほど高くなく、ファイルサイズは PNG の 3 割増しぐらいのサイズになりますが、高速に展開できるという特徴があります。PNG の4~5倍ほどの速度で画像を展開することができます。

・TLG6 画像
 高い圧縮率と高速な展開速度が特徴です。サイズは PNG より 1~4割ほど小さく、展開速度は PNG の2倍以上高速です。PNGのようにグレースケールやパレット付きの画像を扱うことはできませんが、フルカラーの画像や、アルファチャンネルつきフルカラーの画像ならば PNG の代用として使用できます。
 フルカラーの画像にのみ対応しています。可逆圧縮を行います。一つの画像中にアルファチャンネル ( 透過度 ) の情報を持たせることができます。



・展開速度
 各フォーマットを展開速度的に比較すると大体以下のようになります。
 (早い) BMP > TLG5 > JPEG > TLG6 > ERI > PNG (遅い)

ただし BMP はファイルサイズが大きくなります。最近の PC のハードディスクからの読み込みならばあまり差は無いかと思いますが、古い HDD や CD-ROM からの読み込みなどでは、ファイルサイズが小さい方が読み込み速度が速いことがあるので注意が必要です。

・サイズ
 各フォーマットの圧縮後のサイズを比較すると大体以下のようになります ( もちろん画像や圧縮率の設定によっても変わってきます )。
 (大きい) BMP > TLG5 > PNG > ERI > TLG6 > JPEG (小さい)

KAG System リファレンス - 画像形式についてより引用

今のところ、TLG形式にはTLG5とTLG6の2種類ある。
TLG5は色の差分(?)→LZSS圧縮というシンプルな構造になっていて、圧縮率は低いが展開速度は速い。
TLG6は
 MED または 平均法 による輝度予測
 └→リオーダリングによる情報量削減
    └→色相関フィルタによる情報量削減
       └→ゴロム・ライス符号によるエントロピー符号化
と、4段階のフィルター&アルゴリズムにより高い圧縮率となり、段階が多いもののPNGより2倍の展開速度になっているらしい。

展開速度は無圧縮のBMPが最速なのは当たり前だが(そもそも展開する必要がない)、読み込み速度に関してはサイズが小さい方が高速になります。
PCならほとんど気になりませんが、PSPだと大分差が出てくると思います。
読み込み速度と展開速度を考えるとTLG5が一番高速でしょう。
まあ、PCに比べると元々遅い方なので、PCでたまに使われるような連続にBMPを表示させる動画っぽいことはできそうにないですが…

TLG6はα値が扱えるフォーマットの主流である(と思われる)PNGに比べ、の圧縮率が高く、展開速度も速いらしい。

PCだと容量も速度も大して気にならないが、PSPなどのメモリが少なく、速度も出ないような端末においては、これらのTLG形式が有効なのではないかと考えた。

というわけで、ERI以外の圧縮フォーマットをPSPでデコードした場合の比較をしてみた。
PNGはlibpngを使用。24bitは32bitとして展開し、PSP用の32bitフォーマットとして出力される。
JPEGはlibjpeg(?)を使用。PSPのハードウェアは使用していない。コンパイル時の設定を弄っており、32bitとして出力。これもPSP用の32bitフォーマットとして出力。
TLG5、TLG6は本家のソースをごっそり移植。元々24bitも32bitとして展開するようになっているが、色の並びが違っているのでPSP用の32bitフォーマットになるように改変。
PSP用の32bitフォーマット云々というのは、0xAABBGGRRに並んでるという意味。
PSPで使いやすいように、それぞれ展開後のデータをそのまま転送できるようにしている。
PSPのCPUだと画像を展開した後に並べ替えるだけでも時間かかるからね。

ファイルハンドルを渡してメモステからチョコチョコ読み込むのは遅くなりそうな気がするので、すべてメモリに読み込んでから展開。

画像は480x272で32bit、24bitの両方を試してみた。JPEGには32bitが存在しないのでどちらとも24bitである。
結果は以下の通り。

PSPでTLGをデコードしてみるテスト(比較)

JPEGは非可逆圧縮だから早いのは当たり前なのでほっておく。
一応かかる時間は TLG5<TLG6<PNG となったが、公式のデータにある4~5倍にはほど遠い。
TLG5はPNGよりサイズが大きくなるので、その分読み込みに時間がかかるが、さすがに2倍ぐらい差があっても良いだろう。
TLG6に関してはPNGより小さくなるので、より早くなるはず。

読み込み時間やファイルサイズも比較するために、詳細なデータを取ってみた。

PSPでTLGをデコードしてみるテスト(詳細な比較)

TLG5はデコードが2倍程度、TLG6に関しては大して変わらない^^;
サイズが小さい分、読み込みが早くなってるだけじゃんw
いや、まあPNGと同じかそれ以上の速度で展開できるのに、圧縮率が高いのはすごいことだけど。
公式のデータで4~5倍とか2倍以上ってハードル上げるからその分期待しちゃうんだよね…
もっと大きい画像なら差が開くのかもしれないけど、PSPの画面サイズだとそんなに大きい画像は使わないし。

結論:PNGでいいわ

最近知ったけど、TLGには加算α合成とやらがあるので、こいつで描画を高速化できないかに期待。
ExtractDataとかsusieプラグインではこの値が無視されてるみたいだが、採用してるメーカーは無いのか?^^;
やっぱり期待できないw

PSPでTLGをデコードするテストのバイナリを配布しようかと思ってたけど今回使った物は大して面白くないのでまた今度別なものを作る予定。
prxは何度か作ってるので作り方はわかってるんだけど、仕様が面倒だな…
普段、mallocとか使ってるけど、内部では起動時にメモリを全部占有して、そこからmallocが呼ばれる度に切り取ってる感じなので、prxとか隔離されてるプログラムからだとmalloc的なことができないという…
PSP_HEAP_SIZE_KBで占有するサイズを決めれるので、最小値を指定して、PSP内部のメモリ確保命令を呼べばprxからも使える?
そもそもmallocの中身が本当にそうなってるのかもわからない…
prxを読み込むときも切り取って読み込んでるのか?もうわけわかめ…
こんな感じに色々と実験中なんで、完成するかもわからんorz
[ 2009/06/13 22:58 ] 日記的なもの | TB(0) | CM(4)
No.676
1げと!!
ずさああああああああああああ__O二_l

TLG画像は結局PNG画像でいいわけですね。
>別なものを作る予定
期待しちゃいます>w<
いろいろ大変でしょうが
頑張ってください。
[ 2009/06/14(日) 15:13 ] [ 編集 ]
No.677
検証お疲れ様です

tlg良いですね
これを使えるようなればpngからtlgに乗り換えですね
サイズも軽くなりますし

でも気になったのがtlgでそんなに変化があるなら
majiroのrctはどのくらいデコードが早いんだろう
気になります
[ 2009/06/15(月) 00:57 ] [ 編集 ]
No.678
TLGの展開ってC言語版での結果?
[ 2009/06/15(月) 01:21 ] [ 編集 ]
No.681
返信が送れて申し訳ないです。

>>NGSWさん
いつもコメントが早いのでうれしいですねw
期待させておいて、叩き落す…
これが七次元クオリティー…
正直、今まで好評なものを作った覚えが無い件


>>fuさん
最初はMajiroのrctとBGIのCompressedBGとかも比較しようかと思ってたけど、よく考えたらこいつらは非公開エンジンで個人で画像を圧縮できないので、除外しました。
TLGなら個人で圧縮できるから良いかと思いましたが、速度がそんなに出ませんでした。
TLGはパレット形式とか無いからなぁ…

アーカイブ別展開速度、画像形式別展開速度を計ったら面白そうだけど、今は余力が無いのでまた今度かな。


>>daさん
本家のをそのまま流用したのでC言語になりますね。
マクロもそのまま残してるので、速度の低下も無いはず。
TLG展開時に呼び出す関数はC++で書かれてますが、大した差は無いと思います。(本家が比較した時と同じソースだろうし)
[ 2009/06/19(金) 22:40 ] [ 編集 ]
コメントの投稿













管理者にだけ表示を許可する
プロフィール

七次元

Author:七次元
永遠の18才
夢を追い求める学生
プログラミング初心者(笑)
愛用言語はHSP(スイーツ)
プログラマーを目指すものの「C言語?読むだけ^^」「C++?知らんがな。クラスって何?おいしいの?」
というゆとりっぷり。
Delphi入れたりVC++2008入れたり迷走中。
夢はコミケで何かやりたい。一般参加すらしたこと無いけど。
PSP-1000(CFW)持ち。PSP-4000マダー?
よく難波周辺のゲーセンに出没するらしい。
STGも格げーも初心者。
ろ、ロリコンちゃうわ!!!

連絡先:homepage_touroku[a]yahoo.co.jp
(メールはほとんど確認してません。掲示板に書き込むのが確実です)

関連リンク
そふとうぇあこうかいじょ
公開したファイルが置いてあります。

掲示板
連絡やら雑談やら適当にどうぞ。
カウンター



現在の閲覧者数:
ブロとも申請フォーム


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。