Exemple #1
0
        override internal Object look(DspState vd, InfoMode vm, Object vr)
        {
            InfoResidue0 info = (InfoResidue0)vr;
            LookResidue0 look = new LookResidue0();
            int          acc  = 0;
            int          dim;
            int          maxstage = 0;

            look.info = info;
            look.map  = vm.mapping;

            look.parts      = info.partitions;
            look.fullbooks  = vd.fullbooks;
            look.phrasebook = vd.fullbooks[info.groupbook];

            dim = look.phrasebook.dim;

            look.partbooks = new int[look.parts][];

            for (int j = 0; j < look.parts; j++)
            {
                int i      = info.secondstages[j];
                int stages = Util.ilog(i);
                if (stages != 0)
                {
                    if (stages > maxstage)
                    {
                        maxstage = stages;
                    }
                    look.partbooks[j] = new int[stages];
                    for (int k = 0; k < stages; k++)
                    {
                        if ((i & (1 << k)) != 0)
                        {
                            look.partbooks[j][k] = info.booklist[acc++];
                        }
                    }
                }
            }

            look.partvals  = (int)Math.Round(Math.Pow(look.parts, dim));
            look.stages    = maxstage;
            look.decodemap = new int[look.partvals][];
            for (int j = 0; j < look.partvals; j++)
            {
                int val  = j;
                int mult = look.partvals / look.parts;
                look.decodemap[j] = new int[dim];

                for (int k = 0; k < dim; k++)
                {
                    int deco = val / mult;
                    val  -= deco * mult;
                    mult /= look.parts;
                    look.decodemap[j][k] = deco;
                }
            }
            return(look);
        }
Exemple #2
0
        internal override Object look(DspState vd, InfoMode vm, Object vr)
        {
            InfoResidue0 info = (InfoResidue0)vr;
            LookResidue0 look = new LookResidue0();
            int acc = 0;
            int dim;
            int maxstage = 0;
            look.info = info;
            look.map = vm.mapping;

            look.parts = info.partitions;
            look.fullbooks = vd.fullbooks;
            look.phrasebook = vd.fullbooks[info.groupbook];

            dim = look.phrasebook.dim;

            look.partbooks = new int[look.parts][];

            for (int j = 0; j < look.parts; j++)
            {
                int i = info.secondstages[j];
                int stages = Util.ilog(i);
                if (stages != 0)
                {
                    if (stages > maxstage)
                        maxstage = stages;
                    look.partbooks[j] = new int[stages];
                    for (int k = 0; k < stages; k++)
                    {
                        if ((i & (1 << k)) != 0)
                        {
                            look.partbooks[j][k] = info.booklist[acc++];
                        }
                    }
                }
            }

            look.partvals = (int)Math.Round(Math.Pow(look.parts, dim));
            look.stages = maxstage;
            look.decodemap = new int[look.partvals][];
            for (int j = 0; j < look.partvals; j++)
            {
                int val = j;
                int mult = look.partvals / look.parts;
                look.decodemap[j] = new int[dim];

                for (int k = 0; k < dim; k++)
                {
                    int deco = val / mult;
                    val -= deco * mult;
                    mult /= look.parts;
                    look.decodemap[j][k] = deco;
                }
            }
            return (look);
        }
Exemple #3
0
        static internal int _2inverse(Block vb, Object vl, float[][] In, int ch)
        {
            lock (StatickLock)
            {
                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;

                if (_2inverse_partword == null || _2inverse_partword.Length < partwords)
                {
                    _2inverse_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)
                            {
                                return(0);
                            }
                            _2inverse_partword[l] = look.decodemap[temp];
                            if (_2inverse_partword[l] == null)
                            {
                                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;
                            int index  = _2inverse_partword[l][k];
                            if ((info.secondstages[index] & (1 << s)) != 0)
                            {
                                CodeBook stagebook = look.fullbooks[look.partbooks[index][s]];
                                if (stagebook != null)
                                {
                                    if (stagebook.decodevv_add(In, offset, ch, vb.opb,
                                                               samples_per_partition) == -1)
                                    {
                                        return(0);
                                    }
                                }
                            }
                        }
                    }
                }
                return(0);
            }
        }