diff --git a/src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolContextHelper.cs b/src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolContextHelper.cs index 04f458ebd2..d257c3a8b5 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolContextHelper.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolContextHelper.cs @@ -389,7 +389,7 @@ internal static class Av1SymbolContextHelper /// /// SVT: svt_aom_get_segment_id /// - public static int GetSegmentId(Av1Common cm, ReadOnlySpan segment_ids, Av1BlockSize bsize, Point modeInfoPosition) + public static int GetSegmentId(Av1EncoderCommon cm, ReadOnlySpan segment_ids, Av1BlockSize bsize, Point modeInfoPosition) { int mi_offset = (modeInfoPosition.Y * cm.ModeInfoColumnCount) + modeInfoPosition.X; int bw = bsize.GetWidth(); diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1BlockModeInfoEncoder.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderBlockModeInfo.cs similarity index 94% rename from src/ImageSharp/Formats/Heif/Av1/Tiling/Av1BlockModeInfoEncoder.cs rename to src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderBlockModeInfo.cs index 20989f3cef..54db0c3cd5 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1BlockModeInfoEncoder.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderBlockModeInfo.cs @@ -5,7 +5,7 @@ using SixLabors.ImageSharp.Formats.Heif.Av1.Prediction; namespace SixLabors.ImageSharp.Formats.Heif.Av1.Tiling; -internal class Av1BlockModeInfoEncoder +internal class Av1EncoderBlockModeInfo { public Av1BlockSize BlockSize { get; } diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1Common.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderCommon.cs similarity index 94% rename from src/ImageSharp/Formats/Heif/Av1/Tiling/Av1Common.cs rename to src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderCommon.cs index 8ec17e55e7..6efa091280 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1Common.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1EncoderCommon.cs @@ -5,7 +5,7 @@ using SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit; namespace SixLabors.ImageSharp.Formats.Heif.Av1.Tiling; -internal class Av1Common +internal class Av1EncoderCommon { public int ModeInfoRowCount { get; internal set; } diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1MacroBlockModeInfo.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1MacroBlockModeInfo.cs index e1823931d9..1d916a531f 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1MacroBlockModeInfo.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1MacroBlockModeInfo.cs @@ -5,7 +5,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Tiling; internal class Av1MacroBlockModeInfo { - public required Av1BlockModeInfoEncoder Block { get; internal set; } + public required Av1EncoderBlockModeInfo Block { get; internal set; } public required Av1PaletteLumaModeInfo Palette { get; internal set; } diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureControlSet.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureControlSet.cs index bdffdeabc3..fe156b68e0 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureControlSet.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureControlSet.cs @@ -28,7 +28,7 @@ internal class Av1PictureControlSet /// internal void UpdateSegmentation(Av1BlockSize blockSize, Point origin, int segmentId) { - Av1Common cm = this.Parent.Common; + Av1EncoderCommon cm = this.Parent.Common; Span segment_ids = this.SegmentationNeighborMap; int mi_col = origin.X >> Av1Constants.ModeInfoSizeLog2; int mi_row = origin.Y >> Av1Constants.ModeInfoSizeLog2; diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureParentControlSet.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureParentControlSet.cs index 169a29b794..2317f97f74 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureParentControlSet.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1PictureParentControlSet.cs @@ -7,7 +7,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Tiling; internal class Av1PictureParentControlSet { - public required Av1Common Common { get; internal set; } + public required Av1EncoderCommon Common { get; internal set; } public required ObuFrameHeader FrameHeader { get; internal set; } diff --git a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileWriter.cs b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileWriter.cs index b1709d9589..4eacf17704 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileWriter.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Tiling/Av1TileWriter.cs @@ -55,7 +55,7 @@ internal partial class Av1TileWriter { int hbs = bsize.Get4x4WideCount() >> 1; int quarter_step = bsize.Get4x4WideCount() >> 2; - Av1Common cm = pcs.Parent.Common; + Av1EncoderCommon cm = pcs.Parent.Common; int mi_row = blockOrigin.Y >> Av1Constants.ModeInfoSizeLog2; int mi_col = blockOrigin.X >> Av1Constants.ModeInfoSizeLog2; @@ -293,7 +293,7 @@ internal partial class Av1TileWriter Guard.IsTrue(blockSize.Get4x4WidthLog2() == blockSize.Get4x4HeightLog2(), nameof(blockSize), "Blocks need to be square."); Guard.IsTrue(blockSizeLog2 >= 0, nameof(blockSizeLog2), "bsl needs to be a positive integer."); - context_index = ((left * 2) + above) + blockSizeLog2 * Av1Constants.PartitionProbabilitySet; + context_index = ((left * 2) + above) + (blockSizeLog2 * Av1Constants.PartitionProbabilitySet); if (!has_rows && !has_cols) { @@ -414,7 +414,7 @@ internal partial class Av1TileWriter tile_idx, blk_ptr.MacroBlock, skipWritingCoefficients, - blockOrigin / (1 << Av1Constants.ModeInfoSizeLog2)); + blockOrigin << Av1Constants.ModeInfoSizeLog2); if (pcs.Parent.FrameHeader.DeltaQParameters.IsPresent) { @@ -467,8 +467,7 @@ internal partial class Av1TileWriter macroBlockModeInfo, blk_ptr, blockGeometry.BlockSize, - blockOrigin.Y >> Av1Constants.ModeInfoSizeLog2, - blockOrigin.X >> Av1Constants.ModeInfoSizeLog2); + blockOrigin >> Av1Constants.ModeInfoSizeLog2); } if (!macroBlockModeInfo.Block.UseIntraBlockCopy && @@ -728,7 +727,7 @@ internal partial class Av1TileWriter pcs, Av1ComponentType.Chroma, cb_dc_sign_level_coeff_na, - RoundUv(blockOrigin + (Size)transformOrigin - (Size)blockGeometry.Origin) / 2, + RoundUv(blockOrigin + (Size)transformOrigin - (Size)blockGeometry.Origin) >> 1, blockGeometry.BlockSizeUv, chroma_tx_size, blockContext); @@ -754,7 +753,7 @@ internal partial class Av1TileWriter pcs, Av1ComponentType.Chroma, cr_dc_sign_level_coeff_na, - RoundUv(blockOrigin + (Size)transformOrigin - (Size)blockGeometry.Origin) / 2, + RoundUv(blockOrigin + (Size)transformOrigin - (Size)blockGeometry.Origin) >> 1, blockGeometry.BlockSizeUv, chroma_tx_size, blockContext); @@ -775,7 +774,7 @@ internal partial class Av1TileWriter ReadOnlySpan dc_sign_level_coeff = MemoryMarshal.AsBytes(culLevelCbSpan); cb_dc_sign_level_coeff_na.UnitModeWrite( dc_sign_level_coeff, - RoundUv(transformOrigin) / 2, + RoundUv(transformOrigin) >> 1, new Size(transformWidth, transformHeight), Av1NeighborArrayUnit.UnitMask.Top | Av1NeighborArrayUnit.UnitMask.Left); @@ -784,7 +783,7 @@ internal partial class Av1TileWriter dc_sign_level_coeff = MemoryMarshal.AsBytes(culLevelCrSpan); cr_dc_sign_level_coeff_na.UnitModeWrite( dc_sign_level_coeff, - RoundUv(transformOrigin) / 2, + RoundUv(transformOrigin) >> 1, new Size(transformWidth, transformHeight), Av1NeighborArrayUnit.UnitMask.Top | Av1NeighborArrayUnit.UnitMask.Left); } @@ -793,7 +792,7 @@ internal partial class Av1TileWriter } } - private static Point RoundUv(Point point) => throw new NotImplementedException(); + private static Point RoundUv(Point point) => (point >> 3) << 3; /// /// SVT: svt_aom_get_txb_ctx @@ -984,7 +983,7 @@ internal partial class Av1TileWriter int mi_row = blockOrigin.Y >> Av1Constants.ModeInfoSizeLog2; bool left_available = xd.IsLeftAvailable; bool up_available = xd.IsUpAvailable; - Av1Common cm = pcs.Parent.Common; + Av1EncoderCommon cm = pcs.Parent.Common; Span segmentation_map = pcs.SegmentationNeighborMap; if (up_available && left_available) @@ -1003,7 +1002,8 @@ internal partial class Av1TileWriter } // Pick CDF index based on number of matching/out-of-bounds segment IDs. - if (prev_ul < 0 || prev_u < 0 || prev_l < 0) /* Edge case */ + // Edge case + if (prev_ul < 0 || prev_u < 0 || prev_l < 0) { cdf_index = 0; } @@ -1021,12 +1021,14 @@ internal partial class Av1TileWriter } // If 2 or more are identical returns that as predictor, otherwise prev_l. - if (prev_u == -1) // edge case + // edge case + if (prev_u == -1) { return prev_l == -1 ? 0 : prev_l; } - if (prev_l == -1) // edge case + // edge case + if (prev_l == -1) { return prev_u; }