diff --git a/HEIF_IMPLEMENTATION_PLAN.md b/HEIF_IMPLEMENTATION_PLAN.md
index 72f8a6bd3..024c3802d 100644
--- a/HEIF_IMPLEMENTATION_PLAN.md
+++ b/HEIF_IMPLEMENTATION_PLAN.md
@@ -671,7 +671,7 @@ Exit gate:
Implement and verify in dependency order:
- [x] HEIF item-local length-delimited NAL units, `hvcC`, VPS, SPS, PPS, and the parameter-set and slice-header syntax needed to decode the one independently coded picture carried by a supported still-image item. The production path remains item-local and exposes no Annex B byte-stream API or access-unit/timeline abstraction. Ten official Sony GENERAL Range Extensions first pictures, five real HEIC item payloads, and five public HEIC presentation cases pass exactly in Release: 20 cases with no failures or skips.
-- [x] One bounded decoder lifecycle owns only the parameter sets, current-picture state, slice/tile entropy state, and reconstructed planes required by that image item. Every allocator-backed child constructor and the owning picture decoder now unwind unpublished rents in reverse order. Focused tests exercise every constructor allocation-failure position and a complete real HEIC reconstruction through 2 KiB allocator groups with balanced exactly-once returns; all 22 official native-plane, real-item, ownership, constrained-allocation, and public presentation cases pass without failures or skips. Both Release source targets build with zero warnings and errors, the scoped Release test-project analyzer build completes with zero errors and 1,011 repository warnings, Roslynk reports zero compiler errors, and `git diff --check` is clean.
+- [x] One bounded decoder lifecycle owns only the parameter sets, current-picture state, slice/tile entropy state, and reconstructed planes required by that image item. Every allocator-backed child constructor and the owning picture decoder now unwind unpublished rents in reverse order. Focused tests exercise every constructor allocation-failure position and a complete real HEIC reconstruction through 2 KiB allocator groups with balanced exactly-once returns; all 22 official native-plane, real-item, ownership, constrained-allocation, and public presentation cases pass without failures or skips. Both Release source targets build with zero warnings and errors, the scoped Release test-project analyzer build completes with zero errors and 1,011 repository warnings, Roslynk reports zero compiler errors, and `git diff --check` is clean. Commit `b6ba2dbf2f90c7b0a5d9da4e9f45d045bbce1a65` records the syntax reconciliation and lifecycle correction.
- [ ] CABAC arithmetic decoding and every required context transition.
- [ ] Coding-tree, coding-unit, prediction-unit, and transform-unit traversal across all permitted sizes and partition modes.
- [ ] Intra prediction for every luma and chroma mode, including strong intra smoothing and constrained prediction rules.
@@ -856,6 +856,7 @@ No valid HEVC or AV1 color, compression, or bit-depth row may remain `unsupporte
- Keep changes vertical and reviewable. A slice should add one behavior, its focused tests, independent evidence, and any required notice update.
- Keep every AV1 prediction family on the established JPEG color-converter operator architecture. Each distinct traversal contract owns a family-named predictor type; its `.Operator.cs` defines the static interface, and its family-named files own the closed generic widest-to-narrowest SIMD traversal. Semantic `readonly struct` operators implement scalar, `Vector128`, `Vector256`, and `Vector512` arithmetic through that contract. Only modes which share the same traversal and contract may share a predictor family; do not nest a separate predictor beneath a broad intra/inter family or create hardware-width-specific class hierarchies.
+- Keep AV1 forward and inverse transform operators under their family-named `Av1ForwardTransformer` and `Av1InverseTransformer` owners, matching the JPEG color-converter operator architecture. Their `.Operator.cs` files own the static contracts and generic dispatch, while the family-named operator files own each DCT, ADST, identity, and reconstruction-output implementation. Do not nest one-dimensional transform operators beneath a two-dimensional helper or name operator files after an implementation-detail dispatcher.
- Design SIMD-suitable codec work SIMD-first. Establish vector-friendly storage, operator boundaries, scratch ownership, traversal, every applicable lane width, and benchmark-gated dispatch before implementing the equivalent scalar fallback; never build a scalar production architecture and bolt SIMD onto it later.
- Inspect every owning method and upstream invariant before adding guards. Validate external file data at the parser/model boundary and rely on those established invariants internally.
- Do not extract one-use helpers merely to label code. Extract shared primitives only when they have genuine reuse or remove substantial complexity.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst16Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst16Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst16Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst16Operator.cs
index c0b6ef9bd..5cdcc1c47 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst16Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst16Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the sixteen-point asymmetric discrete sine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the 16-point AV1 inverse asymmetric discrete sine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst4Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst4Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst4Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst4Operator.cs
index 30c0c132a..50e1db2de 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst4Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst4Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the four-point asymmetric discrete sine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the four-point AV1 inverse asymmetric discrete sine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst8Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst8Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst8Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst8Operator.cs
index 860bd8683..5340275bf 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Adst8Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Adst8Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the eight-point asymmetric discrete sine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the eight-point AV1 inverse asymmetric discrete sine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct16Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct16Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct16Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct16Operator.cs
index 45fff6b79..32aa7525a 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct16Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct16Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the sixteen-point discrete cosine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the 16-point AV1 inverse discrete cosine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct32Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct32Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct32Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct32Operator.cs
index 2b12ee021..798af9fa7 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct32Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct32Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the thirty-two-point discrete cosine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the 32-point AV1 inverse discrete cosine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct4Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct4Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct4Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct4Operator.cs
index 9c8e2feaa..cc5f71931 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct4Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct4Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the four-point discrete cosine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the four-point AV1 inverse discrete cosine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct64Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct64Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct64Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct64Operator.cs
index e8ee0b417..749d85ec3 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct64Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct64Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the sixty-four-point discrete cosine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the 64-point AV1 inverse discrete cosine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct8Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct8Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct8Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct8Operator.cs
index ebb291fbb..51602a17b 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Dct8Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Dct8Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the eight-point discrete cosine inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the eight-point AV1 inverse discrete cosine transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity16Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity16Operator.cs
similarity index 98%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity16Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity16Operator.cs
index bd4c44f54..0837861e9 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity16Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity16Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the sixteen-point identity inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the sixteen-point AV1 inverse identity transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity32Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity32Operator.cs
similarity index 98%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity32Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity32Operator.cs
index 68b547ab5..331ebb283 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity32Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity32Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the thirty-two-point identity inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the thirty-two-point AV1 inverse identity transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity4Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity4Operator.cs
similarity index 98%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity4Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity4Operator.cs
index 53ea2cc99..59830776d 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity4Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity4Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the four-point identity inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the four-point AV1 inverse identity transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity8Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity8Operator.cs
similarity index 98%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity8Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity8Operator.cs
index 645e58e2d..66914e53f 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Identity8Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Identity8Operator.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the eight-point identity inverse transform operator.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Defines the eight-point AV1 inverse identity transform operator.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Operator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Operator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Operator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Operator.cs
index eedb48e77..5ee2f1249 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.Operator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.Operator.cs
@@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
/// cross-lane permutations. Reconstruction adds the final residuals to their matching prediction lanes before
/// narrowing to the decoded sample depth.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// The signed stage width whose fixed-point terminal operations require widened SIMD intermediates.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.OutputOperator.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.OutputOperator.cs
similarity index 99%
rename from src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.OutputOperator.cs
rename to src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.OutputOperator.cs
index 738caeab6..c47445aff 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1Inverse2dTransformer.OutputOperator.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.OutputOperator.cs
@@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Provides the sample-output operator shared by inverse transform traversals.
///
-internal static partial class Av1Inverse2dTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Reconstructs AV1 samples from predicted values and inverse-transform residuals.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.cs
index 5ba9ca4c8..852ac8e73 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformer.cs
@@ -6,7 +6,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1.Transform;
///
/// Reconstructs decoded AV1 transform coefficients into prediction sample buffers.
///
-internal class Av1InverseTransformer
+internal static partial class Av1InverseTransformer
{
///
/// Reconstructs an eight-bit transform block in place by adding its inverse-transform residual.
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformerFactory.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformerFactory.cs
index 257857443..c792c96e7 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformerFactory.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseTransformerFactory.cs
@@ -49,7 +49,7 @@ internal static class Av1InverseTransformerFactory
transformFunctionParameters.TransformSize,
transformFunctionParameters.BitDepth);
- Av1Inverse2dTransformer.Transform2dAdd(coefficients, readBuffer, readStride, writeBuffer, writeStride, ref config, workspace);
+ Av1InverseTransformer.Transform2dAdd(coefficients, readBuffer, readStride, writeBuffer, writeStride, ref config, workspace);
}
///
@@ -93,6 +93,6 @@ internal static class Av1InverseTransformerFactory
transformFunctionParameters.TransformSize,
transformFunctionParameters.BitDepth);
- Av1Inverse2dTransformer.Transform2dAdd(coefficients, readBuffer, readStride, writeBuffer, writeStride, ref config, workspace, transformFunctionParameters.BitDepth);
+ Av1InverseTransformer.Transform2dAdd(coefficients, readBuffer, readStride, writeBuffer, writeStride, ref config, workspace, transformFunctionParameters.BitDepth);
}
}
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseWalshHadamardTransformer.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseWalshHadamardTransformer.cs
index 386770c66..921f449e6 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseWalshHadamardTransformer.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Av1InverseWalshHadamardTransformer.cs
@@ -40,7 +40,7 @@ internal static class Av1InverseWalshHadamardTransformer
int writeStride,
int coefficientCount,
Span workspace)
- => TransformAdd>(
+ => TransformAdd>(
coefficients,
readBuffer,
readStride,
@@ -70,7 +70,7 @@ internal static class Av1InverseWalshHadamardTransformer
int coefficientCount,
Span workspace,
int bitDepth)
- => TransformAdd>(
+ => TransformAdd>(
coefficients,
readBuffer,
readStride,
@@ -93,7 +93,7 @@ internal static class Av1InverseWalshHadamardTransformer
Span workspace,
int bitDepth)
where TSample : unmanaged
- where TOutputOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransformOutputOperator
+ where TOutputOperator : struct, Av1InverseTransformer.IAv1InverseTransformOutputOperator
{
if (Vector128.IsHardwareAccelerated)
{
@@ -116,7 +116,7 @@ internal static class Av1InverseWalshHadamardTransformer
int coefficientCount,
int bitDepth)
where TSample : unmanaged
- where TOutputOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransformOutputOperator
+ where TOutputOperator : struct, Av1InverseTransformer.IAv1InverseTransformOutputOperator
{
ref int coefficientBase = ref MemoryMarshal.GetReference(coefficients);
Vector128 row0;
@@ -172,7 +172,7 @@ internal static class Av1InverseWalshHadamardTransformer
Span workspace,
int bitDepth)
where TSample : unmanaged
- where TOutputOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransformOutputOperator
+ where TOutputOperator : struct, Av1InverseTransformer.IAv1InverseTransformOutputOperator
{
ref TSample readBase = ref MemoryMarshal.GetReference(readBuffer);
ref TSample writeBase = ref MemoryMarshal.GetReference(writeBuffer);
@@ -300,7 +300,7 @@ internal static class Av1InverseWalshHadamardTransformer
Vector128 row3,
int bitDepth)
where TSample : unmanaged
- where TOutputOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransformOutputOperator
+ where TOutputOperator : struct, Av1InverseTransformer.IAv1InverseTransformOutputOperator
{
ref TSample readBase = ref MemoryMarshal.GetReference(readBuffer);
ref TSample writeBase = ref MemoryMarshal.GetReference(writeBuffer);
diff --git a/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1InverseTransformTests.cs b/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1InverseTransformTests.cs
index 2da220186..b255cd041 100644
--- a/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1InverseTransformTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Heif/Av1/Av1InverseTransformTests.cs
@@ -53,11 +53,11 @@ public class Av1InverseTransformTests
///
private static void AssertDctOperatorParity()
{
- AssertOperatorParity(4);
- AssertOperatorParity(8);
- AssertOperatorParity(16);
- AssertOperatorParity(32);
- AssertOperatorParity(64);
+ AssertOperatorParity(4);
+ AssertOperatorParity(8);
+ AssertOperatorParity(16);
+ AssertOperatorParity(32);
+ AssertOperatorParity(64);
}
///
@@ -65,9 +65,9 @@ public class Av1InverseTransformTests
///
private static void AssertAdstOperatorParity()
{
- AssertOperatorParity(4);
- AssertOperatorParity(8);
- AssertOperatorParity(16);
+ AssertOperatorParity(4);
+ AssertOperatorParity(8);
+ AssertOperatorParity(16);
}
///
@@ -75,10 +75,10 @@ public class Av1InverseTransformTests
///
private static void AssertIdentityOperatorParity()
{
- AssertOperatorParity(4);
- AssertOperatorParity(8);
- AssertOperatorParity(16);
- AssertOperatorParity(32);
+ AssertOperatorParity(4);
+ AssertOperatorParity(8);
+ AssertOperatorParity(16);
+ AssertOperatorParity(32);
}
///
@@ -108,14 +108,14 @@ public class Av1InverseTransformTests
Av1TransformVector> adstOutput256 = default;
Av1TransformVector> adstStep256 = default;
- Av1Inverse2dTransformer.Adst4Operator.Transform(
+ Av1InverseTransformer.Adst4Operator.Transform(
ref adstInput128,
ref adstOutput128,
ref adstStep128,
cosBit,
stageRange);
- Av1Inverse2dTransformer.Adst4Operator.Transform(
+ Av1InverseTransformer.Adst4Operator.Transform(
ref adstInput256,
ref adstOutput256,
ref adstStep256,
@@ -148,7 +148,7 @@ public class Av1InverseTransformTests
262_143,
-262_144);
- AssertWidenedIdentityOperator(
+ AssertWidenedIdentityOperator(
4,
identityInput128,
Vector128.Create(741_503, -741_504, 741_501, -741_503),
@@ -156,7 +156,7 @@ public class Av1InverseTransformTests
Vector256.Create(741_503, -741_504, 741_501, -741_503, 524_322, -524_323, 370_751, -370_752),
stageRange);
- AssertWidenedIdentityOperator(
+ AssertWidenedIdentityOperator(
16,
identityInput128,
Vector128.Create(1_483_005, -1_483_008, 1_483_002, -1_483_005),
@@ -182,7 +182,7 @@ public class Av1InverseTransformTests
Vector256 input256,
Vector256 expected256,
Av1TransformStageRange stageRange)
- where TOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
const int cosBit = 12;
Av1TransformVector> values128 = default;
@@ -268,18 +268,18 @@ public class Av1InverseTransformTests
[Fact]
public void ForwardAndInverseOperatorPairsReconstructTheirInput()
{
- AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size4x4, 1, 1);
- AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size8x8, 2, 2);
- AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size16x16, 3, 3);
- AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size32x32, 4, 4);
- AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size64x64, 5, 5);
- AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size4x4, 1, 1);
- AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size8x8, 2, 2);
- AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size16x16, 3, 3);
- AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size4x4, 1, 1);
- AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size8x8, 2, 1);
- AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size16x16, 3, 1);
- AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size32x32, 4, 1);
+ AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size4x4, 1, 1);
+ AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size8x8, 2, 2);
+ AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size16x16, 3, 3);
+ AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size32x32, 4, 4);
+ AssertRoundTrip(Av1TransformType.DctDct, Av1TransformSize.Size64x64, 5, 5);
+ AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size4x4, 1, 1);
+ AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size8x8, 2, 2);
+ AssertRoundTrip(Av1TransformType.AdstAdst, Av1TransformSize.Size16x16, 3, 3);
+ AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size4x4, 1, 1);
+ AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size8x8, 2, 1);
+ AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size16x16, 3, 1);
+ AssertRoundTrip(Av1TransformType.Identity, Av1TransformSize.Size32x32, 4, 1);
}
///
@@ -596,7 +596,7 @@ public class Av1InverseTransformTests
/// The inverse transform operator.
/// The transform length.
private static void AssertOperatorParity(int length)
- where TOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
const int cosBit = 12;
Av1TransformStageRange stageRange = default;
@@ -671,7 +671,7 @@ public class Av1InverseTransformTests
/// The maximum permitted reconstruction error.
private static void AssertRoundTrip(Av1TransformType transformType, Av1TransformSize transformSize, int scaleLog2, int allowedError)
where TForwardOperator : struct, Av1ForwardTransformer.IAv1ForwardTransform1dOperator
- where TInverseOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TInverseOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
const int bitDepth = 10;
const int testBlockCount = 30;
@@ -730,40 +730,40 @@ public class Av1InverseTransformTests
switch (config.TransformFunctionTypeColumn)
{
case Av1TransformFunctionType.Dct4:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct8:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct16:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct32:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct64:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst4:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst8:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst16:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity4:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity8:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity16:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity32:
- DispatchRow(transformType, transformSize, bitDepth, ref config);
+ DispatchRow(transformType, transformSize, bitDepth, ref config);
break;
default:
Assert.Fail($"Unexpected column function {config.TransformFunctionTypeColumn} for {transformType} {transformSize}.");
@@ -784,45 +784,45 @@ public class Av1InverseTransformTests
Av1TransformSize transformSize,
int bitDepth,
ref Av1Transform2dFlipConfiguration config)
- where TColumnOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TColumnOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
switch (config.TransformFunctionTypeRow)
{
case Av1TransformFunctionType.Dct4:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct8:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct16:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct32:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Dct64:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst4:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst8:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Adst16:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity4:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity8:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity16:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
case Av1TransformFunctionType.Identity32:
- AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
+ AssertTransform2dParity(transformType, transformSize, bitDepth, ref config);
break;
default:
Assert.Fail($"Unexpected row function {config.TransformFunctionTypeRow} for {transformType} {transformSize}.");
@@ -844,8 +844,8 @@ public class Av1InverseTransformTests
Av1TransformSize transformSize,
int bitDepth,
ref Av1Transform2dFlipConfiguration config)
- where TColumnOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
- where TRowOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TColumnOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
+ where TRowOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
int width = transformSize.GetWidth();
int height = transformSize.GetHeight();
@@ -895,8 +895,8 @@ public class Av1InverseTransformTests
int[] coefficients,
Av1TransformSize transformSize,
ref Av1Transform2dFlipConfiguration config)
- where TColumnOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
- where TRowOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TColumnOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
+ where TRowOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
const int bitDepth = 8;
int width = transformSize.GetWidth();
@@ -921,10 +921,10 @@ public class Av1InverseTransformTests
Array.Fill(scalar, byte.MaxValue);
Array.Fill(vector128, byte.MaxValue);
- Av1Inverse2dTransformer.Transform2dScalar, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dScalar, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, scalar, writeStride, ref config, scalarWorkspace, bitDepth);
- Av1Inverse2dTransformer.Transform2dVector128, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dVector128, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, vector128, writeStride, ref config, vector128Workspace, bitDepth);
Assert.Equal(scalar, vector128);
@@ -935,7 +935,7 @@ public class Av1InverseTransformTests
int[] vector256Workspace = new int[workspaceLength];
Array.Fill(vector256, byte.MaxValue);
- Av1Inverse2dTransformer.Transform2dVector256, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dVector256, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, vector256, writeStride, ref config, vector256Workspace, bitDepth);
Assert.Equal(scalar, vector256);
@@ -956,8 +956,8 @@ public class Av1InverseTransformTests
Av1TransformSize transformSize,
int bitDepth,
ref Av1Transform2dFlipConfiguration config)
- where TColumnOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
- where TRowOperator : struct, Av1Inverse2dTransformer.IAv1InverseTransform1dOperator
+ where TColumnOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
+ where TRowOperator : struct, Av1InverseTransformer.IAv1InverseTransform1dOperator
{
int width = transformSize.GetWidth();
int height = transformSize.GetHeight();
@@ -982,10 +982,10 @@ public class Av1InverseTransformTests
Array.Fill(scalar, short.MinValue);
Array.Fill(vector128, short.MinValue);
- Av1Inverse2dTransformer.Transform2dScalar, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dScalar, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, scalar, writeStride, ref config, scalarWorkspace, bitDepth);
- Av1Inverse2dTransformer.Transform2dVector128, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dVector128, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, vector128, writeStride, ref config, vector128Workspace, bitDepth);
Assert.Equal(scalar, vector128);
@@ -996,7 +996,7 @@ public class Av1InverseTransformTests
int[] vector256Workspace = new int[workspaceLength];
Array.Fill(vector256, short.MinValue);
- Av1Inverse2dTransformer.Transform2dVector256, TColumnOperator, TRowOperator>(
+ Av1InverseTransformer.Transform2dVector256, TColumnOperator, TRowOperator>(
coefficients, prediction, readStride, vector256, writeStride, ref config, vector256Workspace, bitDepth);
Assert.Equal(scalar, vector256);