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] - *fir) * (1 << 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] * (1 << 13) +
temp) * (1 << 3);
203 lpc[
i] = (partial_corr + (1 << 1)) >> 2;
210 memcpy(vector, lpc,
i *
sizeof(int16_t));
211 for (j = 0; j <
i; j++) {
212 temp = partial_corr * vector[
i - j - 1] * 2;
229 int16_t *autocorr_ptr = autocorr;
230 int16_t *lpc_ptr = lpc;
242 static void lpc2lsp(int16_t *lpc, int16_t *prev_lsp, int16_t *lsp)
248 int max,
shift, cur_val, prev_val, count, p;
257 f[0] =
f[1] = 1 << 25;
262 f[2 *
i + 2] = -
f[2 *
i] - (lsp[
i] + lsp[
LPC_ORDER - 1 -
i]) * (1 << 12);
264 f[2 *
i + 3] =
f[2 *
i + 1] - (lsp[
i] - lsp[
LPC_ORDER - 1 -
i]) * (1 << 12);
299 if ((cur_val ^ prev_val) < 0) {
300 int abs_cur =
FFABS(cur_val);
301 int abs_prev =
FFABS(prev_val);
302 int sum = abs_cur + abs_prev;
306 abs_prev = abs_prev << shift >> 8;
307 lsp[count++] = ((
i - 1) << 7) + (abs_prev >> 1) / (sum >> 16);
326 memcpy(lsp, prev_lsp,
LPC_ORDER *
sizeof(int16_t));
336 #define get_index(num, offset, size) \
338 int error, max = -1; \
342 for (i = 0; i < LSP_CB_SIZE; i++) { \
343 for (j = 0; j < size; j++){ \
344 temp[j] = (weight[j + (offset)] * ff_g723_1_lsp_band##num[i][j] + \
347 error = ff_g723_1_dot_product(lsp + (offset), temp, size) * 2; \
348 error -= ff_g723_1_dot_product(ff_g723_1_lsp_band##num[i], temp, size); \
351 lsp_index[num] = i; \
362 static void lsp_quantize(uint8_t *lsp_index, int16_t *lsp, int16_t *prev_lsp)
369 weight[0] = (1 << 20) / (lsp[1] - lsp[0]);
394 (((prev_lsp[
i] -
dc_lsp[
i]) * 12288 + (1 << 14)) >> 15);
411 int16_t *
src, int16_t *dest)
419 iir_coef[n - 1] * dest[m - n];
434 int16_t *unq_lpc, int16_t *buf)
447 flt_coef[k + 2 * l +
LPC_ORDER] = (unq_lpc[k + l] *
452 vector +
i, buf +
i);
468 int max_ccr = 0x4000;
469 int max_eng = 0x7fff;
473 int ccr, eng, orig_eng, ccr_eng,
exp;
496 ccr = ccr << temp >> 16;
510 if (
exp + 1 < max_exp)
514 if (
exp + 1 == max_exp)
518 ccr_eng = ccr * max_eng;
520 if (
diff > 0 && (
i - index < PITCH_MIN || diff > ccr_eng >> 2)) {
540 int ccr, eng, max_ccr, max_eng;
545 for (
i = 0, j = pitch_lag - 3; j <= pitch_lag + 3;
i++, j++) {
557 for (
i = 0;
i < 15;
i++)
561 for (
i = 0;
i < 15;
i++) {
571 for (
i = 0;
i <= 6;
i++) {
572 eng = energy[
i << 1];
573 ccr = energy[(
i << 1) + 1];
578 ccr = (ccr * ccr + (1 << 14)) >> 15;
579 diff = ccr * max_eng - eng * max_ccr;
587 if (
hf->index == -1) {
588 hf->index = pitch_lag;
592 eng = energy[14] * max_eng;
593 eng = (eng >> 2) + (eng >> 3);
594 ccr = energy[(
hf->index << 1) + 1] * energy[(
hf->index << 1) + 1];
596 eng = energy[(
hf->index << 1) + 1];
601 hf->gain = ((eng << 15) / max_eng * 0x2800 + (1 << 14)) >> 15;
603 hf->index += pitch_lag - 3;
641 int16_t *perf_fir, int16_t *perf_iir,
642 const int16_t *
src, int16_t *dest,
int scale)
650 memcpy(buf_16, perf_fir,
sizeof(int16_t) *
LPC_ORDER);
656 temp -= qnt_lpc[j - 1] * bptr_16[
i - j];
658 buf[
i] =
src[
i] * (1 << 15) +
temp * (1 << 3);
665 fir -= perf_lpc[j - 1] * bptr_16[
i - j];
666 iir += perf_lpc[j +
LPC_ORDER - 1] * dest[
i - j];
683 int16_t *impulse_resp,
const int16_t *buf,
695 int odd_frame =
index & 1;
696 int iter = 3 + odd_frame;
710 for (
i = 0;
i < iter;
i++) {
715 for (k = 0; k <= j; k++)
721 flt_buf[j][0] = (residual[j] + (1 << 1)) >> 2;
723 temp = flt_buf[j + 1][k - 1] * (1 << 15) +
724 residual[j] * impulse_resp[k];
742 for (k = 0; k < j; k++) {
751 for (
i = 0;
i < 20 * iter;
i++)
756 for (
i = 0;
i < 20 * iter;
i++)
761 for (
i = 0;
i < iter;
i++) {
769 for (j = 0, k = 0; j < tbl_size; j++, k += 20) {
771 for (l = 0; l < 20; l++)
772 temp += ccr_buf[20 *
i + l] * cb_tbl[k + l];
784 pitch_lag += acb_lag - 1;
806 for (j = 0; j <=
i; j++)
807 temp -= residual[j] * impulse_resp[
i - j];
820 int16_t *buf,
int pulse_cnt,
int pitch_lag)
829 int amp, err,
max, max_amp_index,
min,
scale,
i, j, k, l;
834 memcpy(impulse_r, impulse_resp,
sizeof(int16_t) *
SUBFRAME_LEN);
842 temp_corr[
i] = impulse_r[
i] >> 1;
882 for (j = max_amp_index; j >= 2; j--) {
884 impulse_corr[0] << 1);
894 for (j = 1; j < 5; j++) {
905 for (k = 1; k < pulse_cnt; k++) {
929 for (k = 0; k < pulse_cnt; k++)
934 for (l = 0; l <= k; l++) {
936 impulse_r[k - l] * 2);
939 temp_corr[k] =
temp >> 14;
953 if (err < optim->min_err) {
959 for (k = 0; k < pulse_cnt; k++) {
975 int16_t *buf,
int pulse_cnt)
984 for (
i = 0; i < SUBFRAME_LEN >> 1;
i++) {
1010 int16_t *buf,
int index)
1026 for (
i = 0;
i < pulse_cnt;
i++)
1108 int16_t *in, *start;
1172 memset(vector, 0,
sizeof(int16_t) *
PITCH_MAX);
1175 flt_in[0] = 1 << 13;
1186 fir, iir, flt_in, vector +
PITCH_MAX, 0);
1229 *got_packet_ptr = 1;