⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shc.h

📁 linux arm开发板上的usb摄像头接口驱动程序
💻 H
字号:
/* *  shcodec ;) version 1.0.1 *  Copyright (C) 1998-2002 Alexander Simakov *  April 2002 * *  This software may be used freely for any purpose. However, when *  distributed, the original source must be clearly stated, and, *  when the source code is distributed, the copyright notice must *  be retained and any alterations in the code must be clearly marked. *  No warranty is given regarding the quality of this software. * *  internet: http://www.webcenter.ru/~xander *  e-mail: xander@online.ru */#ifndef SHC_INCLUDED#define SHC_INCLUDED#ifdef __cplusplusextern "C" {#endif/* Types */typedef unsigned char uchar;typedef unsigned int  uint;/* Constants */#define SH_MAX_ALPHA (256)#define SH_MAX_CLEN  (31)#define SH_CACHEBITS (8)#define SH_CACHESIZE (1<<SH_CACHEBITS)/* Prototypes */void sh_GetFreq(int *freq, uchar *block, int size);/*  Function: sh_GetFreq() *  Purpose: get symbol frequencies *  Parameters: freq - memory for symbol frequencies, block - input data, *  size - block size *  Return: none *  Notes: none */int sh_SortFreq(int *freq, uchar *symb);/*  Function: sh_SortFreq() *  Purpose: sort symbols by frequency *  Parameters: freq - symbol frequencies, symb - memory for symbols *  Return: number of actual symbols, symb - sorted symbols *  Notes: none */void sh_CalcLen(int *freq, uchar *symb, uchar *len, int n, int maxLen);/*  Function: sh_CalcLen() *  Purpose: calculate code lengths *  Parameters: freq - symbol frequencies, symb - sorted symbols, *  len - memory for code lengths, n - number of actual symbols, *  maxLen - maximal allowed code length = [8..31] or -1 for *  Mimimum-Redundancy code lengths *  Return: len - code lengths *  Notes: len must be overlaid on (uchar *)freq */void sh_SortLen(uchar *len, uchar *symb, int n);/*  Function: sh_SortLen() *  Purpose: sort symbols by code length and actual value *  Parameters: len - code lengths, symb - sorted symbols, *  n - number of actual symbols *  Return: symb - sorted symbols *  Notes: none */void sh_CalcCode(uchar *len, uchar *symb, uchar *code, int n);/*  Function: sh_CalcCode() *  Purpose: calculate canonical huffman codes *  Parameters: len - code lengths, symb - sorted symbols, *  code - memory for codes, n - number of actual symbols *  Return: code - symbol codes *  Notes: code can be overlaid on (uchar *)freq+256 */int sh_PackTree(uchar *len, uchar *symb, uchar *aux, uint *buf, int n);/*  Function: sh_PackTree() *  Purpose: pack code tree *  Parameters: len - code lengths, symb - sorted symbols, *  aux - auxiliary memory, buf - output buffer, *  n - number of actual symbols *  Return: packed tree size *  Notes: aux can be overlaid on (uchar *)freq+512 */int sh_ExpandTree(uchar *len, uchar *symb, uint *buf);/*  Function: sh_ExpandTree() *  Purpose: expand code tree *  Parameters: len - memory for code lengths, symb - memory for *  symbols, buf - input buffer *  Return: number of actual symbols *  Notes: none */void sh_CalcDecode(uchar *len, uchar *symb, uchar *base, uchar *offs, uchar *cache, int n);/*  Function: sh_CalcDecode() *  Purpose: calculate decode tables *  Parameters: len - code lengths, symb - sorted symbols, *  base, offs and cache - memory for decoding tables, n - number *  of actual symbols *  Return: base, offs and cache - ready for decoding *  Notes: cache can be overlaid on (uchar *)len *//* Macros *//*  Macros: ENCODE_SYMB() *  Purpose: encode a symbol *  Parameters: len - code lengths, code - symbol codes, *  symbol - symbol to encode, buf - output buffer, bufpos - output buffer *  position, bits - number of free MS bits in bitbuf, bitbuf - bit buffer */#define ENCODE_SYMB(len, code, symbol, buf, bufpos, bits, bitbuf) {\    uint symblen, symbcode;\    symblen=len[symbol];\    symbcode=code[symbol];\    if(symblen<=bits) {\        bitbuf<<=symblen;\        bitbuf|=symbcode;\        bits-=symblen;\    } else {\        bitbuf<<=bits;\        bitbuf|=(symbcode>>(symblen-bits));\        buf[bufpos++]=bitbuf;\        bitbuf=symbcode;\        bits+=(32-symblen);\    }\}\/*  Macros: DECODE_SYMB() *  Purpose: decode a symbol *  Parameters: base, offs, cache - decoding tables, symb - sorted symbols, *  buf - input buffer, bufpos - input buffer position, bits - number of *  unused LS bits in bitbuf, bitbuf - bit buffer, symbol - decoded symbol */#define DECODE_SYMB(base, offs, cache, symb, buf, bufpos, bits, bitbuf, symbol)\{   uint frame, codelen;\    if(bits) frame=(bitbuf<<(32-bits))|(buf[bufpos]>>bits);\    else frame=buf[bufpos]; codelen=cache[frame>>(32-SH_CACHEBITS)];\    if(codelen>SH_CACHEBITS) while((frame>>(32-codelen))<base[codelen]) codelen++;\    symbol=symb[(frame>>(32-codelen))-base[codelen]+offs[codelen]];\    if(codelen<=bits) bits-=codelen;\    else { bits+=32-codelen; bitbuf=buf[bufpos++];}\}\#ifdef __cplusplus}#endif#endif /* SHC_INCLUDED */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -