SHLD+BSR decoder?

SHLD+BSR decoder?

本文关键字:decoder SHLD+BSR      更新时间:2023-10-16

阅读以下博客文章。提到了一个所谓的"SHLD+BSR"霍夫曼解码器,然后将其进一步扩展到MOV, MOV, SHLD, OR, BSR, MOV, SHR, MOV, OR, ADD, ADC,但我没有找到任何描述这种解码的参考或源代码。有人知道这是指什么解码方法吗?

我还没有真正成功地理解这种解码huffman代码的方法,但这里的相关"内部循环"包含这样的内容(经过轻微编辑以使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.19.11.32842/virtualdub--1.9.11-src.7z查找文件srcMeiasourcedecode_huffyuv.cpp,它从初始化表开始,实际解码在一个名为DECODE的宏中,大约200行。