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)