示例#1
0
        public SubbandPrecinct(ResolutionLevel resolutionLevel, Subband subband, Precinct precinct)
        {
            ResolutionLevel = resolutionLevel;
            Subband         = subband;
            Precinct        = precinct;

            SubbandTileComponentSampleBounds_tb = ResolutionLevel.TilePartComponent.TileComponent.GetSubbandTileComponentSampleBounds_tb(subband);

            NCodeBlocksX = CeilDiv(SubbandTileComponentSampleBounds_tb.Width, ResolutionLevel.CodeBlockWidth);
            NCodeBlocksY = CeilDiv(SubbandTileComponentSampleBounds_tb.Height, ResolutionLevel.CodeBlockHeight);

            CodeBlockInclusionTagTree = new TagTree((uint)NCodeBlocksX, (uint)NCodeBlocksY);
            ZeroBitPlaneTagTree       = new TagTree((uint)NCodeBlocksX, (uint)NCodeBlocksY);

            CodeBlocks = new CodeBlock[NCodeBlocksY * NCodeBlocksX];

            var uRange = SubbandTileComponentSampleBounds_tb.XRange;
            var vRange = SubbandTileComponentSampleBounds_tb.YRange;

            TransformCoefficientValues = ResolutionLevel.TilePartComponent.ArithmeticType switch
            {
                ArithmeticType.Int32 => new Signal2D <int>(uRange, vRange),
                ArithmeticType.Single => new Signal2D <float>(uRange, vRange),
                ArithmeticType.Double => new Signal2D <double>(uRange, vRange),
                _ => throw NotSupported(ResolutionLevel.TilePartComponent.ArithmeticType)
            };
        }
示例#2
0
        protected sealed override void Dequantisize(Signal2D <T> transformCoefficientValues, TilePartComponent component, Subband subband)
        {
            var quantizationStepSize = GetQuantizationStepSize(component, subband);

            if (quantizationStepSize != 1)
            {
                transformCoefficientValues.URange.GetBounds(out int u0, out int u1);
                transformCoefficientValues.VRange.GetBounds(out int v0, out int v1);

                Parallel.For(v0, v1, v =>
                {
                    for (var u = u0; u < u1; u++)
                    {
                        ApplyQuantizationStepSize(transformCoefficientValues, u, v, quantizationStepSize);
                    }
                });
            }
        }
示例#3
0
        private static void CopyToPixelDataBuffer(TilePartComponent tilePartComponent, Signal2D a, int[] buffer, int offset, int count)
        {
            var inverseDCLevelShifter = InverseDCLevelShifter.Create(tilePartComponent.ArithmeticType);

            inverseDCLevelShifter.CopyToPixelDataBuffer(tilePartComponent.TileComponent.Component, a, buffer, offset, count);
        }
示例#4
0
 protected abstract void ApplyQuantizationStepSize(Signal2D <T> transformCoefficientValues, int u, int v, double quantizationStepSize);
示例#5
0
 protected sealed override void Dequantisize(Signal2D <T> transformCoefficientValues, TilePartComponent tilePartComponent, Subband subband)
 {
     // Nothing to do
 }
示例#6
0
 public abstract void Dequantisize(Signal2D transformCoefficientValues, TilePartComponent tilePartComponent, Subband subband);
示例#7
0
 protected sealed override void ApplyQuantizationStepSize(Signal2D <double> transformCoefficientValues, int u, int v,
                                                          double quantizationStepSize)
 {
     transformCoefficientValues[u, v] *= quantizationStepSize;
 }
 public abstract void Perform2DSubbandReconstruction(Signal2D a, Signal2D aLL, Signal2D aHL, Signal2D aLH, Signal2D aHH);
示例#9
0
 public abstract void CopyToPixelDataBuffer(Component component, Signal2D a, int[] buffer, int offset, int count);