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

📄 sbr_huff_tabs.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 2 页
字号:
  {    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 + -