csvorbis.Residue0._2inverse C# (CSharp) Method

_2inverse() static private method

static private _2inverse ( Block vb, Object vl, float fin, int ch ) : int
vb Block
vl Object
fin float
ch int
return int
        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);
        }