X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fg723_1enc.c;h=2fb4b7fc823b955b19260a2e83590ede9993babe;hb=a247ac640df3da573cd661065bf53f37863e2b46;hp=592840566e92c350828eb1c805b2e57fd787c5c8;hpb=5c363d3e595a9e5b7c42897b7aab91b91b154ac1;p=ffmpeg diff --git a/libavcodec/g723_1enc.c b/libavcodec/g723_1enc.c index 592840566e9..2fb4b7fc823 100644 --- a/libavcodec/g723_1enc.c +++ b/libavcodec/g723_1enc.c @@ -40,6 +40,54 @@ #define BITSTREAM_WRITER_LE #include "put_bits.h" +/** + * Hamming window coefficients scaled by 2^15 + */ +static const int16_t hamming_window[LPC_FRAME] = { + 2621, 2631, 2659, 2705, 2770, 2853, 2955, 3074, 3212, 3367, + 3541, 3731, 3939, 4164, 4405, 4663, 4937, 5226, 5531, 5851, + 6186, 6534, 6897, 7273, 7661, 8062, 8475, 8899, 9334, 9780, + 10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673, + 15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935, + 20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924, + 25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031, + 29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756, + 31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766, + 32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938, + 31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373, + 29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384, + 24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457, + 19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193, + 14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235, + 9780, 9334, 8899, 8475, 8062, 7661, 7273, 6897, 6534, 6186, + 5851, 5531, 5226, 4937, 4663, 4405, 4164, 3939, 3731, 3541, + 3367, 3212, 3074, 2955, 2853, 2770, 2705, 2659, 2631, 2621 +}; + +/** + * Binomial window coefficients scaled by 2^15 + */ +static const int16_t binomial_window[LPC_ORDER] = { + 32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995 +}; + +/** + * 0.994^i scaled by 2^15 + */ +static const int16_t bandwidth_expand[LPC_ORDER] = { + 32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854 +}; + +/** + * 0.5^i scaled by 2^15 + */ +static const int16_t percept_flt_tbl[2][LPC_ORDER] = { + /* Zero part */ + {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425}, + /* Pole part */ + {16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32} +}; + static av_cold int g723_1_encode_init(AVCodecContext *avctx) { G723_1_Context *s = avctx->priv_data; @@ -242,14 +290,14 @@ static void lpc2lsp(int16_t *lpc, int16_t *prev_lsp, int16_t *lsp) p = 0; temp = 0; for (i = 0; i <= LPC_ORDER / 2; i++) - temp += f[2 * i] * cos_tab[0]; + temp += f[2 * i] * G723_1_COS_TAB_FIRST_ELEMENT; prev_val = av_clipl_int32(temp << 1); count = 0; for (i = 1; i < COS_TBL_SIZE / 2; i++) { /* Evaluate */ temp = 0; for (j = 0; j <= LPC_ORDER / 2; j++) - temp += f[LPC_ORDER - 2 * j + p] * cos_tab[i * j % COS_TBL_SIZE]; + temp += f[LPC_ORDER - 2 * j + p] * ff_g723_1_cos_tab[i * j % COS_TBL_SIZE]; cur_val = av_clipl_int32(temp << 1); /* Check for sign change, indicating a zero crossing */ @@ -273,7 +321,7 @@ static void lpc2lsp(int16_t *lpc, int16_t *prev_lsp, int16_t *lsp) temp = 0; for (j = 0; j <= LPC_ORDER / 2; j++) temp += f[LPC_ORDER - 2 * j + p] * - cos_tab[i * j % COS_TBL_SIZE]; + ff_g723_1_cos_tab[i * j % COS_TBL_SIZE]; cur_val = av_clipl_int32(temp << 1); } prev_val = cur_val; @@ -298,11 +346,11 @@ static void lpc2lsp(int16_t *lpc, int16_t *prev_lsp, int16_t *lsp) \ for (i = 0; i < LSP_CB_SIZE; i++) { \ for (j = 0; j < size; j++){ \ - temp[j] = (weight[j + (offset)] * lsp_band##num[i][j] + \ + temp[j] = (weight[j + (offset)] * ff_g723_1_lsp_band##num[i][j] + \ (1 << 14)) >> 15; \ } \ error = ff_g723_1_dot_product(lsp + (offset), temp, size) << 1; \ - error -= ff_g723_1_dot_product(lsp_band##num[i], temp, size); \ + error -= ff_g723_1_dot_product(ff_g723_1_lsp_band##num[i], temp, size); \ if (error > max) { \ max = error; \ lsp_index[num] = i; \ @@ -642,7 +690,7 @@ static void acb_search(G723_1_ChannelContext *p, int16_t *residual, { int16_t flt_buf[PITCH_ORDER][SUBFRAME_LEN]; - const int16_t *cb_tbl = adaptive_cb_gain85; + const int16_t *cb_tbl = ff_g723_1_adaptive_cb_gain85; int ccr_buf[PITCH_ORDER * SUBFRAMES << 2]; @@ -720,7 +768,7 @@ static void acb_search(G723_1_ChannelContext *p, int16_t *residual, /* Select quantization table */ if (!odd_frame && pitch_lag + i - 1 >= SUBFRAME_LEN - 2 || odd_frame && pitch_lag >= SUBFRAME_LEN - 2) { - cb_tbl = adaptive_cb_gain170; + cb_tbl = ff_g723_1_adaptive_cb_gain170; tbl_size = 170; } @@ -838,7 +886,7 @@ static void get_fcb_param(FCBParam *optim, int16_t *impulse_resp, min = 1 << 30; max_amp_index = GAIN_LEVELS - 2; for (j = max_amp_index; j >= 2; j--) { - temp = av_clipl_int32((int64_t) fixed_cb_gain[j] * + temp = av_clipl_int32((int64_t) ff_g723_1_fixed_cb_gain[j] * impulse_corr[0] << 1); temp = FFABS(temp - amp); if (temp < min) { @@ -855,7 +903,7 @@ static void get_fcb_param(FCBParam *optim, int16_t *impulse_resp, ccr2[k] = ccr1[k]; } param.amp_index = max_amp_index + j - 2; - amp = fixed_cb_gain[param.amp_index]; + amp = ff_g723_1_fixed_cb_gain[param.amp_index]; param.pulse_sign[0] = (ccr2[param.pulse_pos[0]] < 0) ? -amp : amp; temp_corr[param.pulse_pos[0]] = 1; @@ -942,7 +990,7 @@ static void pack_fcb_param(G723_1_Subframe *subfrm, FCBParam *optim, for (i = 0; i < SUBFRAME_LEN >> 1; i++) { int val = buf[optim->grid_index + (i << 1)]; if (!val) { - subfrm->pulse_pos += combinatorial_table[j][i]; + subfrm->pulse_pos += ff_g723_1_combinatorial_table[j][i]; } else { subfrm->pulse_sign <<= 1; if (val < 0) @@ -1030,7 +1078,7 @@ static int pack_bitstream(G723_1_ChannelContext *p, AVPacket *avpkt) put_bits(&pb, 1, p->subframe[3].grid_index); if (p->cur_rate == RATE_6300) { - skip_put_bits(&pb, 1); /* reserved bit */ + put_bits(&pb, 1, 0); /* reserved bit */ /* Write 13 bit combined position index */ temp = (p->subframe[0].pulse_pos >> 16) * 810 + @@ -1196,7 +1244,7 @@ static const AVCodecDefault defaults[] = { { NULL }, }; -AVCodec ff_g723_1_encoder = { +const AVCodec ff_g723_1_encoder = { .name = "g723_1", .long_name = NULL_IF_CONFIG_SMALL("G.723.1"), .type = AVMEDIA_TYPE_AUDIO,