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;
}