5: 2004-06-03 (木) 05:16:48 |
6: 2004-06-07 (月) 23:04:45 |
| -フォーマットに関する情報以外は、このページではなく[[impressions]]などにお願いします。 | | -フォーマットに関する情報以外は、このページではなく[[impressions]]などにお願いします。 |
| -ここでは展開手順をベースに書きます。圧縮のほうは、この展開手順で展開できるようなファイルを作ればいいだけですので。 | | -ここでは展開手順をベースに書きます。圧縮のほうは、この展開手順で展開できるようなファイルを作ればいいだけですので。 |
| + | |
| + | -bim2bin4hで一部ビットの意味が反転したので訂正。 |
| | | |
| * tek1圧縮 | | * tek1圧縮 |
| -tek1は、次の1バイトから始まります。 | | -tek1は、次の1バイトから始まります。 |
| --註:OSACMP形式はこの1バイトに先立って16バイトのシグネチャとnバイトの展開後のサイズに関する情報が付属する。これについては後述。 | | --註:OSACMP形式はこの1バイトに先立って16バイトのシグネチャとnバイトの展開後のサイズに関する情報が付属する。これについては後述。 |
- | --bit0:0です。もしここが1なら以降のバイトに何らかの拡張情報が存在します。 | + | --bit0:1です。もしここが0なら以降のバイトに何らかの拡張情報が存在します。 |
| ---実はこの先頭バイトがs7符号になっている。 | | ---実はこの先頭バイトがs7符号になっている。 |
| --bit1:0です。tek2ではここが1になる場合もありますが、tek1では常に0です。 | | --bit1:0です。tek2ではここが1になる場合もありますが、tek1では常に0です。 |
| --(1)1バイト読む。 | | --(1)1バイト読む。 |
| --(2)最下位のbitを捨てる(全体を右シフト)。 | | --(2)最下位のbitを捨てる(全体を右シフト)。 |
- | --(3)捨てたビットが0ならおしまい。 | + | --(3)捨てたビットが1ならおしまい。 |
| --(4)また1バイト読むために256倍しておいて、(1)に戻ったときにはこの下位8bitに読み込ませる。 | | --(4)また1バイト読むために256倍しておいて、(1)に戻ったときにはこの下位8bitに読み込ませる。 |
| --(1)に戻る。 | | --(1)に戻る。 |
| -雰囲気としては、こうです。 | | -雰囲気としては、こうです。 |
- | aaaaaaa1 bbbbbbb1 cccccccc0 → aaaaaaabbbbbbbccccccc | + | aaaaaaa0 bbbbbbb0 cccccccc1 → aaaaaaabbbbbbbccccccc |
| -結果的に上位下位の関係がインテル風じゃないところだけに注意。 | | -結果的に上位下位の関係がインテル風じゃないところだけに注意。 |
| | | |
| -0以上の整数を符号化するものです。多くのパラメータを持っているので、そのパラメータによっていろいろな状況にマッチします。 | | -0以上の整数を符号化するものです。多くのパラメータを持っているので、そのパラメータによっていろいろな状況にマッチします。 |
| -デコード方式は基本的に次のとおりです(実際は1bitずつ読まずに数ビットずつ処理して高速化しますが)。 | | -デコード方式は基本的に次のとおりです(実際は1bitずつ読まずに数ビットずつ処理して高速化しますが)。 |
- | --最初に1bitずつ読み込んで、"1"のbitがいくつ続くかを数えます。"0"を読み込んだらそこでストップです。たとえばこれが3個だとしましょう。 | + | --最初に1bitずつ読み込んで、"0"のbitがいくつ続くかを数えます。"1"を読み込んだらそこでストップです。たとえばこれが3個だとしましょう。 |
| --次にパラメータテーブルを見て、3番目のパラメータがなんであるかを調べます。ここではこれが8だったとしましょう。 | | --次にパラメータテーブルを見て、3番目のパラメータがなんであるかを調べます。ここではこれが8だったとしましょう。 |
| --そしたらビットストリームから8bitを読み込みます。これは0~255ですね。それに3番目のベース値を足します。おしまいです。 | | --そしたらビットストリームから8bitを読み込みます。これは0~255ですね。それに3番目のベース値を足します。おしまいです。 |
| -なおn番目のパラメータが0の場合もあります。この場合、1bitも読みません。だから0にベース値を足します。 | | -なおn番目のパラメータが0の場合もあります。この場合、1bitも読みません。だから0にベース値を足します。 |
| | | |
- | -たとえばパラメータテーブルが10個しかないときは、最大でも9番目までしかありえないので、最初の"1"を数えるループで"1"の数が9個になったら、次の"0"は省略されているものとみなします。これで1ビット節約しています。 | + | -たとえばパラメータテーブルが10個しかないときは、最大でも9番目までしかありえないので、最初の"0"を数えるループで"0"の数が9個になったら、次の"1"は省略されているものとみなします。これで1ビット節約しています。 |
- | --同様にもしパラメータテーブルが2個しかないときは、最大が1番目なので、"1"が1個きたらもうそれでおしまいですし、最初が"0"ならそれは0番目なので、それでもおしまいです。だから、最初の"1"数え部分では結局1bitしか読まないことになります。 | + | --同様にもしパラメータテーブルが2個しかないときは、最大が1番目なので、"0"が1個きたらもうそれでおしまいですし、最初が"1"ならそれは0番目なので、それでもおしまいです。だから、最初の"0"数え部分では結局1bitしか読まないことになります。 |
- | --さらにもしパラメータテーブルが1個しかないときは、もはや"1"の数を数えるまでもなく"0"がくるはずなので、この"0"は省略されたものとみなし、1bitも読むことなく、いきなり0番目のテーブルを参照します。 | + | --さらにもしパラメータテーブルが1個しかないときは、もはや"0"の数を数えるまでもなく"1"がくるはずなので、この"1"は省略されたものとみなし、1bitも読むことなく、いきなり0番目のテーブルを参照します。 |
| | | |
| -圧縮の際には、たとえば0をたくさん符号化したいと思えば、パラメータテーブルの0番目を0にすればいいわけです。そうすれば整数0は1+0=1bitで符号化できます。 | | -圧縮の際には、たとえば0をたくさん符号化したいと思えば、パラメータテーブルの0番目を0にすればいいわけです。そうすれば整数0は1+0=1bitで符号化できます。 |