mirror of
https://github.com/google/liblc3.git
synced 2026-06-20 09:32:26 +00:00
fix: Gain adjustment during second quantization phase can exceed minimum gain
This commit is contained in:
+3
-3
@@ -589,7 +589,7 @@ def check_estimate_gain(rng, dt, sr):
|
||||
(g_int, reset_off) = \
|
||||
analysis.estimate_gain(x, nbits_budget, nbits_off, g_off)
|
||||
|
||||
(g_int_c, reset_off_c) = lc3.spec_estimate_gain(
|
||||
(g_int_c, reset_off_c, _) = lc3.spec_estimate_gain(
|
||||
dt, sr, x, nbits_budget, nbits_off, -g_off)
|
||||
|
||||
ok = ok and g_int_c == g_int
|
||||
@@ -664,7 +664,7 @@ def check_adjust_gain(rng, dt, sr):
|
||||
|
||||
g_adj = analysis.adjust_gain(g_idx, nbits, nbits_budget)
|
||||
|
||||
g_adj_c = lc3.spec_adjust_gain(sr, g_idx, nbits, nbits_budget)
|
||||
g_adj_c = lc3.spec_adjust_gain(sr, g_idx, nbits, nbits_budget, 0)
|
||||
|
||||
ok = ok and g_adj_c == g_adj
|
||||
|
||||
@@ -752,7 +752,7 @@ def check_appendix_c(dt):
|
||||
ok = ok and nbits == C.NBITS_EST[dt][i]
|
||||
|
||||
g_adj = lc3.spec_adjust_gain(sr,
|
||||
C.GG_IND[dt][i], C.NBITS_EST[dt][i], C.NBITS_SPEC[dt][i])
|
||||
C.GG_IND[dt][i], C.NBITS_EST[dt][i], C.NBITS_SPEC[dt][i], 0)
|
||||
ok = ok and g_adj == C.GG_IND_ADJ[dt][i] - C.GG_IND[dt][i]
|
||||
|
||||
if C.GG_IND_ADJ[dt][i] != C.GG_IND[dt][i]:
|
||||
|
||||
+7
-6
@@ -30,7 +30,7 @@ static PyObject *estimate_gain_py(PyObject *m, PyObject *args)
|
||||
float *x;
|
||||
int nbits_budget;
|
||||
float nbits_off;
|
||||
int g_off;
|
||||
int g_off, g_min;
|
||||
bool reset_off;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "IIOifi", &dt, &sr,
|
||||
@@ -45,23 +45,24 @@ static PyObject *estimate_gain_py(PyObject *m, PyObject *args)
|
||||
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
|
||||
|
||||
int g_int = estimate_gain(dt, sr,
|
||||
x, nbits_budget, nbits_off, g_off, &reset_off);
|
||||
x, nbits_budget, nbits_off, g_off, &reset_off, &g_min);
|
||||
|
||||
return Py_BuildValue("ii", g_int, reset_off);
|
||||
return Py_BuildValue("iii", g_int, reset_off, g_min);
|
||||
}
|
||||
|
||||
static PyObject *adjust_gain_py(PyObject *m, PyObject *args)
|
||||
{
|
||||
unsigned sr;
|
||||
int g_idx, nbits, nbits_budget;
|
||||
int g_idx, nbits, nbits_budget, g_idx_min;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "Iiii", &sr, &g_idx, &nbits, &nbits_budget))
|
||||
if (!PyArg_ParseTuple(args, "Iiiii", &sr, &g_idx,
|
||||
&nbits, &nbits_budget, &g_idx_min))
|
||||
return NULL;
|
||||
|
||||
CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
|
||||
CTYPES_CHECK("g_idx", g_idx >= 0 && g_idx <= 255);
|
||||
|
||||
g_idx = adjust_gain(sr, g_idx, nbits, nbits_budget);
|
||||
g_idx = adjust_gain(sr, g_idx, nbits, nbits_budget, g_idx_min);
|
||||
|
||||
return Py_BuildValue("i", g_idx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user