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++) {
209 quantizer_output[i + 5] =
cb_lsp_1st[vq_1st][i + 5] + cb_lsp_2nd[vq_2nd_high][i + 5];
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++)
225 sum += past_quantizer_outputs[j][i] *
cb_ma_predictor[ma_predictor][j][i];
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++)
251 tmp -= past_quantizer_outputs[k][i] *
cb_ma_predictor[ma_predictor_prev][k][i];
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;
369 for (c = 0; c < avctx->
channels; c++) {
372 for (k = 0; k <
MA_NP + 1; k++) {
374 for (i = 1; i < 11; i++)
380 memcpy(ctx->
lsp[0],
lsp_init, 10 *
sizeof(int16_t));
390 for (i = 0; i < 4; i++)
406 int buf_size = avpkt->
size;
421 int pitch_delay_int[2];
426 int gain_before, gain_after;
449 for (c = 0; c < avctx->
channels; c++) {
453 out_frame = (int16_t*)frame->
data[c];
455 if (*buf != ((avctx->
channels - 1 - c) * 0x80 | 2))
461 frame_erasure |= buf[i];
477 quantizer_1st, quantizer_2nd_lo, quantizer_2nd_hi);
483 MA_NP *
sizeof(int16_t*));
492 for (i = 0; i < 2; i++) {
493 int gain_corr_factor;
529 pitch_delay_int[
i] = (pitch_delay_3x + 1) / 3;
545 switch (packet_type) {
549 fc_indexes, pulses_signs, 3, 3);
554 fc_indexes, pulses_signs, 1, 4);
566 if (SUBFRAME_SIZE > pitch_delay_int[i])
568 fc + pitch_delay_int[i],
572 SUBFRAME_SIZE - pitch_delay_int[i]);
581 gain_corr_factor = 0;
587 cb_gain_2nd_6k4[gc_2nd_index][1];
592 gain_corr_factor =
FFMAX(gain_corr_factor, 1024);
593 #ifndef G729_BITEXACT 594 gain_corr_factor >>= 1;
600 cb_gain_2nd_8k[gc_2nd_index][1];
620 gain_corr_factor >>= 1;
629 ctx->
exc + i * SUBFRAME_SIZE - pitch_delay_3x / 3,
631 (pitch_delay_3x % 3) << 1,
635 ctx->
exc + i * SUBFRAME_SIZE, fc,
638 1 << 13, 14, SUBFRAME_SIZE);
645 ctx->
exc + i * SUBFRAME_SIZE,
677 ctx->
exc + i * SUBFRAME_SIZE,
685 memcpy(ctx->
syn_filter_data, synth+SUBFRAME_SIZE, 10 *
sizeof(int16_t));
690 gain_before +=
FFABS(synth[j+10]);
708 gain_after +=
FFABS(synth[j+10]);
723 memcpy(synth+8, ctx->
hpf_z, 2*
sizeof(int16_t));
725 out_frame + i*SUBFRAME_SIZE,
729 memcpy(ctx->
hpf_z, synth+8+SUBFRAME_SIZE, 2*
sizeof(int16_t));
766 .
name =
"acelp.kelvin",
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).
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).
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static const int16_t cb_ma_predictor[2][MA_NP][10]
4th order Moving Average (MA) Predictor codebook (3.2.4 of G.729)
int16_t lsp_buf[2][10]
(0.15) LSP coefficients (previous and current frames) (3.2.5)
#define LSFQ_MIN
minimum quantized LSF value (3.2.4) 0.005 in Q13
This structure describes decoded (raw) audio or video data.
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)
ptrdiff_t const GLvoid * data
void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order)
Convert LSF to LSP.
#define GC_2ND_IDX_BITS_8K
gain codebook (second stage) index, 8k mode (size in bits)
static const uint16_t ma_prediction_coeff[4]
MA prediction coefficients (3.9.1 of G.729, near Equation 69)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
AVCodec ff_acelp_kelvin_decoder
static av_cold int init(AVCodecContext *avctx)
const int16_t ff_acelp_interp_filter[61]
low-pass Finite Impulse Response filter coefficients.
int16_t lsfq[10]
(2.13) quantized LSF coefficients from previous frame
#define MR_ENERGY
MR_ENERGY (mean removed energy) = mean_energy + 10 * log10(2^26 * subframe_size) in (7...
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.
#define avpriv_request_sample(...)
const uint8_t ff_fc_2pulses_9bits_track1_gray[16]
Track|Pulse| Positions 1 | 0 | 1, 6, 11, 16, 21, 26, 31, 36 | | 3, 8, 13, 18, 23, 28...
int pitch_delay_int_prev
integer part of previous subframe's pitch delay (4.1.3)
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
Convenience header that includes libavutil's core.
static const G729FormatDescription format_g729_8k
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int16_t quant_energy[4]
(5.10) past quantized energy
#define LSFQ_DIFF_MIN
minimum LSF distance (3.2.4) 0.0391 in Q13
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
uint16_t rand_value
random number generator value (4.4.4)
static 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.
static int ff_acelp_decode_4bit_to_2nd_delay3(int ac_index, int pitch_delay_min)
Decode pitch delay with 1/3 precision.
int16_t ht_prev_data
previous data for 4.2.3, equation 86
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static int32_t scalarproduct_int16_c(const int16_t *v1, const int16_t *v2, int order)
int16_t * lsp[2]
pointers to lsp_buf
static 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.
enum AVSampleFormat sample_fmt
audio sample format
const uint8_t ff_fc_4pulses_8bits_track_4[32]
Track|Pulse| Positions 4 | 3 | 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78 | | 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79
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.
av_cold void ff_audiodsp_init(AudioDSPContext *c)
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
GLsizei GLboolean const GLfloat * value
bitstream reader API header.
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 av_cold int decode_close(AVCodecContext *avctx)
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)
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).
int16_t * past_quantizer_outputs[MA_NP+1]
#define fc(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int ma_predictor_prev
switched MA predictor of LSP quantizer from last good frame
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define DECISION_INTERMEDIATE
const char * name
Name of the codec implementation.
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.6.2 of G.729 and 6.1.5 of AMR).
static av_cold int decoder_init(AVCodecContext *avctx)
int16_t pos_filter_data[SUBFRAME_SIZE+10]
previous speech data for short-term postfilter
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)
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...
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.
G729ChannelContext * channel_context
int gain_coeff
(1.14) gain coefficient (4.2.4)
#define GC_2ND_IDX_BITS_6K4
gain codebook (second stage) index, 6.4k mode (size in bits)
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
int16_t past_quantizer_output_buf[MA_NP+1][10]
(2.13) LSP quantizer outputs
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
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.
int16_t onset
detected onset level (0-2)
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.2.5 and 3.2.6 of G.729)
static const int16_t cb_ma_predictor_sum_inv[2][10]
12 ...
int16_t res_filter_data[SUBFRAME_SIZE+10]
previous speech data for residual calculation filter
int16_t voice_decision
voice decision on previous subframe (0-noise, 1-intermediate, 2-voice), G.729D
int frame_size
Number of samples per channel in an audio frame.
#define SHARP_MIN
minimum gain pitch value (3.8, Equation 47) 0.2 in (1.14)
Libavcodec external API header.
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.
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
int32_t(* scalarproduct_int16)(const int16_t *v1, const int16_t *v2, int len)
Calculate scalar product of two vectors.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define G729D_6K4_BLOCK_SIZE
static unsigned int get_bits1(GetBitContext *s)
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
const uint8_t ff_fc_4pulses_8bits_tracks_13[16]
Track|Pulse| Positions 1 | 0 | 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75 2 | 1 | 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76 3 | 2 | 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 72, 77
#define AV_CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time...
#define INTERPOL_LEN
interpolation filter length
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)
#define MA_NP
Moving Average (MA) prediction order.
#define G729_8K_BLOCK_SIZE
const uint8_t ff_fc_2pulses_9bits_track2_gray[32]
Track|Pulse| Positions 2 | 1 | 0, 7, 14, 20, 27, 34, 1, 21 | | 2, 9, 15, 22, 29, 35, 6, 26 | | 4,10, 17, 24, 30, 37, 11, 31 | | 5,12, 19, 25, 32, 39, 16, 36
#define LSFQ_MAX
maximum quantized LSF value (3.2.4) 3.135 in Q13
int16_t exc_base[2 *SUBFRAME_SIZE+PITCH_DELAY_MAX+INTERPOL_LEN]
past excitation signal buffer
int16_t past_gain_pitch[6]
(1.14) pitch gain of current and five previous subframes
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define SHARP_MAX
maximum gain pitch value (3.8, Equation 47) (EE) This does not comply with the specification.
int16_t hpf_z[2]
high-pass filter data (past output)
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.
#define VQ_2ND_BITS
second stage vector of quantizer (size in bits)
#define GC_1ST_IDX_BITS_8K
gain codebook (first stage) index, 8k mode (size in bits)
common internal api header.
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)
static int g729d_onset_decision(int past_onset, const int16_t *past_gain_code)
Makes decision about onset in current subframe.
#define VQ_1ST_BITS
first stage vector of quantizer (size in bits)
#define GC_1ST_IDX_BITS_6K4
gain codebook (first stage) index, 6.4k mode (size in bits)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int16_t past_gain_code[2]
(14.1) gain code from current and previous subframe
int channels
number of audio channels
static const int16_t cb_ma_predictor_sum[2][10]
15 3 cb_ma_predictor_sum[j][i] = floor( 2 * (1...
static void frame_erasure(EVRCContext *e, float *samples)
int hpf_f[2]
(14.14) high-pass filter data (past input)
static uint16_t g729_prng(uint16_t value)
pseudo random number generator
#define RES_PREV_DATA_SIZE
Amount of past residual signal data stored in buffer.
static const G729FormatDescription format_g729d_6k4
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)
int16_t syn_filter_data[10]
previous speech data for LP synthesis filter
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 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 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)
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
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).
int16_t residual[SUBFRAME_SIZE+RES_PREV_DATA_SIZE]
residual signal buffer (used in long-term postfilter)
int16_t was_periodic
whether previous frame was declared as periodic or not (4.4)
int16_t * exc
start of past excitation data in buffer
static const int16_t phase_filter[3][40]
additional "phase" post-processing filter impulse response (D.6.2 of G.729)