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

📄 quant.c

📁 encoder 视频会议 视频编码算法 源程序
💻 C
字号:
/************************************************************************ *量化器 * ************************************************************************/#include"sim.h"/**********************************************************************
 *
 *	函数名:        Quant
 *	功能:	量化器
 *	
 *	Input:  变换系数、量化系数、量化参数以及量化模式
 *        
 *
 ***********************************************************************/

void Quant(int *coeff, int *qcoeff, int QP, int Mode)
{
  int i;
  int level;
  //如果量化参数不为0,表示量化器有意义
  if (QP) {
    //量化器首先判断当前帧是否为帧内图像
    if (Mode == MODE_INTRA || Mode == MODE_INTRA_Q) { 
      qcoeff[0] = mmax(1,mmin(254,coeff[0]/8));
      //量化编码块中的所有系数
      for (i = 1; i < 64; i++) {
        level = (abs(coeff[i])) / (2*QP);	
        qcoeff[i] =  mmin(127,mmax(-127,sign(coeff[i]) * level));
      }
    }
	//如果不是帧内图像,则取系数差进行量化
    else { /* non Intra */
      for (i = 0; i < 64; i++) {
        level = (abs(coeff[i])-QP/2)  / (2*QP);
        qcoeff[i] = mmin(127,mmax(-127,sign(coeff[i]) * level));
      }
    }
  }
  //量化参数为0,系数不量化
  else {
    for (i = 0; i < 64; i++) {
      qcoeff[i] = coeff[i];
    }
  }
  return;
}
/********************************************************************** * *	Name:        Dequant *	功能:	解量化 *	输入: 重构系数、量化系数、量化参数以及量化模式 ***********************************************************************/void Dequant(int *qcoeff, int *rcoeff, int QP, int Mode)
{
  int i;
  //如果量化参数不为0,表明有量化
  if (QP) {
    for (i = 0; i < 64; i++) {
      if (qcoeff[i]) {
        //量化参数是奇数
        if ((QP % 2) == 1)
          rcoeff[i] = QP * (2*abs(qcoeff[i]) + 1);
        else
          //量化参数是偶数
          rcoeff[i] = QP * (2*abs(qcoeff[i]) + 1) - 1;
        rcoeff[i] = sign(qcoeff[i]) * rcoeff[i];
      }
      //量化系数为0,重构系数也为0
      else
        rcoeff[i] = 0;
    }
    //帧内系数的处理
    if (Mode == MODE_INTRA || Mode == MODE_INTRA_Q) { 
      rcoeff[0] = qcoeff[0]*8;
    }
  }
  //没有量化,直接赋值
  else {
    for (i = 0; i < 64; i++) {
      rcoeff[i] = qcoeff[i];
    }
  }
  return;
}

⌨️ 快捷键说明

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