📄 requant.cpp
字号:
#include "stdafx.h"/* C O N S T A N T S */// bits per sample for chosen quantizerconst mpc_uint32_t Res_bit [18] = { 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};// coefficients for requantization// 65536/step bzw. 65536/(2*D+1)#define _(X) MAKE_MPC_SAMPLE_EX(X,14)const MPC_SAMPLE_FORMAT __Cc [1 + 18] = { _(111.285962475327f), // 32768/2/255*sqrt(3) _(65536.000000000000f), _(21845.333333333332f), _(13107.200000000001f), _(9362.285714285713f), _(7281.777777777777f), _(4369.066666666666f), _(2114.064516129032f), _(1040.253968253968f), _(516.031496062992f), _(257.003921568627f), _(128.250489236790f), _(64.062561094819f), _(32.015632633121f), _(16.003907203907f), _(8.000976681723f), _(4.000244155527f), _(2.000061037018f), _(1.000015259021f)};#undef _// offset for requantization// 2*D+1 = steps of quantizerconst mpc_int32_t __Dc [1 + 18] = { 2, 0, 1, 2, 3, 4, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767};#ifdef MPC_FIXED_POINTstatic mpc_uint32_t find_shift(double fval){ mpc_int64_t val = (mpc_int64_t)fval; if (val<0) val = -val; mpc_uint32_t ptr = 0; while(val) {val>>=1;ptr++;} return ptr > 31 ? 0 : 31 - ptr;}#endif/* F U N C T I O N S */#define SET_SCF(N,X) SCF[N] = MAKE_MPC_SAMPLE_EX(X,SCF_shift[N] = (unsigned char)find_shift(X));voidMPC_decoder::ScaleOutput ( double factor ){#ifndef MPC_FIXED_POINT factor *= 1.0 / (double)(1<<(MPC_FIXED_POINT_SHIFT-1));#else factor *= 1.0 / (double)(1<<(16 - MPC_FIXED_POINT_SHIFT));#endif mpc_int32_t n; double f1 = factor; double f2 = factor; // handles +1.58...-98.41 dB, where's scf[n] / scf[n-1] = 1.20050805774840750476 SET_SCF(1,factor); f1 *= 0.83298066476582673961; f2 *= 1/0.83298066476582673961; for ( n = 1; n <= 128; n++ ) { SET_SCF((unsigned char)(1+n),f1); SET_SCF((unsigned char)(1-n),f2); f1 *= 0.83298066476582673961; f2 *= 1/0.83298066476582673961; }}voidMPC_decoder::Quantisierungsmodes ( void ) // conversion: index -> quantizer (bitstream reading){ // conversion: quantizer -> index (bitstream writing) mpc_int32_t Band = 0; mpc_int32_t i; do { Q_bit [Band] = 4; for ( i = 0; i < 16-1; i++ ) Q_res [Band] [i] = i; Q_res [Band][i] = 17; Band++; } while ( Band < 11 ); do { Q_bit [Band] = 3; for ( i = 0; i < 8-1; i++ ) Q_res [Band] [i] = i; Q_res [Band] [i] = 17; Band++; } while ( Band < 23 ); do { Q_bit [Band] = 2; for ( i = 0; i < 4-1; i++ ) Q_res [Band] [i] = i; Q_res [Band] [i] = 17; Band++; } while ( Band < 32 );}voidMPC_decoder::initialisiere_Quantisierungstabellen ( double scale_factor ){ Quantisierungsmodes (); ScaleOutput ( scale_factor );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -