- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
阅读以下内容 blog post .提到了所谓的“SHLD+BSR”霍夫曼解码器,然后进一步扩展为 MOV, MOV, SHLD, OR, BSR, MOV, SHR, MOV, OR, ADD, ADC
,但是我尚未找到描述此类解码的任何引用或源代码。有谁知道指的是什么解码方式?
最佳答案
我还没有真正成功地理解这种解码霍夫曼码的方法,但是这里相关的“内部循环”包含这样的东西(稍微编辑以使 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
但我不再确定了。我认为 ADD
指的是乘以 2,ADC
实际上是加法 p[1]
到 pos
和 OR
加入 mBsrLenTable
条目和其余代码,但这似乎顺序错误然后OR
将对应于源代码中的添加。也许我不应该在午夜之后做这种事情..
你最好自己看看源码,因为老实说,我的回答毫无用处。我在这里得到它:sourceforge.net/projects/virtualdub/files/virtualdub-win/1.9.11.32842/VirtualDub-1.9.11-src.7z查找文件 src\Meia\source\decode_huffyuv.cpp
,它从表初始化开始,实际解码在名为 DECODE
的宏中,大约 200 行以下。
关于c++ - SHLD+BSR解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803137/
我对这两个指令有点困惑。首先让我们丢弃扫描值为 0 和 undefined/bsr 或 bitsize/lzcnt 结果时的特殊情况 - 这种差异很明显,而不是我的问题的一部分。 让我们取二进制值 0
我正在分析一些 x86 二进制代码的一些“时序 channel ”。我发布了一个问题来理解 bsf/bsr操作码。 所以从高层次上讲,这两个操作码可以被建模为一个“循环”,它计算给定操作数的前导零和尾
我是一名优秀的程序员,十分优秀!