Go to the documentation of this file.
   52 #define LSFQ_MAX                   25681 
   58 #define LSFQ_DIFF_MIN              321 
   61 #define INTERPOL_LEN              11 
   67 #define SHARP_MIN                  3277 
   76 #define SHARP_MAX                  13017 
   81 #define MR_ENERGY 1018156 
   83 #define DECISION_NOISE        0 
   84 #define DECISION_INTERMEDIATE 1 
   85 #define DECISION_VOICE        2 
  111     int16_t  past_quantizer_output_buf[
MA_NP + 1][10];
 
  112     int16_t* past_quantizer_outputs[
MA_NP + 1];
 
  115     int16_t lsp_buf[2][10];     
 
  118     int16_t quant_energy[4];    
 
  121     int16_t syn_filter_data[10];
 
  134     int16_t past_gain_pitch[6];
 
  137     int16_t past_gain_code[2];
 
  168     .fc_indexes_bits   = 13,
 
  178     .fc_indexes_bits   = 9,
 
  187     return 31821 * 
value + 13849;
 
  200                        int16_t ma_predictor,
 
  201                        int16_t vq_1st, int16_t vq_2nd_low, int16_t vq_2nd_high)
 
  204     static const uint8_t min_distance[2]={10, 5}; 
 
  205     int16_t* quantizer_output = past_quantizer_outputs[
MA_NP];
 
  207     for (
i = 0; 
i < 5; 
i++) {
 
  212     for (j = 0; j < 2; j++) {
 
  213         for (
i = 1; 
i < 10; 
i++) {
 
  214             int diff = (quantizer_output[
i - 1] - quantizer_output[
i] + min_distance[j]) >> 1;
 
  216                 quantizer_output[
i - 1] -= 
diff;
 
  217                 quantizer_output[
i    ] += 
diff;
 
  222     for (
i = 0; 
i < 10; 
i++) {
 
  224         for (j = 0; j < 
MA_NP; j++)
 
  241                                       int16_t* past_quantizer_outputs[
MA_NP + 1],
 
  242                                       int ma_predictor_prev)
 
  244     int16_t* quantizer_output = past_quantizer_outputs[
MA_NP];
 
  247     for (
i = 0; 
i < 10; 
i++) {
 
  248         int tmp = lsfq[
i] << 15;
 
  250         for (k = 0; k < 
MA_NP; k++)
 
  268         const int16_t* fc_cur,
 
  278     for (
i = 0; 
i < subframe_size; 
i++) {
 
  280         out[
i] -= (gain_code * fc_cur[
i] + 0x2000) >> 14;
 
  281         out[
i] += (gain_code * fc_new[
i] + 0x2000) >> 14;
 
  294     if ((past_gain_code[0] >> 1) > past_gain_code[1])
 
  297     return FFMAX(past_onset-1, 0);
 
  310     int i, low_gain_pitch_cnt, voice_decision;
 
  312     if (past_gain_pitch[0] >= 14745) {       
 
  314     } 
else if (past_gain_pitch[0] <= 9830) { 
 
  320     for (
i = 0, low_gain_pitch_cnt = 0; 
i < 6; 
i++)
 
  321         if (past_gain_pitch[
i] < 9830)
 
  322             low_gain_pitch_cnt++;
 
  324     if (low_gain_pitch_cnt > 2 && !onset)
 
  327     if (!onset && voice_decision > prev_voice_decision + 1)
 
  333     return voice_decision;
 
  341         res += *v1++ * *v2++;
 
  343     if      (res > INT32_MAX) 
return INT32_MAX;
 
  344     else if (res < INT32_MIN) 
return INT32_MIN;
 
  370         ctx->gain_coeff = 16384; 
 
  372         for (k = 0; k < 
MA_NP + 1; k++) {
 
  373             ctx->past_quantizer_outputs[k] = 
ctx->past_quantizer_output_buf[k];
 
  374             for (
i = 1; 
i < 11; 
i++)
 
  375                 ctx->past_quantizer_outputs[k][
i - 1] = (18717 * 
i) >> 3;
 
  378         ctx->lsp[0] = 
ctx->lsp_buf[0];
 
  379         ctx->lsp[1] = 
ctx->lsp_buf[1];
 
  380         memcpy(
ctx->lsp[0], 
lsp_init, 10 * 
sizeof(int16_t));
 
  387         ctx->rand_value = 21845;
 
  390         for (
i = 0; 
i < 4; 
i++)
 
  391             ctx->quant_energy[
i] = -14336; 
 
  406     int buf_size       = avpkt->
size;
 
  421     int pitch_delay_int[2];      
 
  426     int gain_before, gain_after;
 
  453         out_frame = (int16_t*)
frame->data[
c];
 
  468                                       ctx->ma_predictor_prev);
 
  472                        quantizer_1st, quantizer_2nd_lo, quantizer_2nd_hi);
 
  473             ctx->ma_predictor_prev = ma_predictor;
 
  477         memmove(
ctx->past_quantizer_outputs + 1, 
ctx->past_quantizer_outputs,
 
  478                 MA_NP * 
sizeof(int16_t*));
 
  479         ctx->past_quantizer_outputs[0] = 
tmp;
 
  487         for (
i = 0; 
i < 2; 
i++) {
 
  488             int gain_corr_factor;
 
  498                 bad_pitch = av_parity(ac_index >> 2) == 
get_bits1(&gb);
 
  505                 pitch_delay_3x = 3 * 
ctx->pitch_delay_int_prev;
 
  508                     pitch_delay_3x = 3 * 
ctx->pitch_delay_int_prev;
 
  513                 int pitch_delay_min = av_clip(
ctx->pitch_delay_int_prev - 5,
 
  524             pitch_delay_int[
i]  = (pitch_delay_3x + 1) / 3;
 
  532                 fc_indexes   = av_mod_uintp2(
ctx->rand_value, 
format->fc_indexes_bits);
 
  535                 pulses_signs = 
ctx->rand_value;
 
  540             switch (packet_type) {
 
  544                                                 fc_indexes, pulses_signs, 3, 3);
 
  549                                                 fc_indexes, pulses_signs, 1, 4);
 
  563                                              fc + pitch_delay_int[
i],
 
  569             memmove(
ctx->past_gain_pitch+1, 
ctx->past_gain_pitch, 5 * 
sizeof(int16_t));
 
  570             ctx->past_gain_code[1] = 
ctx->past_gain_code[0];
 
  573                 ctx->past_gain_pitch[0] = (29491 * 
ctx->past_gain_pitch[0]) >> 15; 
 
  574                 ctx->past_gain_code[0]  = ( 2007 * 
ctx->past_gain_code[0] ) >> 11; 
 
  576                 gain_corr_factor = 0;
 
  587                     gain_corr_factor = 
FFMAX(gain_corr_factor, 1024);
 
  588     #ifndef G729_BITEXACT 
  589                     gain_corr_factor >>= 1;
 
  615                     gain_corr_factor >>= 1;
 
  616                     ctx->past_gain_code[0] >>= 1;
 
  626                                  (pitch_delay_3x % 3) << 1,
 
  635             memcpy(synth, 
ctx->syn_filter_data, 10 * 
sizeof(int16_t));
 
  648                     ctx->exc_base[j] >>= 2;
 
  685                 gain_before += 
FFABS(synth[j+10]);
 
  695                     ctx->res_filter_data,
 
  696                     ctx->pos_filter_data,
 
  703                 gain_after += 
FFABS(synth[j+10]);
 
  715                 ctx->pitch_delay_int_prev = pitch_delay_int[
i];
 
  718             memcpy(synth+8, 
ctx->hpf_z, 2*
sizeof(int16_t));
 
  727         ctx->was_periodic = is_periodic;
 
  
int frame_size
Number of samples per channel in an audio frame.
#define G729_8K_BLOCK_SIZE
#define AV_LOG_WARNING
Something somehow does not look correct.
static const int16_t cb_gain_2nd_8k[1<< GC_2ND_IDX_BITS_8K][2]
gain codebook (second stage), 8k mode (3.9.2 of G.729)
static av_cold int init(AVCodecContext *avctx)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static uint16_t g729_prng(uint16_t value)
pseudo random number generator
static const int16_t lsp_init[10]
initial LSP coefficients belongs to virtual frame preceding the first frame of the stream
#define FFSWAP(type, a, b)
#define LSFQ_MIN
minimum quantized LSF value (3.2.4) 0.005 in Q13
static const G729FormatDescription format_g729d_6k4
const int16_t ff_acelp_interp_filter[61]
low-pass Finite Impulse Response filter coefficients.
void ff_acelp_fc_pulse_per_track(int16_t *fc_v, const uint8_t *tab1, const uint8_t *tab2, int pulse_indexes, int pulse_signs, int pulse_count, int bits)
Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR).
void ff_acelp_interpolate(int16_t *out, const int16_t *in, const int16_t *filter_coeffs, int precision, int frac_pos, int filter_length, int length)
Generic FIR interpolation routine.
int16_t was_periodic
whether previous frame was declared as periodic or not (4.4)
This structure describes decoded (raw) audio or video data.
void ff_acelp_high_pass_filter(int16_t *out, int hpf_f[2], const int16_t *in, int length)
high-pass filtering and upscaling (4.2.5 of G.729).
int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, const int16_t *in, int buffer_length, int filter_length, int stop_on_overflow, int shift, int rounder)
LP synthesis filter.
av_cold void ff_audiodsp_init(AudioDSPContext *c)
G729ChannelContext * channel_context
#define MR_ENERGY
MR_ENERGY (mean removed energy) = mean_energy + 10 * log10(2^26  * subframe_size) in (7....
#define fc(width, name, range_min, range_max)
static const int16_t cb_gain_1st_6k4[1<< GC_1ST_IDX_BITS_6K4][2]
gain codebook (first stage), 6.4k mode (D.3.9.2 of G.729)
int ff_acelp_decode_4bit_to_2nd_delay3(int ac_index, int pitch_delay_min)
Decode pitch delay with 1/3 precision.
#define MA_NP
Moving Average (MA) prediction order.
int ff_acelp_decode_8bit_to_1st_delay3(int ac_index)
Decode pitch delay of the first subframe encoded by 8 bits with 1/3 resolution.
static av_cold int decode_close(AVCodecContext *avctx)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define LSFQ_DIFF_MIN
minimum LSF distance (3.2.4) 0.0391 in Q13
static const G729FormatDescription format_g729_8k
#define GC_1ST_IDX_BITS_8K
gain codebook (first stage) index, 8k mode (size in bits)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int32_t scalarproduct_int16_c(const int16_t *v1, const int16_t *v2, int order)
void ff_g729_postfilter(AudioDSPContext *adsp, int16_t *ht_prev_data, int *voicing, const int16_t *lp_filter_coeffs, int pitch_delay_int, int16_t *residual, int16_t *res_filter_data, int16_t *pos_filter_data, int16_t *speech, int subframe_size)
Signal postfiltering (4.2)
int16_t voice_decision
voice decision on previous subframe (0-noise, 1-intermediate, 2-voice), G.729D
static void g729d_get_new_exc(int16_t *out, const int16_t *in, const int16_t *fc_cur, int dstate, int gain_code, int subframe_size)
Constructs new excitation signal and applies phase filter to it.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
int ff_acelp_decode_5_6_bit_to_2nd_delay3(int ac_index, int pitch_delay_min)
Decode pitch delay of the second subframe encoded by 5 or 6 bits with 1/3 precision.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
#define VQ_2ND_BITS
second stage vector of quantizer (size in bits)
#define RES_PREV_DATA_SIZE
Amount of past residual signal data stored in buffer.
void ff_acelp_reorder_lsf(int16_t *lsfq, int lsfq_min_distance, int lsfq_min, int lsfq_max, int lp_order)
(I.F) means fixed-point value with F fractional and I integer bits
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
const uint8_t ff_fc_2pulses_9bits_track2_gray[32]
static const int16_t cb_ma_predictor_sum[2][10]
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static int16_t g729d_voice_decision(int onset, int prev_voice_decision, const int16_t *past_gain_pitch)
Makes decision about voice presence in current subframe.
static const int16_t cb_ma_predictor_sum_inv[2][10]
#define DECISION_INTERMEDIATE
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static unsigned int get_bits1(GetBitContext *s)
static const int16_t cb_lsp_1st[1<< VQ_1ST_BITS][10]
first stage LSP codebook (10-dimensional, with 128 entries (3.24 of G.729)
int16_t ff_g729_adaptive_gain_control(int gain_before, int gain_after, int16_t *speech, int subframe_size, int16_t gain_prev)
Adaptive gain control (4.2.4)
void ff_celp_convolve_circ(int16_t *fc_out, const int16_t *fc_in, const int16_t *filter, int len)
Circularly convolve fixed vector with a phase dispersion impulse response filter (D....
int16_t * exc
start of past excitation data in buffer
void ff_acelp_update_past_gain(int16_t *quant_energy, int gain_corr_factor, int log2_ma_pred_order, int erasure)
Update past quantized energies.
const uint8_t ff_fc_4pulses_8bits_tracks_13[16]
#define GC_2ND_IDX_BITS_8K
gain codebook (second stage) index, 8k mode (size in bits)
static void lsf_decode(int16_t *lsfq, int16_t *past_quantizer_outputs[MA_NP+1], int16_t ma_predictor, int16_t vq_1st, int16_t vq_2nd_low, int16_t vq_2nd_high)
Decodes LSF (Line Spectral Frequencies) from L0-L3 (3.2.4).
void ff_acelp_lp_decode(int16_t *lp_1st, int16_t *lp_2nd, const int16_t *lsp_2nd, const int16_t *lsp_prev, int lp_order)
Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3....
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static const int16_t cb_ma_predictor[2][MA_NP][10]
4th order Moving Average (MA) Predictor codebook (3.2.4 of G.729)
static const uint16_t ma_prediction_coeff[4]
MA prediction coefficients (3.9.1 of G.729, near Equation 69)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define INTERPOL_LEN
interpolation filter length
enum AVSampleFormat sample_fmt
audio sample format
static av_cold int decoder_init(AVCodecContext *avctx)
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
int channels
number of audio channels
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
int16_t ht_prev_data
previous data for 4.2.3, equation 86
static void lsf_restore_from_previous(int16_t *lsfq, int16_t *past_quantizer_outputs[MA_NP+1], int ma_predictor_prev)
Restores past LSP quantizer output using LSF from previous frame.
uint16_t rand_value
random number generator value (4.4.4)
#define i(width, name, range_min, range_max)
#define LSFQ_MAX
maximum quantized LSF value (3.2.4) 3.135 in Q13
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
#define VQ_1ST_BITS
first stage vector of quantizer (size in bits)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
static const int16_t cb_gain_2nd_6k4[1<< GC_2ND_IDX_BITS_6K4][2]
gain codebook (second stage), 6.4k mode (D.3.9.2 of G.729)
#define SHARP_MIN
minimum gain pitch value (3.8, Equation 47) 0.2 in (1.14)
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
main external API structure.
const uint8_t ff_fc_2pulses_9bits_track1_gray[16]
static void frame_erasure(EVRCContext *e, float *samples)
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.
int gain_coeff
(1.14) gain coefficient (4.2.4)
static int g729d_onset_decision(int past_onset, const int16_t *past_gain_code)
Makes decision about onset in current subframe.
static const int16_t phase_filter[3][40]
additional "phase" post-processing filter impulse response (D.6.2 of G.729)
int16_t onset
detected onset level (0-2)
#define AV_CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time,...
static av_always_inline int diff(const uint32_t a, const uint32_t b)
This structure stores compressed data.
int ma_predictor_prev
switched MA predictor of LSP quantizer from last good frame
void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order)
Convert LSF to LSP.
int16_t ff_acelp_decode_gain_code(AudioDSPContext *adsp, int gain_corr_factor, const int16_t *fc_v, int mr_energy, const int16_t *quant_energy, const int16_t *ma_prediction_coeff, int subframe_size, int ma_pred_order)
Decode the adaptive codebook gain and add correction (4.1.5 and 3.9.1 of G.729).
const uint8_t ff_fc_4pulses_8bits_track_4[32]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define G729D_6K4_BLOCK_SIZE
#define SHARP_MAX
maximum gain pitch value (3.8, Equation 47) (EE) This does not comply with the specification.
static const int16_t cb_gain_1st_8k[1<< GC_1ST_IDX_BITS_8K][2]
gain codebook (first stage), 8k mode (3.9.2 of G.729)
#define GC_2ND_IDX_BITS_6K4
gain codebook (second stage) index, 6.4k mode (size in bits)
static const int16_t cb_lsp_2nd[1<< VQ_2ND_BITS][10]
second stage LSP codebook, high and low parts (both 5-dimensional, with 32 entries (3....
#define GC_1ST_IDX_BITS_6K4
gain codebook (first stage) index, 6.4k mode (size in bits)
int pitch_delay_int_prev
integer part of previous subframe's pitch delay (4.1.3)