Go to the documentation of this file.
36 ac_index = 3 * ac_index - 510;
45 return 3 * (ac_index + pitch_delay_min);
46 else if(ac_index < 12)
47 return 3 * pitch_delay_min + ac_index + 6;
49 return 3 * (ac_index + pitch_delay_min) - 18;
56 return 3 * pitch_delay_min + ac_index - 2;
62 return ac_index + 105;
64 return 6 * (ac_index - 368);
70 return 6 * pitch_delay_min + ac_index - 3;
74 int16_t* quant_energy,
76 int log2_ma_pred_order,
80 int avg_gain=quant_energy[(1 << log2_ma_pred_order) - 1];
82 for(
i=(1 << log2_ma_pred_order) - 1;
i>0;
i--)
84 avg_gain += quant_energy[
i-1];
85 quant_energy[
i] = quant_energy[
i-1];
89 quant_energy[0] =
FFMAX(avg_gain >> log2_ma_pred_order, -10240) - 4096;
91 quant_energy[0] = (6165 * ((
ff_log2_q15(gain_corr_factor) >> 2) - (13 << 13))) >> 13;
99 const int16_t* quant_energy,
108 for(
i=0;
i<ma_pred_order;
i++)
112 mr_energy += (((-6165LL *
ff_log2(dsp->scalarproduct_int16(fc_v, fc_v, subframe_size, 0))) >> 3) & ~0x3ff);
114 mr_energy = (5439 * (mr_energy >> 15)) >> 8;
117 ((
ff_exp2(mr_energy & 0x7fff) + 16) >> 5) * (gain_corr_factor >> 1),
118 (mr_energy >> 15) - 25
121 mr_energy = gain_corr_factor *
ff_exp10((
double)mr_energy / (20 << 23)) /
123 return mr_energy >> 12;
129 const float *pred_table)
134 float val = fixed_gain_factor *
138 sqrtf(fixed_mean_energy ? fixed_mean_energy : 1.0);
141 memmove(&prediction_error[0], &prediction_error[1],
142 3 *
sizeof(prediction_error[0]));
143 prediction_error[3] = 20.0 *
log10f(fixed_gain_factor);
149 const int prev_lag_int,
const int subframe,
153 if (subframe == 0 || (subframe == 2 && third_as_first)) {
155 if (pitch_index < 197)
158 pitch_index = 3 * pitch_index - 335;
166 if (pitch_index < 4) {
168 pitch_index = 3 * (pitch_index + search_range_min) + 1;
169 }
else if (pitch_index < 12) {
171 pitch_index += 3 * search_range_min + 7;
174 pitch_index = 3 * (pitch_index + search_range_min - 6) + 1;
188 *lag_int = pitch_index * 10923 >> 15;
189 *lag_frac = pitch_index - 3 * *lag_int - 1;
static av_always_inline double ff_exp10(double x)
Compute 10^x for floating point values.
float ff_amr_set_fixed_gain(float fixed_gain_factor, float fixed_mean_energy, float *prediction_error, float energy_mean, const float *pred_table)
Calculate fixed gain (part of section 6.1.3 of AMR spec)
void ff_decode_pitch_lag(int *lag_int, int *lag_frac, int pitch_index, const int prev_lag_int, const int subframe, int third_as_first, int resolution)
Decode the adaptive codebook index to the integer and fractional parts of the pitch lag for one subfr...
int ff_acelp_decode_6bit_to_2nd_delay6(int ac_index, int pitch_delay_min)
Decode pitch delay of the second subframe encoded by 6 bits with 1/6 precision.
int ff_acelp_decode_9bit_to_1st_delay6(int ac_index)
Decode pitch delay of the first subframe encoded by 9 bits with 1/6 precision.
int ff_acelp_decode_4bit_to_2nd_delay3(int ac_index, int pitch_delay_min)
Decode pitch delay with 1/3 precision.
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.
The official guide to swscale for confused that consecutive non overlapping rectangles of slice_bottom special converter These generally are unscaled converters of common like for each output line the vertical scaler pulls lines from a ring buffer When the ring buffer does not contain the wanted then it is pulled from the input slice through the input converter and horizontal scaler The result is also stored in the ring buffer to serve future vertical scaler requests When no more output can be generated because lines from a future slice would be then all remaining lines in the current slice are horizontally scaled and put in the ring buffer[This is done for luma and chroma, each with possibly different numbers of lines per picture.] Input to YUV Converter When the input to the main path is not planar bits per component YUV or bit it is converted to planar bit YUV Two sets of converters exist for this the other leaves the full chroma resolution
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.
int ff_log2_q15(uint32_t value)
Calculate log2(x).
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.
static const uint16_t ma_prediction_coeff[4]
MA prediction coefficients (3.9.1 of G.729, near Equation 69)
const char const char void * val
int32_t(* scalarproduct_int16)(const int16_t *v1, const int16_t *v2, int len)
Calculate scalar product of two vectors.
#define i(width, name, range_min, range_max)
static const float energy_mean[8]
desired mean innovation energy, indexed by active mode
int ff_exp2(uint16_t power)
fixed-point implementation of exp2(x) in [0; 1] domain.
float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
Return the scalar product of two vectors.
static int bidir_sal(int value, int offset)
Shift value left or right depending on sign of offset parameter.
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).