41 #define BITSTREAM_WRITER_LE
48 2621, 2631, 2659, 2705, 2770, 2853, 2955, 3074, 3212, 3367,
49 3541, 3731, 3939, 4164, 4405, 4663, 4937, 5226, 5531, 5851,
50 6186, 6534, 6897, 7273, 7661, 8062, 8475, 8899, 9334, 9780,
51 10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
52 15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
53 20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
54 25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
55 29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
56 31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
57 32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
58 31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
59 29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
60 24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
61 19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
62 14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
63 9780, 9334, 8899, 8475, 8062, 7661, 7273, 6897, 6534, 6186,
64 5851, 5531, 5226, 4937, 4663, 4405, 4164, 3939, 3731, 3541,
65 3367, 3212, 3074, 2955, 2853, 2770, 2705, 2659, 2631, 2621
72 32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
79 32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
87 {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
89 {16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32}
104 }
else if (avctx->
bit_rate == 5300) {
129 *iir = (buf[
i] << 15) + ((-*fir) << 15) +
MULL2(*iir, 0x7f00);
165 memset(autocorr + 1, 0,
LPC_ORDER *
sizeof(int16_t));
186 int16_t partial_corr;
189 memset(lpc, 0,
LPC_ORDER *
sizeof(int16_t));
194 for (j = 0; j <
i; j++)
195 temp -= lpc[j] * autocorr[
i - j - 1];
196 temp = ((autocorr[
i] << 13) +
temp) << 3;
211 memcpy(vector, lpc,
i *
sizeof(int16_t));
212 for (j = 0; j <
i; j++) {
213 temp = partial_corr * vector[
i - j - 1] << 1;
230 int16_t *autocorr_ptr = autocorr;
231 int16_t *lpc_ptr = lpc;
243 static void lpc2lsp(int16_t *lpc, int16_t *prev_lsp, int16_t *lsp)
249 int max,
shift, cur_val, prev_val, count, p;
258 f[0] =
f[1] = 1 << 25;
265 f[2 *
i + 3] =
f[2 *
i + 1] - ((lsp[
i] - lsp[
LPC_ORDER - 1 -
i]) << 12);
300 if ((cur_val ^ prev_val) < 0) {
301 int abs_cur =
FFABS(cur_val);
302 int abs_prev =
FFABS(prev_val);
303 int sum = abs_cur + abs_prev;
307 abs_prev = abs_prev << shift >> 8;
308 lsp[count++] = ((
i - 1) << 7) + (abs_prev >> 1) / (sum >> 16);
327 memcpy(lsp, prev_lsp,
LPC_ORDER *
sizeof(int16_t));
337 #define get_index(num, offset, size) \
339 int error, max = -1; \
343 for (i = 0; i < LSP_CB_SIZE; i++) { \
344 for (j = 0; j < size; j++){ \
345 temp[j] = (weight[j + (offset)] * ff_g723_1_lsp_band##num[i][j] + \
348 error = ff_g723_1_dot_product(lsp + (offset), temp, size) << 1; \
349 error -= ff_g723_1_dot_product(ff_g723_1_lsp_band##num[i], temp, size); \
352 lsp_index[num] = i; \
363 static void lsp_quantize(uint8_t *lsp_index, int16_t *lsp, int16_t *prev_lsp)
370 weight[0] = (1 << 20) / (lsp[1] - lsp[0]);
395 (((prev_lsp[
i] -
dc_lsp[
i]) * 12288 + (1 << 14)) >> 15);
412 int16_t *
src, int16_t *dest)
420 iir_coef[n - 1] * dest[m - n];
435 int16_t *unq_lpc, int16_t *buf)
448 flt_coef[k + 2 * l +
LPC_ORDER] = (unq_lpc[k + l] *
453 vector +
i, buf +
i);
469 int max_ccr = 0x4000;
470 int max_eng = 0x7fff;
474 int ccr, eng, orig_eng, ccr_eng,
exp;
497 ccr = ccr << temp >> 16;
511 if (
exp + 1 < max_exp)
515 if (
exp + 1 == max_exp)
519 ccr_eng = ccr * max_eng;
521 if (
diff > 0 && (
i - index < PITCH_MIN || diff > ccr_eng >> 2)) {
541 int ccr, eng, max_ccr, max_eng;
546 for (
i = 0, j = pitch_lag - 3; j <= pitch_lag + 3;
i++, j++) {
558 for (
i = 0;
i < 15;
i++)
562 for (
i = 0;
i < 15;
i++) {
572 for (
i = 0;
i <= 6;
i++) {
573 eng = energy[
i << 1];
574 ccr = energy[(
i << 1) + 1];
579 ccr = (ccr * ccr + (1 << 14)) >> 15;
580 diff = ccr * max_eng - eng * max_ccr;
588 if (hf->
index == -1) {
589 hf->
index = pitch_lag;
593 eng = energy[14] * max_eng;
594 eng = (eng >> 2) + (eng >> 3);
595 ccr = energy[(hf->
index << 1) + 1] * energy[(hf->
index << 1) + 1];
597 eng = energy[(hf->
index << 1) + 1];
602 hf->
gain = ((eng << 15) / max_eng * 0x2800 + (1 << 14)) >> 15;
604 hf->
index += pitch_lag - 3;
642 int16_t *perf_fir, int16_t *perf_iir,
643 const int16_t *
src, int16_t *dest,
int scale)
651 memcpy(buf_16, perf_fir,
sizeof(int16_t) *
LPC_ORDER);
657 temp -= qnt_lpc[j - 1] * bptr_16[
i - j];
664 int64_t fir = 0, iir = 0;
666 fir -= perf_lpc[j - 1] * bptr_16[
i - j];
667 iir += perf_lpc[j +
LPC_ORDER - 1] * dest[
i - j];
684 int16_t *impulse_resp,
const int16_t *buf,
696 int odd_frame =
index & 1;
697 int iter = 3 + odd_frame;
711 for (
i = 0;
i < iter;
i++) {
716 for (k = 0; k <= j; k++)
723 flt_buf[j][0] = ((residual[j] << 13) + (1 << 14)) >> 15;
725 temp = (flt_buf[j + 1][k - 1] << 15) +
726 residual[j] * impulse_resp[k];
744 for (k = 0; k < j; k++) {
753 for (
i = 0;
i < 20 * iter;
i++)
758 for (
i = 0;
i < 20 * iter;
i++)
763 for (
i = 0;
i < iter;
i++) {
771 for (j = 0, k = 0; j < tbl_size; j++, k += 20) {
773 for (l = 0; l < 20; l++)
774 temp += ccr_buf[20 *
i + l] * cb_tbl[k + l];
786 pitch_lag += acb_lag - 1;
807 int64_t
temp = buf[
i] << 14;
808 for (j = 0; j <=
i; j++)
809 temp -= residual[j] * impulse_resp[
i - j];
822 int16_t *buf,
int pulse_cnt,
int pitch_lag)
831 int amp, err,
max, max_amp_index,
min,
scale,
i, j, k, l;
836 memcpy(impulse_r, impulse_resp,
sizeof(int16_t) *
SUBFRAME_LEN);
844 temp_corr[
i] = impulse_r[
i] >> 1;
884 for (j = max_amp_index; j >= 2; j--) {
886 impulse_corr[0] << 1);
896 for (j = 1; j < 5; j++) {
907 for (k = 1; k < pulse_cnt; k++) {
931 for (k = 0; k < pulse_cnt; k++)
936 for (l = 0; l <= k; l++) {
938 impulse_r[k - l] << 1);
941 temp_corr[k] = temp << 2 >> 16;
955 if (err < optim->min_err) {
961 for (k = 0; k < pulse_cnt; k++) {
977 int16_t *buf,
int pulse_cnt)
986 for (
i = 0; i < SUBFRAME_LEN >> 1;
i++) {
1012 int16_t *buf,
int index)
1028 for (
i = 0;
i < pulse_cnt;
i++)
1110 int16_t *in, *start;
1174 memset(vector, 0,
sizeof(int16_t) *
PITCH_MAX);
1177 flt_in[0] = 1 << 13;
1188 fir, iir, flt_in, vector +
PITCH_MAX, 0);
1231 *got_packet_ptr = 1;