ページへ戻る
印刷
tek1
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:tek1 をテンプレートにして作成
開始行:
TITLE:x
* tek1の技術的情報
-(by [[K]], 2004.05.31)
-''以下ほとんど現状とマッチしていません。そのうち対処しま...
-そのうち書くと思うドキュメントの下書き
-フォーマットに関する情報以外は、このページではなく[[impr...
-ここでは展開手順をベースに書きます。圧縮のほうは、この展...
-bim2bin4hで一部ビットの意味が反転したので訂正。
* tek1圧縮
-tek1は、次の1バイトから始まります。
--註:OSACMP形式はこの1バイトに先立って16バイトのシグネチ...
--bit0:1です。もしここが0ならそれは拡張情報をもつ先行バ...
---実はこの先頭バイト自身がs7s符号になっている。
--bit1:1です。tek2ではここが0になる場合もありますが、tek...
--bit2-5:ブロックサイズです。0001ならブロックサイズ512バ...
--bit6:通常は0です。1だとブロックごとに圧縮形式が変えら...
--bit7:通常は0です。1だと以下の「tek1s x ブロック数」が...
-tek1では展開後のサイズに関する情報はフォーマットの中には...
-その展開後のサイズを上記のブロックサイズで割って、いくつ...
--レベル0フォーマット:1ブロック
--レベル1フォーマット:2~256ブロック
--レベル2フォーマット:257~65536ブロック
--レベル3フォーマット:63357~16777216ブロック
--以下略
-一般的に言って、レベル0フォーマットが一番単純で圧縮率も...
--ブロックサイズのところで0000をリザーブしてあるので、こ...
-このレベルに関してですが、デコーダ、エンコーダともこれら...
-これはレベルだけではなく、以降の他のことについても同様で...
-レベル0の場合、次のバイトからtek1sフォーマットになります。
-レベル1の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)tek1s x ブロック数
-レベル2の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)s7s符号で書いた(4)の長さ
--(4)tek1h x (2~256個)
--(5)tek1s x ブロック数
-レベル3の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)s7s符号で書いた(4)の長さ
--(4)tek1h x (2~256個)
--(5)s7s符号で書いた(6)の長さ
--(6)tek1h x (257~65536個)
--(7)tek1s x ブロック数
-tek1hの役割は、ランダムアクセスの際にブロックがどこから...
-最初のバイトでbit7が1だった場合、tek1sが始まる直前にs7s...
-また上記で示されるtek1h群の長さは実際のバイト数から2を減...
* tek1s
-これが圧縮の核となる部分です。その他はヘッダのようなもの...
-tek1sの最初はs7符号になっていて、まずはこれを取得します...
-s7符号の直後がビットストリームです。バイトストリーム以外...
*** tek1s圧縮の基礎
-基本はtek0とまったく同じです。単に符号化の方法がUC0符号...
-展開アルゴリズム:
--(1)まず符号寿命Aと符号寿命Bを寿命切れにセット(これらは...
--(2)もし符号寿命Aが寿命切れだったら、byとlzのUC0符号パラ...
---フォーマット的には、寿命、by、lzの順番
--(3)符号寿命Aを1カウント進めて年をとらせる。
--(4)byの値を整数で取得。その値に1を足す。
--(5)(4)で求めたバイト数だけ、バイトストリームから持って...
--(6)もしこの時点で展開バイト数に達していたら展開終了。
--(7)lzの値を整数で取得。その値に1を足す。この回数だけ(8)...
--(8)もし符号寿命Bが寿命切れだったら、dsとcpのUC0符号パラ...
---フォーマット的には、寿命、ds、cp、cpの最低値(2bit)の順番
--(9)符号寿命Bを1カウント進めて年をとらせる。
--(10)dsの値を整数で取得。これに-1をXOR。そうすると、-1以...
--(11)cpの値を整数で取得。
--(12)(11)の回数だけ *p = *(p + d); p++; をやる。スライド...
--(13)もしこの時点で展開バイト数に達していたら展開終了。
--(14)(2)へ戻る。
* s7s符号
-これはtek0で出てきたs8符号の7bit版だと思えば理解が早いで...
--(1)1バイト読む。
--(2)最下位のbitを捨てる(全体を右シフト)。
--(3)捨てたビットが1ならおしまい。
--(4)また1バイト読むために256倍しておいて、(1)に戻ったと...
--(1)に戻る。
-雰囲気としては、こうです。
aaaaaaa0 bbbbbbb0 cccccccc1 → aaaaaaabbbbbbbccccccc
-結果的に上位下位の関係がインテル風じゃないところだけに注...
* s7符号
-s7s符号にちょっと細工します。
--s7sで読み取った際に1バイトで終わったのなら0を加える。
--s7sで読み取った際に2バイトで終わったのなら0x80を加える。
--s7sで読み取った際に3バイトで終わったのなら0x4080を加え...
--s7sで読み取った際に4バイトで終わったのなら0x204080を加...
--s7sで読み取った際に5バイトで終わったのなら0x10204080を...
--以下略。
* UC0符号
-0以上の整数を符号化するものです。多くのパラメータを持っ...
-デコード方式は基本的に次のとおりです(実際は1bitずつ読ま...
--最初に1bitずつ読み込んで、"0"のbitがいくつ続くかを数え...
--次にパラメータテーブルを見て、3番目のパラメータがなんで...
--そしたらビットストリームから8bitを読み込みます。これは0...
-ベース値は、次のようにパラメータテーブルから自動で決まり...
--まず0番目のベースは必ず0です。
--そして0番目のパラメータと0番目のベース値とで、最大いく...
--今度は1番目のパラメータと1番目のベース値とで、最大いく...
--以下同じように3番目、4番目、・・・のベース値が求められ...
-なおn番目のパラメータが0の場合もあります。この場合、1bit...
-たとえばパラメータテーブルが10個しかないときは、最大でも...
--同様にもしパラメータテーブルが2個しかないときは、最大が...
--さらにもしパラメータテーブルが1個しかないときは、もはや...
-圧縮の際には、たとえば0をたくさん符号化したいと思えば、...
-また小さい数はあまり出てこないけど、100くらいの数字がた...
* OSACMP形式
-16バイトのシグネチャ:
83 FF FF FF 01 00 00 00 4F 53 41 53 4B 43 4D 50
-そしてこのあとに展開後のファイルサイズがs7sでかかれてい...
* この他の細かいことは以下で
-[[tek1/adv0]] : 残りのフォーマット
-[[tek1/adv1]] : tek0からの進歩の流れ
-[[tek1/adv2]] : 補助バッファ利用について
-[[tek1/comp]] : 他のフォーマットとの比較表
* こめんと欄
- tek1 -- [[名無しさん]] &new{2009-07-10 (金) 10:25:25};
#comment
終了行:
TITLE:x
* tek1の技術的情報
-(by [[K]], 2004.05.31)
-''以下ほとんど現状とマッチしていません。そのうち対処しま...
-そのうち書くと思うドキュメントの下書き
-フォーマットに関する情報以外は、このページではなく[[impr...
-ここでは展開手順をベースに書きます。圧縮のほうは、この展...
-bim2bin4hで一部ビットの意味が反転したので訂正。
* tek1圧縮
-tek1は、次の1バイトから始まります。
--註:OSACMP形式はこの1バイトに先立って16バイトのシグネチ...
--bit0:1です。もしここが0ならそれは拡張情報をもつ先行バ...
---実はこの先頭バイト自身がs7s符号になっている。
--bit1:1です。tek2ではここが0になる場合もありますが、tek...
--bit2-5:ブロックサイズです。0001ならブロックサイズ512バ...
--bit6:通常は0です。1だとブロックごとに圧縮形式が変えら...
--bit7:通常は0です。1だと以下の「tek1s x ブロック数」が...
-tek1では展開後のサイズに関する情報はフォーマットの中には...
-その展開後のサイズを上記のブロックサイズで割って、いくつ...
--レベル0フォーマット:1ブロック
--レベル1フォーマット:2~256ブロック
--レベル2フォーマット:257~65536ブロック
--レベル3フォーマット:63357~16777216ブロック
--以下略
-一般的に言って、レベル0フォーマットが一番単純で圧縮率も...
--ブロックサイズのところで0000をリザーブしてあるので、こ...
-このレベルに関してですが、デコーダ、エンコーダともこれら...
-これはレベルだけではなく、以降の他のことについても同様で...
-レベル0の場合、次のバイトからtek1sフォーマットになります。
-レベル1の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)tek1s x ブロック数
-レベル2の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)s7s符号で書いた(4)の長さ
--(4)tek1h x (2~256個)
--(5)tek1s x ブロック数
-レベル3の場合、次のバイトからは以下のようになります。
--(1)s7s符号で書いた(2)の長さ
--(2)tek1h
--(3)s7s符号で書いた(4)の長さ
--(4)tek1h x (2~256個)
--(5)s7s符号で書いた(6)の長さ
--(6)tek1h x (257~65536個)
--(7)tek1s x ブロック数
-tek1hの役割は、ランダムアクセスの際にブロックがどこから...
-最初のバイトでbit7が1だった場合、tek1sが始まる直前にs7s...
-また上記で示されるtek1h群の長さは実際のバイト数から2を減...
* tek1s
-これが圧縮の核となる部分です。その他はヘッダのようなもの...
-tek1sの最初はs7符号になっていて、まずはこれを取得します...
-s7符号の直後がビットストリームです。バイトストリーム以外...
*** tek1s圧縮の基礎
-基本はtek0とまったく同じです。単に符号化の方法がUC0符号...
-展開アルゴリズム:
--(1)まず符号寿命Aと符号寿命Bを寿命切れにセット(これらは...
--(2)もし符号寿命Aが寿命切れだったら、byとlzのUC0符号パラ...
---フォーマット的には、寿命、by、lzの順番
--(3)符号寿命Aを1カウント進めて年をとらせる。
--(4)byの値を整数で取得。その値に1を足す。
--(5)(4)で求めたバイト数だけ、バイトストリームから持って...
--(6)もしこの時点で展開バイト数に達していたら展開終了。
--(7)lzの値を整数で取得。その値に1を足す。この回数だけ(8)...
--(8)もし符号寿命Bが寿命切れだったら、dsとcpのUC0符号パラ...
---フォーマット的には、寿命、ds、cp、cpの最低値(2bit)の順番
--(9)符号寿命Bを1カウント進めて年をとらせる。
--(10)dsの値を整数で取得。これに-1をXOR。そうすると、-1以...
--(11)cpの値を整数で取得。
--(12)(11)の回数だけ *p = *(p + d); p++; をやる。スライド...
--(13)もしこの時点で展開バイト数に達していたら展開終了。
--(14)(2)へ戻る。
* s7s符号
-これはtek0で出てきたs8符号の7bit版だと思えば理解が早いで...
--(1)1バイト読む。
--(2)最下位のbitを捨てる(全体を右シフト)。
--(3)捨てたビットが1ならおしまい。
--(4)また1バイト読むために256倍しておいて、(1)に戻ったと...
--(1)に戻る。
-雰囲気としては、こうです。
aaaaaaa0 bbbbbbb0 cccccccc1 → aaaaaaabbbbbbbccccccc
-結果的に上位下位の関係がインテル風じゃないところだけに注...
* s7符号
-s7s符号にちょっと細工します。
--s7sで読み取った際に1バイトで終わったのなら0を加える。
--s7sで読み取った際に2バイトで終わったのなら0x80を加える。
--s7sで読み取った際に3バイトで終わったのなら0x4080を加え...
--s7sで読み取った際に4バイトで終わったのなら0x204080を加...
--s7sで読み取った際に5バイトで終わったのなら0x10204080を...
--以下略。
* UC0符号
-0以上の整数を符号化するものです。多くのパラメータを持っ...
-デコード方式は基本的に次のとおりです(実際は1bitずつ読ま...
--最初に1bitずつ読み込んで、"0"のbitがいくつ続くかを数え...
--次にパラメータテーブルを見て、3番目のパラメータがなんで...
--そしたらビットストリームから8bitを読み込みます。これは0...
-ベース値は、次のようにパラメータテーブルから自動で決まり...
--まず0番目のベースは必ず0です。
--そして0番目のパラメータと0番目のベース値とで、最大いく...
--今度は1番目のパラメータと1番目のベース値とで、最大いく...
--以下同じように3番目、4番目、・・・のベース値が求められ...
-なおn番目のパラメータが0の場合もあります。この場合、1bit...
-たとえばパラメータテーブルが10個しかないときは、最大でも...
--同様にもしパラメータテーブルが2個しかないときは、最大が...
--さらにもしパラメータテーブルが1個しかないときは、もはや...
-圧縮の際には、たとえば0をたくさん符号化したいと思えば、...
-また小さい数はあまり出てこないけど、100くらいの数字がた...
* OSACMP形式
-16バイトのシグネチャ:
83 FF FF FF 01 00 00 00 4F 53 41 53 4B 43 4D 50
-そしてこのあとに展開後のファイルサイズがs7sでかかれてい...
* この他の細かいことは以下で
-[[tek1/adv0]] : 残りのフォーマット
-[[tek1/adv1]] : tek0からの進歩の流れ
-[[tek1/adv2]] : 補助バッファ利用について
-[[tek1/comp]] : 他のフォーマットとの比較表
* こめんと欄
- tek1 -- [[名無しさん]] &new{2009-07-10 (金) 10:25:25};
#comment
ページ名: