📄 gain_q.c
字号:
#include "gain_q.h"
#include "AmrCode_Comm.h"
#include "basic_op.h"
#include "bitno_tab.h"
#include "qgain475.h"
#define VQ_SIZE_HIGHRATES 128static const Word16 table_gain_highrates[VQ_SIZE_HIGHRATES*4] =
{
/* Note: column 4 (qua_ener) contains the original values from IS641 to ensure bit-exactness; however, they are not exactly the rounded value of (20*log10(g_fac)) *//*g_pit, g_fac, qua_ener_MR122, qua_ener */ 577, 662, -2692, -16214, 806, 1836, -1185, -7135, 3109, 1052, -2008, -12086, 4181, 1387, -1600, -9629, 2373, 1425, -1560, -9394, 3248, 1985, -1070, -6442, 1827, 2320, -840, -5056, 941, 3314, -313, -1885, 2351, 2977, -471, -2838, 3616, 2420, -777, -4681, 3451, 3096, -414, -2490, 2955, 4301, 72, 434, 1848, 4500, 139, 836, 3884, 5416, 413, 2484, 1187, 7210, 835, 5030, 3083, 9000, 1163, 7002, 7384, 883, -2267, -13647, 5962, 1506, -1478, -8900, 5155, 2134, -963, -5800, 7944, 2009, -1052, -6335, 6507, 2250, -885, -5327, 7670, 2752, -588, -3537, 5952, 3016, -452, -2724, 4898, 3764, -125, -751, 6989, 3588, -196, -1177, 8174, 3978, -43, -260, 6064, 4404, 107, 645, 7709, 5087, 320, 1928, 5523, 6021, 569, 3426, 7769, 7126, 818, 4926, 6060, 7938, 977, 5885, 5594, 11487, 1523, 9172, 10581, 1356, -1633, -9831, 9049, 1597, -1391, -8380, 9794, 2035, -1033, -6220, 8946, 2415, -780, -4700, 10296, 2584, -681, -4099, 9407, 2734, -597, -3595, 8700, 3218, -356, -2144, 9757, 3395, -277, -1669, 10177, 3892, -75, -454, 9170, 4528, 148, 891, 10152, 5004, 296, 1781, 9114, 5735, 497, 2993, 10500, 6266, 628, 3782, 10110, 7631, 919, 5534, 8844, 8727, 1117, 6728, 8956, 12496, 1648, 9921, 12924, 976, -2119, -12753, 11435, 1755, -1252, -7539, 12138, 2328, -835, -5024, 11388, 2368, -810, -4872, 10700, 3064, -429, -2580, 12332, 2861, -530, -3192, 11722, 3327, -307, -1848, 11270, 3700, -150, -904, 10861, 4413, 110, 663, 12082, 4533, 150, 902, 11283, 5205, 354, 2132, 11960, 6305, 637, 3837, 11167, 7534, 900, 5420, 12128, 8329, 1049, 6312, 10969, 10777, 1429, 8604, 10300, 17376, 2135, 12853, 13899, 1681, -1316, -7921, 12580, 2045, -1026, -6179, 13265, 2439, -766, -4610, 14033, 2989, -465, -2802, 13452, 3098, -413, -2482, 12396, 3658, -167, -1006, 13510, 3780, -119, -713, 12880, 4272, 62, 374, 13533, 4861, 253, 1523, 12667, 5457, 424, 2552, 13854, 6106, 590, 3551, 13031, 6483, 678, 4084, 13557, 7721, 937, 5639, 12957, 9311, 1213, 7304, 13714, 11551, 1532, 9221, 12591, 15206, 1938, 11667, 15113, 1540, -1445, -8700, 15072, 2333, -832, -5007, 14527, 2511, -723, -4352, 14692, 3199, -365, -2197, 15382, 3560, -207, -1247, 14133, 3960, -50, -300, 15102, 4236, 50, 298, 14332, 4824, 242, 1454, 14846, 5451, 422, 2542, 15306, 6083, 584, 3518, 14329, 6888, 768, 4623, 15060, 7689, 930, 5602, 14406, 9426, 1231, 7413, 15387, 9741, 1280, 7706, 14824, 14271, 1844, 11102, 13600, 24939, 2669, 16067, 16396, 1969, -1082, -6517, 16817, 2832, -545, -3283, 15713, 2843, -539, -3248, 16104, 3336, -303, -1825, 16384, 3963, -49, -294, 16940, 4579, 165, 992, 15711, 4599, 171, 1030, 16222, 5448, 421, 2537, 16832, 6382, 655, 3945, 15745, 7141, 821, 4944, 16326, 7469, 888, 5343, 16611, 8624, 1100, 6622, 17028, 10418, 1379, 8303, 15905, 11817, 1565, 9423, 16878, 14690, 1887, 11360, 16515, 20870, 2406, 14483, 18142, 2083, -999, -6013, 19401, 3178, -375, -2257, 17508, 3426, -264, -1589, 20054, 4027, -25, -151, 18069, 4249, 54, 326, 18952, 5066, 314, 1890, 17711, 5402, 409, 2461, 19835, 6192, 610, 3676, 17950, 7014, 795, 4784, 21318, 7877, 966, 5816, 17910, 9289, 1210, 7283, 19144, 9290, 1210, 7284, 20517, 11381, 1510, 9089, 18075, 14485, 1866, 11234, 19999, 17882, 2177, 13108, 18842, 32764, 3072, 18494};/* table used in 'low' rates: MR475, MR515, MR59 */#define VQ_SIZE_LOWRATES 64static const Word16 table_gain_lowrates[VQ_SIZE_LOWRATES*4] = {/*g_pit, g_fac, qua_ener_MR122, qua_ener */ 10813, 28753, 2879, 17333, 20480, 2785, -570, -3431, 18841, 6594, 703, 4235, 6225, 7413, 876, 5276, 17203, 10444, 1383, 8325, 21626, 1269, -1731, -10422, 21135, 4423, 113, 683, 11304, 1556, -1430, -8609, 19005, 12820, 1686, 10148, 17367, 2498, -731, -4398, 17858, 4833, 244, 1472, 9994, 2498, -731, -4398, 17530, 7864, 964, 5802, 14254, 1884, -1147, -6907, 15892, 3153, -387, -2327, 6717, 1802, -1213, -7303, 18186, 20193, 2357, 14189, 18022, 3031, -445, -2678, 16711, 5857, 528, 3181, 8847, 4014, -30, -180, 15892, 8970, 1158, 6972, 18022, 1392, -1594, -9599, 16711, 4096, 0, 0, 8192, 655, -2708, -16305, 15237, 13926, 1808, 10884, 14254, 3112, -406, -2444, 14090, 4669, 193, 1165, 5406, 2703, -614, -3697, 13434, 6553, 694, 4180, 12451, 901, -2237, -13468, 12451, 2662, -637, -3833, 3768, 655, -2708, -16305, 14745, 23511, 2582, 15543, 19169, 2457, -755, -4546, 20152, 5079, 318, 1913, 6881, 4096, 0, 0, 20480, 8560, 1089, 6556, 19660, 737, -2534, -15255, 19005, 4259, 58, 347, 7864, 2088, -995, -5993, 11468, 12288, 1623, 9771, 15892, 1474, -1510, -9090, 15728, 4628, 180, 1086, 9175, 1433, -1552, -9341, 16056, 7004, 793, 4772, 14827, 737, -2534, -15255, 15073, 2252, -884, -5321, 5079, 1228, -1780, -10714, 13271, 17326, 2131, 12827, 16547, 2334, -831, -5002, 15073, 5816, 518, 3118, 3932, 3686, -156, -938, 14254, 8601, 1096, 6598, 16875, 778, -2454, -14774, 15073, 3809, -107, -646, 6062, 614, -2804, -16879, 9338, 9256, 1204, 7251, 13271, 1761, -1247, -7508, 13271, 3522, -223, -1343, 2457, 1966, -1084, -6529, 11468, 5529, 443, 2668, 10485, 737, -2534, -15255, 11632, 3194, -367, -2212, 1474, 778, -2454, -14774};
/******************************************************************************* LOCAL VARIABLES AND TABLES******************************************************************************/#define NPRED 4 /* number of prediction taps *//* MA prediction coefficients (Q13) */static const Word16 pred[NPRED] = {5571, 4751, 2785, 1556};/* average innovation energy. *//* MEAN_ENER = 36.0/constant, constant = 20*Log10(2) */#define MEAN_ENER_MR122 783741L /* 36/(20*log10(2)) (Q17) *//* MA prediction coefficients (Q6) */static const Word16 pred_MR122[NPRED] = {44, 37, 22, 12};/* minimum quantized energy: -14 dB */#define MIN_ENERGY -14336 /* 14 Q10 */#define MIN_ENERGY_MR122 -2381 /* 14 / (20*log10(2)) Q10 */
/*************************************************************************** Function: gainQuant_init* Purpose: Allocates state memory and initializes state memory****************************************************************************/
int gainQuant_init (gainQuantState **state){
gainQuantState* pgainQuantState;
gc_predState* pgc_predState, * pgc_predUnqState;
GainAdaptState* pGainAdaptState;
if (state == (gainQuantState **) NULL)
{
fprintf(stderr, "gainQuant_init: invalid parameter\n");
return -1;
}
*state = NULL;
/* allocate memory */
if ((pgainQuantState= (gainQuantState *) malloc(sizeof(gainQuantState))) == NULL)
{
fprintf(stderr, "gainQuant_init: can not malloc state structure\n");
return -1;
}
pgainQuantState->gain_idx_ptr = NULL;
pgainQuantState->gc_predSt = NULL;
pgainQuantState->gc_predUnqSt = NULL;
pgainQuantState->adaptSt = NULL;
/* Init sub states */
// gc_pred_init(&pgainQuantState->gc_predSt);
if (&pgainQuantState->gc_predSt == (gc_predState **) NULL)
{
fprintf(stderr, "gc_pred_init: invalid parameter\n");
return -1;
}
pgainQuantState->gc_predSt = NULL;
/* allocate memory */
if ((pgc_predState= (gc_predState *) malloc(sizeof(gc_predState))) == NULL)
{
fprintf(stderr, "gc_pred_init: can not malloc state structure\n");
return -1;
}
//gc_pred_reset(pgc_predState);
pgc_predState->past_qua_en[0] =
pgc_predState->past_qua_en[1] =
pgc_predState->past_qua_en[2] =
pgc_predState->past_qua_en[3] = -14336;
pgc_predState->past_qua_en_MR122[0] =
pgc_predState->past_qua_en_MR122[1] =
pgc_predState->past_qua_en_MR122[2] =
pgc_predState->past_qua_en_MR122[3] = -2381;
pgainQuantState->gc_predSt = pgc_predState;
//gc_pred_init(&pgainQuantState->gc_predUnqSt);
if (&pgainQuantState->gc_predUnqSt== (gc_predState **) NULL)
{
fprintf(stderr, "gc_pred_init: invalid parameter\n");
return -1;
}
pgainQuantState->gc_predUnqSt = NULL;
/* allocate memory */
if ((pgc_predUnqState= (gc_predState *) malloc(sizeof(gc_predState))) == NULL)
{
fprintf(stderr, "gc_pred_init: can not malloc state structure\n");
return -1;
}
//gc_pred_reset(pgc_predUnqState);
pgc_predUnqState->past_qua_en[0] =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -