csvorbis.Floor0.inverse1 C# (CSharp) Method

inverse1() public method

public inverse1 ( Block vb, Object i, Object memo ) : Object
vb Block
i Object
memo Object
return Object
        public override Object inverse1(Block vb, Object i, Object memo)
        {
            //System.err.println("Floor0.inverse "+i.getClass()+"]");
            LookFloor0 look=(LookFloor0)i;
            InfoFloor0 info=look.vi;
            float[] lsp=null;
            if(memo is float[])
            {
                lsp=(float[])memo;
            }

            int ampraw=vb.opb.read(info.ampbits);
            if(ampraw>0)
            { // also handles the -1 out of data case
                int maxval=(1<<info.ampbits)-1;
                float amp=(float)ampraw/maxval*info.ampdB;
                int booknum=vb.opb.read(ilog(info.numbooks));

                if(booknum!=-1 && booknum<info.numbooks)
                {
                    CodeBook b=vb.vd.fullbooks[info.books[booknum]];
                    float last=0.0f;

                    if(lsp==null||lsp.Length<look.m+1)
                    {
                        lsp=new float[look.m+1];
                    }
                    else
                    {
                        for(int j=0; j<lsp.Length; j++)lsp[j]=0.0f;
                    }

                    for(int j=0;j<look.m;j+=b.dim)
                    {
                        if(b.decodev_set(lsp, j, vb.opb, b.dim)==-1)
                        {
                            //goto eop;
                            return(null);
                        }
                    }

                    for(int j=0;j<look.m;)
                    {
                        for(int k=0;k<b.dim;k++,j++)lsp[j]+=last;
                        last=lsp[j-1];
                    }
                    lsp[look.m]=amp;
                    return(lsp);
                }
            }
            //  eop:
            return(null);
        }