internal static int _2inverse(Block vb, Object vl, float[][] fin, int ch)
{
int i,k,l,s;
LookResidue0 look=(LookResidue0 )vl;
InfoResidue0 info=look.info;
// move all this setup out later
int samples_per_partition=info.grouping;
int partitions_per_word=look.phrasebook.dim;
int n=info.end-info.begin;
int partvals=n/samples_per_partition;
int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
int[][] partword=new int[partwords][];
for(s=0;s<look.stages;s++)
{
for(i=0,l=0;i<partvals;l++)
{
if(s==0)
{
// fetch the partition word for each channel
int temp=look.phrasebook.decode(vb.opb);
if(temp==-1)
{
// goto eopbreak;
return(0);
}
partword[l]=look.decodemap[temp];
if(partword[l]==null)
{
// goto errout;
return(0);
}
}
// now we decode residual values for the partitions
for(k=0;k<partitions_per_word && i<partvals;k++,i++)
{
int offset=info.begin+i*samples_per_partition;
if((info.secondstages[partword[l][k]]&(1<<s))!=0)
{
CodeBook stagebook=look.fullbooks[look.partbooks[partword[l][k]][s]];
if(stagebook!=null)
{
if(stagebook.decodevv_add(fin, offset, ch, vb.opb,samples_per_partition)==-1)
{
// goto errout;
return(0);
}
}
}
}
}
}
// errout:
// eopbreak:
return(0);
}