37 for (i = 0; i <
length; i++)
38 max |=
FFABS(vector[i]);
43 for (i = 0; i <
length; i++)
44 dst[i] = (vector[i] * (1 << bits)) >> 3;
51 return width -
av_log2(num) - 1;
57 return av_sat_add32(sum, sum);
66 residual[0] = prev_excitation[
offset];
67 residual[1] = prev_excitation[offset + 1];
71 residual[i] = prev_excitation[offset + (i - 2) % lag];
81 for (j = 0; j < SUBFRAME_LEN - i; j++)
82 buf[i + j] += vector[j];
91 const int16_t *cb_ptr;
92 int lag = pitch_lag + subfrm->
ad_cb_lag - 1;
109 vector[i] = av_sat_dadd32(1 << 15, av_sat_add32(sum, sum)) >> 16;
126 int index = (lpc[j] >> 7) & 0x1FF;
127 int offset = lpc[j] & 0x7f;
130 (((offset << 8) + 0x80) << 1);
132 lpc[j] = -(av_sat_dadd32(1 << 15, temp1 + temp2) >> 16);
141 f1[1] = (lpc[0] + lpc[2]) * (1 << 14);
142 f1[2] = lpc[0] * lpc[2] + (2 << 28);
145 f2[1] = (lpc[1] + lpc[3]) * (1 << 14);
146 f2[2] = lpc[1] * lpc[3] + (2 << 28);
152 for (i = 2; i < LPC_ORDER / 2; i++) {
153 f1[i + 1] = av_clipl_int32(f1[i - 1] + (int64_t)
MULL2(f1[i], lpc[2 * i]));
154 f2[i + 1] = av_clipl_int32(f2[i - 1] + (int64_t)
MULL2(f2[i], lpc[2 * i + 1]));
156 for (j = i; j >= 2; j--) {
157 f1[j] =
MULL2(f1[j - 1], lpc[2 * i]) +
158 (f1[j] >> 1) + (f1[j - 2] >> 1);
159 f2[j] =
MULL2(f2[j - 1], lpc[2 * i + 1]) +
160 (f2[j] >> 1) + (f2[j - 2] >> 1);
165 f1[1] = ((lpc[2 * i] * 65536 >> i) + f1[1]) >> 1;
166 f2[1] = ((lpc[2 * i + 1] * 65536 >> i) + f2[1]) >> 1;
170 for (i = 0; i < LPC_ORDER / 2; i++) {
171 int64_t ff1 = f1[i + 1] + f1[i];
172 int64_t ff2 = f2[i + 1] - f2[i];
174 lpc[i] = av_clipl_int32(((ff1 + ff2) * 8) + (1 << 15)) >> 16;
175 lpc[LPC_ORDER - i - 1] = av_clipl_int32(((ff1 - ff2) * 8) +
184 int16_t *lpc_ptr = lpc;
202 uint8_t *lsp_index,
int bad_frame)
205 int i, j,
temp, stable;
214 lsp_index[0] = lsp_index[1] = lsp_index[2] = 0;
231 temp = ((prev_lsp[i] -
dc_lsp[i]) * pred + (1 << 14)) >> 15;
236 cur_lsp[0] =
FFMAX(cur_lsp[0], 0x180);
237 cur_lsp[LPC_ORDER - 1] =
FFMIN(cur_lsp[LPC_ORDER - 1], 0x7e00);
241 temp = min_dist + cur_lsp[j - 1] - cur_lsp[j];
244 cur_lsp[j - 1] -=
temp;
250 temp = cur_lsp[j - 1] + min_dist - cur_lsp[j] - 4;
260 memcpy(cur_lsp, prev_lsp, LPC_ORDER *
sizeof(*cur_lsp));
static void lsp2lpc(int16_t *lpc)
Convert LSP frequencies to LPC coefficients.
G723.1 unpacked data subframe.
static float cos_tab[256]
static const int16_t lsp_band0[LSP_CB_SIZE][3]
LSP VQ tables.
int av_log2_16bit(unsigned v)
void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp, uint8_t *lsp_index, int bad_frame)
Perform inverse quantization of LSP frequencies.
static const int16_t adaptive_cb_gain85[85 *20]
void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp, int16_t *prev_lsp)
Quantize LSP frequencies by interpolation and convert them to the corresponding LPC coefficients...
static const int16_t lsp_band2[LSP_CB_SIZE][4]
static const int16_t lsp_band1[LSP_CB_SIZE][3]
static const int16_t adaptive_cb_gain170[170 *20]
int ff_g723_1_normalize_bits(int num, int width)
Calculate the number of left-shifts required for normalizing the input.
void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag)
Generate a train of dirac functions with period as pitch lag.
int64_t ff_dot_product(const int16_t *a, const int16_t *b, int length)
Calculate the dot product of 2 int16_t vectors.
static const uint8_t offset[127][2]
void ff_g723_1_gen_acb_excitation(int16_t *vector, int16_t *prev_excitation, int pitch_lag, G723_1_Subframe *subfrm, enum Rate cur_rate)
Generate adaptive codebook excitation.
void ff_acelp_weighted_vector_sum(int16_t *out, const int16_t *in_a, const int16_t *in_b, int16_t weight_coeff_a, int16_t weight_coeff_b, int16_t rounder, int shift, int length)
weighted sum of two vectors with rounding.
void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation, int lag)
Get delayed contribution from the previous excitation vector.
int ff_g723_1_dot_product(const int16_t *a, const int16_t *b, int length)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static const float pred[4]
int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length)
Scale vector contents based on the largest of their absolutes.
Libavcodec external API header.
static const int16_t dc_lsp[LPC_ORDER]
LSP DC component.
G.723.1 types, functions and data tables.
common internal and external API header
#define MULL2(a, b)
Bitexact implementation of 2ab scaled by 1/2^16.
int ad_cb_lag
adaptive codebook lag