/* g729a_decoder - Decompiled by JODE
* Visit http://jode.sourceforge.net/
*/
package javaforce.codec.g729a;
final class g729a_decoder implements g729a_constants
{
private g729a_preproc_filter postproc;
private g729a_sinthesis_filter sinthesis;
private g729a_sinthesis_filter residual_filter;
private g729a_sinthesis_filter shortterm;
private g729a_tilt_filter tilt;
private g729a_decode_filters filters;
private g729a_decode_speech speech;
private g729a_decode_lp lp;
private float[] residual = new float[184];
private float[] excitation = new float[194];
private float[] q_quant_past_subframe_2 = new float[10];
private float[] q_quant_present_subframe_2 = new float[10];
private float[] l_quant_past_frame_4 = new float[10];
private float[] l_quant_past_frame_3 = new float[10];
private float[] l_quant_past_frame_2 = new float[10];
private float[] l_quant_past_frame_1 = new float[10];
final void decode(short[] is, G729aCode g729acode, boolean bool,
boolean bool_0_) {
g729a_decode_internal var_g729a_decode_internal
= new g729a_decode_internal();
g729a_utils.validateData(is, 0);
float[] fs = speech.U;
if (!bool) {
speech.periodic = 0;
if (!bool_0_)
g729a_reconstruct.g729a_lspdec(lp, g729acode);
else
g729a_reconstruct.g729a_lspdec_erased(lp);
g729a_common.g729a_lsp_interpolation
(lp.q_quant_present_subframe_1, lp.q_quant_past_subframe_2,
lp.q_quant_present_subframe_2);
g729a_common.g729a_LSP2LP((var_g729a_decode_internal
.a_quant_subframe1),
lp.q_quant_present_subframe_1);
g729a_common.g729a_LSP2LP((var_g729a_decode_internal
.a_quant_subframe2),
lp.q_quant_present_subframe_2);
float[] fs_1_ = lp.q_quant_past_subframe_2;
lp.q_quant_past_subframe_2 = lp.q_quant_present_subframe_2;
lp.q_quant_present_subframe_2 = fs_1_;
var_g729a_decode_internal.C = g729acode.getC1();
var_g729a_decode_internal.S = g729acode.getS1();
var_g729a_decode_internal.GA = g729acode.getGA1();
var_g729a_decode_internal.GB = g729acode.getGB1();
g729a_reconstruct.g729a_dec_lag3_1(g729acode,
var_g729a_decode_internal,
speech);
g729a_reconstruct.g729a_de_acelp(var_g729a_decode_internal,
var_g729a_decode_internal.T1,
speech.past_quan_gp);
g729a_reconstruct.g729a_dec_gain(var_g729a_decode_internal,
speech);
g729a_reconstruct.g729a_reconstruct_speech
(var_g729a_decode_internal, speech, filters,
var_g729a_decode_internal.a_quant_subframe1);
g729a_pst.g729a_pst(speech, var_g729a_decode_internal, filters,
var_g729a_decode_internal.a_quant_subframe1,
var_g729a_decode_internal.T1);
g729a_post_pro.g729a_postproc_filter(is, 0,
var_g729a_decode_internal.sf,
filters);
var_g729a_decode_internal.C = g729acode.getC2();
var_g729a_decode_internal.S = g729acode.getS2();
var_g729a_decode_internal.GA = g729acode.getGA2();
var_g729a_decode_internal.GB = g729acode.getGB2();
g729a_reconstruct.g729a_dec_lag3_2(g729acode,
var_g729a_decode_internal,
speech);
g729a_reconstruct.g729a_de_acelp(var_g729a_decode_internal,
speech.T2, speech.past_quan_gp);
g729a_reconstruct.g729a_dec_gain(var_g729a_decode_internal,
speech);
g729a_reconstruct.g729a_reconstruct_speech
(var_g729a_decode_internal, speech, filters,
var_g729a_decode_internal.a_quant_subframe2);
g729a_pst.g729a_pst(speech, var_g729a_decode_internal, filters,
var_g729a_decode_internal.a_quant_subframe2,
speech.T2);
g729a_post_pro.g729a_postproc_filter(is, 40,
var_g729a_decode_internal.sf,
filters);
} else {
g729a_reconstruct.g729a_lspdec_erased(lp);
g729a_common.g729a_lsp_interpolation
(lp.q_quant_present_subframe_1, lp.q_quant_past_subframe_2,
lp.q_quant_present_subframe_2);
g729a_common.g729a_LSP2LP((var_g729a_decode_internal
.a_quant_subframe1),
lp.q_quant_present_subframe_1);
g729a_common.g729a_LSP2LP((var_g729a_decode_internal
.a_quant_subframe2),
lp.q_quant_present_subframe_2);
float[] fs_2_ = lp.q_quant_past_subframe_2;
lp.q_quant_past_subframe_2 = lp.q_quant_present_subframe_2;
lp.q_quant_present_subframe_2 = fs_2_;
int i;
speech.seed = i = speech.seed * 31821 + 13849;
var_g729a_decode_internal.C = i & 0x1fff;
speech.seed = i = speech.seed * 31821 + 13849;
var_g729a_decode_internal.S = i & 0xf;
if (speech.past_quan_gp > 0.9F)
var_g729a_decode_internal.gp_quan = 0.9F;
else
var_g729a_decode_internal.gp_quan = 0.9F * speech.past_quan_gp;
speech.past_quan_gp = var_g729a_decode_internal.gp_quan;
speech.past_quan_gc = var_g729a_decode_internal.gc_quan
= 0.98F * speech.past_quan_gc;
float f = 0.25F * (fs[0] + fs[1] + fs[2] + fs[3]) - 4.0F;
if (f < -14.0F)
f = -14.0F;
fs[3] = fs[2];
fs[2] = fs[1];
fs[1] = fs[0];
fs[0] = f;
if (speech.periodic == 1) {
g729a_common.g729a_generation_adaptive_vector
(var_g729a_decode_internal.v, speech.excitation, speech.T2,
0);
g729a_utils.g729a_set_0(var_g729a_decode_internal.c, 40);
} else {
g729a_utils.g729a_set_0(var_g729a_decode_internal.v, 40);
g729a_reconstruct.g729a_de_acelp(var_g729a_decode_internal,
speech.T2,
speech.past_quan_gp);
}
g729a_reconstruct.g729a_reconstruct_speech
(var_g729a_decode_internal, speech, filters,
var_g729a_decode_internal.a_quant_subframe1);
g729a_pst.g729a_pst(speech, var_g729a_decode_internal, filters,
var_g729a_decode_internal.a_quant_subframe1,
speech.T2);
g729a_post_pro.g729a_postproc_filter(is, 0,
var_g729a_decode_internal.sf,
filters);
if (speech.T2 < 143)
speech.T2++;
speech.seed = i = speech.seed * 31821 + 13849;
var_g729a_decode_internal.C = i & 0x1fff;
speech.seed = i = speech.seed * 31821 + 13849;
var_g729a_decode_internal.S = i & 0xf;
if (speech.past_quan_gp > 0.9F)
var_g729a_decode_internal.gp_quan = 0.9F;
else
var_g729a_decode_internal.gp_quan = 0.9F * speech.past_quan_gp;
speech.past_quan_gp = var_g729a_decode_internal.gp_quan;
speech.past_quan_gc = var_g729a_decode_internal.gc_quan
= 0.98F * speech.past_quan_gc;
f = 0.25F * (fs[0] + fs[1] + fs[2] + fs[3]) - 4.0F;
if (f < -14.0F)
f = -14.0F;
fs[3] = fs[2];
fs[2] = fs[1];
fs[1] = fs[0];
fs[0] = f;
if (speech.periodic == 1) {
g729a_common.g729a_generation_adaptive_vector
(var_g729a_decode_internal.v, speech.excitation, speech.T2,
0);
g729a_utils.g729a_set_0(var_g729a_decode_internal.c, 40);
} else {
g729a_utils.g729a_set_0(var_g729a_decode_internal.v, 40);
g729a_reconstruct.g729a_de_acelp(var_g729a_decode_internal,
speech.T2,
speech.past_quan_gp);
}
g729a_reconstruct.g729a_reconstruct_speech
(var_g729a_decode_internal, speech, filters,
var_g729a_decode_internal.a_quant_subframe2);
g729a_pst.g729a_pst(speech, var_g729a_decode_internal, filters,
var_g729a_decode_internal.a_quant_subframe2,
speech.T2);
g729a_post_pro.g729a_postproc_filter(is, 40,
var_g729a_decode_internal.sf,
filters);
if (speech.T2 < 143)
speech.T2++;
}
}
void decode(short[] is, int i, byte[] is_3_, int i_4_, int i_5_) {
int i_6_ = i;
int i_7_ = i_4_;
for (int i_8_ = 0; i_8_ < i_5_; i_8_++) {
decode(is, i_6_, is_3_, i_7_, false, false);
i_6_ += 80;
i_7_ += 10;
}
}
void decode(short[] is, int i, G729aCode[] g729acodes, int i_9_,
boolean bool, boolean bool_10_) {
if (g729acodes.length < i_9_)
throw new G729aException(1);
int i_11_ = i;
for (int i_12_ = 0; i_12_ < i_9_; i_12_++) {
decode(is, i_11_, g729acodes[i_12_], bool, bool_10_);
i_11_ += 80;
}
}
void decode(short[] is, int i, byte[] is_13_, int i_14_, boolean bool,
boolean bool_15_) {
g729a_utils.validateCode(is_13_, i_14_);
G729aCode g729acode = new G729aCode(is_13_, i_14_);
decode(is, i, g729acode, bool, bool_15_);
}
void decode(short[] is, int i, G729aCode g729acode, boolean bool,
boolean bool_16_) {
g729a_utils.validateData(is, i);
short[] is_17_ = new short[80];
decode(is_17_, g729acode, bool, bool_16_);
System.arraycopy(is_17_, 0, is, i, 80);
}
g729a_decoder() {
postproc = new g729a_preproc_filter();
sinthesis = new g729a_sinthesis_filter();
residual_filter = new g729a_sinthesis_filter();
shortterm = new g729a_sinthesis_filter();
tilt = new g729a_tilt_filter();
g729a_preproc_filter var_g729a_preproc_filter = postproc;
g729a_sinthesis_filter var_g729a_sinthesis_filter = sinthesis;
g729a_sinthesis_filter var_g729a_sinthesis_filter_18_
= residual_filter;
g729a_sinthesis_filter var_g729a_sinthesis_filter_19_ = shortterm;
g729a_tilt_filter var_g729a_tilt_filter = tilt;
var_g729a_preproc_filter.a0 = 123182.23F;
var_g729a_preproc_filter.a1 = -246360.75F;
var_g729a_preproc_filter.a2 = 123182.23F;
var_g729a_preproc_filter.b1 = 1.9330735F;
var_g729a_preproc_filter.b2 = -0.93579197F;
var_g729a_preproc_filter.x1 = 0.0F;
var_g729a_preproc_filter.x2 = 0.0F;
var_g729a_preproc_filter.y1 = 0.0F;
var_g729a_preproc_filter.y2 = 0.0F;
var_g729a_tilt_filter.x1 = 0.0F;
speech = new g729a_decode_speech();
speech.U[0] = speech.U[1] = speech.U[2] = speech.U[3] = -14.0F;
speech.past_quan_gp = 0.2000122F;
speech.past_g = 0.0F;
speech.seed = 21845;
speech.T2 = 60;
float[] fs = q_quant_past_subframe_2;
float f = 0.28559935F;
for (int i = 0; i < 10; i++)
fs[i] = (float) Math.cos((double) (f * (float) (i + 1)));
lp = new g729a_decode_lp();
for (int i = 0; i < 10; i++)
lp.past_omega[i] = f * (float) (i + 1);
float[] fs_20_ = l_quant_past_frame_4;
float[] fs_21_ = l_quant_past_frame_3;
float[] fs_22_ = l_quant_past_frame_2;
float[] fs_23_ = l_quant_past_frame_1;
for (int i = 0; i < 10; i++)
fs_20_[i] = fs_21_[i] = fs_22_[i] = fs_23_[i]
= (float) (i + 1) * f;
for (int i = 0; i < 2; i++) {
fs_23_ = lp.fg_l_quant_sum;
int i_24_ = 10 * i;
fs = g729a_tables.g729a_fg_sum;
int i_25_ = 10 * i;
for (int i_26_ = 0; i_26_ < 10; i_26_++)
fs_23_[i_26_ + i_24_]
= (1.0F - fs[i_26_ + i_25_]) * f * (float) (i_26_ + 1);
}
filters = new g729a_decode_filters();
filters.postproc = var_g729a_preproc_filter;
filters.sinthesis = var_g729a_sinthesis_filter;
filters.residual = var_g729a_sinthesis_filter_18_;
filters.shortterm = var_g729a_sinthesis_filter_19_;
filters.tilt = var_g729a_tilt_filter;
speech.residual = residual;
speech.excitation = excitation;
lp.q_quant_past_subframe_2 = q_quant_past_subframe_2;
lp.q_quant_present_subframe_2 = q_quant_present_subframe_2;
lp.l_quant_past_frame_4 = l_quant_past_frame_4;
lp.l_quant_past_frame_3 = l_quant_past_frame_3;
lp.l_quant_past_frame_2 = l_quant_past_frame_2;
lp.l_quant_past_frame_1 = l_quant_past_frame_1;
}
void reset() {
g729a_preproc_filter var_g729a_preproc_filter = postproc;
g729a_sinthesis_filter var_g729a_sinthesis_filter = sinthesis;
g729a_sinthesis_filter var_g729a_sinthesis_filter_27_
= residual_filter;
g729a_sinthesis_filter var_g729a_sinthesis_filter_28_ = shortterm;
g729a_tilt_filter var_g729a_tilt_filter = tilt;
var_g729a_preproc_filter.a0 = 123182.23F;
var_g729a_preproc_filter.a1 = -246360.75F;
var_g729a_preproc_filter.a2 = 123182.23F;
var_g729a_preproc_filter.b1 = 1.9330735F;
var_g729a_preproc_filter.b2 = -0.93579197F;
var_g729a_preproc_filter.x1 = 0.0F;
var_g729a_preproc_filter.x2 = 0.0F;
var_g729a_preproc_filter.y1 = 0.0F;
var_g729a_preproc_filter.y2 = 0.0F;
g729a_utils.g729a_set_0(var_g729a_sinthesis_filter.delay, 10);
g729a_utils.g729a_set_0(var_g729a_sinthesis_filter_27_.delay, 10);
g729a_utils.g729a_set_0(var_g729a_sinthesis_filter_28_.delay, 10);
var_g729a_tilt_filter.x1 = 0.0F;
g729a_utils.g729a_set_0(residual, 184);
g729a_utils.g729a_set_0(excitation, 194);
speech.U[0] = speech.U[1] = speech.U[2] = speech.U[3] = -14.0F;
speech.past_quan_gp = 0.2000122F;
speech.past_g = 0.0F;
speech.seed = 21845;
speech.T2 = 60;
float[] fs = q_quant_past_subframe_2;
float f = 0.28559935F;
for (int i = 0; i < 10; i++)
fs[i] = (float) Math.cos((double) (f * (float) (i + 1)));
for (int i = 0; i < 10; i++)
lp.past_omega[i] = f * (float) (i + 1);
float[] fs_29_ = l_quant_past_frame_4;
float[] fs_30_ = l_quant_past_frame_3;
float[] fs_31_ = l_quant_past_frame_2;
float[] fs_32_ = l_quant_past_frame_1;
for (int i = 0; i < 10; i++)
fs_29_[i] = fs_30_[i] = fs_31_[i] = fs_32_[i]
= (float) (i + 1) * f;
for (int i = 0; i < 2; i++) {
fs_32_ = lp.fg_l_quant_sum;
int i_33_ = 10 * i;
fs = g729a_tables.g729a_fg_sum;
int i_34_ = 10 * i;
for (int i_35_ = 0; i_35_ < 10; i_35_++)
fs_32_[i_35_ + i_33_]
= (1.0F - fs[i_35_ + i_34_]) * f * (float) (i_35_ + 1);
}
filters.postproc = var_g729a_preproc_filter;
filters.sinthesis = var_g729a_sinthesis_filter;
filters.residual = var_g729a_sinthesis_filter_27_;
filters.shortterm = var_g729a_sinthesis_filter_28_;
filters.tilt = var_g729a_tilt_filter;
speech.residual = residual;
speech.excitation = excitation;
lp.q_quant_past_subframe_2 = q_quant_past_subframe_2;
lp.q_quant_present_subframe_2 = q_quant_present_subframe_2;
lp.l_quant_past_frame_4 = l_quant_past_frame_4;
lp.l_quant_past_frame_3 = l_quant_past_frame_3;
lp.l_quant_past_frame_2 = l_quant_past_frame_2;
lp.l_quant_past_frame_1 = l_quant_past_frame_1;
}
}