decodevv_add() private method

private decodevv_add ( float a, int offset, int ch, csBuffer b, int n ) : int
a float
offset int
ch int
b csogg.csBuffer
n int
return int
Esempio n. 1
0
        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);
        }