📄 huffman.c
字号:
{ 6, 6, 0, 0,t8HB, t8l},{ 6, 6, 0, 0,t9HB, t9l},{ 8, 8, 0, 0,t10HB, t10l},{ 8, 8, 0, 0,t11HB, t11l},{ 8, 8, 0, 0,t12HB, t12l},{16,16, 0, 0,t13HB, t13l},{ 0, 0, 0, 0,NULL,NULL},// Apparently not used{16,16, 0, 0,t15HB, t15l},{16,16, 1, 1,t16HB, t16l},{16,16, 2, 3,t16HB, t16l},{16,16, 3, 7,t16HB, t16l},{16,16, 4, 15,t16HB, t16l},{16,16, 6, 63,t16HB, t16l},{16,16, 8, 255,t16HB, t16l},{16,16,10,1023,t16HB, t16l},{16,16,13,8191,t16HB, t16l},{16,16, 4, 15,t24HB, t24l},{16,16, 5, 31,t24HB, t24l},{16,16, 6, 63,t24HB, t24l},{16,16, 7, 127,t24HB, t24l},{16,16, 8, 255,t24HB, t24l},{16,16, 9, 511,t24HB, t24l},{16,16,11,2047,t24HB, t24l},{16,16,13,8191,t24HB, t24l},{ 1,16, 0, 0,t32HB, t32l},{ 1,16, 0, 0,t33HB, t33l},}; /* do the huffman coding, *//* note! for counta,countb - the 4 bit value is passed in y, set x to 0 *//* return value: 0-no error, 1 decode error */void huffman_coder(unsigned int x, unsigned int y, struct huffcodetab *h, L3_bitstream_t *bs){ HUFFBITS huffbits; /* data left aligned */ HUFFBITS linbitsX; HUFFBITS linbitsY; unsigned int len; unsigned int xl1 = h->xlen-1; unsigned int yl1 = h->ylen-1; linbitsX = 0; linbitsY = 0; if (h->table == NULL) return; if (((x < xl1) || (xl1==0)) && (y < yl1)) { huffbits = h->table[x*(h->xlen)+y]; len = h->hlen[x*(h->xlen)+y]; putbits(bs,huffbits,len); return; } else if (x >= xl1) { linbitsX = x-xl1; if (linbitsX > h->linmax) { linbitsX= h->linmax; }; if (y >= yl1) { huffbits = h->table[(h->ylen)*(h->xlen)-1]; len = h->hlen[(h->ylen)*(h->xlen)-1]; putbits(bs,huffbits,len); linbitsY = y-yl1; if (linbitsY > h->linmax) { linbitsY = h->linmax; }; if (h->linbits) { putbits(bs,linbitsX,h->linbits); putbits(bs,linbitsY,h->linbits); } } else { /* x>= h->xlen, y<h->ylen */ huffbits = h->table[(h->ylen)*xl1+y]; len = h->hlen[(h->ylen)*xl1+y]; putbits(bs,huffbits,len); if (h->linbits) { putbits(bs,linbitsX,h->linbits); } } } else { /* ((x < h->xlen) && (y>=h->ylen)) */ huffbits = h->table[(h->ylen)*x+yl1]; len = h->hlen[(h->ylen)*x+yl1]; putbits(bs,huffbits,len); linbitsY = y-yl1; if (linbitsY > h->linmax) { linbitsY = h->linmax; }; if (h->linbits) { putbits(bs,linbitsY,h->linbits); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -