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

📄 ac3_bitalloc.h

📁 ac3的解码程序
💻 H
字号:
/*
  AC3 bit allocation
*/

#ifndef VALIB_AC3_BITALLOC_H
#define VALIB_AC3_BITALLOC_H

#include "../../defs.h"

void bit_alloc(
  int8_t *bap,    // [256]
  int8_t *exp,    // [256]
  int deltbae,
  int8_t *deltba, // [50]
  int start, int end, 
  int fscod, int halfratecod,
  int sdecay, int fdecay, 
  int sgain, int fgain, 
  int dbknee, int floor, 
  int fastleak, int slowleak, 
  int snroffset);

class BAP_BitCount
{
protected:
  int cnt1, cnt2, cnt4;

public:
  int bits;

  BAP_BitCount(): cnt1(0), cnt2(0), cnt4(0), bits(0) {};

  inline void reset()
  {
    cnt1 = 0;
    cnt2 = 0;
    cnt4 = 0;
    bits = 0;
  }

  inline void add_bap(int8_t *bap, int start, int end)
  {
    while(start < end)
      add_bap(bap[start++]);
  }

  inline void add_bap(int8_t bap)
  {
    switch (bap)
    {
      case 0:  return;

      case 1: 
        // 3-levels 3 values in 5 bits
        if (!cnt1--)
        {
          bits += 5;
          cnt1 = 2;
        }
        return;

      case 2:  
        // 5-levels 3 values in 7 bits
        if (!cnt2--)
        {
          bits += 7;
          cnt2 = 2;
        }
        return;

      case 3:  bits += 3; return;

      case 4:
        // 11-levels 2 values in 7 bits
        if (!cnt4--)
        {
          cnt4 = 1;
          bits += 7;
        }
        return;

      case 5:  bits += 4;  return;
      case 14: bits += 14; return;
      case 15: bits += 16; return;

      default:
        bits += bap-1;
        return;
    }
  }
};

#endif

⌨️ 快捷键说明

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