ref: cd5c354736e59c1a396a769c8104b65dd1666ad3
parent: b6ed5e8c175d4872b3ba6bb39dc30133e9b9b9f7
author: menno <menno>
date: Mon Feb 7 12:59:51 EST 2000
Bugs fixed in psych
--- a/enc_tf.c
+++ b/enc_tf.c
@@ -313,8 +313,9 @@
EncTf_psycho_acoustic(
sampling_rate,
chanNum,
+ channels,
&DTimeSigLookAheadBuf[chanNum],
- &next_desired_block_type[chanNum],
+ next_desired_block_type,
(int)qc_select,
block_size_samples,
chpo_long,
--- a/psych.c
+++ b/psych.c
@@ -52,9 +52,9 @@
Source file:
-$Id: psych.c,v 1.38 2000/02/07 17:44:47 oxygene2000 Exp $
-$Id: psych.c,v 1.38 2000/02/07 17:44:47 oxygene2000 Exp $
-$Id: psych.c,v 1.38 2000/02/07 17:44:47 oxygene2000 Exp $
+$Id: psych.c,v 1.39 2000/02/07 17:59:51 menno Exp $
+$Id: psych.c,v 1.39 2000/02/07 17:59:51 menno Exp $
+$Id: psych.c,v 1.39 2000/02/07 17:59:51 menno Exp $
**********************************************************************/
@@ -186,6 +186,8 @@
/* variables for long block */
PSY_STATVARIABLE_SHORT psy_stvar_short[MAX_TIME_CHANNELS+2];
/* variables for short block */
+PSY_VARIABLE_LONG psy_var_long[MAX_TIME_CHANNELS+2]; /* variables for long block */
+PSY_VARIABLE_SHORT psy_var_short[MAX_TIME_CHANNELS+2]; /* variables for short block */
/* added by T. Araki (1997.10.16) end */
void EncTf_psycho_acoustic_init( void )
@@ -468,6 +470,7 @@
/* input */
double sampling_rate,
int no_of_chan, /* no of audio channels */
+ int max_ch,
double *p_time_signal[],
enum WINDOW_TYPE block_type[],
int qcSelect,
@@ -484,11 +487,8 @@
static int flag = 0;
- PSY_VARIABLE_LONG psy_var_long; /* variables for long block */
- PSY_VARIABLE_SHORT psy_var_short; /* variables for short block */
-
- memset(&psy_var_long, 0, sizeof(psy_var_long));
- memset(&psy_var_short, 0, sizeof(psy_var_short));
+// memset(&psy_var_long, 0, sizeof(psy_var_long));
+// memset(&psy_var_short, 0, sizeof(psy_var_short));
/* added by T. Araki (1997.07.10) end */
p_sri = &sr_info_aac[0];
@@ -511,8 +511,8 @@
psy_step1(p_time_signal,sample, no_of_chan);
psy_step2(&sample[no_of_chan], &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], &fft_tbl_long,
&fft_tbl_short, ch);
- psy_step3(&psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], &psy_var_long, &psy_var_short, ch);
- psy_step4(&psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], &psy_var_long, &psy_var_short, ch);
+ psy_step3(&psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], &psy_var_long[no_of_chan], &psy_var_short[no_of_chan], ch);
+ psy_step4(&psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], &psy_var_long[no_of_chan], &psy_var_short[no_of_chan], ch);
} else if (no_of_chan == 2) {
int w, l;
psy_stvar_long[2].p_fft += BLOCK_LEN_LONG;
@@ -535,77 +535,86 @@
if (no_of_chan == 0) {
for (b = 0; b < NPART_LONG; b++)
- psy_stvar_long[no_of_chan].save_cw[b] = psy_var_long.c[b];
+ psy_stvar_long[no_of_chan].save_cw[b] = psy_var_long[no_of_chan].c[b];
for (i = 0; i < MAX_SHORT_WINDOWS; i++)
for (b = 0; b < NPART_SHORT; b++)
- psy_stvar_short[no_of_chan].save_cw[i][b] = psy_var_short.c[i][b];
+ psy_stvar_short[no_of_chan].save_cw[i][b] = psy_var_short[no_of_chan].c[i][b];
}
if (no_of_chan == 1) {
for (b = 0; b < NPART_LONG; b++)
- psy_stvar_long[no_of_chan].save_cw[b] = min(psy_var_long.c[b], psy_stvar_long[0].save_cw[b]);
+ psy_stvar_long[no_of_chan].save_cw[b] = min(psy_var_long[no_of_chan].c[b], psy_stvar_long[0].save_cw[b]);
for (i = 0; i < MAX_SHORT_WINDOWS; i++)
for (b = 0; b < NPART_SHORT; b++)
- psy_stvar_short[no_of_chan].save_cw[i][b] = min(psy_var_short.c[i][b], psy_stvar_short[0].save_cw[i][b]);
+ psy_stvar_short[no_of_chan].save_cw[i][b] = min(psy_var_short[no_of_chan].c[i][b], psy_stvar_short[0].save_cw[i][b]);
}
if (no_of_chan > 1) {
for (b = 0; b < NPART_LONG; b++)
- psy_var_long.c[b] = psy_stvar_long[1].save_cw[b];
+ psy_var_long[no_of_chan].c[b] = psy_stvar_long[1].save_cw[b];
for (i = 0; i < MAX_SHORT_WINDOWS; i++)
for (b = 0; b < NPART_SHORT; b++)
- psy_var_short.c[i][b] = psy_stvar_short[1].save_cw[i][b];
+ psy_var_short[no_of_chan].c[i][b] = psy_stvar_short[1].save_cw[i][b];
}
psy_step5(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
- &psy_var_long, &psy_var_short, ch);
+ &psy_var_long[no_of_chan], &psy_var_short[no_of_chan], ch);
psy_step6(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
- &psy_var_long, &psy_var_short);
+ &psy_var_long[no_of_chan], &psy_var_short[no_of_chan]);
if (no_of_chan < 2) {
- psy_step7(&part_tbl_long, &part_tbl_short, &psy_var_long, &psy_var_short);
+ psy_step7(&part_tbl_long, &part_tbl_short, &psy_var_long[no_of_chan], &psy_var_short[no_of_chan]);
for (b = 0; b < NPART_LONG; b++)
- psy_stvar_long[no_of_chan].save_tb[b] = psy_var_long.tb[b];
+ psy_stvar_long[no_of_chan].save_tb[b] = psy_var_long[no_of_chan].tb[b];
for (i = 0; i < MAX_SHORT_WINDOWS; i++)
for (b = 0; b < NPART_SHORT; b++)
- psy_stvar_short[no_of_chan].save_tb[i][b] = psy_var_short.tb[i][b];
+ psy_stvar_short[no_of_chan].save_tb[i][b] = psy_var_short[no_of_chan].tb[i][b];
} else {
for (b = 0; b < NPART_LONG; b++)
- psy_var_long.tb[b] = psy_stvar_long[no_of_chan-2].save_tb[b];
+ psy_var_long[no_of_chan].tb[b] = psy_stvar_long[no_of_chan-2].save_tb[b];
for (i = 0; i < MAX_SHORT_WINDOWS; i++)
for (b = 0; b < NPART_SHORT; b++)
- psy_var_short.tb[i][b] = psy_stvar_short[no_of_chan-2].save_tb[i][b];
+ psy_var_short[no_of_chan].tb[i][b] = psy_stvar_short[no_of_chan-2].save_tb[i][b];
}
- psy_step8(&part_tbl_long, &part_tbl_short, &psy_var_long, &psy_var_short);
- psy_step9(&part_tbl_long, &part_tbl_short, &psy_var_long, &psy_var_short);
+ psy_step8(&part_tbl_long, &part_tbl_short, &psy_var_long[no_of_chan], &psy_var_short[no_of_chan]);
+ psy_step9(&part_tbl_long, &part_tbl_short, &psy_var_long[no_of_chan], &psy_var_short[no_of_chan]);
psy_step10(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
- &psy_var_long, &psy_var_short, ch);
- psy_step11andahalf(&part_tbl_long, &part_tbl_short, psy_stvar_long, psy_stvar_short, no_of_chan);
- psy_step11(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan], ch);
- psy_step12(&part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan], &psy_stvar_short[no_of_chan],
- &psy_var_long, &psy_var_short, ch);
- psy_step13(&psy_var_long, block_type, ch);
- psy_step14(p_sri, &part_tbl_long, &part_tbl_short, &psy_stvar_long[no_of_chan],
- &psy_stvar_short[no_of_chan], &psy_var_long, &psy_var_short, ch);
- psy_step15(psy_stvar_long[no_of_chan].use_ms, psy_stvar_short[no_of_chan].use_ms, p_sri, &psy_stvar_long[0], &psy_stvar_short[0], &psy_var_long, &psy_var_short, no_of_chan);
+ &psy_var_long[no_of_chan], &psy_var_short[no_of_chan], ch);
+ if (no_of_chan == (max_ch-1)) {
+ int tmp_ch;
+ for (tmp_ch = 0; tmp_ch < max_ch; tmp_ch++) {
+ psy_step11andahalf(&part_tbl_long, &part_tbl_short, psy_stvar_long, psy_stvar_short, no_of_chan);
+ psy_step11(&part_tbl_long, &part_tbl_short, &psy_stvar_long[tmp_ch], &psy_stvar_short[tmp_ch], ch);
+ psy_step12(&part_tbl_long, &part_tbl_short, &psy_stvar_long[tmp_ch], &psy_stvar_short[tmp_ch],
+ &psy_var_long[tmp_ch], &psy_var_short[tmp_ch], ch);
+ psy_step13(&psy_var_long[tmp_ch], &block_type[tmp_ch], ch);
+ psy_step14(p_sri, &part_tbl_long, &part_tbl_short, &psy_stvar_long[tmp_ch],
+ &psy_stvar_short[tmp_ch], &psy_var_long[tmp_ch], &psy_var_short[tmp_ch], ch);
+ psy_step15(psy_stvar_long[tmp_ch].use_ms, psy_stvar_short[tmp_ch].use_ms, p_sri, &psy_stvar_long[0], &psy_stvar_short[0], &psy_var_long[tmp_ch], &psy_var_short[tmp_ch], tmp_ch);
+ }
+ }
}
{
int i;
- p_chpo_long[no_of_chan].p_ratio = psy_stvar_long[no_of_chan].ismr;
- p_chpo_long[no_of_chan].cb_width = p_sri->cb_width_long;
- p_chpo_long[no_of_chan].no_of_cb = p_sri->num_cb_long;
- if (no_of_chan == 1)
- memcpy(p_chpo_long[no_of_chan].use_ms, psy_stvar_long[no_of_chan].use_ms, NSFB_LONG*sizeof(int));
+ if (no_of_chan == (max_ch-1)) {
+ int tmp_ch;
+ for (tmp_ch = 0; tmp_ch < max_ch; tmp_ch++) {
+ p_chpo_long[tmp_ch].p_ratio = psy_stvar_long[tmp_ch].ismr;
+ p_chpo_long[tmp_ch].cb_width = p_sri->cb_width_long;
+ p_chpo_long[tmp_ch].no_of_cb = p_sri->num_cb_long;
+ if (tmp_ch == 1)
+ memcpy(p_chpo_long[tmp_ch].use_ms, psy_stvar_long[tmp_ch].use_ms, NSFB_LONG*sizeof(int));
- for( i=0; i<MAX_SHORT_WINDOWS; i++ ) {
- p_chpo_short[no_of_chan][i].p_ratio = psy_stvar_short[no_of_chan].ismr[i];
- p_chpo_short[no_of_chan][i].cb_width = p_sri->cb_width_short;
- p_chpo_short[no_of_chan][i].no_of_cb = p_sri->num_cb_short;
- if (no_of_chan == 1)
- memcpy(p_chpo_short[no_of_chan][i].use_ms, psy_stvar_short[no_of_chan].use_ms[i], NSFB_SHORT*sizeof(int));
+ for( i=0; i<MAX_SHORT_WINDOWS; i++ ) {
+ p_chpo_short[tmp_ch][i].p_ratio = psy_stvar_short[tmp_ch].ismr[i];
+ p_chpo_short[tmp_ch][i].cb_width = p_sri->cb_width_short;
+ p_chpo_short[tmp_ch][i].no_of_cb = p_sri->num_cb_short;
+ if (no_of_chan == 1)
+ memcpy(p_chpo_short[tmp_ch][i].use_ms, psy_stvar_short[tmp_ch].use_ms[i], NSFB_SHORT*sizeof(int));
+ }
+ }
}
-
}
}
@@ -744,7 +753,6 @@
+psy_sqr(r*sin(f) - rp*sin(fp)) )/ ( r + fabs(rp) );
*/
psy_var_long->c[w] = sqrt( r*r+rp*rp-2*r*rp*cos(f+fp) )/ ( r + fabs(rp) );
-
else
psy_var_long->c[w] = 0.0; /* tmp */
}
@@ -761,17 +769,20 @@
fp = psy_var_short->f_pred[i][w];
if( fabs(r) + fabs(rp) != 0.0 )
+/* Replacing with something faster
psy_var_short->c[i][w] = sqrt( psy_sqr(r*cos(f) - rp*cos(fp))
+psy_sqr(r*sin(f) - rp*sin(fp)) )/ ( r + fabs(rp) ) ;
+*/
+ psy_var_short->c[i][w] = sqrt( r*r+rp*rp-2*r*rp*cos(f+fp) )/ ( r + fabs(rp) );
else
psy_var_short->c[i][w] = 0.0; /* tmp */
}
}
-// for(i = 0; i < MAX_SHORT_WINDOWS; i++){
-// for(w = 60; w < BLOCK_LEN_SHORT; w++){
+ for(i = 0; i < MAX_SHORT_WINDOWS; i++){
+ for(w = 60; w < BLOCK_LEN_SHORT; w++){
// psy_var_short->c[i][w] = 0.4;
-// }
-// }
+ }
+ }
/* added by T. Araki (1997.10.16) end */
}
@@ -1028,7 +1039,6 @@
PSY_STATVARIABLE_SHORT *psy_stvar_short,
int ch)
{
-
int b, i,p1;
double t;
double tempL, tempR, tempM, tempS;
--- a/psych.h
+++ b/psych.h
@@ -191,6 +191,7 @@
/* input */
double sampling_rate,
int no_of_chan, /* no of audio channels */
+ int max_ch,
double *p_time_signal[],
enum WINDOW_TYPE block_type[],
int qcSelect,