次のブログ投稿を読んでください。いわゆる「SHLD+BSR」ハフマンデコーダーが言及されており、これはさらに拡張されてMOV, MOV, SHLD, OR, BSR, MOV, SHR, MOV, OR, ADD, ADC
. どのようなデコード方法が参照されているか知っている人はいますか?
1 に答える
0
ハフマン コードをデコードするためのこの方法を理解することに実際には成功していませんが、ここで関連する「内部ループ」には次のようなものが含まれています (SHDL と BSR を明確にするために少し編集されています)。
uint32 posidx = pos >> 5;
uint32 code = src32[posidx];
uint32 extrabits = src32[posidx + 1];
SHLD(code, extrabits, pos);
code |= 1;
uint32 idx = BSR(code);
uint8 *p = (const uint8 *)(table->mBsrLenTable[idx] +
2*(code >> table->mBsrShiftTable[idx]));
result = p[0];
pos += p[1];
それが原因ですMOV, MOV, SHLD, OR, BSR, MOV, SHR, MOV
が、もうわかりません。は 2 による乗算を指していると思います。これは実際には追加するトリックであり、エントリと残りのコードを結合しますが、順序が間違っているようで、ソースの追加に対応します。 . たぶん、真夜中以降にこの種のことをするべきではありません..ADD
ADC
p[1]
pos
OR
mBsrLenTable
OR
正直なところ、私の答えは役に立たないので、ソースを自分で調べたほうがよいでしょう。ここで入手しました:sourceforge.net/projects/virtualdub/files/virtualdub-win/1.9.11.32842/VirtualDub-1.9.11-src.7zsrc\Meia\source\decode_huffyuv.cpp
ファイルを探してくださいマクロが呼び出されDECODE
、約 200 行下にあります。
于 2012-08-03T22:26:29.667 に答える