----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 21
Here are a few more patches that improve thr performance of lame 3.03 while
giving identical results with the original. They are only tested with
GPSYCHO, but the original work was done with lame 2.1 so they probably work
with the ISO model as well.
loop.diff:
Some code is simplified, some redundant calculations removed.
bigv_tab_select is merged with bigv_bitcount in order to be able to avoid
some redundant calls to count_bits. Finally, mixed_block_flag is assumed to be
zero at all times.
subs.diff:
Exploit the fact that the angle of only the first 6 points of the 1024 point
fft is used to avoid several calls to atan2.
mdct.diff:
Reduced table sizes by changing the table addressing scheme, plus small cleanup.
encode.diff:
Removed read_ana_window() and a small cleanup.
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: loop.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 1215
*** loop.c.1 Wed May 19 21:32:54 1999
--- loop.c Thu May 20 18:04:59 1999
***************
*** 1027,1043 ****
cod_info->quantizerStepSize -= 1.0;;
do
{
- do
- {
cod_info->quantizerStepSize += 1.0;
quantize( xrs, ix, cod_info );
- }
- while ( ix_max(ix, 0, 576) > 8191 + 14 ); /* within table range? */
calc_runlen( ix, cod_info ); /*rzero,count1,big_values*/
bits = c1bits = count1_bitcount( ix, cod_info ); /*count1_table selection*/
subdivide( cod_info ); /* bigvalues sfb division */
- bigv_tab_select( ix, cod_info ); /* codebook selection*/
bits += bvbits = bigv_bitcount( ix, cod_info ); /* bit count */
}
while ( bits > max_bits );
--- 1027,1038 ----
***************
*** 1045,1052 ****
return bits;
}
-
/***************************************************************************/
/* calc_scfsi */
/***************************************************************************/
--- 1040,1048 ----
return bits;
}
+ /* Calculated in calc_xmin*/
+ static int en[2][2][21];
/***************************************************************************/
/* calc_scfsi */
/***************************************************************************/
***************
*** 1077,1084 ****
scfsi_set = 0;
/* the total energy of the granule */
! for ( temp = 0.0, i = 0; i < 576; i++ )
! temp += xr[i] * xr[i];
if ( temp == 0.0 )
en_tot[gr][ch] = 0.0;
else
--- 1073,1080 ----
scfsi_set = 0;
/* the total energy of the granule */
! for ( temp = 0.0, i = 0; i < 21; i++ )
! temp += en[gr][ch][i];
if ( temp == 0.0 )
en_tot[gr][ch] = 0.0;
else
***************
*** 1091,1101 ****
cod_info->block_type != 2 )
for ( sfb = 0; sfb < 21; sfb++ )
{
! start = scalefac_band_long[ sfb ];
! end = scalefac_band_long[ sfb+1 ];
- for ( temp = 0.0, i = start; i < end; i++ )
- temp += xr[i] * xr[i];
if ( temp == 0.0 )
en[gr][ch][sfb] = 0.0;
else
--- 1087,1094 ----
cod_info->block_type != 2 )
for ( sfb = 0; sfb < 21; sfb++ )
{
! temp=en[gr][ch][sfb];
if ( temp == 0.0 )
en[gr][ch][sfb] = 0.0;
else
***************
*** 1110,1131 ****
{
int gr2, tp;
- for ( gr2 = 0; gr2 < 2; gr2++ )
- {
- /* The spectral values are not all zero */
- if ( xrmax[ch][gr2] != 0.0 )
- condition++;
/* None of the granules contains short blocks */
! if ( (cod_info->window_switching_flag == 0) ||
! (cod_info->block_type != 2) )
! condition++;
! }
! if ( abs(en_tot[0] - en_tot[1]) < en_tot_krit )
! condition++;
! for ( tp = 0, sfb = 0; sfb < 21; sfb++ )
! tp += abs( en[ch][0][sfb] - en[ch][1][sfb] );
! if ( tp < en_dif_krit )
! condition++;
if ( condition == 6 )
{
--- 1103,1122 ----
{
int gr2, tp;
/* None of the granules contains short blocks */
! if ( (cod_info->window_switching_flag == 0) || (cod_info->block_type != 2) )
! {
! if ( xrmax[ch][0] != 0.0 && xrmax[ch][1] != 0.0)
! {
! if ( abs(en_tot[0] - en_tot[1]) < en_tot_krit )
! {
! for ( tp = 0, sfb = 0; sfb < 21; sfb++ )
! tp += abs( en[ch][0][sfb] - en[ch][1][sfb] );
! if ( tp < en_dif_krit )
! condition=6;
! }
! }
! }
if ( condition == 6 )
{
***************
*** 1185,1198 ****
if ( (gi->window_switching_flag == 1) && (gi->block_type == 2) )
{
- if ( gi->mixed_block_flag )
- {
- bits += (8 * slen1) + (9 * slen1) + (18 * slen2);
- }
- else
- {
bits += (18 * slen1) + (18 * slen2);
- }
}
else
{
--- 1176,1182 ----
***************
*** 1236,1247 ****
static int slen1[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
static int slen2[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
- static int pow2[5] = { 1, 2, 4, 8, 16 };
if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
{
- if ( cod_info->mixed_block_flag == 0 )
- {
/* a = 18; b = 18; */
for ( i = 0; i < 3; i++ )
{
--- 1220,1228 ----
***************
*** 1252,1274 ****
if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
max_slen2 = scalefac->s[gr][ch][sfb][i];
}
- }
- else
- {/* mixed_block_flag = 1 */
- /* a = 17; b = 18; */
- for ( sfb = 0; sfb < 8; sfb++ )
- if ( scalefac->l[gr][ch][sfb] > max_slen1 )
- max_slen1 = scalefac->l[gr][ch][sfb];
- for ( i = 0; i < 3; i++ )
- {
- for ( sfb = 3; sfb < 6; sfb++ )
- if ( scalefac->s[gr][ch][sfb][i] > max_slen1 )
- max_slen1 = scalefac->s[gr][ch][sfb][i];
- for ( sfb = 6; sfb < 12; sfb++ )
- if ( scalefac->s[gr][ch][sfb][i] > max_slen2 )
- max_slen2 = scalefac->s[gr][ch][sfb][i];
- }
- }
}
else
{ /* block_type == 1,2,or 3 */
--- 1233,1238 ----
***************
*** 1283,1289 ****
for ( k = 0; k < 16; k++ )
{
! if ( (max_slen1 < pow2[slen1[k]]) && (max_slen2 < pow2[slen2[k]]) )
{
ep = 0;
break;
--- 1247,1253 ----
for ( k = 0; k < 16; k++ )
{
! if ( (max_slen1 < (1<<slen1[k])) && (max_slen2 < (1<<slen2[k])) )
{
ep = 0;
break;
***************
*** 1329,1336 ****
if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
{
- if ( cod_info->mixed_block_flag == 0 )
- {
row_in_table = 1;
partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
for ( sfb = 0, partition = 0; partition < 4; partition++ )
--- 1293,1298 ----
***************
*** 1341,1366 ****
if ( scalefac->s[gr][ch][sfb][window] > max_sfac[partition] )
max_sfac[partition] = scalefac->s[gr][ch][sfb][window];
}
- }
- else
- {/* mixed_block_flag = 1 */
- row_in_table = 2;
- partition_table = &nr_of_sfb_block[table_number][row_in_table][0];
- partition = 0;
- nr_sfb = partition_table[ partition ];
- for ( i = 0; i < nr_sfb; i++, sfb++ )
- if ( scalefac->l[gr][ch][sfb] > max_sfac[partition] )
- max_sfac[partition] = scalefac->l[gr][ch][sfb];
-
- for ( sfb = 0, partition = 1; partition < 4; partition++ )
- {
- nr_sfb = partition_table[ partition ] / 3;
- for ( i = 0; i < nr_sfb; i++, sfb++ )
- for ( window = 0; window < 3; window++ )
- if ( scalefac->s[gr][ch][sfb][window] > max_sfac[partition] )
- max_sfac[partition] = scalefac->s[gr][ch][sfb][window];
- }
- }
}
else
{
--- 1303,1308 ----
***************
*** 1667,1673 ****
int gr, int ch )
{
int start, end, sfb, l, b;
! double en, bw;
D192_3 *xr_s;
--- 1609,1615 ----
int gr, int ch )
{
int start, end, sfb, l, b;
! double en0, bw;
D192_3 *xr_s;
***************
*** 1680,1688 ****
bw = end - start;
for ( b = 0; b < 3; b++ )
{
! for ( en = 0.0, l = start; l < end; l++ )
! en += (*xr_s)[l][b] * (*xr_s)[l][b];
! l3_xmin->s[gr][ch][sfb][b] = ratio->s[gr][ch][sfb][b] * en / bw;
}
}
--- 1622,1630 ----
bw = end - start;
for ( b = 0; b < 3; b++ )
{
! for ( en0 = 0.0, l = start; l < end; l++ )
! en0 += (*xr_s)[l][b] * (*xr_s)[l][b];
! l3_xmin->s[gr][ch][sfb][b] = ratio->s[gr][ch][sfb][b] * en0 / bw;
}
}
***************
*** 1692,1700 ****
end = scalefac_band_long[ sfb+1 ];
bw = end - start;
! for ( en = 0.0, l = start; l < end; l++ )
! en += xr[gr][ch][l] * xr[gr][ch][l];
! l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
}
}
--- 1634,1644 ----
end = scalefac_band_long[ sfb+1 ];
bw = end - start;
! for ( en0 = 0.0, l = start; l < end; l++ )
! en0 += xr[gr][ch][l] * xr[gr][ch][l];
! l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en0 / bw;
! /* Stored for calc_scfsi */
! en[gr][ch][sfb]=en0;
}
}
***************
*** 1715,1728 ****
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
if ( scalefac->l[gr][ch][sfb] == 0 )
! temp = 0;
for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
for ( i = 0; i < 3; i++ )
if ( scalefac->s[gr][ch][sfb][i] == 0 )
! temp = 0;
! return temp;
}
--- 1659,1672 ----
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
if ( scalefac->l[gr][ch][sfb] == 0 )
! return 0;
for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ )
for ( i = 0; i < 3; i++ )
if ( scalefac->s[gr][ch][sfb][i] == 0 )
! return 0;
! return 1;
}
***************
*** 1773,1789 ****
if (over == 4 )
{
cod_info->preflag = 1;
! ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.)
! : pow( 2.0, (0.5 * (1.0 + (double) cod_info->scalefac_scale)) );
!
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
{
! l3_xmin->l[gr][ch][sfb] *= pow( ifqstep, 2.0 * (double) pretab[sfb] );
start = scalefac_band_long[ sfb ];
end = scalefac_band_long[ sfb+1 ];
for( i = start; i < end; i++ )
! xr[i] *= pow( ifqstep, (double) pretab[sfb] );
}
}
}
--- 1717,1733 ----
if (over == 4 )
{
+ double t;
cod_info->preflag = 1;
! ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.) : 2.0;
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
{
! t=pow( ifqstep, (double) pretab[sfb] );
! l3_xmin->l[gr][ch][sfb] *= t*t;
start = scalefac_band_long[ sfb ];
end = scalefac_band_long[ sfb+1 ];
for( i = start; i < end; i++ )
! xr[i]*=t;
}
}
}
***************
*** 1820,1826 ****
if ( cod_info->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = pow( 2.0, 0.5 * (1.0 + (double) cod_info->scalefac_scale) );
if ( gr == 1 )
{
--- 1764,1770 ----
if ( cod_info->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = 2.0;
if ( gr == 1 )
{
***************
*** 1838,1844 ****
if ( gr0->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = pow( 2.0, 0.5 * (1.0 + (double) gr0->scalefac_scale) );
if ( iteration == 1 )
{
--- 1782,1788 ----
if ( gr0->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = 2.0;
if ( iteration == 1 )
{
***************
*** 1964,1980 ****
if (over == 4 )
{
cod_info->preflag = 1;
! ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.)
! : pow( 2.0, (0.5 * (1.0 + (double) cod_info->scalefac_scale)) );
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
{
! l3_xmin->l[gr][ch][sfb] *= pow( ifqstep, 2.0 * (double) pretab[sfb] );
start = scalefac_band_long[ sfb ];
end = scalefac_band_long[ sfb+1 ];
for( i = start; i < end; i++ )
! xr[i] *= pow( ifqstep, (double) pretab[sfb] );
}
}
}
--- 1908,1925 ----
if (over == 4 )
{
+ double t;
cod_info->preflag = 1;
! ifqstep = ( cod_info->scalefac_scale == 0 ) ? sqrt(2.) : 2.0;
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ )
{
! t=pow( ifqstep, (double) pretab[sfb] );
! l3_xmin->l[gr][ch][sfb] *= t*t;
start = scalefac_band_long[ sfb ];
end = scalefac_band_long[ sfb+1 ];
for( i = start; i < end; i++ )
! xr[i]*=t;
}
}
}
***************
*** 2012,2018 ****
if ( cod_info->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = pow( 2.0, 0.5 * (1.0 + (double) cod_info->scalefac_scale) );
if ( gr == 1 )
{
--- 1957,1963 ----
if ( cod_info->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = 2.0;
if ( gr == 1 )
{
***************
*** 2030,2036 ****
if ( gr0->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = pow( 2.0, 0.5 * (1.0 + (double) gr0->scalefac_scale) );
if ( iteration == 1 )
{
--- 1975,1981 ----
if ( gr0->scalefac_scale == 0 )
ifqstep = sqrt( 2.0 );
else
! ifqstep = 2.0;
if ( iteration == 1 )
{
***************
*** 2141,2149 ****
lutab[i]=nint(pow((double)i/10.0,0.75)-0.0946);
for (i=1;i<LUTABSIZE;i++)
if ((lutab[i]-lutab[i-1])==1) { /* we have a change over this interval */
- lutab[i]=-1;
lutab[i-1]=-1;
- i++;
}
}
--- 2086,2092 ----
***************
*** 2160,2182 ****
istep = 1.0/step;
if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
- if ( cod_info->mixed_block_flag == 0 )
{
! l_end = 0;
! s_start = 0;
! }
! else
{
! l_end = 18 * 2;
! s_start = 6 * 2;
}
else
{
! l_end = 576;
! s_start = 192;
! }
!
! for (i=0;i<l_end;i++) {
temp=istep*fabs(xr[i]); /* step always positive -> temp always postive */
if (temp<0.499996)
ix[i]=0;
--- 2103,2146 ----
istep = 1.0/step;
if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
{
! for ( b = 0; b < 3; b++ )
{
! step = pow( 2.0, (quantizerStepSize + 8.0 * (double) cod_info->subblock_gain[b]) * 0.25 );
! #ifdef LOOP
! for (i=0;i<192;i++)
! {
! dbl = fabs((*xr_s)[i][b])/step;
!
! ln = (long)dbl;
! if(ln<10000)
! {
! idx=int2idx[ln];
! if(dbl<idx2dbl[idx+1]) (*ix_s)[i][b] = idx;
! else (*ix_s)[i][b] = idx+1;
! }
! else
! {
! dbl = sqrt(sqrt(dbl)*dbl);
! if(dbl<0.0946) (*ix_s)[i][b] = (int)(dbl - 0.5946);
! else (*ix_s)[i][b] = (int)(dbl + 0.4154);
! }
!
! }
! #else
! istep = 1.0/step;
! for ( i = 0; i < 192; i++ )
! {
! temp = fabs((*xr_s)[i][b]) * istep;
! if (temp>=1000.0 || ((*ix_s)[i][b]=lutab[(int)(temp*10.0)])==-1)
! (*ix_s)[i][b] = (int)( sqrt(sqrt(temp)*temp) + 0.4054);
! }
! #endif
}
+ }
else
{
! for (i=0;i<576;i++) {
temp=istep*fabs(xr[i]); /* step always positive -> temp always postive */
if (temp<0.499996)
ix[i]=0;
***************
*** 2206,2242 ****
ix[i] = (int)( sqrt(sqrt(temp)*temp) + 0.4054);
}
}
! for (;i<576;i++) ix[i] = 0;
!
! if ( s_start < 192 )
! for ( b = 0; b < 3; b++ )
! {
! step = pow( 2.0, (quantizerStepSize + 8.0 * (double) cod_info->subblock_gain[b]) * 0.25 );
! #ifdef LOOP
! for (i=s_start;i<192;i++)
! {
! dbl = fabs((*xr_s)[i][b])/step;
- ln = (long)dbl;
- if(ln<10000)
- {
- idx=int2idx[ln];
- if(dbl<idx2dbl[idx+1]) (*ix_s)[i][b] = idx;
- else (*ix_s)[i][b] = idx+1;
- }
- else
- {
- dbl = sqrt(sqrt(dbl)*dbl);
- if(dbl<0.0946) (*ix_s)[i][b] = (int)(dbl - 0.5946);
- else (*ix_s)[i][b] = (int)(dbl + 0.4154);
- }
-
- }
- #else
- for ( i = s_start; i < 192; i++ )
- (*ix_s)[i][b] = nint( pow(fabs((*xr_s)[i][b]) / step, 0.75) - 0.0946 );
- #endif
- }
}
--- 2170,2177 ----
ix[i] = (int)( sqrt(sqrt(temp)*temp) + 0.4054);
}
}
! }
}
***************
*** 2256,2262 ****
for ( i = begin; i < end; i++ )
{
! int x = abs( ix[i] );
if ( x > max )
max = x;
}
--- 2191,2197 ----
for ( i = begin; i < end; i++ )
{
! int x = ix[i];
if ( x > max )
max = x;
}
***************
*** 2310,2326 ****
else
{
for ( i = 576; i > 1; i -= 2 )
! if ( ix[i-1] == 0 && ix[i-2] == 0 )
! rzero++;
! else
! break;
!
cod_info->count1 = 0 ;
for ( ; i > 3; i -= 4 )
! if ( abs(ix[i-1]) <= 1
! && abs(ix[i-2]) <= 1
! && abs(ix[i-3]) <= 1
! && abs(ix[i-4]) <= 1 )
cod_info->count1++;
else
break;
--- 2245,2255 ----
else
{
for ( i = 576; i > 1; i -= 2 )
! if ( ix[i-1] | ix[i-2] ) break;
!
cod_info->count1 = 0 ;
for ( ; i > 3; i -= 4 )
! if ( (ix[i-1] | ix[i-2] | ix[i-3] | ix[i-4]) <= 1 )
cod_info->count1++;
else
break;
***************
*** 2327,2333 ****
cod_info->big_values = i/2;
}
- assert( (2 * rzero + 4 * cod_info->count1 + 2 * cod_info->big_values) == 576 );
}
--- 2256,2261 ----
***************
*** 2350,2361 ****
for ( i = cod_info->big_values * 2, k = 0; k < cod_info->count1; i += 4, k++ )
{
! v = abs(ix[i]);
! w = abs(ix[i+1]);
! x = abs(ix[i+2]);
! y = abs(ix[i+3]);
-
/*
v = ix[ i ];
w = ix[ i + 1 ];
--- 2278,2288 ----
for ( i = cod_info->big_values * 2, k = 0; k < cod_info->count1; i += 4, k++ )
{
! v = ix[i];
! w = ix[i+1];
! x = ix[i+2];
! y = ix[i+3];
/*
v = ix[ i ];
w = ix[ i + 1 ];
***************
*** 2495,2501 ****
}
else
{
! if ( (cod_info->block_type == 2) && (cod_info->mixed_block_flag == 0) )
{
cod_info->region0_count = 8;
cod_info->region1_count = 36;
--- 2422,2428 ----
}
else
{
! if ( (cod_info->block_type == 2) )
{
cod_info->region0_count = 8;
cod_info->region1_count = 36;
***************
*** 2519,2595 ****
/*************************************************************************/
- /* bigv_tab_select */
- /*************************************************************************/
-
- /*
- * Function: Select huffman code tables for bigvalues regions
- */
-
- void bigv_tab_select( int ix[576], gr_info *cod_info )
- {
- /* int max; */
-
- cod_info->table_select[0] = 0;
- cod_info->table_select[1] = 0;
- cod_info->table_select[2] = 0;
-
- if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
- {
- /*
- Within each scalefactor band, data is given for successive
- time windows, beginning with window 0 and ending with window 2.
- Within each window, the quantized values are then arranged in
- order of increasing frequency...
- */
- int sfb, window, line, start, end, max1, max2, x, y;
- int region1Start;
- int *pmax;
-
- region1Start = 12;
- max1 = max2 = 0;
-
- for ( sfb = 0; sfb < 13; sfb++ )
- {
- start = scalefac_band_short[ sfb ];
- end = scalefac_band_short[ sfb+1 ];
-
- if ( start < region1Start )
- pmax = &max1;
- else
- pmax = &max2;
-
- for ( window = 0; window < 3; window++ )
- for ( line = start; line < end; line += 2 )
- {
- assert( line >= 0 );
- assert( line < 576 );
- x = abs( ix[ (line * 3) + window ] );
- y = abs( ix[ ((line + 1) * 3) + window ]);
- *pmax = *pmax > x ? *pmax : x;
- *pmax = *pmax > y ? *pmax : y;
- }
- }
- cod_info->table_select[0] = choose_table( max1 );
- cod_info->table_select[1] = choose_table( max2 );
- }
- else
- {
- if ( cod_info->address1 > 0 )
- cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1 );
-
- if ( cod_info->address2 > cod_info->address1 )
- cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2 );
-
- if ( cod_info->big_values * 2 > cod_info->address2 )
- cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values * 2 );
- }
- }
-
-
-
-
- /*************************************************************************/
/* new_choose table */
/*************************************************************************/
--- 2446,2451 ----
***************
*** 2602,2608 ****
with any arbitrary tables.
*/
! int new_choose_table( int ix[576], unsigned int begin, unsigned int end )
{
int i, max;
int choice[ 2 ];
--- 2458,2464 ----
with any arbitrary tables.
*/
! int new_choose_table( int ix[576], unsigned int begin, unsigned int end, int * s )
{
int i, max;
int choice[ 2 ];
***************
*** 2612,2619 ****
if ( max == 0 )
return 0;
-
- max = abs( max );
choice[ 0 ] = 0;
choice[ 1 ] = 0;
--- 2468,2473 ----
***************
*** 2627,2633 ****
choice[ 0 ] = i;
break;
}
- assert( choice[0] );
sum[ 0 ] = count_bit( ix, begin, end, choice[0] );
--- 2481,2486 ----
***************
*** 2636,2648 ****
--- 2489,2507 ----
case 2:
sum[ 1 ] = count_bit( ix, begin, end, 3 );
if ( sum[1] <= sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = 3;
+ }
break;
case 5:
sum[ 1 ] = count_bit( ix, begin, end, 6 );
if ( sum[1] <= sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = 6;
+ }
break;
case 7:
***************
*** 2654,2660 ****
--- 2513,2522 ----
}
sum[ 1 ] = count_bit( ix, begin, end, 9 );
if ( sum[1] <= sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = 9;
+ }
break;
case 10:
***************
*** 2666,2678 ****
--- 2528,2546 ----
}
sum[ 1 ] = count_bit( ix, begin, end, 12 );
if ( sum[1] <= sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = 12;
+ }
break;
case 13:
sum[ 1 ] = count_bit( ix, begin, end, 15 );
if ( sum[1] <= sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = 15;
+ }
break;
default:
***************
*** 2700,2718 ****
break;
}
}
- assert( choice[0] );
- assert( choice[1] );
sum[ 0 ] = count_bit( ix, begin, end, choice[0] );
sum[ 1 ] = count_bit( ix, begin, end, choice[1] );
if ( sum[1] < sum[0] )
choice[ 0 ] = choice[ 1 ];
}
return choice[ 0 ];
}
-
/*************************************************************************/
/* choose table */
/*************************************************************************/
--- 2568,2587 ----
break;
}
}
sum[ 0 ] = count_bit( ix, begin, end, choice[0] );
sum[ 1 ] = count_bit( ix, begin, end, choice[1] );
if ( sum[1] < sum[0] )
+ {
+ sum[0]=sum[1];
choice[ 0 ] = choice[ 1 ];
+ }
}
+ *s=sum[0];
return choice[ 0 ];
}
/*************************************************************************/
/* choose table */
/*************************************************************************/
***************
*** 2724,2730 ****
if ( max == 0 )
return 0;
- max = abs( max );
choice = 0;
if ( max < 15 )
--- 2593,2598 ----
***************
*** 2755,2773 ****
}
/*************************************************************************/
/* bigv_bitcount */
/*************************************************************************/
/*
Function: Count the number of bits necessary to code the bigvalues region.
*/
! int bigv_bitcount( int ix[576], gr_info *gi )
{
int bits = 0;
! if ( gi->window_switching_flag && gi->block_type == 2 )
{
/*
Within each scalefactor band, data is given for successive
--- 2623,2647 ----
}
+
/*************************************************************************/
/* bigv_bitcount */
/*************************************************************************/
/*
+ Function: Select huffman code tables for bigvalues regions
Function: Count the number of bits necessary to code the bigvalues region.
*/
! int bigv_bitcount( int ix[576], gr_info *cod_info )
{
int bits = 0;
+
+ cod_info->table_select[0] = 0;
+ cod_info->table_select[1] = 0;
+ cod_info->table_select[2] = 0;
! if ( cod_info->window_switching_flag && (cod_info->block_type == 2) )
{
/*
Within each scalefactor band, data is given for successive
***************
*** 2775,2792 ****
Within each window, the quantized values are then arranged in
order of increasing frequency...
*/
! int sfb, window, line, start, end;
I192_3 *ix_s;
- if ( gi->mixed_block_flag )
- {
- unsigned int table;
! if ( (table = gi->table_select[0]) != 0 )
! bits += count_bit( ix, 0, gi->address1, table );
! sfb = 2;
}
! else
sfb = 0;
ix_s = (I192_3 *) &ix[0];
--- 2649,2692 ----
Within each window, the quantized values are then arranged in
order of increasing frequency...
*/
! int sfb, window, line, start, end, max1, max2, x, y;
! int region1Start;
! int *pmax;
I192_3 *ix_s;
! region1Start = 12;
! max1 = max2 = 0;
!
! for ( sfb = 0; sfb < 13; sfb++ )
! {
! start = scalefac_band_short[ sfb ];
! end = scalefac_band_short[ sfb+1 ];
!
! if ( start < region1Start )
! pmax = &max1;
! else
! pmax = &max2;
!
! for ( window = 0; window < 3; window++ )
! for ( line = start; line < end; line += 2 )
! {
! x = ix[ (line * 3) + window ];
! y = ix[ ((line + 1) * 3) + window ];
! *pmax = *pmax > x ? *pmax : x;
! *pmax = *pmax > y ? *pmax : y;
! }
}
! cod_info->table_select[0] = choose_table( max1 );
! cod_info->table_select[1] = choose_table( max2 );
!
! /*
! Within each scalefactor band, data is given for successive
! time windows, beginning with window 0 and ending with window 2.
! Within each window, the quantized values are then arranged in
! order of increasing frequency...
! */
!
sfb = 0;
ix_s = (I192_3 *) &ix[0];
***************
*** 2799,2808 ****
end = scalefac_band_short[ sfb+1 ];
if ( start < 12 )
! tableindex = gi->table_select[ 0 ];
else
! tableindex = gi->table_select[ 1 ];
! assert( tableindex < 32 );
for ( window = 0; window < 3; window++ )
for ( line = start; line < end; line += 2 )
--- 2699,2707 ----
end = scalefac_band_short[ sfb+1 ];
if ( start < 12 )
! tableindex = cod_info->table_select[ 0 ];
else
! tableindex = cod_info->table_select[ 1 ];
for ( window = 0; window < 3; window++ )
for ( line = start; line < end; line += 2 )
***************
*** 2818,2830 ****
else
{
unsigned int table;
! if( (table=gi->table_select[0]) != 0 ) /* region0 */
! bits += count_bit(ix, 0, gi->address1, table );
! if( (table=gi->table_select[1]) != 0 ) /* region1 */
! bits += count_bit(ix, gi->address1, gi->address2, table );
! if( (table=gi->table_select[2]) != 0 ) /* region2 */
! bits += count_bit(ix, gi->address2, gi->address3, table );
}
return bits;
}
--- 2717,2744 ----
else
{
unsigned int table;
+ int s;
! if ( cod_info->address1 > 0 )
! {
! table = cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1, &s );
! if( table != 0 ) /* region0 */
! bits += s;
! }
!
! if ( cod_info->address2 > cod_info->address1 )
! {
! table = cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2, &s );
! if( table != 0 ) /* region1 */
! bits += s;
! }
!
! if ( cod_info->big_values * 2 > cod_info->address2 )
! {
! table = cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values * 2, &s );
! if( table != 0 ) /* region2 */
! bits += s;
! }
}
return bits;
}
***************
*** 2944,2959 ****
void gr_deco( gr_info *cod_info )
{
if ( cod_info->window_switching_flag != 0 && cod_info->block_type == 2 )
- if ( cod_info->mixed_block_flag == 0 )
{
cod_info->sfb_lmax = 0; /* No sb*/
cod_info->sfb_smax = 0;
}
- else
- {
- cod_info->sfb_lmax = 8;
- cod_info->sfb_smax = 3;
- }
else
{
/* MPEG 1 doesnt use last scalefactor band? */
--- 2858,2867 ----
***************
*** 2981,2993 ****
int *ix; /* I576 *ix; */
gr_info *cod_info;
{
! int bits,max;
calc_runlen(ix,cod_info); /*rzero,count1,big_values*/
- max = ix_max( ix, 0,576);
- if(max > 8192) return 100000; /* report unsuitable quantizer */
bits = count1_bitcount(ix, cod_info); /*count1_table selection*/
subdivide(cod_info); /* bigvalues sfb division */
- bigv_tab_select(ix,cod_info); /* codebook selection*/
bits += bigv_bitcount(ix,cod_info); /* bit count */
/* printf("\nglobal_gain = %f bits= %d ",cod_info->quantizerStepSize,bits);*/
return bits;
--- 2889,2903 ----
int *ix; /* I576 *ix; */
gr_info *cod_info;
{
! int bits,i;
! for ( i = 0; i < 576; i++ )
! {
! if ( ix[i] > 8191 + 14)
! return 100000; /* report unsuitable quantizer */
! }
calc_runlen(ix,cod_info); /*rzero,count1,big_values*/
bits = count1_bitcount(ix, cod_info); /*count1_table selection*/
subdivide(cod_info); /* bigvalues sfb division */
bits += bigv_bitcount(ix,cod_info); /* bit count */
/* printf("\nglobal_gain = %f bits= %d ",cod_info->quantizerStepSize,bits);*/
return bits;
***************
*** 2998,3004 ****
int bin_search_StepSize(int desired_rate, double start, int *ix,
double xrs[576], gr_info * cod_info)
{
! double top,bot,next,last;
int bit;
top = start;
bot = 200;
--- 2908,2914 ----
int bin_search_StepSize(int desired_rate, double start, int *ix,
double xrs[576], gr_info * cod_info)
{
! int top,bot,next,last;
int bit;
top = start;
bot = 200;
***************
*** 3006,3012 ****
do
{
last = next;
! next = aint((top+bot)/2.0);
cod_info->quantizerStepSize = next;
quantize(xrs,ix,cod_info);
bit = count_bits(ix,cod_info);
--- 2916,2922 ----
do
{
last = next;
! next = (top+bot)/2;
cod_info->quantizerStepSize = next;
quantize(xrs,ix,cod_info);
bit = count_bits(ix,cod_info);
***************
*** 3016,3022 ****
printf("\n%f %f %f %f %d %d",start,next, top,bot,bit,desired_rate);
*/
}
! while ((bit != desired_rate) && fabs(last - next) > 1.0);
/*
printf("\n done %f %d %d",next,bit,desired_rate);
*/
--- 2926,2932 ----
printf("\n%f %f %f %f %d %d",start,next, top,bot,bit,desired_rate);
*/
}
! while ((bit != desired_rate) && abs(last - next) > 1);
/*
printf("\n done %f %d %d",next,bit,desired_rate);
*/
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: subs.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 31
*** subs.c.1 Wed May 19 21:39:20 1999
--- subs.c Thu May 20 17:35:36 1999
***************
*** 73,78 ****
--- 73,80 ----
#define SQRT2 2*0.70710678118654752440084436210484
+ /* This is a simplified version for n an even power of 2 */
+
static void fht(FLOAT *fz, int n)
{
int i,k,k1,k2,k3,k4,kx;
***************
*** 204,210 ****
energy[i] = 0.0005;
phi[i] = 0.0;
}
! else {
phi[i] = atan2( b-a, b+a );
}
}
--- 206,213 ----
energy[i] = 0.0005;
phi[i] = 0.0;
}
! /* If N==1024 we only use the angle of the first 6. */
! else if(N!=1024 || i<6) {
phi[i] = atan2( b-a, b+a );
}
}
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: mdct.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 776
*** mdct.c.1 Wed May 19 22:11:50 1999
--- mdct.c Wed May 19 22:12:00 1999
***************
*** 54,62 ****
/*
Compensate for inversion in the analysis filter
*/
! for ( band = 0; band < 32; band++ )
! for ( k = 0; k < 18; k++ )
! if ( (band & 1) && (k & 1) )
(*sb_sample)[ch][gr+1][k][band] *= -1.0;
/*
--- 54,61 ----
/*
Compensate for inversion in the analysis filter
*/
! for ( band = 1; band < 32; band+=2 )
! for ( k = 1; k < 18; k+=2 )
(*sb_sample)[ch][gr+1][k][band] *= -1.0;
/*
***************
*** 123,130 ****
double sum;
static double win[4][36];
static int init = 0;
! static double cos_s[6][12], cos_l[18][36];
! static double fin[36];
if ( init == 0 )
{
--- 122,129 ----
double sum;
static double win[4][36];
static int init = 0;
! static double cos_s[6][12], cos_l[18][18];
! static double fin[18];
if ( init == 0 )
{
***************
*** 149,176 ****
win[3][i] = 1.0;
for ( i = 18; i < 36; i++ )
win[3][i] = sin( PI/36 * (i + 0.5) );
- /* type 2*/
- for ( i = 0; i < 12; i++ )
- win[2][i] = sin( PI/12 * (i + 0.5) );
- for ( i = 12; i < 36; i++ )
- win[2][i] = 0.0;
N = 12;
for ( m = 0; m < N / 2; m++ )
for ( k = 0; k < N; k++ )
cos_s[m][k] = cos( (PI /(2 * N)) * (2 * k + 1 + N / 2) *
! (2 * m + 1) ) / (N / 4);
N = 36;
for ( m = 0; m < N / 2; m++ )
! for ( k = 0; k < N; k++ )
cos_l[m][k] = cos( (PI / (2 * N)) * (2 * k + 1 + N / 2) *
(2 * m + 1) ) / (N / 4);
!
init++;
}
! if ( block_type == 2 )
{
N = 12;
for ( l = 0; l < 3; l++ )
--- 148,175 ----
win[3][i] = 1.0;
for ( i = 18; i < 36; i++ )
win[3][i] = sin( PI/36 * (i + 0.5) );
N = 12;
for ( m = 0; m < N / 2; m++ )
for ( k = 0; k < N; k++ )
cos_s[m][k] = cos( (PI /(2 * N)) * (2 * k + 1 + N / 2) *
! (2 * m + 1) ) / (N / 4) * sin( PI/12 * (k + 0.5) );
N = 36;
for ( m = 0; m < N / 2; m++ )
! {
! for ( k = 0; k < 9; k++ )
! {
cos_l[m][k] = cos( (PI / (2 * N)) * (2 * k + 1 + N / 2) *
(2 * m + 1) ) / (N / 4);
! cos_l[m][9+k] = cos( (PI / (2 * N)) * (2 * (18 + k) + 1 + N / 2) *
! (2 * m + 1) ) / (N / 4);
! }
! }
init++;
}
! if ( block_type == 2)
{
N = 12;
for ( l = 0; l < 3; l++ )
***************
*** 178,527 ****
for ( m = 0; m < N / 2; m++ )
{
for ( sum = 0.0, k = 0; k < N; k++ )
! sum += win[block_type][k] * in[k + 6 * l + 6] * cos_s[m][k];
out[ 3 * m + l] = sum;
}
}
}
! else
{
! if (block_type!=0) { /* then it's a short->long or long->short block */
! N = 36;
! for (k=0;k<N;k++)
! fin[k]=win[block_type][k]*in[k];
! for ( m = 0; m < N / 2; m++ )
! {
! for ( sum = 0.0, k = 0; k < N; k++ )
! sum += fin[k] * cos_l[m][k];
! out[m] = sum;
! }
! }
! else /* block_type is 0. This is a long->long transform */
! {
! N=36;
! for (k=0;k<N;k++)
! fin[k]=win[0][k]*in[k]; /* do the f(k)*in(k) first. and save the results */
/* 0 */
! sum = ( fin[0]-fin[17] ) * cos_l[0][0]; /* 17 */
! sum += ( fin[1]-fin[16] ) * cos_l[0][1]; /* 15 */
! sum += ( fin[2]-fin[15] ) * cos_l[0][2]; /* 13 */
! sum += ( fin[3]-fin[14] ) * cos_l[0][3]; /* 11 */
! sum += ( fin[4]-fin[13] ) * cos_l[0][4]; /* 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[0][5]; /* 7 */
! sum += ( fin[6]-fin[11] ) * cos_l[0][6]; /* 5 */
! sum += ( fin[7]-fin[10] ) * cos_l[0][7]; /* 3 */
! sum += ( fin[8]-fin[9] ) * cos_l[0][8]; /* 1 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[0][18]; /* 19*/
! sum += ( -fin[19]-fin[34] ) * -cos_l[0][19]; /* 21 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[0][20]; /* 23 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[0][21]; /*25 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[0][22]; /* 27 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[0][23]; /* 29 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[0][24]; /* 31*/
! sum += ( -fin[25]-fin[28] ) * -cos_l[0][25]; /* 33 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[0][26]; /* 35 */
out[0]=sum;
/* 1 */
! sum = ( -fin[2]-fin[3]+fin[14]+fin[15]-fin[26]-fin[27] ) * -cos_l[1][2]; /* mfc=3 2*/
! sum += ( -fin[1]-fin[4]+fin[13]+fin[16]-fin[25]-fin[28] ) * -cos_l[1][1]; /* mfc=9 1*/
! sum += ( -fin[0]-fin[5]+fin[12]+fin[17]-fin[24]-fin[29] ) * -cos_l[1][0]; /* mfc=15 0*/
! sum += ( -fin[6]+fin[11]+fin[18]-fin[23]-fin[30]+fin[35] ) * -cos_l[1][6]; /* mfc=21 6*/
! sum += ( -fin[7]+fin[10]+fin[19]-fin[22]-fin[31]+fin[34] ) * -cos_l[1][7]; /* mfc=27 7*/
! sum += ( -fin[8]+fin[9]+fin[20]-fin[21]-fin[32]+fin[33] ) * -cos_l[1][8]; /* mfc = 28 8*/
out[1]=sum;
/* 2 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[2][0]; /* mfc 23 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[2][1]; /* mfc 33 */
! sum += ( fin[2]-fin[15] ) * cos_l[2][2]; /* mfc 29 */
! sum += ( fin[3]-fin[14] ) * cos_l[2][3]; /* mfc 19 */
! sum += ( fin[4]-fin[13] ) * cos_l[2][4]; /* mfc 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[2][5]; /* mfc 1 */
! sum += ( fin[6]-fin[11] ) * cos_l[2][6]; /* mfc 11 */
! sum += ( fin[7]-fin[10] ) * cos_l[2][7]; /* mfc 21 */
! sum += ( fin[8]-fin[9] ) * cos_l[2][8]; /* mfc 31 */
! sum += ( fin[18]+fin[35] ) * cos_l[2][18]; /* mfc 13 */
! sum += ( fin[19]+fin[34] ) * cos_l[2][19]; /* mfc 3 */
! sum += ( fin[20]+fin[33] ) * cos_l[2][20]; /* mfc 7 */
! sum += ( fin[21]+fin[32] ) * cos_l[2][21]; /* mfc 17 */
! sum += ( fin[22]+fin[31] ) * cos_l[2][22]; /* mfc 27 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[2][23]; /* mfc 35 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[2][24]; /* mfc 25 */
! sum += ( -fin[25]-fin[28] ) * -cos_l[2][25]; /* mfc 15 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[2][26]; /* mfc 5 */
out[2]=sum;
/* 3 */
! sum = ( fin[0]-fin[17] ) * cos_l[3][0]; /* mfc 11 */
! sum += ( fin[1]-fin[16] ) * cos_l[3][1]; /* mfc 3 */
! sum += ( fin[2]-fin[15] ) * cos_l[3][2]; /* 17 */
! sum += ( fin[3]-fin[14] ) * cos_l[3][3]; /* 31 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[3][4]; /* 27 */
! sum += ( -fin[5]+fin[12] ) * -cos_l[3][5]; /* 13 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[3][6]; /* 1 */
! sum += ( -fin[7]+fin[10] ) * -cos_l[3][7]; /* 15 */
! sum += ( -fin[8]+fin[9] ) * -cos_l[3][8]; /* 29 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[3][18]; /* 25 */
! sum += ( fin[19]+fin[34] ) * cos_l[3][19]; /* 33 */
! sum += ( fin[20]+fin[33] ) * cos_l[3][20]; /* 19 */
! sum += ( fin[21]+fin[32] ) * cos_l[3][21]; /* 5 */
! sum += ( fin[22]+fin[31] ) * cos_l[3][22]; /* 9 */
! sum += ( fin[23]+fin[30] ) * cos_l[3][23]; /* 23 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[3][24]; /* 35 */
! sum += ( -fin[25]-fin[28] ) * -cos_l[3][25]; /* 21 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[3][26]; /* 7 */
out[3]=sum;
/* 4 */
/* mfc 27 */
! sum = ( fin[0]-fin[1]-fin[4]+fin[5]+fin[8]-fin[9]-fin[12]+fin[13]+fin[16]-fin[17] \
! -fin[20]+fin[21]+fin[24]-fin[25]-fin[28]+fin[29]+fin[32]-fin[33] ) * cos_l[4][0];
/* mfc 9 */
! sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[10]-fin[11]+fin[14]+fin[15]-fin[18]-fin[19] \
! +fin[22]+fin[23]-fin[26]-fin[27]+fin[30]+fin[31]-fin[34]-fin[35] ) * cos_l[4][6];
out[4]=sum;
/* 5 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[5][0]; /* 7 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[5][1]; /* 15 */
! sum += ( fin[2]-fin[15] ) * cos_l[5][2]; /* 35 */
! sum += ( fin[3]-fin[14] ) * cos_l[5][3]; /* 13 */
! sum += ( fin[4]-fin[13] ) * cos_l[5][4]; /* 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[5][5]; /* 31 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[5][6]; /* 19 */
! sum += ( -fin[7]+fin[10] ) * -cos_l[5][7]; /* 3 */
! sum += ( -fin[8]+fin[9] ) * -cos_l[5][8]; /* 8 */
! sum += ( fin[18]+fin[35] ) * cos_l[5][18]; /* 29 */
! sum += ( -fin[19]-fin[34] ) * -cos_l[5][19]; /* 21 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[5][20]; /* 1 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[5][21]; /* 23 */
! sum += ( fin[22]+fin[31] ) * cos_l[5][22]; /* 27 */
! sum += ( fin[23]+fin[30] ) * cos_l[5][23]; /* 5 */
! sum += ( fin[24]+fin[29] ) * cos_l[5][24]; /* 17 */
! sum += ( -fin[25]-fin[28] ) * -cos_l[5][25]; /* 33 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[5][26]; /* 11 */
out[5]=sum;
/* 6 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[6][0]; /* 31 */
! sum += ( fin[1]-fin[16] ) * cos_l[6][1]; /* 15 */
! sum += ( fin[2]-fin[15] ) * cos_l[6][2]; /* 11 */
! sum += ( -fin[3]+fin[14] ) * -cos_l[6][3]; /* 35 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[6][4]; /* 9 */
! sum += ( -fin[5]+fin[12] ) * -cos_l[6][5]; /* 17 */
! sum += ( fin[6]-fin[11] ) * cos_l[6][6]; /* 29 */
! sum += ( fin[7]-fin[10] ) * cos_l[6][7]; /* 3 */
! sum += ( fin[8]-fin[9] ) * cos_l[6][8]; /* 23 */
! sum += ( fin[18]+fin[35] ) * cos_l[6][18]; /* 5 */
! sum += ( fin[19]+fin[34] ) * cos_l[6][19]; /* 21 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[6][20]; /* 25 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[6][21]; /* 1 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[6][22]; /* 27 */
! sum += ( fin[23]+fin[30] ) * cos_l[6][23]; /* 19 */
! sum += ( fin[24]+fin[29] ) * cos_l[6][24]; /* 7 */
! sum += ( fin[25]+fin[28] ) * cos_l[6][25]; /* 33 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[6][26]; /* 13 */
out[6]=sum;
/* 7 */
! sum = ( fin[0]+fin[5]-fin[12]-fin[17]+fin[24]+fin[29] ) * cos_l[7][0]; /* 3 */
! sum += ( fin[1]+fin[4]-fin[13]-fin[16]+fin[25]+fin[28] ) * cos_l[7][1]; /* 27*/
! sum += ( -fin[2]-fin[3]+fin[14]+fin[15]-fin[26]-fin[27] ) * -cos_l[7][2]; /* 15 */
! sum += ( fin[6]-fin[11]-fin[18]+fin[23]+fin[30]-fin[35] ) * cos_l[7][6]; /* 33 */
! sum += ( -fin[7]+fin[10]+fin[19]-fin[22]-fin[31]+fin[34] ) * -cos_l[7][7]; /* 9 */
! sum += ( -fin[8]+fin[9]+fin[20]-fin[21]-fin[32]+fin[33] ) * -cos_l[7][8]; /* 21 */
out[7]=sum;
/* 8 */
! sum = ( fin[0]-fin[17] ) * cos_l[8][0]; /* 35 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[8][1]; /* 3 */
! sum += ( -fin[2]+fin[15] ) * -cos_l[8][2]; /* 31 */
! sum += ( fin[3]-fin[14] ) * cos_l[8][3]; /* 7 */
! sum += ( fin[4]-fin[13] ) * cos_l[8][4]; /* 27*/
! sum += ( -fin[5]+fin[12] ) * -cos_l[8][5]; /* 11 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[8][6]; /* 23 */
! sum += ( fin[7]-fin[10] ) * cos_l[8][7]; /* 15*/
! sum += ( fin[8]-fin[9] ) * cos_l[8][8]; /* 19 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[8][18]; /* 1 */
! sum += ( -fin[19]-fin[34] ) * -cos_l[8][19]; /* 33 */
! sum += ( fin[20]+fin[33] ) * cos_l[8][20]; /* 5 */
! sum += ( fin[21]+fin[32] ) * cos_l[8][21]; /* 29*/
! sum += ( -fin[22]-fin[31] ) * -cos_l[8][22]; /* 9 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[8][23]; /* 25 */
! sum += ( fin[24]+fin[29] ) * cos_l[8][24]; /* 13*/
! sum += ( fin[25]+fin[28] ) * cos_l[8][25]; /* 21 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[8][26]; /* 17 */
out[8]=sum;
/* 9 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[9][0]; /* 1 */
! sum += ( fin[1]-fin[16] ) * cos_l[9][1]; /* 33 */
! sum += ( fin[2]-fin[15] ) * cos_l[9][2]; /* 5 */
! sum += ( -fin[3]+fin[14] ) * -cos_l[9][3]; /* 29*/
! sum += ( -fin[4]+fin[13] ) * -cos_l[9][4]; /* 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[9][5]; /* 25 */
! sum += ( fin[6]-fin[11] ) * cos_l[9][6]; /* 13 */
! sum += ( -fin[7]+fin[10] ) * -cos_l[9][7]; /* 21*/
! sum += ( -fin[8]+fin[9] ) * -cos_l[9][8]; /* 17 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[9][18]; /* 35*/
! sum += ( -fin[19]-fin[34] ) * -cos_l[9][19]; /* 3 */
! sum += ( fin[20]+fin[33] ) * cos_l[9][20]; /* 31 */
! sum += ( fin[21]+fin[32] ) * cos_l[9][21]; /* 7 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[9][22]; /* 27 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[9][23]; /* 11 */
! sum += ( fin[24]+fin[29] ) * cos_l[9][24]; /* 23*/
! sum += ( fin[25]+fin[28] ) * cos_l[9][25]; /* 15 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[9][26]; /* 19 */
out[9]=sum;
/* 10 */
! sum = ( fin[0]+fin[5]-fin[12]-fin[17]+fin[24]+fin[29] ) * cos_l[10][0]; /* 33 */
! sum += ( fin[1]+fin[4]-fin[13]-fin[16]+fin[25]+fin[28] ) * cos_l[10][1]; /* 9 */
! sum += ( -fin[2]-fin[3]+fin[14]+fin[15]-fin[26]-fin[27] ) * -cos_l[10][2]; /* 21 */
! sum += ( -fin[6]+fin[11]+fin[18]-fin[23]-fin[30]+fin[35] ) * -cos_l[10][6]; /* 3 */
! sum += ( fin[7]-fin[10]-fin[19]+fin[22]+fin[31]-fin[34] ) * cos_l[10][7]; /* 27 */
! sum += ( fin[8]-fin[9]-fin[20]+fin[21]+fin[32]-fin[33] ) * cos_l[10][8]; /* 15 */
out[10]=sum;
/* 11 */
! sum = ( fin[0]-fin[17] ) * cos_l[11][0]; /* 5 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[11][1]; /* 21 */
! sum += ( -fin[2]+fin[15] ) * -cos_l[11][2]; /* 25 */
! sum += ( fin[3]-fin[14] ) * cos_l[11][3]; /* 1 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[11][4]; /*27 */
! sum += ( -fin[5]+fin[12] ) * -cos_l[11][5]; /* 19 */
! sum += ( fin[6]-fin[11] ) * cos_l[11][6]; /* 7 */
! sum += ( fin[7]-fin[10] ) * cos_l[11][7]; /* 33*/
! sum += ( -fin[8]+fin[9] ) * -cos_l[11][8]; /* 13 */
! sum += ( fin[18]+fin[35] ) * cos_l[11][18]; /* 31*/
! sum += ( fin[19]+fin[34] ) * cos_l[11][19]; /* 15 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[11][20]; /* 11 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[11][21]; /*35 */
! sum += ( fin[22]+fin[31] ) * cos_l[11][22]; /* 9 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[11][23]; /* 17 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[11][24]; /* 29*/
! sum += ( fin[25]+fin[28] ) * cos_l[11][25]; /* 3 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[11][26]; /* 23 */
out[11]=sum;
/* 12 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[12][0]; /* 29 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[12][1]; /* 21 */
! sum += ( fin[2]-fin[15] ) * cos_l[12][2]; /* 1 */
! sum += ( -fin[3]+fin[14] ) * -cos_l[12][3]; /* 23 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[12][4]; /*27 */
! sum += ( fin[5]-fin[12] ) * cos_l[12][5]; /* 5 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[12][6]; /* 17 */
! sum += ( -fin[7]+fin[10] ) * -cos_l[12][7]; /* 33*/
! sum += ( fin[8]-fin[9] ) * cos_l[12][8]; /* 11 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[12][18]; /* 7 */
! sum += ( fin[19]+fin[34] ) * cos_l[12][19]; /* 15 */
! sum += ( fin[20]+fin[33] ) * cos_l[12][20]; /* 35 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[12][21]; /*13 */
! sum += ( fin[22]+fin[31] ) * cos_l[12][22]; /* 9 */
! sum += ( -fin[23]-fin[30] ) * -cos_l[12][23]; /* 31 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[12][24]; /* 19*/
! sum += ( fin[25]+fin[28] ) * cos_l[12][25]; /* 3 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[12][26]; /* 25 */
out[12]=sum;
/* 13 */
! sum = ( -fin[0]+fin[1]+fin[4]-fin[5]-fin[8]+fin[9]+fin[12]-fin[13]-fin[16]+fin[17]+fin[20]-fin[21] \
! -fin[24]+fin[25]+fin[28]-fin[29]-fin[32]+fin[33] ) * -cos_l[13][0]; /* 9 */
! sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[10]-fin[11]+fin[14]+fin[15]-fin[18]-fin[19]+fin[22] \
! +fin[23]-fin[26]-fin[27]+fin[30]+fin[31]-fin[34]-fin[35] ) * -cos_l[13][2]; /* 27 */
out[13]=sum;
/* 14 */
! sum = ( fin[0]-fin[17] ) * cos_l[14][0]; /* 25 */
! sum += ( fin[1]-fin[16] ) * cos_l[14][1]; /* 33 */
! sum += ( -fin[2]+fin[15] ) * -cos_l[14][2]; /* 19 */
! sum += ( fin[3]-fin[14] ) * cos_l[14][3]; /* 5 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[14][4]; /* 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[14][5]; /* 23 */
! sum += ( fin[6]-fin[11] ) * cos_l[14][6]; /* 35 */
! sum += ( -fin[7]+fin[10] ) * -cos_l[14][7]; /* 21*/
! sum += ( fin[8]-fin[9] ) * cos_l[14][8]; /* 7 */
! sum += ( fin[18]+fin[35] ) * cos_l[14][18]; /* 11*/
! sum += ( -fin[19]-fin[34] ) * -cos_l[14][19]; /* 3 */
! sum += ( fin[20]+fin[33] ) * cos_l[14][20]; /* 17 */
! sum += ( -fin[21]-fin[32] ) * -cos_l[14][21]; /*31 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[14][22]; /* 27 */
! sum += ( fin[23]+fin[30] ) * cos_l[14][23]; /* 13 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[14][24]; /* 1 */
! sum += ( fin[25]+fin[28] ) * cos_l[14][25]; /* 15 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[14][26]; /* 29 */
out[14]=sum;
/* 15 */
! sum = ( fin[0]-fin[17] ) * cos_l[15][0]; /* 13 */
! sum += ( -fin[1]+fin[16] ) * -cos_l[15][1]; /* 3 */
! sum += ( fin[2]-fin[15] ) * cos_l[15][2]; /* 7 */
! sum += ( -fin[3]+fin[14] ) * -cos_l[15][3]; /* 17 */
! sum += ( fin[4]-fin[13] ) * cos_l[15][4]; /* 27*/
! sum += ( fin[5]-fin[12] ) * cos_l[15][5]; /* 35 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[15][6]; /* 25 */
! sum += ( fin[7]-fin[10] ) * cos_l[15][7]; /* 15*/
! sum += ( -fin[8]+fin[9] ) * -cos_l[15][8]; /* 5 */
! sum += ( fin[18]+fin[35] ) * cos_l[15][18]; /* 23*/
! sum += ( -fin[19]-fin[34] ) * -cos_l[15][19]; /* 33 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[15][20]; /* 29 */
! sum += ( fin[21]+fin[32] ) * cos_l[15][21]; /*19 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[15][22]; /* 9 */
! sum += ( fin[23]+fin[30] ) * cos_l[15][23]; /* 1 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[15][24]; /* 11*/
! sum += ( fin[25]+fin[28] ) * cos_l[15][25]; /* 21 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[15][26]; /* 31 */
out[15]=sum;
/* 16 */
! sum = ( -fin[0]-fin[5]+fin[12]+fin[17]-fin[24]-fin[29] ) * -cos_l[16][0]; /* 21 */
! sum += ( fin[1]+fin[4]-fin[13]-fin[16]+fin[25]+fin[28] ) * cos_l[16][1]; /* 27 */
! sum += ( -fin[2]-fin[3]+fin[14]+fin[15]-fin[26]-fin[27] ) * -cos_l[16][2]; /* 33 */
! sum += ( fin[6]-fin[11]-fin[18]+fin[23]+fin[30]-fin[35] ) * cos_l[16][6]; /* 15 */
! sum += ( -fin[7]+fin[10]+fin[19]-fin[22]-fin[31]+fin[34] ) * -cos_l[16][7]; /* 9 */
! sum += ( fin[8]-fin[9]-fin[20]+fin[21]+fin[32]-fin[33] ) * cos_l[16][8]; /* 3 */
out[16]=sum;
/* 17 */
! sum = ( -fin[0]+fin[17] ) * -cos_l[17][0]; /* 17 */
! sum += ( fin[1]-fin[16] ) * cos_l[17][1]; /* 15 */
! sum += ( -fin[2]+fin[15] ) * -cos_l[17][2]; /* 13 */
! sum += ( fin[3]-fin[14] ) * cos_l[17][3]; /* 11 */
! sum += ( -fin[4]+fin[13] ) * -cos_l[17][4]; /* 9 */
! sum += ( fin[5]-fin[12] ) * cos_l[17][5]; /* 7 */
! sum += ( -fin[6]+fin[11] ) * -cos_l[17][6]; /* 5 */
! sum += ( fin[7]-fin[10] ) * cos_l[17][7]; /* 3 */
! sum += ( -fin[8]+fin[9] ) * -cos_l[17][8]; /* 1 */
! sum += ( -fin[18]-fin[35] ) * -cos_l[17][18]; /* 19*/
! sum += ( fin[19]+fin[34] ) * cos_l[17][19]; /* 21 */
! sum += ( -fin[20]-fin[33] ) * -cos_l[17][20]; /* 23 */
! sum += ( fin[21]+fin[32] ) * cos_l[17][21]; /*25 */
! sum += ( -fin[22]-fin[31] ) * -cos_l[17][22]; /* 27 */
! sum += ( fin[23]+fin[30] ) * cos_l[17][23]; /* 29 */
! sum += ( -fin[24]-fin[29] ) * -cos_l[17][24]; /* 31*/
! sum += ( fin[25]+fin[28] ) * cos_l[17][25]; /* 33 */
! sum += ( -fin[26]-fin[27] ) * -cos_l[17][26]; /* 35 */
out[17]=sum;
! }
! }
}
- void
- delay( double (*xr)[2][576], int stereo )
- {
- static double xr_buff[2][576];
- double xr_buff2[2][576];
- unsigned int i,j;
-
- for (i=0;i<stereo;i++)
- {
- for (j=0;j<576;j++) xr_buff2[i][j] = xr_buff[i][j];
- for (j=0;j<576;j++) xr_buff[i][j] = xr[1][i][j];
- for (j=0;j<576;j++) xr[1][i][j] = xr[0][i][j];
- for (j=0;j<576;j++) xr[0][i][j] = xr_buff2[i][j];
- }
- }
--- 177,499 ----
for ( m = 0; m < N / 2; m++ )
{
for ( sum = 0.0, k = 0; k < N; k++ )
! sum += in[k + 6 * l + 6] * cos_s[m][k];
out[ 3 * m + l] = sum;
}
}
}
! else
{
! for (k=0;k<9;k++)
! {
! fin[k] = win[block_type][k] * in[k] - win[block_type][17-k] * in[17-k];
! fin[9+k] = win[block_type][18+k] * in[18+k] + win[block_type][35-k] * in[35-k];
! }
/* 0 */
! sum = ( fin[0] ) * cos_l[0][0]; /* 17 */
! sum += ( fin[1] ) * cos_l[0][1]; /* 15 */
! sum += ( fin[2] ) * cos_l[0][2]; /* 13 */
! sum += ( fin[3] ) * cos_l[0][3]; /* 11 */
! sum += ( fin[4] ) * cos_l[0][4]; /* 9 */
! sum += ( fin[5] ) * cos_l[0][5]; /* 7 */
! sum += ( fin[6] ) * cos_l[0][6]; /* 5 */
! sum += ( fin[7] ) * cos_l[0][7]; /* 3 */
! sum += ( fin[8] ) * cos_l[0][8]; /* 1 */
! sum += ( -fin[9] ) * -cos_l[0][9]; /* 19*/
! sum += ( -fin[10] ) * -cos_l[0][10]; /* 21 */
! sum += ( -fin[11] ) * -cos_l[0][11]; /* 23 */
! sum += ( -fin[12] ) * -cos_l[0][12]; /*25 */
! sum += ( -fin[13] ) * -cos_l[0][13]; /* 27 */
! sum += ( -fin[14] ) * -cos_l[0][14]; /* 29 */
! sum += ( -fin[15] ) * -cos_l[0][15]; /* 31*/
! sum += ( -fin[16] ) * -cos_l[0][16]; /* 33 */
! sum += ( -fin[17] ) * -cos_l[0][17]; /* 35 */
out[0]=sum;
/* 1 */
! sum = ( -fin[2]-fin[3]-fin[17] ) * -cos_l[1][2]; /* mfc=3 2*/
! sum += ( -fin[1]-fin[4]-fin[16] ) * -cos_l[1][1]; /* mfc=9 1*/
! sum += ( -fin[0]-fin[5]-fin[15] ) * -cos_l[1][0]; /* mfc=15 0*/
! sum += ( -fin[6]+fin[9]-fin[14] ) * -cos_l[1][6]; /* mfc=21 6*/
! sum += ( -fin[7]+fin[10]-fin[13] ) * -cos_l[1][7]; /* mfc=27 7*/
! sum += ( -fin[8]+fin[11]-fin[12] ) * -cos_l[1][8]; /* mfc = 28 8*/
out[1]=sum;
/* 2 */
! sum = ( -fin[0] ) * -cos_l[2][0]; /* mfc 23 */
! sum += ( -fin[1] ) * -cos_l[2][1]; /* mfc 33 */
! sum += ( fin[2] ) * cos_l[2][2]; /* mfc 29 */
! sum += ( fin[3] ) * cos_l[2][3]; /* mfc 19 */
! sum += ( fin[4] ) * cos_l[2][4]; /* mfc 9 */
! sum += ( fin[5] ) * cos_l[2][5]; /* mfc 1 */
! sum += ( fin[6] ) * cos_l[2][6]; /* mfc 11 */
! sum += ( fin[7] ) * cos_l[2][7]; /* mfc 21 */
! sum += ( fin[8] ) * cos_l[2][8]; /* mfc 31 */
! sum += ( fin[9] ) * cos_l[2][9]; /* mfc 13 */
! sum += ( fin[10] ) * cos_l[2][10]; /* mfc 3 */
! sum += ( fin[11] ) * cos_l[2][11]; /* mfc 7 */
! sum += ( fin[12] ) * cos_l[2][12]; /* mfc 17 */
! sum += ( fin[13] ) * cos_l[2][13]; /* mfc 27 */
! sum += ( -fin[14] ) * -cos_l[2][14]; /* mfc 35 */
! sum += ( -fin[15] ) * -cos_l[2][15]; /* mfc 25 */
! sum += ( -fin[16] ) * -cos_l[2][16]; /* mfc 15 */
! sum += ( -fin[17] ) * -cos_l[2][17]; /* mfc 5 */
out[2]=sum;
/* 3 */
! sum = ( fin[0] ) * cos_l[3][0]; /* mfc 11 */
! sum += ( fin[1] ) * cos_l[3][1]; /* mfc 3 */
! sum += ( fin[2] ) * cos_l[3][2]; /* 17 */
! sum += ( fin[3] ) * cos_l[3][3]; /* 31 */
! sum += ( -fin[4] ) * -cos_l[3][4]; /* 27 */
! sum += ( -fin[5] ) * -cos_l[3][5]; /* 13 */
! sum += ( -fin[6] ) * -cos_l[3][6]; /* 1 */
! sum += ( -fin[7] ) * -cos_l[3][7]; /* 15 */
! sum += ( -fin[8] ) * -cos_l[3][8]; /* 29 */
! sum += ( -fin[9] ) * -cos_l[3][9]; /* 25 */
! sum += ( fin[10] ) * cos_l[3][10]; /* 33 */
! sum += ( fin[11] ) * cos_l[3][11]; /* 19 */
! sum += ( fin[12] ) * cos_l[3][12]; /* 5 */
! sum += ( fin[13] ) * cos_l[3][13]; /* 9 */
! sum += ( fin[14] ) * cos_l[3][14]; /* 23 */
! sum += ( -fin[15] ) * -cos_l[3][15]; /* 35 */
! sum += ( -fin[16] ) * -cos_l[3][16]; /* 21 */
! sum += ( -fin[17] ) * -cos_l[3][17]; /* 7 */
out[3]=sum;
/* 4 */
/* mfc 27 */
! sum = ( fin[0]-fin[1]-fin[4]+fin[5]+fin[8] \
! -fin[11]+fin[12]+fin[15]-fin[16] ) * cos_l[4][0];
/* mfc 9 */
! sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[9]-fin[10] \
! +fin[13]+fin[14]-fin[17] ) * cos_l[4][6];
out[4]=sum;
/* 5 */
! sum = ( -fin[0] ) * -cos_l[5][0]; /* 7 */
! sum += ( -fin[1] ) * -cos_l[5][1]; /* 15 */
! sum += ( fin[2] ) * cos_l[5][2]; /* 35 */
! sum += ( fin[3] ) * cos_l[5][3]; /* 13 */
! sum += ( fin[4] ) * cos_l[5][4]; /* 9 */
! sum += ( fin[5] ) * cos_l[5][5]; /* 31 */
! sum += ( -fin[6] ) * -cos_l[5][6]; /* 19 */
! sum += ( -fin[7] ) * -cos_l[5][7]; /* 3 */
! sum += ( -fin[8] ) * -cos_l[5][8]; /* 8 */
! sum += ( fin[9] ) * cos_l[5][9]; /* 29 */
! sum += ( -fin[10] ) * -cos_l[5][10]; /* 21 */
! sum += ( -fin[11] ) * -cos_l[5][11]; /* 1 */
! sum += ( -fin[12] ) * -cos_l[5][12]; /* 23 */
! sum += ( fin[13] ) * cos_l[5][13]; /* 27 */
! sum += ( fin[14] ) * cos_l[5][14]; /* 5 */
! sum += ( fin[15] ) * cos_l[5][15]; /* 17 */
! sum += ( -fin[16] ) * -cos_l[5][16]; /* 33 */
! sum += ( -fin[17] ) * -cos_l[5][17]; /* 11 */
out[5]=sum;
/* 6 */
! sum = ( -fin[0] ) * -cos_l[6][0]; /* 31 */
! sum += ( fin[1] ) * cos_l[6][1]; /* 15 */
! sum += ( fin[2] ) * cos_l[6][2]; /* 11 */
! sum += ( -fin[3] ) * -cos_l[6][3]; /* 35 */
! sum += ( -fin[4] ) * -cos_l[6][4]; /* 9 */
! sum += ( -fin[5] ) * -cos_l[6][5]; /* 17 */
! sum += ( fin[6] ) * cos_l[6][6]; /* 29 */
! sum += ( fin[7] ) * cos_l[6][7]; /* 3 */
! sum += ( fin[8] ) * cos_l[6][8]; /* 23 */
! sum += ( fin[9] ) * cos_l[6][9]; /* 5 */
! sum += ( fin[10] ) * cos_l[6][10]; /* 21 */
! sum += ( -fin[11] ) * -cos_l[6][11]; /* 25 */
! sum += ( -fin[12] ) * -cos_l[6][12]; /* 1 */
! sum += ( -fin[13] ) * -cos_l[6][13]; /* 27 */
! sum += ( fin[14] ) * cos_l[6][14]; /* 19 */
! sum += ( fin[15] ) * cos_l[6][15]; /* 7 */
! sum += ( fin[16] ) * cos_l[6][16]; /* 33 */
! sum += ( -fin[17] ) * -cos_l[6][17]; /* 13 */
out[6]=sum;
/* 7 */
! sum = ( fin[0]+fin[5]+fin[15] ) * cos_l[7][0]; /* 3 */
! sum += ( fin[1]+fin[4]+fin[16] ) * cos_l[7][1]; /* 27*/
! sum += ( -fin[2]-fin[3]-fin[17] ) * -cos_l[7][2]; /* 15 */
! sum += ( fin[6]-fin[9]+fin[14] ) * cos_l[7][6]; /* 33 */
! sum += ( -fin[7]+fin[10]-fin[13] ) * -cos_l[7][7]; /* 9 */
! sum += ( -fin[8]+fin[11]-fin[12] ) * -cos_l[7][8]; /* 21 */
out[7]=sum;
/* 8 */
! sum = ( fin[0] ) * cos_l[8][0]; /* 35 */
! sum += ( -fin[1] ) * -cos_l[8][1]; /* 3 */
! sum += ( -fin[2] ) * -cos_l[8][2]; /* 31 */
! sum += ( fin[3] ) * cos_l[8][3]; /* 7 */
! sum += ( fin[4] ) * cos_l[8][4]; /* 27*/
! sum += ( -fin[5] ) * -cos_l[8][5]; /* 11 */
! sum += ( -fin[6] ) * -cos_l[8][6]; /* 23 */
! sum += ( fin[7] ) * cos_l[8][7]; /* 15*/
! sum += ( fin[8] ) * cos_l[8][8]; /* 19 */
! sum += ( -fin[9] ) * -cos_l[8][9]; /* 1 */
! sum += ( -fin[10] ) * -cos_l[8][10]; /* 33 */
! sum += ( fin[11] ) * cos_l[8][11]; /* 5 */
! sum += ( fin[12] ) * cos_l[8][12]; /* 29*/
! sum += ( -fin[13] ) * -cos_l[8][13]; /* 9 */
! sum += ( -fin[14] ) * -cos_l[8][14]; /* 25 */
! sum += ( fin[15] ) * cos_l[8][15]; /* 13*/
! sum += ( fin[16] ) * cos_l[8][16]; /* 21 */
! sum += ( -fin[17] ) * -cos_l[8][17]; /* 17 */
out[8]=sum;
/* 9 */
! sum = ( -fin[0] ) * -cos_l[9][0]; /* 1 */
! sum += ( fin[1] ) * cos_l[9][1]; /* 33 */
! sum += ( fin[2] ) * cos_l[9][2]; /* 5 */
! sum += ( -fin[3] ) * -cos_l[9][3]; /* 29*/
! sum += ( -fin[4] ) * -cos_l[9][4]; /* 9 */
! sum += ( fin[5] ) * cos_l[9][5]; /* 25 */
! sum += ( fin[6] ) * cos_l[9][6]; /* 13 */
! sum += ( -fin[7] ) * -cos_l[9][7]; /* 21*/
! sum += ( -fin[8] ) * -cos_l[9][8]; /* 17 */
! sum += ( -fin[9] ) * -cos_l[9][9]; /* 35*/
! sum += ( -fin[10] ) * -cos_l[9][10]; /* 3 */
! sum += ( fin[11] ) * cos_l[9][11]; /* 31 */
! sum += ( fin[12] ) * cos_l[9][12]; /* 7 */
! sum += ( -fin[13] ) * -cos_l[9][13]; /* 27 */
! sum += ( -fin[14] ) * -cos_l[9][14]; /* 11 */
! sum += ( fin[15] ) * cos_l[9][15]; /* 23*/
! sum += ( fin[16] ) * cos_l[9][16]; /* 15 */
! sum += ( -fin[17] ) * -cos_l[9][17]; /* 19 */
out[9]=sum;
/* 10 */
! sum = ( fin[0]+fin[5]+fin[15] ) * cos_l[10][0]; /* 33 */
! sum += ( fin[1]+fin[4]+fin[16] ) * cos_l[10][1]; /* 9 */
! sum += ( -fin[2]-fin[3]-fin[17] ) * -cos_l[10][2]; /* 21 */
! sum += ( -fin[6]+fin[9]-fin[14] ) * -cos_l[10][6]; /* 3 */
! sum += ( fin[7]-fin[10]+fin[13] ) * cos_l[10][7]; /* 27 */
! sum += ( fin[8]-fin[11]+fin[12] ) * cos_l[10][8]; /* 15 */
out[10]=sum;
/* 11 */
! sum = ( fin[0] ) * cos_l[11][0]; /* 5 */
! sum += ( -fin[1] ) * -cos_l[11][1]; /* 21 */
! sum += ( -fin[2] ) * -cos_l[11][2]; /* 25 */
! sum += ( fin[3] ) * cos_l[11][3]; /* 1 */
! sum += ( -fin[4] ) * -cos_l[11][4]; /*27 */
! sum += ( -fin[5] ) * -cos_l[11][5]; /* 19 */
! sum += ( fin[6] ) * cos_l[11][6]; /* 7 */
! sum += ( fin[7] ) * cos_l[11][7]; /* 33*/
! sum += ( -fin[8] ) * -cos_l[11][8]; /* 13 */
! sum += ( fin[9] ) * cos_l[11][9]; /* 31*/
! sum += ( fin[10] ) * cos_l[11][10]; /* 15 */
! sum += ( -fin[11] ) * -cos_l[11][11]; /* 11 */
! sum += ( -fin[12] ) * -cos_l[11][12]; /*35 */
! sum += ( fin[13] ) * cos_l[11][13]; /* 9 */
! sum += ( -fin[14] ) * -cos_l[11][14]; /* 17 */
! sum += ( -fin[15] ) * -cos_l[11][15]; /* 29*/
! sum += ( fin[16] ) * cos_l[11][16]; /* 3 */
! sum += ( -fin[17] ) * -cos_l[11][17]; /* 23 */
out[11]=sum;
/* 12 */
! sum = ( -fin[0] ) * -cos_l[12][0]; /* 29 */
! sum += ( -fin[1] ) * -cos_l[12][1]; /* 21 */
! sum += ( fin[2] ) * cos_l[12][2]; /* 1 */
! sum += ( -fin[3] ) * -cos_l[12][3]; /* 23 */
! sum += ( -fin[4] ) * -cos_l[12][4]; /*27 */
! sum += ( fin[5] ) * cos_l[12][5]; /* 5 */
! sum += ( -fin[6] ) * -cos_l[12][6]; /* 17 */
! sum += ( -fin[7] ) * -cos_l[12][7]; /* 33*/
! sum += ( fin[8] ) * cos_l[12][8]; /* 11 */
! sum += ( -fin[9] ) * -cos_l[12][9]; /* 7 */
! sum += ( fin[10] ) * cos_l[12][10]; /* 15 */
! sum += ( fin[11] ) * cos_l[12][11]; /* 35 */
! sum += ( -fin[12] ) * -cos_l[12][12]; /*13 */
! sum += ( fin[13] ) * cos_l[12][13]; /* 9 */
! sum += ( -fin[14] ) * -cos_l[12][14]; /* 31 */
! sum += ( -fin[15] ) * -cos_l[12][15]; /* 19*/
! sum += ( fin[16] ) * cos_l[12][16]; /* 3 */
! sum += ( -fin[17] ) * -cos_l[12][17]; /* 25 */
out[12]=sum;
/* 13 */
! sum = ( -fin[0]+fin[1]+fin[4]-fin[5]-fin[8]+fin[11]-fin[12] \
! -fin[15]+fin[16] ) * -cos_l[13][0]; /* 9 */
! sum += ( -fin[2]-fin[3]+fin[6]+fin[7]-fin[9]-fin[10]+fin[13] \
! +fin[14]-fin[17] ) * -cos_l[13][2]; /* 27 */
out[13]=sum;
/* 14 */
! sum = ( fin[0] ) * cos_l[14][0]; /* 25 */
! sum += ( fin[1] ) * cos_l[14][1]; /* 33 */
! sum += ( -fin[2] ) * -cos_l[14][2]; /* 19 */
! sum += ( fin[3] ) * cos_l[14][3]; /* 5 */
! sum += ( -fin[4] ) * -cos_l[14][4]; /* 9 */
! sum += ( fin[5] ) * cos_l[14][5]; /* 23 */
! sum += ( fin[6] ) * cos_l[14][6]; /* 35 */
! sum += ( -fin[7] ) * -cos_l[14][7]; /* 21*/
! sum += ( fin[8] ) * cos_l[14][8]; /* 7 */
! sum += ( fin[9] ) * cos_l[14][9]; /* 11*/
! sum += ( -fin[10] ) * -cos_l[14][10]; /* 3 */
! sum += ( fin[11] ) * cos_l[14][11]; /* 17 */
! sum += ( -fin[12] ) * -cos_l[14][12]; /*31 */
! sum += ( -fin[13] ) * -cos_l[14][13]; /* 27 */
! sum += ( fin[14] ) * cos_l[14][14]; /* 13 */
! sum += ( -fin[15] ) * -cos_l[14][15]; /* 1 */
! sum += ( fin[16] ) * cos_l[14][16]; /* 15 */
! sum += ( -fin[17] ) * -cos_l[14][17]; /* 29 */
out[14]=sum;
/* 15 */
! sum = ( fin[0] ) * cos_l[15][0]; /* 13 */
! sum += ( -fin[1] ) * -cos_l[15][1]; /* 3 */
! sum += ( fin[2] ) * cos_l[15][2]; /* 7 */
! sum += ( -fin[3] ) * -cos_l[15][3]; /* 17 */
! sum += ( fin[4] ) * cos_l[15][4]; /* 27*/
! sum += ( fin[5] ) * cos_l[15][5]; /* 35 */
! sum += ( -fin[6] ) * -cos_l[15][6]; /* 25 */
! sum += ( fin[7] ) * cos_l[15][7]; /* 15*/
! sum += ( -fin[8] ) * -cos_l[15][8]; /* 5 */
! sum += ( fin[9] ) * cos_l[15][9]; /* 23*/
! sum += ( -fin[10] ) * -cos_l[15][10]; /* 33 */
! sum += ( -fin[11] ) * -cos_l[15][11]; /* 29 */
! sum += ( fin[12] ) * cos_l[15][12]; /*19 */
! sum += ( -fin[13] ) * -cos_l[15][13]; /* 9 */
! sum += ( fin[14] ) * cos_l[15][14]; /* 1 */
! sum += ( -fin[15] ) * -cos_l[15][15]; /* 11*/
! sum += ( fin[16] ) * cos_l[15][16]; /* 21 */
! sum += ( -fin[17] ) * -cos_l[15][17]; /* 31 */
out[15]=sum;
/* 16 */
! sum = ( -fin[0]-fin[5]-fin[15] ) * -cos_l[16][0]; /* 21 */
! sum += ( fin[1]+fin[4]+fin[16] ) * cos_l[16][1]; /* 27 */
! sum += ( -fin[2]-fin[3]-fin[17] ) * -cos_l[16][2]; /* 33 */
! sum += ( fin[6]-fin[9]+fin[14] ) * cos_l[16][6]; /* 15 */
! sum += ( -fin[7]+fin[10]-fin[13] ) * -cos_l[16][7]; /* 9 */
! sum += ( fin[8]-fin[11]+fin[12] ) * cos_l[16][8]; /* 3 */
out[16]=sum;
/* 17 */
! sum = ( -fin[0] ) * -cos_l[17][0]; /* 17 */
! sum += ( fin[1] ) * cos_l[17][1]; /* 15 */
! sum += ( -fin[2] ) * -cos_l[17][2]; /* 13 */
! sum += ( fin[3] ) * cos_l[17][3]; /* 11 */
! sum += ( -fin[4] ) * -cos_l[17][4]; /* 9 */
! sum += ( fin[5] ) * cos_l[17][5]; /* 7 */
! sum += ( -fin[6] ) * -cos_l[17][6]; /* 5 */
! sum += ( fin[7] ) * cos_l[17][7]; /* 3 */
! sum += ( -fin[8] ) * -cos_l[17][8]; /* 1 */
! sum += ( -fin[9] ) * -cos_l[17][9]; /* 19*/
! sum += ( fin[10] ) * cos_l[17][10]; /* 21 */
! sum += ( -fin[11] ) * -cos_l[17][11]; /* 23 */
! sum += ( fin[12] ) * cos_l[17][12]; /*25 */
! sum += ( -fin[13] ) * -cos_l[17][13]; /* 27 */
! sum += ( fin[14] ) * cos_l[17][14]; /* 29 */
! sum += ( -fin[15] ) * -cos_l[17][15]; /* 31*/
! sum += ( fin[16] ) * cos_l[17][16]; /* 33 */
! sum += ( -fin[17] ) * -cos_l[17][17]; /* 35 */
out[17]=sum;
! }
}
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: encode.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 143
*** encode.c.1 Wed May 19 21:46:42 1999
--- encode.c Thu May 20 18:20:06 1999
***************
*** 220,238 ****
************************************************************************/
void window_subband(buffer, z, k)
! short FAR **buffer;
! double FAR z[HAN_SIZE];
int k;
{
typedef double FAR XX[2][HAN_SIZE];
static XX FAR *x;
int i, j;
static int off[2] = {0,0};
static char init = 0;
- static double FAR *c;
if (!init) {
- c = (double FAR *) mem_alloc(sizeof(double) * HAN_SIZE, "window");
- read_ana_window(c);
x = (XX FAR *) mem_alloc(sizeof(XX),"x");
for (i=0;i<2;i++)
for (j=0;j<HAN_SIZE;j++)
--- 220,236 ----
************************************************************************/
void window_subband(buffer, z, k)
! short **buffer;
! double z[HAN_SIZE];
int k;
{
typedef double FAR XX[2][HAN_SIZE];
static XX FAR *x;
+ double *xk;
int i, j;
static int off[2] = {0,0};
static char init = 0;
if (!init) {
x = (XX FAR *) mem_alloc(sizeof(XX),"x");
for (i=0;i<2;i++)
for (j=0;j<HAN_SIZE;j++)
***************
*** 239,249 ****
(*x)[i][j] = 0;
init = 1;
}
/* replace 32 oldest samples with 32 new samples */
! for (i=0;i<32;i++) (*x)[k][31-i+off[k]] = (double) *(*buffer)++/SCALE;
/* shift samples into proper window positions */
! for (i=0;i<HAN_SIZE;i++) z[i] = (*x)[k][(i+off[k])&HAN_SIZE-1] * c[i];
off[k] += 480; /*offset is modulo (HAN_SIZE-1)*/
off[k] &= HAN_SIZE-1;
--- 237,248 ----
(*x)[i][j] = 0;
init = 1;
}
+ xk=(*x)[k];
/* replace 32 oldest samples with 32 new samples */
! for (i=0;i<32;i++) /*(*x)[k]*/xk[31-i+off[k]] = (double) *(*buffer)++/SCALE;
/* shift samples into proper window positions */
! for (i=0;i<HAN_SIZE;i++) z[i] = xk[(i+off[k])&HAN_SIZE-1] * enwindow[i];
off[k] += 480; /*offset is modulo (HAN_SIZE-1)*/
off[k] &= HAN_SIZE-1;
***************
*** 263,268 ****
--- 262,285 ----
*
************************************************************************/
+
+ /*#define NORING*/
+ /* define NORING to use the MDCT from Fredrik Noring <[EMAIL PROTECTED]>
+ * actually seems to be about 10% slower than we have.
+ */
+
+ #ifdef NORING
+ extern void mfct(double *, double *);
+ void filter_subband(z,s)
+ double FAR z[HAN_SIZE], s[SBLIMIT];
+ {
+ double y[64];
+ int i,j;
+
+ for (i=0;i<64;i++) for (j=0, y[i] = 0;j<8;j++) y[i] += z[i+64*j];
+ mfct(y, s);
+ }
+ #else
void
create_dct_matrix( filter )
double filter[16][32];
***************
*** 271,281 ****
for (i=0; i<16; i++)
for (k=0; k<32; k++) {
! if ((filter[i][k] = 1e9*cos((double)((2*i+1)*k*PI64))) >= 0)
! modf(filter[i][k]+0.5, &filter[i][k]);
! else
! modf(filter[i][k]-0.5, &filter[i][k]);
! filter[i][k] *= 1e-9;
}
}
--- 288,294 ----
for (i=0; i<16; i++)
for (k=0; k<32; k++) {
! filter[i][k] = cos((double)((2*i+1)*k*PI64));
}
}
***************
*** 302,326 ****
}
}
- /*#define NORING*/
- /* define NORING to use the MDCT from Fredrik Noring <[EMAIL PROTECTED]>
- * actually seems to be about 10% slower than we have.
- */
-
- #ifdef NORING
- extern void mfct(double *, double *);
void filter_subband(z,s)
double FAR z[HAN_SIZE], s[SBLIMIT];
- {
- double y[64];
- int i,j;
-
- for (i=0;i<64;i++) for (j=0, y[i] = 0;j<8;j++) y[i] += z[i+64*j];
- mfct(y, s);
- }
- #else
- void filter_subband(z,s)
- double FAR z[HAN_SIZE], s[SBLIMIT];
{
double y[64],yprime[32];
int i,j;
--- 315,322 ----
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: encode.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 176
*** encode.c.1 Wed May 19 21:46:42 1999
--- encode.c Thu May 20 18:25:23 1999
***************
*** 189,212 ****
/************************************************************************
*
- * read_ana_window()
- *
- * PURPOSE: Reads encoder window file "enwindow" into array #ana_win#
- *
- ************************************************************************/
-
- extern double enwindow[];
-
- void read_ana_window(ana_win)
- double FAR ana_win[HAN_SIZE];
- {
- int i;
- for (i = 0; i<HAN_SIZE; i++)
- ana_win[i] = enwindow[i];
- }
-
- /************************************************************************
- *
* window_subband()
*
* PURPOSE: Overlapping window on PCM samples
--- 189,194 ----
***************
*** 218,238 ****
* windowed sample #z#
*
************************************************************************/
!
void window_subband(buffer, z, k)
! short FAR **buffer;
! double FAR z[HAN_SIZE];
int k;
{
typedef double FAR XX[2][HAN_SIZE];
static XX FAR *x;
int i, j;
static int off[2] = {0,0};
static char init = 0;
- static double FAR *c;
if (!init) {
- c = (double FAR *) mem_alloc(sizeof(double) * HAN_SIZE, "window");
- read_ana_window(c);
x = (XX FAR *) mem_alloc(sizeof(XX),"x");
for (i=0;i<2;i++)
for (j=0;j<HAN_SIZE;j++)
--- 200,220 ----
* windowed sample #z#
*
************************************************************************/
!
! extern double enwindow[];
!
void window_subband(buffer, z, k)
! short **buffer;
! double z[HAN_SIZE];
int k;
{
typedef double FAR XX[2][HAN_SIZE];
static XX FAR *x;
+ double *xk;
int i, j;
static int off[2] = {0,0};
static char init = 0;
if (!init) {
x = (XX FAR *) mem_alloc(sizeof(XX),"x");
for (i=0;i<2;i++)
for (j=0;j<HAN_SIZE;j++)
***************
*** 239,249 ****
(*x)[i][j] = 0;
init = 1;
}
/* replace 32 oldest samples with 32 new samples */
! for (i=0;i<32;i++) (*x)[k][31-i+off[k]] = (double) *(*buffer)++/SCALE;
/* shift samples into proper window positions */
! for (i=0;i<HAN_SIZE;i++) z[i] = (*x)[k][(i+off[k])&HAN_SIZE-1] * c[i];
off[k] += 480; /*offset is modulo (HAN_SIZE-1)*/
off[k] &= HAN_SIZE-1;
--- 221,232 ----
(*x)[i][j] = 0;
init = 1;
}
+ xk=(*x)[k];
/* replace 32 oldest samples with 32 new samples */
! for (i=0;i<32;i++) /*(*x)[k]*/xk[31-i+off[k]] = (double) *(*buffer)++/SCALE;
/* shift samples into proper window positions */
! for (i=0;i<HAN_SIZE;i++) z[i] = xk[(i+off[k])&HAN_SIZE-1] * enwindow[i];
off[k] += 480; /*offset is modulo (HAN_SIZE-1)*/
off[k] &= HAN_SIZE-1;
***************
*** 263,268 ****
--- 246,269 ----
*
************************************************************************/
+
+ /*#define NORING*/
+ /* define NORING to use the MDCT from Fredrik Noring <[EMAIL PROTECTED]>
+ * actually seems to be about 10% slower than we have.
+ */
+
+ #ifdef NORING
+ extern void mfct(double *, double *);
+ void filter_subband(z,s)
+ double FAR z[HAN_SIZE], s[SBLIMIT];
+ {
+ double y[64];
+ int i,j;
+
+ for (i=0;i<64;i++) for (j=0, y[i] = 0;j<8;j++) y[i] += z[i+64*j];
+ mfct(y, s);
+ }
+ #else
void
create_dct_matrix( filter )
double filter[16][32];
***************
*** 271,281 ****
for (i=0; i<16; i++)
for (k=0; k<32; k++) {
! if ((filter[i][k] = 1e9*cos((double)((2*i+1)*k*PI64))) >= 0)
! modf(filter[i][k]+0.5, &filter[i][k]);
! else
! modf(filter[i][k]-0.5, &filter[i][k]);
! filter[i][k] *= 1e-9;
}
}
--- 272,278 ----
for (i=0; i<16; i++)
for (k=0; k<32; k++) {
! filter[i][k] = cos((double)((2*i+1)*k*PI64));
}
}
***************
*** 302,326 ****
}
}
- /*#define NORING*/
- /* define NORING to use the MDCT from Fredrik Noring <[EMAIL PROTECTED]>
- * actually seems to be about 10% slower than we have.
- */
-
- #ifdef NORING
- extern void mfct(double *, double *);
void filter_subband(z,s)
double FAR z[HAN_SIZE], s[SBLIMIT];
- {
- double y[64];
- int i,j;
-
- for (i=0;i<64;i++) for (j=0, y[i] = 0;j<8;j++) y[i] += z[i+64*j];
- mfct(y, s);
- }
- #else
- void filter_subband(z,s)
- double FAR z[HAN_SIZE], s[SBLIMIT];
{
double y[64],yprime[32];
int i,j;
--- 299,306 ----
----------
X-Sun-Data-Type: default
X-Sun-Data-Name: loop-pvt.diff
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 18
*** loop-pvt.h.1 Wed May 19 21:36:05 1999
--- loop-pvt.h Wed May 19 21:37:17 1999
***************
*** 151,158 ****
unsigned int end );
! int
! new_choose_table( int ix[576],
! unsigned int begin,
! unsigned int end );
#endif
--- 151,155 ----
unsigned int end );
! int new_choose_table( int ix[576], unsigned int begin, unsigned int end, int * s );
#endif
--
MP3 ENCODER mailing list