📄 chuffman.cpp
字号:
#include "stdafx.h"
#include "Chuffman.h"
HuffmanCode::HuffmanCode(void)
{
vlc_3d = MakeEhuff(8192);
vlc_cbpcm = MakeEhuff(256);
vlc_cbpcm_intra = MakeEhuff(256);
vlc_cbpy = MakeEhuff(16);
vlc_mv = MakeEhuff(65);
LoadETable(vlc_3d_coeff,vlc_3d);
LoadETable(vlc_cbpcm_coeff,vlc_cbpcm);
LoadETable(vlc_cbpcm_intra_coeff,vlc_cbpcm_intra);
LoadETable(vlc_cbpy_coeff,vlc_cbpy);
LoadETable(vlc_mv_coeff,vlc_mv);
}
HuffmanCode::~HuffmanCode()
{
FreeEhuff(vlc_3d);
FreeEhuff(vlc_cbpcm);
FreeEhuff(vlc_cbpcm_intra);
FreeEhuff(vlc_cbpy);
FreeEhuff(vlc_mv);
}
EHUFF * HuffmanCode::MakeEhuff(int n)
{
EHUFF *temp;
temp = new EHUFF;
temp->n = n;
temp->Hlen= new int[n];
temp->Hcode=new int[n];
memset(temp->Hlen,0xff,sizeof(int)*n);
memset(temp->Hcode,0xff,sizeof(int)*n);
return(temp);
}
void HuffmanCode::FreeEhuff(EHUFF *pHuffman)
{
delete []pHuffman->Hlen;
delete []pHuffman->Hcode;
delete pHuffman;
}
void HuffmanCode::LoadETable(const int *array,EHUFF *table)
{
while(*array>=0)
{table->Hlen[*array] = array[1];
table->Hcode[*array] = array[2];
array+=3;
}
}
int HuffmanCode::Encode(int val,EHUFF *huff,int& CodeValue)
{
if (val >= huff->n)
return 0; // No serious error, can occur with some values
else if (huff->Hlen[val] < 0)
return 0;
else
{CodeValue=huff->Hcode[val];
return(huff->Hlen[val]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -