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);
}