#include "avcodec.h"
#include "get_bits.h"
#include "acelp_vectors.h"
#include "celp_filters.h"
#include "celp_math.h"
#include "lsp.h"
#include "libavutil/lzo.h"
#include "g723_1_data.h"
Go to the source code of this file.
Data Structures | |
| struct | g723_1_context |
Defines | |
| #define | ALT_BITSTREAM_READER_LE |
| #define | normalize_bits_int16(num) normalize_bits(num, 0) |
| #define | normalize_bits_int32(num) normalize_bits(num, 1) |
| #define | dot_product(a, b, c, d) (ff_dot_product(a,b,c)<<(d)) |
| #define | MULL2(a, b) MULL(a,b,15) |
| Bitexact implementation of 2ab scaled by 1/2^16. | |
| #define | iir_filter(fir_coef, iir_coef, src, dest, width) |
| Perform IIR filtering. | |
Typedefs | |
| typedef struct g723_1_context | G723_1_Context |
Functions | |
| static av_cold int | g723_1_decode_init (AVCodecContext *avctx) |
| static int | unpack_bitstream (G723_1_Context *p, const uint8_t *buf, int buf_size) |
| Unpack the frame into parameters. | |
| static int16_t | square_root (int val) |
| Bitexact implementation of sqrt(val/2). | |
| static int | normalize_bits (int num, int width) |
| Calculate the number of left-shifts required for normalizing the input. | |
| static int | scale_vector (int16_t *vector, int length) |
| Scale vector contents based on the largest of their absolutes. | |
| static void | inverse_quant (int16_t *cur_lsp, int16_t *prev_lsp, uint8_t *lsp_index, int bad_frame) |
| Perform inverse quantization of LSP frequencies. | |
| static void | lsp2lpc (int16_t *lpc) |
| Convert LSP frequencies to LPC coefficients. | |
| static void | 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 void | gen_dirac_train (int16_t *buf, int pitch_lag) |
| Generate a train of dirac functions with period as pitch lag. | |
| static void | gen_fcb_excitation (int16_t *vector, G723_1_Subframe subfrm, Rate cur_rate, int pitch_lag, int index) |
| Generate fixed codebook excitation vector. | |
| static void | get_residual (int16_t *residual, int16_t *prev_excitation, int lag) |
| Get delayed contribution from the previous excitation vector. | |
| static void | gen_acb_excitation (int16_t *vector, int16_t *prev_excitation, int pitch_lag, G723_1_Subframe subfrm, Rate cur_rate) |
| Generate adaptive codebook excitation. | |
| static int | autocorr_max (G723_1_Context *p, int offset, int *ccr_max, int pitch_lag, int length, int dir) |
| Estimate maximum auto-correlation around pitch lag. | |
| static void | comp_ppf_gains (int lag, PPFParam *ppf, Rate cur_rate, int tgt_eng, int ccr, int res_eng) |
| Calculate pitch postfilter optimal and scaling gains. | |
| static void | comp_ppf_coeff (G723_1_Context *p, int offset, int pitch_lag, PPFParam *ppf, Rate cur_rate) |
| Calculate pitch postfilter parameters. | |
| static int | comp_interp_index (G723_1_Context *p, int pitch_lag, int *exc_eng, int *scale) |
| Classify frames as voiced/unvoiced. | |
| static void | residual_interp (int16_t *buf, int16_t *out, int lag, int gain, int *rseed) |
| Peform residual interpolation based on frame classification. | |
| static void | gain_scale (G723_1_Context *p, int16_t *buf, int energy) |
| Adjust gain of postfiltered signal. | |
| static void | formant_postfilter (G723_1_Context *p, int16_t *lpc, int16_t *buf) |
| Perform formant filtering. | |
| static int | g723_1_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) |
Variables | |
| AVCodec | ff_g723_1_decoder |
Definition in file g723_1.c.
| #define iir_filter | ( | fir_coef, | |||
| iir_coef, | |||||
| src, | |||||
| dest, | |||||
| width | ) |
Value:
{\
int m, n;\
int res_shift = 16 & ~-(width);\
int in_shift = 16 - res_shift;\
\
for (m = 0; m < SUBFRAME_LEN; m++) {\
int64_t filter = 0;\
for (n = 1; n <= LPC_ORDER; n++) {\
filter -= (fir_coef)[n - 1] * (src)[m - n] -\
(iir_coef)[n - 1] * ((dest)[m - n] >> in_shift);\
}\
\
(dest)[m] = av_clipl_int32(((src)[m] << 16) + (filter << 3) +\
(1 << 15)) >> res_shift;\
}\
}
| fir_coef | FIR coefficients | |
| iir_coef | IIR coefficients | |
| src | source vector | |
| dest | destination vector | |
| width | width of the output, 16 bits(0) / 32 bits(1) |
Definition at line 818 of file g723_1.c.
Referenced by formant_postfilter(), and psy_3gpp_window().
| #define MULL2 | ( | a, | |||
| b | ) | MULL(a,b,15) |
| #define normalize_bits_int16 | ( | num | ) | normalize_bits(num, 0) |
| #define normalize_bits_int32 | ( | num | ) | normalize_bits(num, 1) |
| typedef struct g723_1_context G723_1_Context |
| static int autocorr_max | ( | G723_1_Context * | p, | |
| int | offset, | |||
| int * | ccr_max, | |||
| int | pitch_lag, | |||
| int | length, | |||
| int | dir | |||
| ) | [static] |
Estimate maximum auto-correlation around pitch lag.
| p | the context | |
| offset | offset of the excitation vector | |
| ccr_max | pointer to the maximum auto-correlation | |
| pitch_lag | decoded pitch lag | |
| length | length of autocorrelation | |
| dir | forward lag(1) / backward lag(-1) |
Definition at line 579 of file g723_1.c.
Referenced by comp_interp_index(), and comp_ppf_coeff().
| static int comp_interp_index | ( | G723_1_Context * | p, | |
| int | pitch_lag, | |||
| int * | exc_eng, | |||
| int * | scale | |||
| ) | [static] |
Classify frames as voiced/unvoiced.
| p | the context | |
| pitch_lag | decoded pitch_lag | |
| exc_eng | excitation energy estimation | |
| scale | scaling factor of exc_eng |
Definition at line 744 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static void comp_ppf_coeff | ( | G723_1_Context * | p, | |
| int | offset, | |||
| int | pitch_lag, | |||
| PPFParam * | ppf, | |||
| Rate | cur_rate | |||
| ) | [static] |
Calculate pitch postfilter parameters.
| p | the context | |
| offset | offset of the excitation vector | |
| pitch_lag | decoded pitch lag | |
| ppf | pitch postfilter parameters | |
| cur_rate | current bitrate |
Definition at line 658 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static void comp_ppf_gains | ( | int | lag, | |
| PPFParam * | ppf, | |||
| Rate | cur_rate, | |||
| int | tgt_eng, | |||
| int | ccr, | |||
| int | res_eng | |||
| ) | [static] |
Calculate pitch postfilter optimal and scaling gains.
| lag | pitch postfilter forward/backward lag | |
| ppf | pitch postfilter parameters | |
| cur_rate | current bitrate | |
| tgt_eng | target energy | |
| ccr | cross-correlation | |
| res_eng | residual energy |
Definition at line 610 of file g723_1.c.
Referenced by comp_ppf_coeff().
| static void formant_postfilter | ( | G723_1_Context * | p, | |
| int16_t * | lpc, | |||
| int16_t * | buf | |||
| ) | [static] |
Perform formant filtering.
| p | the context | |
| lpc | quantized lpc coefficients | |
| buf | output buffer |
Definition at line 885 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static int g723_1_decode_frame | ( | AVCodecContext * | avctx, | |
| void * | data, | |||
| int * | got_frame_ptr, | |||
| AVPacket * | avpkt | |||
| ) | [static] |
| static av_cold int g723_1_decode_init | ( | AVCodecContext * | avctx | ) | [static] |
| static void gain_scale | ( | G723_1_Context * | p, | |
| int16_t * | buf, | |||
| int | energy | |||
| ) | [static] |
Adjust gain of postfiltered signal.
| p | the context | |
| buf | postfiltered output vector | |
| energy | input energy coefficient |
Definition at line 843 of file g723_1.c.
Referenced by formant_postfilter().
| static void gen_acb_excitation | ( | int16_t * | vector, | |
| int16_t * | prev_excitation, | |||
| int | pitch_lag, | |||
| G723_1_Subframe | subfrm, | |||
| Rate | cur_rate | |||
| ) | [static] |
Generate adaptive codebook excitation.
Definition at line 542 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static void gen_dirac_train | ( | int16_t * | buf, | |
| int | pitch_lag | |||
| ) | [static] |
Generate a train of dirac functions with period as pitch lag.
Definition at line 445 of file g723_1.c.
Referenced by gen_fcb_excitation().
| static void gen_fcb_excitation | ( | int16_t * | vector, | |
| G723_1_Subframe | subfrm, | |||
| Rate | cur_rate, | |||
| int | pitch_lag, | |||
| int | index | |||
| ) | [static] |
Generate fixed codebook excitation vector.
| vector | decoded excitation vector | |
| subfrm | current subframe | |
| cur_rate | current bitrate | |
| pitch_lag | closed loop pitch lag | |
| index | current subframe index |
Definition at line 466 of file g723_1.c.
Referenced by g723_1_decode_frame().
Get delayed contribution from the previous excitation vector.
Definition at line 526 of file g723_1.c.
Referenced by gen_acb_excitation().
| static void inverse_quant | ( | int16_t * | cur_lsp, | |
| int16_t * | prev_lsp, | |||
| uint8_t * | lsp_index, | |||
| int | bad_frame | |||
| ) | [static] |
Perform inverse quantization of LSP frequencies.
| cur_lsp | the current LSP vector | |
| prev_lsp | the previous LSP vector | |
| lsp_index | VQ indices | |
| bad_frame | bad frame flag |
Definition at line 276 of file g723_1.c.
Referenced by g723_1_decode_frame(), and g726_decode().
| static void lsp2lpc | ( | int16_t * | lpc | ) | [static] |
Convert LSP frequencies to LPC coefficients.
| lpc | buffer for LPC coefficients |
Definition at line 352 of file g723_1.c.
Referenced by lsp_interpolate().
Quantize LSP frequencies by interpolation and convert them to the corresponding LPC coefficients.
| lpc | buffer for LPC coefficients | |
| cur_lsp | the current LSP vector | |
| prev_lsp | the previous LSP vector |
Definition at line 422 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static int normalize_bits | ( | int | num, | |
| int | width | |||
| ) | [static] |
Calculate the number of left-shifts required for normalizing the input.
| num | input number | |
| width | width of the input, 16 bits(0) / 32 bits(1) |
Definition at line 223 of file g723_1.c.
Referenced by comp_ppf_coeff(), gain_scale(), and scale_vector().
| static void residual_interp | ( | int16_t * | buf, | |
| int16_t * | out, | |||
| int | lag, | |||
| int | gain, | |||
| int * | rseed | |||
| ) | [static] |
Peform residual interpolation based on frame classification.
| buf | decoded excitation vector | |
| out | output vector | |
| lag | decoded pitch lag | |
| gain | interpolated gain | |
| rseed | seed for random number generator |
Definition at line 788 of file g723_1.c.
Referenced by g723_1_decode_frame().
| static int scale_vector | ( | int16_t * | vector, | |
| int | length | |||
| ) | [static] |
Scale vector contents based on the largest of their absolutes.
Definition at line 246 of file g723_1.c.
Referenced by comp_interp_index(), and formant_postfilter().
| static int16_t square_root | ( | int | val | ) | [static] |
Bitexact implementation of sqrt(val/2).
Definition at line 212 of file g723_1.c.
Referenced by comp_ppf_gains(), and gain_scale().
| static int unpack_bitstream | ( | G723_1_Context * | p, | |
| const uint8_t * | buf, | |||
| int | buf_size | |||
| ) | [static] |
Initial value:
{
.name = "g723_1",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_G723_1,
.priv_data_size = sizeof(G723_1_Context),
.init = g723_1_decode_init,
.decode = g723_1_decode_frame,
.long_name = NULL_IF_CONFIG_SMALL("G.723.1"),
.capabilities = CODEC_CAP_SUBFRAMES,
}
1.5.8