📄 sbr_huff_tabs.c
字号:
{ 5, 0x0007ffe1, 19}, { 6, 0x0007ffe2, 19},
{ 7, 0x0007ffe3, 19}, { 8, 0x0007ffe4, 19},
{ 9, 0x0007ffe5, 19}, { 10, 0x0007ffe6, 19},
{ 11, 0x0007ffe7, 19}, { 12, 0x0007ffe8, 19},
{ 13, 0x0007ffe9, 19}, { 14, 0x0007ffea, 19},
{ 15, 0x0007ffeb, 19}, { 16, 0x0007ffec, 19},
{ 44, 0x0007ffed, 19}, { 45, 0x0007ffee, 19},
{ 46, 0x0007ffef, 19}, { 47, 0x0007fff0, 19},
{ 48, 0x0007fff1, 19}, { 49, 0x0007fff2, 19},
{ 50, 0x0007fff3, 19}, { 51, 0x0007fff4, 19},
{ 52, 0x0007fff5, 19}, { 53, 0x0007fff6, 19},
{ 54, 0x0007fff7, 19}, { 55, 0x0007fff8, 19},
{ 56, 0x0007fff9, 19}, { 57, 0x0007fffa, 19},
{ 58, 0x0007fffb, 19}, { 59, 0x0007fffc, 19},
{ 60, 0x0007fffd, 19}, { 61, 0x0007fffe, 19},
{ 62, 0x0007ffff, 19},
};
/********************************************************************/
// 5
static IppsVLCTable_32s ipp_f_huffman_env_3_0dB[] = {
{ 31, 0x00000000, 1}, { 30, 0x00000002, 2},
{ 32, 0x00000006, 3}, { 29, 0x0000000e, 4},
{ 33, 0x0000001e, 5}, { 28, 0x0000003e, 6},
{ 27, 0x000000fd, 8}, { 34, 0x000000fc, 8},
{ 26, 0x000001fd, 9}, { 35, 0x000001fc, 9},
{ 25, 0x000003fd, 10}, { 36, 0x000003fc, 10},
{ 24, 0x000007fd, 11}, { 37, 0x000007fc, 11},
{ 23, 0x00000ffd, 12}, { 38, 0x00000ffc, 12},
{ 39, 0x00001ffc, 13}, { 22, 0x00003ffb, 14},
{ 40, 0x00003ffa, 14}, { 21, 0x00007ff8, 15},
{ 41, 0x00007ff9, 15}, { 42, 0x00007ffa, 15},
{ 19, 0x0000fff7, 16}, { 20, 0x0000fff6, 16},
{ 43, 0x0000fff8, 16}, { 44, 0x0000fff9, 16},
{ 16, 0x0001fff5, 17}, { 18, 0x0001fff4, 17},
{ 45, 0x0001fff6, 17}, { 46, 0x0001fff7, 17},
{ 7, 0x0003fff3, 18}, { 12, 0x0003fff4, 18},
{ 13, 0x0003fff2, 18}, { 17, 0x0003fff0, 18},
{ 47, 0x0003fff5, 18}, { 48, 0x0003fff6, 18},
{ 49, 0x0003fff1, 18}, { 8, 0x0007fff5, 19},
{ 9, 0x0007ffee, 19}, { 10, 0x0007ffef, 19},
{ 11, 0x0007fff6, 19}, { 15, 0x0007fff0, 19},
{ 51, 0x0007fff1, 19}, { 52, 0x0007fff2, 19},
{ 53, 0x0007fff3, 19}, { 55, 0x0007fff7, 19},
{ 56, 0x0007fff4, 19}, { 0, 0x000ffff0, 20},
{ 1, 0x000ffff1, 20}, { 2, 0x000ffff2, 20},
{ 3, 0x000ffff3, 20}, { 4, 0x000ffff4, 20},
{ 5, 0x000ffff5, 20}, { 6, 0x000ffff6, 20},
{ 14, 0x000ffff7, 20}, { 50, 0x000ffff8, 20},
{ 54, 0x000ffff9, 20}, { 57, 0x000ffffa, 20},
{ 58, 0x000ffffb, 20}, { 59, 0x000ffffc, 20},
{ 60, 0x000ffffd, 20}, { 61, 0x000ffffe, 20},
{ 62, 0x000fffff, 20},
};
/********************************************************************/
// 6
static IppsVLCTable_32s ipp_t_huffman_env_bal_3_0dB[] = {
{ 12, 0x00000000, 1}, { 13, 0x00000002, 2},
{ 11, 0x00000006, 3}, { 10, 0x0000000e, 4},
{ 14, 0x0000001e, 5}, { 15, 0x0000003e, 6},
{ 9, 0x0000007e, 7}, { 8, 0x000000fe, 8},
{ 16, 0x000001fe, 9}, { 7, 0x00000ff8, 12},
{ 0, 0x00001ff2, 13}, { 1, 0x00001ff3, 13},
{ 2, 0x00001ff4, 13}, { 3, 0x00001ff5, 13},
{ 4, 0x00001ff6, 13}, { 5, 0x00001ff7, 13},
{ 6, 0x00001ff8, 13}, { 17, 0x00001ff9, 13},
{ 18, 0x00001ffa, 13}, { 19, 0x00001ffb, 13},
{ 20, 0x00001ffc, 13}, { 21, 0x00001ffd, 13},
{ 22, 0x00001ffe, 13}, { 23, 0x00003ffe, 14},
{ 24, 0x00003fff, 14},
};
/********************************************************************/
// 7
static IppsVLCTable_32s ipp_f_huffman_env_bal_3_0dB[] = {
{ 12, 0x00000000, 1}, { 11, 0x00000002, 2},
{ 13, 0x00000006, 3}, { 10, 0x0000000e, 4},
{ 14, 0x0000001e, 5}, { 15, 0x0000003e, 6},
{ 9, 0x0000007e, 7}, { 8, 0x000000fe, 8},
{ 16, 0x000001fe, 9}, { 7, 0x000007fc, 11},
{ 17, 0x00000ffa, 12}, { 0, 0x00001ff7, 13},
{ 1, 0x00001ff8, 13}, { 2, 0x00001ff9, 13},
{ 3, 0x00001ffa, 13}, { 4, 0x00001ffb, 13},
{ 18, 0x00001ff6, 13}, { 5, 0x00003ff8, 14},
{ 6, 0x00003ff9, 14}, { 19, 0x00003ffa, 14},
{ 20, 0x00003ffb, 14}, { 21, 0x00003ffc, 14},
{ 22, 0x00003ffd, 14}, { 23, 0x00003ffe, 14},
{ 24, 0x00003fff, 14},
};
/********************************************************************/
// 8
static IppsVLCTable_32s ipp_t_huffman_noise_3_0dB[] = {
{ 31, 0x00000000, 1}, { 32, 0x00000002, 2},
{ 30, 0x00000006, 3}, { 29, 0x0000000e, 4},
{ 33, 0x0000001e, 5}, { 28, 0x0000003e, 6},
{ 27, 0x000000fd, 8}, { 34, 0x000000fc, 8},
{ 35, 0x000003f8, 10}, { 26, 0x000007f2, 11},
{ 0, 0x00001fce, 13}, { 1, 0x00001fcf, 13},
{ 2, 0x00001fd0, 13}, { 3, 0x00001fd1, 13},
{ 4, 0x00001fd2, 13}, { 5, 0x00001fd3, 13},
{ 6, 0x00001fd4, 13}, { 7, 0x00001fd5, 13},
{ 8, 0x00001fd6, 13}, { 9, 0x00001fd7, 13},
{ 10, 0x00001fd8, 13}, { 11, 0x00001fd9, 13},
{ 12, 0x00001fda, 13}, { 13, 0x00001fdb, 13},
{ 14, 0x00001fdc, 13}, { 15, 0x00001fdd, 13},
{ 16, 0x00001fde, 13}, { 17, 0x00001fdf, 13},
{ 18, 0x00001fe0, 13}, { 19, 0x00001fe1, 13},
{ 20, 0x00001fe2, 13}, { 21, 0x00001fe3, 13},
{ 22, 0x00001fe4, 13}, { 23, 0x00001fe5, 13},
{ 24, 0x00001fe6, 13}, { 25, 0x00001fe7, 13},
{ 36, 0x00001fcc, 13}, { 37, 0x00001fe8, 13},
{ 38, 0x00001fe9, 13}, { 39, 0x00001fea, 13},
{ 40, 0x00001feb, 13}, { 41, 0x00001fec, 13},
{ 42, 0x00001fcd, 13}, { 43, 0x00001fed, 13},
{ 44, 0x00001fee, 13}, { 45, 0x00001fef, 13},
{ 46, 0x00001ff0, 13}, { 47, 0x00001ff1, 13},
{ 48, 0x00001ff2, 13}, { 49, 0x00001ff3, 13},
{ 50, 0x00001ff4, 13}, { 51, 0x00001ff5, 13},
{ 52, 0x00001ff6, 13}, { 53, 0x00001ff7, 13},
{ 54, 0x00001ff8, 13}, { 55, 0x00001ff9, 13},
{ 56, 0x00001ffa, 13}, { 57, 0x00001ffb, 13},
{ 58, 0x00001ffc, 13}, { 59, 0x00001ffd, 13},
{ 60, 0x00001ffe, 13}, { 61, 0x00003ffe, 14},
{ 62, 0x00003fff, 14},
};
/********************************************************************/
// 9
static IppsVLCTable_32s ipp_t_huffman_noise_bal_3_0dB[] = {
{ 12, 0x00000000, 1}, { 11, 0x00000002, 2},
{ 13, 0x00000006, 3}, { 10, 0x0000001c, 5},
{ 14, 0x0000003a, 6}, { 0, 0x000000ec, 8},
{ 1, 0x000000ed, 8}, { 2, 0x000000ee, 8},
{ 3, 0x000000ef, 8}, { 4, 0x000000f0, 8},
{ 5, 0x000000f1, 8}, { 6, 0x000000f2, 8},
{ 7, 0x000000f3, 8}, { 8, 0x000000f4, 8},
{ 9, 0x000000f5, 8}, { 15, 0x000000f6, 8},
{ 16, 0x000000f7, 8}, { 17, 0x000000f8, 8},
{ 18, 0x000000f9, 8}, { 19, 0x000000fa, 8},
{ 20, 0x000000fb, 8}, { 21, 0x000000fc, 8},
{ 22, 0x000000fd, 8}, { 23, 0x000000fe, 8},
{ 24, 0x000000ff, 8},
};
/********************************************************************/
IppsVLCTable_32s* vlcSbrBooks[] = {
ipp_t_huffman_env_1_5dB,//0
ipp_f_huffman_env_1_5dB,//1
ipp_t_huffman_env_bal_1_5dB,//2
ipp_f_huffman_env_bal_1_5dB,//3
ipp_t_huffman_env_3_0dB,//4
ipp_f_huffman_env_3_0dB,//5
ipp_t_huffman_env_bal_3_0dB,//6
ipp_f_huffman_env_bal_3_0dB,//7
ipp_t_huffman_noise_3_0dB,//8
ipp_t_huffman_noise_bal_3_0dB//9
};
/********************************************************************/
IppStatus ownInitSBREncHuffTabs(IppsVLCEncodeSpec_32s** ppSpec,
Ipp32s *sizeAll)
{
IppStatus status = ippStsNoErr;
Ipp32s i, mSize;
Ipp32s size[NUM_SBR_HUFF_TABS];
mSize = 0;
for (i = 0; i < NUM_SBR_HUFF_TABS; i++) {
status = ippsVLCEncodeGetSize_32s(vlcSbrBooks[i],
vlcSbrTableSizes[i],
&size[i]);
if (status != ippStsNoErr) return status;
mSize += size[i];
}
*sizeAll = mSize;
if (ppSpec) {
for (i = 1; i < NUM_SBR_HUFF_TABS; i++) {
ppSpec[i] = (IppsVLCEncodeSpec_32s*)((Ipp8u*)ppSpec[i-1] + size[i-1]);
}
for (i = 0; i < NUM_SBR_HUFF_TABS; i++) {
status = ippsVLCEncodeInit_32s(vlcSbrBooks[i],
vlcSbrTableSizes[i],
ppSpec[i]);
if (status != ippStsNoErr) return status;
}
}
return status;
}
/****************************************************************************/
Ipp32s ownVLCCountBits_16s32s(Ipp16s delta, IppsVLCEncodeSpec_32s* pHuffTab)
{
Ipp32s num_bits = 0;
ippsVLCCountBits_16s32s (&delta, 1, &num_bits, pHuffTab);
return num_bits;
}
/*
#define HUFF_NOISE_COMPRESS 0
#define HUFF_ENV_COMPRESS 1
*/
/*******************************************************************************/
Ipp32s sbrencSetEnvHuffTabs(Ipp32s bs_amp_res,
Ipp16s* LAV,
Ipp32s* bs_env_start_bits,
IppsVLCEncodeSpec_32s** pTimeHuffTab,
IppsVLCEncodeSpec_32s** pFreqHuffTab,
IppsVLCEncodeSpec_32s* sbrHuffTabs[NUM_SBR_HUFF_TABS],
Ipp32s typeCompress) /* [1] - envelope, [0] - noise */
{
Ipp32s criterion_1_5dB = !bs_amp_res; //flag || !bs_amp_res;
if( HUFF_ENV_COMPRESS == typeCompress ){ /* envelope compress */
if( criterion_1_5dB ){
*pTimeHuffTab = sbrHuffTabs[0]; /* = t_huffman_env_1_5dB */
*pFreqHuffTab = sbrHuffTabs[1]; /* = f_huffman_env_1_5dB */
*LAV = 60;
*bs_env_start_bits = 7;
}else{
*pTimeHuffTab = sbrHuffTabs[4]; /* = t_huffman_env_3_0dB */
*pFreqHuffTab = sbrHuffTabs[5]; /* = f_huffman_env_3_0dB */
*LAV = 31;
*bs_env_start_bits = 6;
}
} else { /* noise compress */
//------------------------------------------------
*pTimeHuffTab = sbrHuffTabs[8]; /* = t_huffman_noise_3_0dB */
*pFreqHuffTab = sbrHuffTabs[5]; /* = f_huffman_env_3_0dB = f_huffman_noise_3_0dB */
*LAV = 31;
*bs_env_start_bits = 5;
//------------------------------------------------
}
return 0;//OK
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -