diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst16Inverse1dTransformer.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst16Inverse1dTransformer.cs
index 28a4e88ccb..4458dec2ab 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst16Inverse1dTransformer.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Adst16Inverse1dTransformer.cs
@@ -17,203 +17,199 @@ internal class Av1Adst16Inverse1dTransformer : IAv1Transformer1d
///
/// SVT: svt_av1_iadst16_new
///
- private static void TransformScalar(ref int input, ref int output, int cosBit, Span stageRange)
+ private static void TransformScalar(ref int input, ref int output, int cos_bit, Span stage_range)
{
- Span cospi = Av1SinusConstants.CosinusPi(cosBit);
+ Span cospi = Av1SinusConstants.CosinusPi(cos_bit);
int stage = 0;
- Span stepSpan = stackalloc int[16];
- ref int step = ref stepSpan[0];
- Span bufferSpan = stackalloc int[16];
- ref int buffer = ref bufferSpan[0];
+ Span bf0 = stackalloc int[16];
+ Span bf1 = stackalloc int[16];
// stage 0;
// stage 1;
stage++;
- buffer = Unsafe.Add(ref input, 15);
- Unsafe.Add(ref buffer, 1) = input;
- Unsafe.Add(ref buffer, 2) = Unsafe.Add(ref input, 13);
- Unsafe.Add(ref buffer, 3) = Unsafe.Add(ref input, 2);
- Unsafe.Add(ref buffer, 4) = Unsafe.Add(ref input, 11);
- Unsafe.Add(ref buffer, 5) = Unsafe.Add(ref input, 4);
- Unsafe.Add(ref buffer, 6) = Unsafe.Add(ref input, 9);
- Unsafe.Add(ref buffer, 7) = Unsafe.Add(ref input, 6);
- Unsafe.Add(ref buffer, 8) = Unsafe.Add(ref input, 7);
- Unsafe.Add(ref buffer, 9) = Unsafe.Add(ref input, 8);
- Unsafe.Add(ref buffer, 10) = Unsafe.Add(ref input, 5);
- Unsafe.Add(ref buffer, 11) = Unsafe.Add(ref input, 10);
- Unsafe.Add(ref buffer, 12) = Unsafe.Add(ref input, 3);
- Unsafe.Add(ref buffer, 13) = Unsafe.Add(ref input, 12);
- Unsafe.Add(ref buffer, 14) = Unsafe.Add(ref input, 1);
- Unsafe.Add(ref buffer, 15) = Unsafe.Add(ref input, 14);
+ bf0[0] = Unsafe.Add(ref input, 15);
+ bf0[1] = Unsafe.Add(ref input, 0);
+ bf0[2] = Unsafe.Add(ref input, 13);
+ bf0[3] = Unsafe.Add(ref input, 2);
+ bf0[4] = Unsafe.Add(ref input, 11);
+ bf0[5] = Unsafe.Add(ref input, 4);
+ bf0[6] = Unsafe.Add(ref input, 9);
+ bf0[7] = Unsafe.Add(ref input, 6);
+ bf0[8] = Unsafe.Add(ref input, 7);
+ bf0[9] = Unsafe.Add(ref input, 8);
+ bf0[10] = Unsafe.Add(ref input, 5);
+ bf0[11] = Unsafe.Add(ref input, 10);
+ bf0[12] = Unsafe.Add(ref input, 3);
+ bf0[13] = Unsafe.Add(ref input, 12);
+ bf0[14] = Unsafe.Add(ref input, 1);
+ bf0[15] = Unsafe.Add(ref input, 14);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
- step = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[2], buffer, cospi[62], Unsafe.Add(ref buffer, 1), cosBit);
- Unsafe.Add(ref step, 1) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[62], buffer, -cospi[2], Unsafe.Add(ref buffer, 1), cosBit);
- Unsafe.Add(ref step, 2) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[10], Unsafe.Add(ref buffer, 2), cospi[54], Unsafe.Add(ref buffer, 3), cosBit);
- Unsafe.Add(ref step, 3) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[54], Unsafe.Add(ref buffer, 2), -cospi[10], Unsafe.Add(ref buffer, 3), cosBit);
- Unsafe.Add(ref step, 4) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[18], Unsafe.Add(ref buffer, 4), cospi[46], Unsafe.Add(ref buffer, 5), cosBit);
- Unsafe.Add(ref step, 5) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[46], Unsafe.Add(ref buffer, 4), -cospi[18], Unsafe.Add(ref buffer, 5), cosBit);
- Unsafe.Add(ref step, 6) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[26], Unsafe.Add(ref buffer, 6), cospi[38], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 7) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[38], Unsafe.Add(ref buffer, 6), -cospi[26], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 8) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[34], Unsafe.Add(ref buffer, 8), cospi[30], Unsafe.Add(ref buffer, 9), cosBit);
- Unsafe.Add(ref step, 9) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[30], Unsafe.Add(ref buffer, 8), -cospi[34], Unsafe.Add(ref buffer, 9), cosBit);
- Unsafe.Add(ref step, 10) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[42], Unsafe.Add(ref buffer, 10), cospi[22], Unsafe.Add(ref buffer, 1), cosBit);
- Unsafe.Add(ref step, 11) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[22], Unsafe.Add(ref buffer, 10), -cospi[42], Unsafe.Add(ref buffer, 11), cosBit);
- Unsafe.Add(ref step, 12) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[50], Unsafe.Add(ref buffer, 12), cospi[14], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 13) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[14], Unsafe.Add(ref buffer, 12), -cospi[50], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 14) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[58], Unsafe.Add(ref buffer, 14), cospi[6], Unsafe.Add(ref buffer, 15), cosBit);
- Unsafe.Add(ref step, 15) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[14], Unsafe.Add(ref buffer, 14), -cospi[58], Unsafe.Add(ref buffer, 15), cosBit);
+ bf1[0] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[2], bf0[0], cospi[62], bf0[1], cos_bit);
+ bf1[1] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
+ bf1[2] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[10], bf0[2], cospi[54], bf0[3], cos_bit);
+ bf1[3] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
+ bf1[4] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[18], bf0[4], cospi[46], bf0[5], cos_bit);
+ bf1[5] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[46], bf0[4], -cospi[18], bf0[5], cos_bit);
+ bf1[6] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[26], bf0[6], cospi[38], bf0[7], cos_bit);
+ bf1[7] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[38], bf0[6], -cospi[26], bf0[7], cos_bit);
+ bf1[8] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[34], bf0[8], cospi[30], bf0[9], cos_bit);
+ bf1[9] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[30], bf0[8], -cospi[34], bf0[9], cos_bit);
+ bf1[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[42], bf0[10], cospi[22], bf0[11], cos_bit);
+ bf1[11] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[22], bf0[10], -cospi[42], bf0[11], cos_bit);
+ bf1[12] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
+ bf1[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[14], bf0[12], -cospi[50], bf0[13], cos_bit);
+ bf1[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
+ bf1[15] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[6], bf0[14], -cospi[58], bf0[15], cos_bit);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
- byte range = stageRange[stage];
- buffer = Av1Dct4Inverse1dTransformer.ClampValue(step + Unsafe.Add(ref step, 8), range);
- Unsafe.Add(ref buffer, 1) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) + Unsafe.Add(ref step, 9), range);
- Unsafe.Add(ref buffer, 2) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 2) + Unsafe.Add(ref step, 10), range);
- Unsafe.Add(ref buffer, 3) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 3) + Unsafe.Add(ref step, 11), range);
- Unsafe.Add(ref buffer, 4) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 4) + Unsafe.Add(ref step, 12), range);
- Unsafe.Add(ref buffer, 5) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 5) + Unsafe.Add(ref step, 13), range);
- Unsafe.Add(ref buffer, 6) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 6) + Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 7) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 7) + Unsafe.Add(ref step, 15), range);
- Unsafe.Add(ref buffer, 8) = Av1Dct4Inverse1dTransformer.ClampValue(step - Unsafe.Add(ref step, 8), range);
- Unsafe.Add(ref buffer, 9) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) - Unsafe.Add(ref step, 9), range);
- Unsafe.Add(ref buffer, 10) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 2) - Unsafe.Add(ref step, 10), range);
- Unsafe.Add(ref buffer, 11) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 3) - Unsafe.Add(ref step, 11), range);
- Unsafe.Add(ref buffer, 12) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 4) - Unsafe.Add(ref step, 12), range);
- Unsafe.Add(ref buffer, 13) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 5) - Unsafe.Add(ref step, 13), range);
- Unsafe.Add(ref buffer, 14) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 6) - Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 15) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 7) - Unsafe.Add(ref step, 15), range);
+ bf0[0] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] + bf1[8], stage_range[stage]);
+ bf0[1] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] + bf1[9], stage_range[stage]);
+ bf0[2] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[2] + bf1[10], stage_range[stage]);
+ bf0[3] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[3] + bf1[11], stage_range[stage]);
+ bf0[4] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[4] + bf1[12], stage_range[stage]);
+ bf0[5] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[5] + bf1[13], stage_range[stage]);
+ bf0[6] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[6] + bf1[14], stage_range[stage]);
+ bf0[7] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[7] + bf1[15], stage_range[stage]);
+ bf0[8] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] - bf1[8], stage_range[stage]);
+ bf0[9] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] - bf1[9], stage_range[stage]);
+ bf0[10] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[2] - bf1[10], stage_range[stage]);
+ bf0[11] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[3] - bf1[11], stage_range[stage]);
+ bf0[12] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[4] - bf1[12], stage_range[stage]);
+ bf0[13] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[5] - bf1[13], stage_range[stage]);
+ bf0[14] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[6] - bf1[14], stage_range[stage]);
+ bf0[15] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[7] - bf1[15], stage_range[stage]);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
- step = buffer;
- Unsafe.Add(ref step, 1) = Unsafe.Add(ref buffer, 1);
- Unsafe.Add(ref step, 2) = Unsafe.Add(ref buffer, 2);
- Unsafe.Add(ref step, 3) = Unsafe.Add(ref buffer, 3);
- Unsafe.Add(ref step, 4) = Unsafe.Add(ref buffer, 4);
- Unsafe.Add(ref step, 5) = Unsafe.Add(ref buffer, 5);
- Unsafe.Add(ref step, 6) = Unsafe.Add(ref buffer, 6);
- Unsafe.Add(ref step, 7) = Unsafe.Add(ref buffer, 7);
- Unsafe.Add(ref step, 8) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[8], Unsafe.Add(ref buffer, 8), cospi[56], Unsafe.Add(ref buffer, 9), cosBit);
- Unsafe.Add(ref step, 9) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], Unsafe.Add(ref buffer, 8), -cospi[8], Unsafe.Add(ref buffer, 9), cosBit);
- Unsafe.Add(ref step, 10) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[40], Unsafe.Add(ref buffer, 10), cospi[24], Unsafe.Add(ref buffer, 11), cosBit);
- Unsafe.Add(ref step, 11) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], Unsafe.Add(ref buffer, 10), -cospi[40], Unsafe.Add(ref buffer, 11), cosBit);
- Unsafe.Add(ref step, 12) = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[56], Unsafe.Add(ref buffer, 12), cospi[8], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 13) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[8], Unsafe.Add(ref buffer, 12), cospi[56], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 14) = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[24], Unsafe.Add(ref buffer, 14), cospi[40], Unsafe.Add(ref buffer, 15), cosBit);
- Unsafe.Add(ref step, 15) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[40], Unsafe.Add(ref buffer, 14), cospi[24], Unsafe.Add(ref buffer, 15), cosBit);
+ bf1[0] = bf0[0];
+ bf1[1] = bf0[1];
+ bf1[2] = bf0[2];
+ bf1[3] = bf0[3];
+ bf1[4] = bf0[4];
+ bf1[5] = bf0[5];
+ bf1[6] = bf0[6];
+ bf1[7] = bf0[7];
+ bf1[8] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
+ bf1[9] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
+ bf1[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
+ bf1[11] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
+ bf1[12] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
+ bf1[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
+ bf1[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
+ bf1[15] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
- range = stageRange[stage];
- buffer = Av1Dct4Inverse1dTransformer.ClampValue(step + Unsafe.Add(ref step, 4), range);
- Unsafe.Add(ref buffer, 1) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) + Unsafe.Add(ref step, 5), range);
- Unsafe.Add(ref buffer, 2) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 2) + Unsafe.Add(ref step, 6), range);
- Unsafe.Add(ref buffer, 3) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 3) + Unsafe.Add(ref step, 7), range);
- Unsafe.Add(ref buffer, 4) = Av1Dct4Inverse1dTransformer.ClampValue(step - Unsafe.Add(ref step, 4), range);
- Unsafe.Add(ref buffer, 5) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) - Unsafe.Add(ref step, 5), range);
- Unsafe.Add(ref buffer, 6) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 2) - Unsafe.Add(ref step, 6), range);
- Unsafe.Add(ref buffer, 7) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 3) - Unsafe.Add(ref step, 7), range);
- Unsafe.Add(ref buffer, 8) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 8) + Unsafe.Add(ref step, 12), range);
- Unsafe.Add(ref buffer, 9) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 9) + Unsafe.Add(ref step, 13), range);
- Unsafe.Add(ref buffer, 10) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 10) + Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 11) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 11) + Unsafe.Add(ref step, 15), range);
- Unsafe.Add(ref buffer, 12) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 8) - Unsafe.Add(ref step, 12), range);
- Unsafe.Add(ref buffer, 13) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 9) - Unsafe.Add(ref step, 13), range);
- Unsafe.Add(ref buffer, 14) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 10) - Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 15) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 11) - Unsafe.Add(ref step, 15), range);
-
- // range_check_buf(stage, input, bf1, size, stage_range[stage]);
+ bf0[0] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] + bf1[4], stage_range[stage]);
+ bf0[1] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] + bf1[5], stage_range[stage]);
+ bf0[2] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[2] + bf1[6], stage_range[stage]);
+ bf0[3] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[3] + bf1[7], stage_range[stage]);
+ bf0[4] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] - bf1[4], stage_range[stage]);
+ bf0[5] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] - bf1[5], stage_range[stage]);
+ bf0[6] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[2] - bf1[6], stage_range[stage]);
+ bf0[7] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[3] - bf1[7], stage_range[stage]);
+ bf0[8] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[8] + bf1[12], stage_range[stage]);
+ bf0[9] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[9] + bf1[13], stage_range[stage]);
+ bf0[10] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[10] + bf1[14], stage_range[stage]);
+ bf0[11] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[11] + bf1[15], stage_range[stage]);
+ bf0[12] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[8] - bf1[12], stage_range[stage]);
+ bf0[13] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[9] - bf1[13], stage_range[stage]);
+ bf0[14] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[10] - bf1[14], stage_range[stage]);
+ bf0[15] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[11] - bf1[15], stage_range[stage]);
+
+ // range_check_buf(stage, input, bf0, size, stage_range[stage]);
// stage 6
- step = buffer;
- Unsafe.Add(ref step, 1) = Unsafe.Add(ref buffer, 1);
- Unsafe.Add(ref step, 2) = Unsafe.Add(ref buffer, 2);
- Unsafe.Add(ref step, 3) = Unsafe.Add(ref buffer, 3);
- Unsafe.Add(ref step, 4) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], Unsafe.Add(ref buffer, 4), cospi[48], Unsafe.Add(ref buffer, 5), cosBit);
- Unsafe.Add(ref step, 5) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], Unsafe.Add(ref buffer, 4), -cospi[16], Unsafe.Add(ref buffer, 5), cosBit);
- Unsafe.Add(ref step, 6) = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], Unsafe.Add(ref buffer, 6), cospi[16], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 7) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], Unsafe.Add(ref buffer, 6), cospi[48], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 8) = Unsafe.Add(ref buffer, 8);
- Unsafe.Add(ref step, 9) = Unsafe.Add(ref buffer, 9);
- Unsafe.Add(ref step, 10) = Unsafe.Add(ref buffer, 10);
- Unsafe.Add(ref step, 11) = Unsafe.Add(ref buffer, 11);
- Unsafe.Add(ref step, 12) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], Unsafe.Add(ref buffer, 12), cospi[48], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 13) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], Unsafe.Add(ref buffer, 12), -cospi[16], Unsafe.Add(ref buffer, 13), cosBit);
- Unsafe.Add(ref step, 14) = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], Unsafe.Add(ref buffer, 14), cospi[16], Unsafe.Add(ref buffer, 15), cosBit);
- Unsafe.Add(ref step, 15) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], Unsafe.Add(ref buffer, 14), cospi[48], Unsafe.Add(ref buffer, 15), cosBit);
+ stage++;
+ bf1[0] = bf0[0];
+ bf1[1] = bf0[1];
+ bf1[2] = bf0[2];
+ bf1[3] = bf0[3];
+ bf1[4] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
+ bf1[5] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
+ bf1[6] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
+ bf1[7] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
+ bf1[8] = bf0[8];
+ bf1[9] = bf0[9];
+ bf1[10] = bf0[10];
+ bf1[11] = bf0[11];
+ bf1[12] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
+ bf1[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
+ bf1[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
+ bf1[15] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
- range = stageRange[stage];
- buffer = Av1Dct4Inverse1dTransformer.ClampValue(step + Unsafe.Add(ref step, 2), range);
- Unsafe.Add(ref buffer, 1) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) + Unsafe.Add(ref step, 3), range);
- Unsafe.Add(ref buffer, 2) = Av1Dct4Inverse1dTransformer.ClampValue(step - Unsafe.Add(ref step, 2), range);
- Unsafe.Add(ref buffer, 3) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 1) - Unsafe.Add(ref step, 3), range);
- Unsafe.Add(ref buffer, 4) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 4) + Unsafe.Add(ref step, 6), range);
- Unsafe.Add(ref buffer, 5) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 5) + Unsafe.Add(ref step, 7), range);
- Unsafe.Add(ref buffer, 6) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 4) - Unsafe.Add(ref step, 6), range);
- Unsafe.Add(ref buffer, 7) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 5) - Unsafe.Add(ref step, 7), range);
- Unsafe.Add(ref buffer, 8) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 8) + Unsafe.Add(ref step, 10), range);
- Unsafe.Add(ref buffer, 9) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 9) + Unsafe.Add(ref step, 11), range);
- Unsafe.Add(ref buffer, 10) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 8) - Unsafe.Add(ref step, 10), range);
- Unsafe.Add(ref buffer, 11) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 9) - Unsafe.Add(ref step, 11), range);
- Unsafe.Add(ref buffer, 12) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 12) + Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 13) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 13) + Unsafe.Add(ref step, 15), range);
- Unsafe.Add(ref buffer, 14) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 12) - Unsafe.Add(ref step, 14), range);
- Unsafe.Add(ref buffer, 15) = Av1Dct4Inverse1dTransformer.ClampValue(Unsafe.Add(ref step, 13) - Unsafe.Add(ref step, 15), range);
+ bf0[0] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] + bf1[2], stage_range[stage]);
+ bf0[1] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] + bf1[3], stage_range[stage]);
+ bf0[2] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[0] - bf1[2], stage_range[stage]);
+ bf0[3] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[1] - bf1[3], stage_range[stage]);
+ bf0[4] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[4] + bf1[6], stage_range[stage]);
+ bf0[5] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[5] + bf1[7], stage_range[stage]);
+ bf0[6] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[4] - bf1[6], stage_range[stage]);
+ bf0[7] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[5] - bf1[7], stage_range[stage]);
+ bf0[8] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[8] + bf1[10], stage_range[stage]);
+ bf0[9] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[9] + bf1[11], stage_range[stage]);
+ bf0[10] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[8] - bf1[10], stage_range[stage]);
+ bf0[11] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[9] - bf1[11], stage_range[stage]);
+ bf0[12] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[12] + bf1[14], stage_range[stage]);
+ bf0[13] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[13] + bf1[15], stage_range[stage]);
+ bf0[14] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[12] - bf1[14], stage_range[stage]);
+ bf0[15] = Av1Dct4Inverse1dTransformer.ClampValue(bf1[13] - bf1[15], stage_range[stage]);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 8
- step = buffer;
- Unsafe.Add(ref step, 1) = Unsafe.Add(ref buffer, 1);
- Unsafe.Add(ref step, 2) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 2), cospi[32], Unsafe.Add(ref buffer, 3), cosBit);
- Unsafe.Add(ref step, 3) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 2), -cospi[32], Unsafe.Add(ref buffer, 3), cosBit);
- Unsafe.Add(ref step, 4) = Unsafe.Add(ref buffer, 4);
- Unsafe.Add(ref step, 5) = Unsafe.Add(ref buffer, 5);
- Unsafe.Add(ref step, 6) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 6), cospi[32], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 7) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 6), -cospi[32], Unsafe.Add(ref buffer, 7), cosBit);
- Unsafe.Add(ref step, 8) = Unsafe.Add(ref buffer, 8);
- Unsafe.Add(ref step, 9) = Unsafe.Add(ref buffer, 9);
- Unsafe.Add(ref step, 10) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 10), cospi[32], Unsafe.Add(ref buffer, 11), cosBit);
- Unsafe.Add(ref step, 11) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 10), -cospi[32], Unsafe.Add(ref buffer, 11), cosBit);
- Unsafe.Add(ref step, 12) = Unsafe.Add(ref buffer, 12);
- Unsafe.Add(ref step, 13) = Unsafe.Add(ref buffer, 13);
- Unsafe.Add(ref step, 14) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 14), cospi[32], Unsafe.Add(ref buffer, 15), cosBit);
- Unsafe.Add(ref step, 15) = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], Unsafe.Add(ref buffer, 14), -cospi[32], Unsafe.Add(ref buffer, 15), cosBit);
+ bf1[0] = bf0[0];
+ bf1[1] = bf0[1];
+ bf1[2] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
+ bf1[3] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
+ bf1[4] = bf0[4];
+ bf1[5] = bf0[5];
+ bf1[6] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
+ bf1[7] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
+ bf1[8] = bf0[8];
+ bf1[9] = bf0[9];
+ bf1[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
+ bf1[11] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
+ bf1[12] = bf0[12];
+ bf1[13] = bf0[13];
+ bf1[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
+ bf1[15] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
// range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 9
- output = step;
- Unsafe.Add(ref output, 1) = -Unsafe.Add(ref step, 8);
- Unsafe.Add(ref output, 2) = Unsafe.Add(ref step, 12);
- Unsafe.Add(ref output, 3) = -Unsafe.Add(ref step, 4);
- Unsafe.Add(ref output, 4) = Unsafe.Add(ref step, 6);
- Unsafe.Add(ref output, 5) = -Unsafe.Add(ref step, 14);
- Unsafe.Add(ref output, 6) = Unsafe.Add(ref step, 10);
- Unsafe.Add(ref output, 7) = -Unsafe.Add(ref step, 2);
- Unsafe.Add(ref output, 8) = Unsafe.Add(ref step, 3);
- Unsafe.Add(ref output, 9) = -Unsafe.Add(ref step, 11);
- Unsafe.Add(ref output, 10) = Unsafe.Add(ref step, 15);
- Unsafe.Add(ref output, 11) = -Unsafe.Add(ref step, 7);
- Unsafe.Add(ref output, 12) = Unsafe.Add(ref step, 5);
- Unsafe.Add(ref output, 13) = -Unsafe.Add(ref step, 13);
- Unsafe.Add(ref output, 14) = Unsafe.Add(ref step, 9);
- Unsafe.Add(ref output, 15) = -Unsafe.Add(ref step, 1);
+ Unsafe.Add(ref output, 0) = bf1[0];
+ Unsafe.Add(ref output, 1) = -bf1[8];
+ Unsafe.Add(ref output, 2) = bf1[12];
+ Unsafe.Add(ref output, 3) = -bf1[4];
+ Unsafe.Add(ref output, 4) = bf1[6];
+ Unsafe.Add(ref output, 5) = -bf1[14];
+ Unsafe.Add(ref output, 6) = bf1[10];
+ Unsafe.Add(ref output, 7) = -bf1[2];
+ Unsafe.Add(ref output, 8) = bf1[3];
+ Unsafe.Add(ref output, 9) = -bf1[11];
+ Unsafe.Add(ref output, 10) = bf1[15];
+ Unsafe.Add(ref output, 11) = -bf1[7];
+ Unsafe.Add(ref output, 12) = bf1[5];
+ Unsafe.Add(ref output, 13) = -bf1[13];
+ Unsafe.Add(ref output, 14) = bf1[9];
+ Unsafe.Add(ref output, 15) = -bf1[1];
}
}
diff --git a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Dct64Inverse1dTransformer.cs b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Dct64Inverse1dTransformer.cs
index 7218f5659e..c4f754ce39 100644
--- a/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Dct64Inverse1dTransformer.cs
+++ b/src/ImageSharp/Formats/Heif/Av1/Transform/Inverse/Av1Dct64Inverse1dTransformer.cs
@@ -21,8 +21,8 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
{
Span cospi = Av1SinusConstants.CosinusPi(cosBit);
int stage = 0;
- Span temp0 = stackalloc int[64];
Span temp1 = stackalloc int[64];
+ Span temp0 = stackalloc int[64];
// stage 0;
@@ -93,7 +93,7 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp1[62] = Unsafe.Add(ref input, 31);
temp1[63] = Unsafe.Add(ref input, 63);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
@@ -129,44 +129,43 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp0[29] = temp1[29];
temp0[30] = temp1[30];
temp0[31] = temp1[31];
- temp0[32] = HalfButterfly(cospi[63], temp1[32], -cospi[1], temp1[63], cosBit);
- temp0[33] = HalfButterfly(cospi[31], temp1[33], -cospi[33], temp1[63], cosBit);
- temp0[34] = HalfButterfly(cospi[47], temp1[34], -cospi[17], temp1[61], cosBit);
- temp0[35] = HalfButterfly(cospi[15], temp1[35], -cospi[49], temp1[60], cosBit);
- temp0[36] = HalfButterfly(cospi[55], temp1[36], -cospi[9], temp1[59], cosBit);
- temp0[37] = HalfButterfly(cospi[23], temp1[37], -cospi[41], temp1[58], cosBit);
- temp0[38] = HalfButterfly(cospi[39], temp1[38], -cospi[25], temp1[57], cosBit);
- temp0[39] = HalfButterfly(cospi[7], temp1[39], -cospi[57], temp1[56], cosBit);
- temp0[40] = HalfButterfly(cospi[59], temp1[40], -cospi[5], temp1[55], cosBit);
- temp0[41] = HalfButterfly(cospi[27], temp1[41], -cospi[37], temp1[54], cosBit);
- temp0[42] = HalfButterfly(cospi[43], temp1[42], -cospi[21], temp1[53], cosBit);
- temp0[43] = HalfButterfly(cospi[11], temp1[43], -cospi[53], temp1[52], cosBit);
- temp0[44] = HalfButterfly(cospi[51], temp1[44], -cospi[13], temp1[51], cosBit);
- temp0[45] = HalfButterfly(cospi[19], temp1[45], -cospi[45], temp1[50], cosBit);
- temp0[46] = HalfButterfly(cospi[35], temp1[46], -cospi[29], temp1[49], cosBit);
- temp0[47] = HalfButterfly(cospi[3], temp1[47], -cospi[61], temp1[48], cosBit);
- temp0[48] = HalfButterfly(cospi[61], temp1[47], cospi[3], temp1[48], cosBit);
- temp0[49] = HalfButterfly(cospi[29], temp1[46], cospi[35], temp1[49], cosBit);
- temp0[50] = HalfButterfly(cospi[45], temp1[45], cospi[19], temp1[50], cosBit);
- temp0[51] = HalfButterfly(cospi[13], temp1[44], cospi[51], temp1[51], cosBit);
- temp0[52] = HalfButterfly(cospi[53], temp1[43], cospi[11], temp1[52], cosBit);
- temp0[53] = HalfButterfly(cospi[21], temp1[42], cospi[43], temp1[53], cosBit);
- temp0[54] = HalfButterfly(cospi[37], temp1[41], cospi[27], temp1[54], cosBit);
- temp0[55] = HalfButterfly(cospi[5], temp1[40], cospi[59], temp1[55], cosBit);
- temp0[56] = HalfButterfly(cospi[57], temp1[39], cospi[7], temp1[56], cosBit);
- temp0[57] = HalfButterfly(cospi[25], temp1[38], cospi[39], temp1[57], cosBit);
- temp0[58] = HalfButterfly(cospi[41], temp1[37], cospi[23], temp1[58], cosBit);
- temp0[59] = HalfButterfly(cospi[9], temp1[36], cospi[55], temp1[59], cosBit);
- temp0[60] = HalfButterfly(cospi[49], temp1[35], cospi[15], temp1[60], cosBit);
- temp0[61] = HalfButterfly(cospi[17], temp1[34], cospi[47], temp1[61], cosBit);
- temp0[62] = HalfButterfly(cospi[33], temp1[33], cospi[31], temp1[62], cosBit);
- temp0[63] = HalfButterfly(cospi[1], temp1[32], cospi[63], temp1[63], cosBit);
+ temp0[32] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[63], temp1[32], -cospi[1], temp1[63], cosBit);
+ temp0[33] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[31], temp1[33], -cospi[33], temp1[62], cosBit);
+ temp0[34] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[47], temp1[34], -cospi[17], temp1[61], cosBit);
+ temp0[35] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[15], temp1[35], -cospi[49], temp1[60], cosBit);
+ temp0[36] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[55], temp1[36], -cospi[9], temp1[59], cosBit);
+ temp0[37] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[23], temp1[37], -cospi[41], temp1[58], cosBit);
+ temp0[38] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[39], temp1[38], -cospi[25], temp1[57], cosBit);
+ temp0[39] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[7], temp1[39], -cospi[57], temp1[56], cosBit);
+ temp0[40] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[59], temp1[40], -cospi[5], temp1[55], cosBit);
+ temp0[41] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[27], temp1[41], -cospi[37], temp1[54], cosBit);
+ temp0[42] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[43], temp1[42], -cospi[21], temp1[53], cosBit);
+ temp0[43] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[11], temp1[43], -cospi[53], temp1[52], cosBit);
+ temp0[44] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[51], temp1[44], -cospi[13], temp1[51], cosBit);
+ temp0[45] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[19], temp1[45], -cospi[45], temp1[50], cosBit);
+ temp0[46] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[35], temp1[46], -cospi[29], temp1[49], cosBit);
+ temp0[47] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[3], temp1[47], -cospi[61], temp1[48], cosBit);
+ temp0[48] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[61], temp1[47], cospi[3], temp1[48], cosBit);
+ temp0[49] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[29], temp1[46], cospi[35], temp1[49], cosBit);
+ temp0[50] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[45], temp1[45], cospi[19], temp1[50], cosBit);
+ temp0[51] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[13], temp1[44], cospi[51], temp1[51], cosBit);
+ temp0[52] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[53], temp1[43], cospi[11], temp1[52], cosBit);
+ temp0[53] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[21], temp1[42], cospi[43], temp1[53], cosBit);
+ temp0[54] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[37], temp1[41], cospi[27], temp1[54], cosBit);
+ temp0[55] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[5], temp1[40], cospi[59], temp1[55], cosBit);
+ temp0[56] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[57], temp1[39], cospi[7], temp1[56], cosBit);
+ temp0[57] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[25], temp1[38], cospi[39], temp1[57], cosBit);
+ temp0[58] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[41], temp1[37], cospi[23], temp1[58], cosBit);
+ temp0[59] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[9], temp1[36], cospi[55], temp1[59], cosBit);
+ temp0[60] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[49], temp1[35], cospi[15], temp1[60], cosBit);
+ temp0[61] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[17], temp1[34], cospi[47], temp1[61], cosBit);
+ temp0[62] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[33], temp1[33], cospi[31], temp1[62], cosBit);
+ temp0[63] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[1], temp1[32], cospi[63], temp1[63], cosBit);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
- byte range = stageRange[stage];
temp1[0] = temp0[0];
temp1[1] = temp0[1];
temp1[2] = temp0[2];
@@ -183,60 +182,59 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp1[13] = temp0[13];
temp1[14] = temp0[14];
temp1[15] = temp0[15];
- temp1[16] = HalfButterfly(cospi[62], temp0[16], -cospi[2], temp0[31], cosBit);
- temp1[17] = HalfButterfly(cospi[30], temp0[17], -cospi[34], temp0[30], cosBit);
- temp1[18] = HalfButterfly(cospi[46], temp0[18], -cospi[18], temp0[29], cosBit);
- temp1[19] = HalfButterfly(cospi[14], temp0[19], -cospi[50], temp0[28], cosBit);
- temp1[20] = HalfButterfly(cospi[54], temp0[20], -cospi[10], temp0[27], cosBit);
- temp1[21] = HalfButterfly(cospi[22], temp0[21], -cospi[42], temp0[26], cosBit);
- temp1[22] = HalfButterfly(cospi[38], temp0[22], -cospi[26], temp0[25], cosBit);
- temp1[23] = HalfButterfly(cospi[6], temp0[23], -cospi[58], temp0[24], cosBit);
- temp1[24] = HalfButterfly(cospi[58], temp0[23], cospi[6], temp0[24], cosBit);
- temp1[25] = HalfButterfly(cospi[26], temp0[22], cospi[38], temp0[25], cosBit);
- temp1[26] = HalfButterfly(cospi[42], temp0[21], cospi[22], temp0[26], cosBit);
- temp1[27] = HalfButterfly(cospi[10], temp0[20], cospi[54], temp0[27], cosBit);
- temp1[28] = HalfButterfly(cospi[50], temp0[19], cospi[14], temp0[28], cosBit);
- temp1[29] = HalfButterfly(cospi[18], temp0[18], cospi[46], temp0[29], cosBit);
- temp1[30] = HalfButterfly(cospi[34], temp0[17], cospi[30], temp0[30], cosBit);
- temp1[31] = HalfButterfly(cospi[2], temp0[16], cospi[62], temp0[31], cosBit);
- temp1[32] = ClampValue(temp0[32] + temp0[33], range);
- temp1[33] = ClampValue(temp0[32] - temp0[33], range);
- temp1[34] = ClampValue(-temp0[34] + temp0[35], range);
- temp1[35] = ClampValue(temp0[34] + temp0[35], range);
- temp1[36] = ClampValue(temp0[36] + temp0[37], range);
- temp1[37] = ClampValue(temp0[36] - temp0[37], range);
- temp1[38] = ClampValue(-temp0[38] + temp0[39], range);
- temp1[39] = ClampValue(temp0[38] + temp0[39], range);
- temp1[40] = ClampValue(temp0[40] + temp0[41], range);
- temp1[41] = ClampValue(temp0[40] - temp0[41], range);
- temp1[42] = ClampValue(-temp0[42] + temp0[43], range);
- temp1[43] = ClampValue(temp0[42] + temp0[43], range);
- temp1[44] = ClampValue(temp0[44] + temp0[45], range);
- temp1[45] = ClampValue(temp0[44] - temp0[45], range);
- temp1[46] = ClampValue(-temp0[46] + temp0[47], range);
- temp1[47] = ClampValue(temp0[46] + temp0[47], range);
- temp1[48] = ClampValue(temp0[48] + temp0[49], range);
- temp1[49] = ClampValue(temp0[48] - temp0[49], range);
- temp1[50] = ClampValue(-temp0[50] + temp0[51], range);
- temp1[51] = ClampValue(temp0[50] + temp0[51], range);
- temp1[52] = ClampValue(temp0[52] + temp0[53], range);
- temp1[53] = ClampValue(temp0[52] - temp0[53], range);
- temp1[54] = ClampValue(-temp0[54] + temp0[55], range);
- temp1[55] = ClampValue(temp0[54] + temp0[55], range);
- temp1[56] = ClampValue(temp0[56] + temp0[57], range);
- temp1[57] = ClampValue(temp0[56] - temp0[57], range);
- temp1[58] = ClampValue(-temp0[58] + temp0[59], range);
- temp1[59] = ClampValue(temp0[58] + temp0[59], range);
- temp1[60] = ClampValue(temp0[60] + temp0[61], range);
- temp1[61] = ClampValue(temp0[60] - temp0[61], range);
- temp1[62] = ClampValue(-temp0[62] + temp0[63], range);
- temp1[63] = ClampValue(temp0[62] + temp0[63], range);
+ temp1[16] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[62], temp0[16], -cospi[2], temp0[31], cosBit);
+ temp1[17] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[30], temp0[17], -cospi[34], temp0[30], cosBit);
+ temp1[18] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[46], temp0[18], -cospi[18], temp0[29], cosBit);
+ temp1[19] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[14], temp0[19], -cospi[50], temp0[28], cosBit);
+ temp1[20] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[54], temp0[20], -cospi[10], temp0[27], cosBit);
+ temp1[21] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[22], temp0[21], -cospi[42], temp0[26], cosBit);
+ temp1[22] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[38], temp0[22], -cospi[26], temp0[25], cosBit);
+ temp1[23] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[6], temp0[23], -cospi[58], temp0[24], cosBit);
+ temp1[24] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[58], temp0[23], cospi[6], temp0[24], cosBit);
+ temp1[25] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[26], temp0[22], cospi[38], temp0[25], cosBit);
+ temp1[26] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[42], temp0[21], cospi[22], temp0[26], cosBit);
+ temp1[27] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[10], temp0[20], cospi[54], temp0[27], cosBit);
+ temp1[28] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[50], temp0[19], cospi[14], temp0[28], cosBit);
+ temp1[29] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[18], temp0[18], cospi[46], temp0[29], cosBit);
+ temp1[30] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[34], temp0[17], cospi[30], temp0[30], cosBit);
+ temp1[31] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[2], temp0[16], cospi[62], temp0[31], cosBit);
+ temp1[32] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] + temp0[33], stageRange[stage]);
+ temp1[33] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] - temp0[33], stageRange[stage]);
+ temp1[34] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[34] + temp0[35], stageRange[stage]);
+ temp1[35] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[34] + temp0[35], stageRange[stage]);
+ temp1[36] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[36] + temp0[37], stageRange[stage]);
+ temp1[37] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[36] - temp0[37], stageRange[stage]);
+ temp1[38] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[38] + temp0[39], stageRange[stage]);
+ temp1[39] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[38] + temp0[39], stageRange[stage]);
+ temp1[40] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[40] + temp0[41], stageRange[stage]);
+ temp1[41] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[40] - temp0[41], stageRange[stage]);
+ temp1[42] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[42] + temp0[43], stageRange[stage]);
+ temp1[43] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[42] + temp0[43], stageRange[stage]);
+ temp1[44] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[44] + temp0[45], stageRange[stage]);
+ temp1[45] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[44] - temp0[45], stageRange[stage]);
+ temp1[46] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[46] + temp0[47], stageRange[stage]);
+ temp1[47] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[46] + temp0[47], stageRange[stage]);
+ temp1[48] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] + temp0[49], stageRange[stage]);
+ temp1[49] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] - temp0[49], stageRange[stage]);
+ temp1[50] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[50] + temp0[51], stageRange[stage]);
+ temp1[51] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[50] + temp0[51], stageRange[stage]);
+ temp1[52] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[52] + temp0[53], stageRange[stage]);
+ temp1[53] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[52] - temp0[53], stageRange[stage]);
+ temp1[54] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[54] + temp0[55], stageRange[stage]);
+ temp1[55] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[54] + temp0[55], stageRange[stage]);
+ temp1[56] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[56] + temp0[57], stageRange[stage]);
+ temp1[57] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[56] - temp0[57], stageRange[stage]);
+ temp1[58] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[58] + temp0[59], stageRange[stage]);
+ temp1[59] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[58] + temp0[59], stageRange[stage]);
+ temp1[60] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[60] + temp0[61], stageRange[stage]);
+ temp1[61] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[60] - temp0[61], stageRange[stage]);
+ temp1[62] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[62] + temp0[63], stageRange[stage]);
+ temp1[63] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[62] + temp0[63], stageRange[stage]);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
- range = stageRange[stage];
temp0[0] = temp1[0];
temp0[1] = temp1[1];
temp0[2] = temp1[2];
@@ -245,322 +243,318 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp0[5] = temp1[5];
temp0[6] = temp1[6];
temp0[7] = temp1[7];
- temp0[8] = HalfButterfly(cospi[60], temp1[8], -cospi[4], temp1[15], cosBit);
- temp0[9] = HalfButterfly(cospi[28], temp1[9], -cospi[36], temp1[14], cosBit);
- temp0[10] = HalfButterfly(cospi[44], temp1[10], -cospi[20], temp1[13], cosBit);
- temp0[11] = HalfButterfly(cospi[12], temp1[11], -cospi[52], temp0[12], cosBit);
- temp0[12] = HalfButterfly(cospi[52], temp1[11], cospi[12], temp1[12], cosBit);
- temp0[13] = HalfButterfly(cospi[20], temp1[10], cospi[44], temp1[13], cosBit);
- temp0[14] = HalfButterfly(cospi[36], temp1[9], cospi[28], temp1[14], cosBit);
- temp0[15] = HalfButterfly(cospi[4], temp1[8], cospi[60], temp0[15], cosBit);
- temp0[16] = ClampValue(temp1[16] + temp1[17], range);
- temp0[17] = ClampValue(temp1[16] - temp1[17], range);
- temp0[18] = ClampValue(-temp1[18] + temp1[19], range);
- temp0[19] = ClampValue(temp1[18] + temp1[19], range);
- temp0[20] = ClampValue(temp1[20] + temp1[21], range);
- temp0[21] = ClampValue(temp1[20] - temp1[21], range);
- temp0[22] = ClampValue(-temp1[22] + temp1[23], range);
- temp0[23] = ClampValue(temp1[22] + temp1[23], range);
- temp0[24] = ClampValue(temp1[24] + temp1[25], range);
- temp0[25] = ClampValue(temp1[24] - temp1[25], range);
- temp0[26] = ClampValue(-temp1[26] + temp1[27], range);
- temp0[27] = ClampValue(temp1[26] + temp1[27], range);
- temp0[28] = ClampValue(temp1[28] + temp1[29], range);
- temp0[29] = ClampValue(temp1[28] - temp1[29], range);
- temp0[30] = ClampValue(-temp1[30] + temp1[31], range);
- temp0[31] = ClampValue(temp1[30] + temp1[31], range);
+ temp0[8] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[60], temp1[8], -cospi[4], temp1[15], cosBit);
+ temp0[9] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[28], temp1[9], -cospi[36], temp1[14], cosBit);
+ temp0[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[44], temp1[10], -cospi[20], temp1[13], cosBit);
+ temp0[11] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[12], temp1[11], -cospi[52], temp1[12], cosBit);
+ temp0[12] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[52], temp1[11], cospi[12], temp1[12], cosBit);
+ temp0[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[20], temp1[10], cospi[44], temp1[13], cosBit);
+ temp0[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[36], temp1[9], cospi[28], temp1[14], cosBit);
+ temp0[15] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[4], temp1[8], cospi[60], temp1[15], cosBit);
+ temp0[16] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] + temp1[17], stageRange[stage]);
+ temp0[17] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] - temp1[17], stageRange[stage]);
+ temp0[18] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[18] + temp1[19], stageRange[stage]);
+ temp0[19] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[18] + temp1[19], stageRange[stage]);
+ temp0[20] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[20] + temp1[21], stageRange[stage]);
+ temp0[21] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[20] - temp1[21], stageRange[stage]);
+ temp0[22] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[22] + temp1[23], stageRange[stage]);
+ temp0[23] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[22] + temp1[23], stageRange[stage]);
+ temp0[24] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[24] + temp1[25], stageRange[stage]);
+ temp0[25] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[24] - temp1[25], stageRange[stage]);
+ temp0[26] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[26] + temp1[27], stageRange[stage]);
+ temp0[27] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[26] + temp1[27], stageRange[stage]);
+ temp0[28] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[28] + temp1[29], stageRange[stage]);
+ temp0[29] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[28] - temp1[29], stageRange[stage]);
+ temp0[30] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[30] + temp1[31], stageRange[stage]);
+ temp0[31] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[30] + temp1[31], stageRange[stage]);
temp0[32] = temp1[32];
- temp0[33] = HalfButterfly(-cospi[4], temp1[33], cospi[60], temp1[62], cosBit);
- temp0[34] = HalfButterfly(-cospi[60], temp1[34], -cospi[4], temp1[61], cosBit);
+ temp0[33] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[4], temp1[33], cospi[60], temp1[62], cosBit);
+ temp0[34] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[60], temp1[34], -cospi[4], temp1[61], cosBit);
temp0[35] = temp1[35];
temp0[36] = temp1[36];
- temp0[37] = HalfButterfly(-cospi[36], temp1[37], cospi[28], temp1[58], cosBit);
- temp0[38] = HalfButterfly(-cospi[28], temp1[38], -cospi[36], temp1[57], cosBit);
+ temp0[37] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[36], temp1[37], cospi[28], temp1[58], cosBit);
+ temp0[38] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[28], temp1[38], -cospi[36], temp1[57], cosBit);
temp0[39] = temp1[39];
temp0[40] = temp1[40];
- temp0[41] = HalfButterfly(-cospi[20], temp1[41], cospi[44], temp1[54], cosBit);
- temp0[42] = HalfButterfly(-cospi[44], temp1[42], -cospi[20], temp1[53], cosBit);
+ temp0[41] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[20], temp1[41], cospi[44], temp1[54], cosBit);
+ temp0[42] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[44], temp1[42], -cospi[20], temp1[53], cosBit);
temp0[43] = temp1[43];
temp0[44] = temp1[44];
- temp0[45] = HalfButterfly(-cospi[52], temp1[45], cospi[12], temp1[50], cosBit);
- temp0[46] = HalfButterfly(-cospi[12], temp1[46], -cospi[52], temp1[49], cosBit);
+ temp0[45] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[52], temp1[45], cospi[12], temp1[50], cosBit);
+ temp0[46] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[12], temp1[46], -cospi[52], temp1[49], cosBit);
temp0[47] = temp1[47];
temp0[48] = temp1[48];
- temp0[49] = HalfButterfly(-cospi[52], temp1[46], cospi[12], temp1[49], cosBit);
- temp0[50] = HalfButterfly(cospi[12], temp1[45], cospi[52], temp1[50], cosBit);
+ temp0[49] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[52], temp1[46], cospi[12], temp1[49], cosBit);
+ temp0[50] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[12], temp1[45], cospi[52], temp1[50], cosBit);
temp0[51] = temp1[51];
temp0[52] = temp1[52];
- temp0[53] = HalfButterfly(-cospi[20], temp1[42], cospi[44], temp1[53], cosBit);
- temp0[54] = HalfButterfly(cospi[44], temp1[41], cospi[20], temp1[54], cosBit);
+ temp0[53] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[20], temp1[42], cospi[44], temp1[53], cosBit);
+ temp0[54] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[44], temp1[41], cospi[20], temp1[54], cosBit);
temp0[55] = temp1[55];
temp0[56] = temp1[56];
- temp0[57] = HalfButterfly(-cospi[36], temp1[38], cospi[28], temp1[57], cosBit);
- temp0[58] = HalfButterfly(cospi[28], temp1[37], cospi[36], temp1[58], cosBit);
+ temp0[57] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[36], temp1[38], cospi[28], temp1[57], cosBit);
+ temp0[58] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[28], temp1[37], cospi[36], temp1[58], cosBit);
temp0[59] = temp1[59];
temp0[60] = temp1[60];
- temp0[61] = HalfButterfly(-cospi[4], temp1[34], cospi[60], temp1[61], cosBit);
- temp0[62] = HalfButterfly(cospi[60], temp1[33], cospi[4], temp1[62], cosBit);
+ temp0[61] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[4], temp1[34], cospi[60], temp1[61], cosBit);
+ temp0[62] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[60], temp1[33], cospi[4], temp1[62], cosBit);
temp0[63] = temp1[63];
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
- range = stageRange[stage];
temp1[0] = temp0[0];
temp1[1] = temp0[1];
temp1[2] = temp0[2];
temp1[3] = temp0[3];
- temp1[4] = HalfButterfly(cospi[56], temp0[4], -cospi[8], temp0[7], cosBit);
- temp1[5] = HalfButterfly(cospi[24], temp0[5], -cospi[40], temp0[6], cosBit);
- temp1[6] = HalfButterfly(cospi[40], temp0[5], cospi[24], temp0[6], cosBit);
- temp1[7] = HalfButterfly(cospi[8], temp0[4], cospi[56], temp0[7], cosBit);
- temp1[8] = ClampValue(temp0[8] + temp0[9], range);
- temp1[9] = ClampValue(temp0[8] - temp0[9], range);
- temp1[10] = ClampValue(-temp0[10] + temp0[11], range);
- temp1[11] = ClampValue(temp0[10] + temp0[11], range);
- temp1[12] = ClampValue(temp0[12] + temp0[13], range);
- temp1[13] = ClampValue(temp0[12] - temp0[13], range);
- temp1[14] = ClampValue(-temp0[14] + temp0[15], range);
- temp1[15] = ClampValue(temp0[14] + temp0[15], range);
+ temp1[4] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], temp0[4], -cospi[8], temp0[7], cosBit);
+ temp1[5] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], temp0[5], -cospi[40], temp0[6], cosBit);
+ temp1[6] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[40], temp0[5], cospi[24], temp0[6], cosBit);
+ temp1[7] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[8], temp0[4], cospi[56], temp0[7], cosBit);
+ temp1[8] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] + temp0[9], stageRange[stage]);
+ temp1[9] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] - temp0[9], stageRange[stage]);
+ temp1[10] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[10] + temp0[11], stageRange[stage]);
+ temp1[11] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[10] + temp0[11], stageRange[stage]);
+ temp1[12] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[12] + temp0[13], stageRange[stage]);
+ temp1[13] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[12] - temp0[13], stageRange[stage]);
+ temp1[14] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[14] + temp0[15], stageRange[stage]);
+ temp1[15] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[14] + temp0[15], stageRange[stage]);
temp1[16] = temp0[16];
- temp1[17] = HalfButterfly(-cospi[8], temp0[17], cospi[56], temp0[30], cosBit);
- temp1[18] = HalfButterfly(-cospi[56], temp0[18], -cospi[8], temp0[29], cosBit);
+ temp1[17] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp0[17], cospi[56], temp0[30], cosBit);
+ temp1[18] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[56], temp0[18], -cospi[8], temp0[29], cosBit);
temp1[19] = temp0[19];
temp1[20] = temp0[20];
- temp1[21] = HalfButterfly(-cospi[40], temp0[21], cospi[24], temp0[26], cosBit);
- temp1[22] = HalfButterfly(-cospi[24], temp0[22], -cospi[40], temp0[25], cosBit);
+ temp1[21] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp0[21], cospi[24], temp0[26], cosBit);
+ temp1[22] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[24], temp0[22], -cospi[40], temp0[25], cosBit);
temp1[23] = temp0[23];
temp1[24] = temp0[24];
- temp1[25] = HalfButterfly(-cospi[40], temp0[22], cospi[24], temp0[25], cosBit);
- temp1[26] = HalfButterfly(cospi[24], temp0[21], cospi[40], temp0[26], cosBit);
+ temp1[25] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp0[22], cospi[24], temp0[25], cosBit);
+ temp1[26] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], temp0[21], cospi[40], temp0[26], cosBit);
temp1[27] = temp0[27];
temp1[28] = temp0[28];
- temp1[29] = HalfButterfly(-cospi[8], temp0[18], cospi[56], temp0[29], cosBit);
- temp1[30] = HalfButterfly(cospi[56], temp0[17], cospi[8], temp0[30], cosBit);
+ temp1[29] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp0[18], cospi[56], temp0[29], cosBit);
+ temp1[30] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], temp0[17], cospi[8], temp0[30], cosBit);
temp1[31] = temp0[31];
- temp1[32] = ClampValue(temp0[32] + temp0[35], range);
- temp1[33] = ClampValue(temp0[33] + temp0[34], range);
- temp1[34] = ClampValue(temp0[33] - temp0[34], range);
- temp1[35] = ClampValue(temp0[32] - temp0[35], range);
- temp1[36] = ClampValue(-temp0[36] + temp0[39], range);
- temp1[37] = ClampValue(-temp0[37] + temp0[38], range);
- temp1[38] = ClampValue(temp0[37] + temp0[38], range);
- temp1[39] = ClampValue(temp0[36] + temp0[39], range);
- temp1[40] = ClampValue(temp0[40] + temp0[43], range);
- temp1[41] = ClampValue(temp0[41] + temp0[42], range);
- temp1[42] = ClampValue(temp0[41] - temp0[42], range);
- temp1[43] = ClampValue(temp0[40] - temp0[43], range);
- temp1[44] = ClampValue(-temp0[44] + temp0[47], range);
- temp1[45] = ClampValue(-temp0[45] + temp0[46], range);
- temp1[46] = ClampValue(temp0[45] + temp0[46], range);
- temp1[47] = ClampValue(temp0[44] + temp0[47], range);
- temp1[48] = ClampValue(temp0[48] + temp0[51], range);
- temp1[49] = ClampValue(temp0[49] + temp0[50], range);
- temp1[50] = ClampValue(temp0[49] - temp0[50], range);
- temp1[51] = ClampValue(temp0[48] - temp0[51], range);
- temp1[52] = ClampValue(-temp0[52] + temp0[55], range);
- temp1[53] = ClampValue(-temp0[53] + temp0[54], range);
- temp1[54] = ClampValue(temp0[53] + temp0[54], range);
- temp1[55] = ClampValue(temp0[52] + temp0[55], range);
- temp1[56] = ClampValue(temp0[56] + temp0[59], range);
- temp1[57] = ClampValue(temp0[57] + temp0[58], range);
- temp1[58] = ClampValue(temp0[57] - temp0[58], range);
- temp1[59] = ClampValue(temp0[56] - temp0[59], range);
- temp1[60] = ClampValue(-temp0[60] + temp0[63], range);
- temp1[61] = ClampValue(-temp0[61] + temp0[62], range);
- temp1[62] = ClampValue(temp0[61] + temp0[62], range);
- temp1[63] = ClampValue(temp0[60] + temp0[63], range);
+ temp1[32] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] + temp0[35], stageRange[stage]);
+ temp1[33] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] + temp0[34], stageRange[stage]);
+ temp1[34] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] - temp0[34], stageRange[stage]);
+ temp1[35] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] - temp0[35], stageRange[stage]);
+ temp1[36] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[36] + temp0[39], stageRange[stage]);
+ temp1[37] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[37] + temp0[38], stageRange[stage]);
+ temp1[38] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[37] + temp0[38], stageRange[stage]);
+ temp1[39] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[36] + temp0[39], stageRange[stage]);
+ temp1[40] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[40] + temp0[43], stageRange[stage]);
+ temp1[41] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[41] + temp0[42], stageRange[stage]);
+ temp1[42] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[41] - temp0[42], stageRange[stage]);
+ temp1[43] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[40] - temp0[43], stageRange[stage]);
+ temp1[44] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[44] + temp0[47], stageRange[stage]);
+ temp1[45] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[45] + temp0[46], stageRange[stage]);
+ temp1[46] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[45] + temp0[46], stageRange[stage]);
+ temp1[47] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[44] + temp0[47], stageRange[stage]);
+ temp1[48] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] + temp0[51], stageRange[stage]);
+ temp1[49] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[49] + temp0[50], stageRange[stage]);
+ temp1[50] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[49] - temp0[50], stageRange[stage]);
+ temp1[51] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] - temp0[51], stageRange[stage]);
+ temp1[52] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[52] + temp0[55], stageRange[stage]);
+ temp1[53] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[53] + temp0[54], stageRange[stage]);
+ temp1[54] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[53] + temp0[54], stageRange[stage]);
+ temp1[55] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[52] + temp0[55], stageRange[stage]);
+ temp1[56] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[56] + temp0[59], stageRange[stage]);
+ temp1[57] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[57] + temp0[58], stageRange[stage]);
+ temp1[58] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[57] - temp0[58], stageRange[stage]);
+ temp1[59] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[56] - temp0[59], stageRange[stage]);
+ temp1[60] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[60] + temp0[63], stageRange[stage]);
+ temp1[61] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[61] + temp0[62], stageRange[stage]);
+ temp1[62] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[61] + temp0[62], stageRange[stage]);
+ temp1[63] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[60] + temp0[63], stageRange[stage]);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
- range = stageRange[stage];
- temp0[0] = HalfButterfly(cospi[32], temp1[0], cospi[32], temp1[1], cosBit);
- temp0[1] = HalfButterfly(cospi[32], temp1[0], -cospi[32], temp1[1], cosBit);
- temp0[2] = HalfButterfly(cospi[48], temp1[2], -cospi[16], temp1[3], cosBit);
- temp0[3] = HalfButterfly(cospi[16], temp1[2], cospi[48], temp1[3], cosBit);
- temp0[4] = ClampValue(temp1[4] + temp1[5], range);
- temp0[5] = ClampValue(temp1[4] - temp1[5], range);
- temp0[6] = ClampValue(-temp1[6] + temp1[7], range);
- temp0[7] = ClampValue(temp1[6] + temp1[7], range);
+ temp0[0] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[0], cospi[32], temp1[1], cosBit);
+ temp0[1] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[0], -cospi[32], temp1[1], cosBit);
+ temp0[2] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[2], -cospi[16], temp1[3], cosBit);
+ temp0[3] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[16], temp1[2], cospi[48], temp1[3], cosBit);
+ temp0[4] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[4] + temp1[5], stageRange[stage]);
+ temp0[5] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[4] - temp1[5], stageRange[stage]);
+ temp0[6] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[6] + temp1[7], stageRange[stage]);
+ temp0[7] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[6] + temp1[7], stageRange[stage]);
temp0[8] = temp1[8];
- temp0[9] = HalfButterfly(-cospi[16], temp1[9], cospi[48], temp1[14], cosBit);
- temp0[10] = HalfButterfly(-cospi[48], temp1[10], -cospi[16], temp1[13], cosBit);
+ temp0[9] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[9], cospi[48], temp1[14], cosBit);
+ temp0[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp1[10], -cospi[16], temp1[13], cosBit);
temp0[11] = temp1[11];
temp0[12] = temp1[12];
- temp0[13] = HalfButterfly(-cospi[16], temp1[10], cospi[48], temp1[13], cosBit);
- temp0[14] = HalfButterfly(cospi[48], temp1[9], cospi[16], temp1[14], cosBit);
- temp0[15] = temp1[5];
- temp0[16] = ClampValue(temp1[16] + temp1[19], range);
- temp0[17] = ClampValue(temp1[17] + temp1[18], range);
- temp0[18] = ClampValue(temp1[17] - temp1[18], range);
- temp0[19] = ClampValue(temp1[16] - temp1[19], range);
- temp0[20] = ClampValue(-temp1[20] + temp1[23], range);
- temp0[21] = ClampValue(-temp1[21] + temp1[22], range);
- temp0[22] = ClampValue(temp1[21] + temp1[22], range);
- temp0[23] = ClampValue(temp1[20] + temp1[23], range);
- temp0[24] = ClampValue(temp1[24] + temp1[27], range);
- temp0[25] = ClampValue(temp1[25] + temp1[26], range);
- temp0[26] = ClampValue(temp1[25] - temp1[26], range);
- temp0[27] = ClampValue(temp1[24] - temp1[27], range);
- temp0[28] = ClampValue(-temp1[28] + temp1[31], range);
- temp0[29] = ClampValue(-temp1[29] + temp1[30], range);
- temp0[30] = ClampValue(temp1[29] + temp1[30], range);
- temp0[31] = ClampValue(temp1[28] + temp1[31], range);
+ temp0[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[10], cospi[48], temp1[13], cosBit);
+ temp0[14] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[9], cospi[16], temp1[14], cosBit);
+ temp0[15] = temp1[15];
+ temp0[16] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] + temp1[19], stageRange[stage]);
+ temp0[17] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[17] + temp1[18], stageRange[stage]);
+ temp0[18] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[17] - temp1[18], stageRange[stage]);
+ temp0[19] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] - temp1[19], stageRange[stage]);
+ temp0[20] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[20] + temp1[23], stageRange[stage]);
+ temp0[21] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[21] + temp1[22], stageRange[stage]);
+ temp0[22] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[21] + temp1[22], stageRange[stage]);
+ temp0[23] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[20] + temp1[23], stageRange[stage]);
+ temp0[24] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[24] + temp1[27], stageRange[stage]);
+ temp0[25] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[25] + temp1[26], stageRange[stage]);
+ temp0[26] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[25] - temp1[26], stageRange[stage]);
+ temp0[27] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[24] - temp1[27], stageRange[stage]);
+ temp0[28] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[28] + temp1[31], stageRange[stage]);
+ temp0[29] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[29] + temp1[30], stageRange[stage]);
+ temp0[30] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[29] + temp1[30], stageRange[stage]);
+ temp0[31] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[28] + temp1[31], stageRange[stage]);
temp0[32] = temp1[32];
temp0[33] = temp1[33];
- temp0[34] = HalfButterfly(-cospi[8], temp1[34], cospi[56], temp1[61], cosBit);
- temp0[35] = HalfButterfly(-cospi[8], temp1[35], cospi[56], temp1[60], cosBit);
- temp0[36] = HalfButterfly(-cospi[56], temp1[36], -cospi[8], temp1[59], cosBit);
- temp0[37] = HalfButterfly(-cospi[56], temp1[37], -cospi[8], temp1[58], cosBit);
+ temp0[34] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp1[34], cospi[56], temp1[61], cosBit);
+ temp0[35] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp1[35], cospi[56], temp1[60], cosBit);
+ temp0[36] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[56], temp1[36], -cospi[8], temp1[59], cosBit);
+ temp0[37] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[56], temp1[37], -cospi[8], temp1[58], cosBit);
temp0[38] = temp1[38];
temp0[39] = temp1[39];
temp0[40] = temp1[40];
temp0[41] = temp1[41];
- temp0[42] = HalfButterfly(-cospi[40], temp1[42], cospi[24], temp1[53], cosBit);
- temp0[43] = HalfButterfly(-cospi[40], temp1[43], cospi[24], temp1[53], cosBit);
- temp0[44] = HalfButterfly(-cospi[24], temp1[44], -cospi[40], temp1[51], cosBit);
- temp0[45] = HalfButterfly(-cospi[24], temp1[45], -cospi[40], temp1[50], cosBit);
+ temp0[42] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp1[42], cospi[24], temp1[53], cosBit);
+ temp0[43] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp1[43], cospi[24], temp1[52], cosBit);
+ temp0[44] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[24], temp1[44], -cospi[40], temp1[51], cosBit);
+ temp0[45] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[24], temp1[45], -cospi[40], temp1[50], cosBit);
temp0[46] = temp1[46];
temp0[47] = temp1[47];
temp0[48] = temp1[48];
temp0[49] = temp1[49];
- temp0[50] = HalfButterfly(-cospi[40], temp1[45], cospi[24], temp1[50], cosBit);
- temp0[51] = HalfButterfly(-cospi[40], temp1[44], cospi[24], temp1[51], cosBit);
- temp0[52] = HalfButterfly(cospi[24], temp1[43], cospi[40], temp1[52], cosBit);
- temp0[53] = HalfButterfly(cospi[24], temp1[42], cospi[40], temp1[53], cosBit);
+ temp0[50] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp1[45], cospi[24], temp1[50], cosBit);
+ temp0[51] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[40], temp1[44], cospi[24], temp1[51], cosBit);
+ temp0[52] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], temp1[43], cospi[40], temp1[52], cosBit);
+ temp0[53] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[24], temp1[42], cospi[40], temp1[53], cosBit);
temp0[54] = temp1[54];
temp0[55] = temp1[55];
temp0[56] = temp1[56];
temp0[57] = temp1[57];
- temp0[58] = HalfButterfly(-cospi[8], temp1[37], cospi[56], temp1[58], cosBit);
- temp0[59] = HalfButterfly(-cospi[8], temp1[36], cospi[56], temp1[59], cosBit);
- temp0[60] = HalfButterfly(cospi[56], temp1[35], cospi[8], temp1[60], cosBit);
- temp0[61] = HalfButterfly(cospi[56], temp1[34], cospi[8], temp1[61], cosBit);
+ temp0[58] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp1[37], cospi[56], temp1[58], cosBit);
+ temp0[59] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[8], temp1[36], cospi[56], temp1[59], cosBit);
+ temp0[60] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], temp1[35], cospi[8], temp1[60], cosBit);
+ temp0[61] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[56], temp1[34], cospi[8], temp1[61], cosBit);
temp0[62] = temp1[62];
temp0[63] = temp1[63];
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
- range = stageRange[stage];
- temp1[0] = ClampValue(temp0[0] + temp0[3], range);
- temp1[1] = ClampValue(temp0[1] + temp0[2], range);
- temp1[2] = ClampValue(temp0[1] - temp0[2], range);
- temp1[3] = ClampValue(temp0[0] - temp0[3], range);
+ temp1[0] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] + temp0[3], stageRange[stage]);
+ temp1[1] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] + temp0[2], stageRange[stage]);
+ temp1[2] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] - temp0[2], stageRange[stage]);
+ temp1[3] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] - temp0[3], stageRange[stage]);
temp1[4] = temp0[4];
- temp1[5] = HalfButterfly(-cospi[32], temp0[5], cospi[32], temp0[6], cosBit);
- temp1[6] = HalfButterfly(cospi[32], temp0[5], cospi[32], temp0[6], cosBit);
+ temp1[5] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp0[5], cospi[32], temp0[6], cosBit);
+ temp1[6] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp0[5], cospi[32], temp0[6], cosBit);
temp1[7] = temp0[7];
- temp1[8] = ClampValue(temp0[8] + temp0[11], range);
- temp1[9] = ClampValue(temp0[9] + temp0[10], range);
- temp1[10] = ClampValue(temp0[9] - temp0[10], range);
- temp1[11] = ClampValue(temp0[8] - temp0[11], range);
- temp1[12] = ClampValue(-temp0[12] + temp0[15], range);
- temp1[13] = ClampValue(-temp0[13] + temp0[14], range);
- temp1[14] = ClampValue(temp0[13] + temp0[14], range);
- temp1[15] = ClampValue(temp0[12] + temp0[15], range);
+ temp1[8] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] + temp0[11], stageRange[stage]);
+ temp1[9] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[9] + temp0[10], stageRange[stage]);
+ temp1[10] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[9] - temp0[10], stageRange[stage]);
+ temp1[11] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] - temp0[11], stageRange[stage]);
+ temp1[12] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[12] + temp0[15], stageRange[stage]);
+ temp1[13] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[13] + temp0[14], stageRange[stage]);
+ temp1[14] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[13] + temp0[14], stageRange[stage]);
+ temp1[15] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[12] + temp0[15], stageRange[stage]);
temp1[16] = temp0[16];
temp1[17] = temp0[17];
- temp1[18] = HalfButterfly(-cospi[16], temp0[18], cospi[48], temp0[29], cosBit);
- temp1[19] = HalfButterfly(-cospi[16], temp0[19], cospi[48], temp0[28], cosBit);
- temp1[20] = HalfButterfly(-cospi[48], temp0[20], -cospi[16], temp0[27], cosBit);
- temp1[21] = HalfButterfly(-cospi[48], temp0[21], -cospi[16], temp0[26], cosBit);
+ temp1[18] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp0[18], cospi[48], temp0[29], cosBit);
+ temp1[19] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp0[19], cospi[48], temp0[28], cosBit);
+ temp1[20] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp0[20], -cospi[16], temp0[27], cosBit);
+ temp1[21] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp0[21], -cospi[16], temp0[26], cosBit);
temp1[22] = temp0[22];
temp1[23] = temp0[23];
temp1[24] = temp0[24];
temp1[25] = temp0[25];
- temp1[26] = HalfButterfly(-cospi[16], temp0[21], cospi[48], temp0[26], cosBit);
- temp1[27] = HalfButterfly(-cospi[16], temp0[20], cospi[48], temp0[27], cosBit);
- temp1[28] = HalfButterfly(cospi[48], temp0[19], cospi[16], temp0[28], cosBit);
- temp1[29] = HalfButterfly(cospi[48], temp0[18], cospi[16], temp0[29], cosBit);
+ temp1[26] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp0[21], cospi[48], temp0[26], cosBit);
+ temp1[27] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp0[20], cospi[48], temp0[27], cosBit);
+ temp1[28] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp0[19], cospi[16], temp0[28], cosBit);
+ temp1[29] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp0[18], cospi[16], temp0[29], cosBit);
temp1[30] = temp0[30];
temp1[31] = temp0[31];
- temp1[32] = ClampValue(temp0[32] + temp0[39], range);
- temp1[33] = ClampValue(temp0[33] + temp0[38], range);
- temp1[34] = ClampValue(temp0[34] + temp0[37], range);
- temp1[35] = ClampValue(temp0[35] + temp0[36], range);
- temp1[36] = ClampValue(temp0[35] - temp0[36], range);
- temp1[37] = ClampValue(temp0[34] - temp0[37], range);
- temp1[38] = ClampValue(temp0[33] - temp0[38], range);
- temp1[39] = ClampValue(temp0[32] - temp0[39], range);
- temp1[40] = ClampValue(-temp0[40] + temp0[47], range);
- temp1[41] = ClampValue(-temp0[41] + temp0[46], range);
- temp1[42] = ClampValue(-temp0[42] + temp0[45], range);
- temp1[43] = ClampValue(-temp0[43] + temp0[44], range);
- temp1[44] = ClampValue(temp0[43] + temp0[44], range);
- temp1[45] = ClampValue(temp0[42] + temp0[45], range);
- temp1[46] = ClampValue(temp0[41] + temp0[46], range);
- temp1[47] = ClampValue(temp0[40] + temp0[47], range);
- temp1[48] = ClampValue(temp0[48] + temp0[55], range);
- temp1[49] = ClampValue(temp0[49] + temp0[54], range);
- temp1[50] = ClampValue(temp0[50] + temp0[53], range);
- temp1[51] = ClampValue(temp0[51] + temp0[52], range);
- temp1[52] = ClampValue(temp0[51] - temp0[52], range);
- temp1[53] = ClampValue(temp0[50] - temp0[53], range);
- temp1[54] = ClampValue(temp0[49] - temp0[54], range);
- temp1[55] = ClampValue(temp0[48] - temp0[55], range);
- temp1[56] = ClampValue(-temp0[56] + temp0[63], range);
- temp1[57] = ClampValue(-temp0[57] + temp0[62], range);
- temp1[58] = ClampValue(-temp0[58] + temp0[61], range);
- temp1[59] = ClampValue(-temp0[59] + temp0[60], range);
- temp1[60] = ClampValue(temp0[59] + temp0[60], range);
- temp1[61] = ClampValue(temp0[58] + temp0[61], range);
- temp1[62] = ClampValue(temp0[57] + temp0[62], range);
- temp1[63] = ClampValue(temp0[56] + temp0[63], range);
+ temp1[32] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] + temp0[39], stageRange[stage]);
+ temp1[33] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] + temp0[38], stageRange[stage]);
+ temp1[34] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[34] + temp0[37], stageRange[stage]);
+ temp1[35] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[35] + temp0[36], stageRange[stage]);
+ temp1[36] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[35] - temp0[36], stageRange[stage]);
+ temp1[37] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[34] - temp0[37], stageRange[stage]);
+ temp1[38] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] - temp0[38], stageRange[stage]);
+ temp1[39] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] - temp0[39], stageRange[stage]);
+ temp1[40] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[40] + temp0[47], stageRange[stage]);
+ temp1[41] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[41] + temp0[46], stageRange[stage]);
+ temp1[42] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[42] + temp0[45], stageRange[stage]);
+ temp1[43] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[43] + temp0[44], stageRange[stage]);
+ temp1[44] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[43] + temp0[44], stageRange[stage]);
+ temp1[45] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[42] + temp0[45], stageRange[stage]);
+ temp1[46] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[41] + temp0[46], stageRange[stage]);
+ temp1[47] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[40] + temp0[47], stageRange[stage]);
+ temp1[48] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] + temp0[55], stageRange[stage]);
+ temp1[49] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[49] + temp0[54], stageRange[stage]);
+ temp1[50] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[50] + temp0[53], stageRange[stage]);
+ temp1[51] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[51] + temp0[52], stageRange[stage]);
+ temp1[52] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[51] - temp0[52], stageRange[stage]);
+ temp1[53] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[50] - temp0[53], stageRange[stage]);
+ temp1[54] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[49] - temp0[54], stageRange[stage]);
+ temp1[55] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] - temp0[55], stageRange[stage]);
+ temp1[56] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[56] + temp0[63], stageRange[stage]);
+ temp1[57] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[57] + temp0[62], stageRange[stage]);
+ temp1[58] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[58] + temp0[61], stageRange[stage]);
+ temp1[59] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[59] + temp0[60], stageRange[stage]);
+ temp1[60] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[59] + temp0[60], stageRange[stage]);
+ temp1[61] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[58] + temp0[61], stageRange[stage]);
+ temp1[62] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[57] + temp0[62], stageRange[stage]);
+ temp1[63] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[56] + temp0[63], stageRange[stage]);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 8
stage++;
- range = stageRange[stage];
- temp0[0] = ClampValue(temp1[0] + temp1[7], range);
- temp0[1] = ClampValue(temp1[1] + temp1[6], range);
- temp0[2] = ClampValue(temp1[2] + temp1[5], range);
- temp0[3] = ClampValue(temp1[3] + temp1[4], range);
- temp0[4] = ClampValue(temp1[3] - temp1[4], range);
- temp0[5] = ClampValue(temp1[2] - temp1[5], range);
- temp0[6] = ClampValue(temp1[1] - temp1[6], range);
- temp0[7] = ClampValue(temp1[0] - temp1[7], range);
+ temp0[0] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[0] + temp1[7], stageRange[stage]);
+ temp0[1] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[1] + temp1[6], stageRange[stage]);
+ temp0[2] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[2] + temp1[5], stageRange[stage]);
+ temp0[3] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[3] + temp1[4], stageRange[stage]);
+ temp0[4] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[3] - temp1[4], stageRange[stage]);
+ temp0[5] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[2] - temp1[5], stageRange[stage]);
+ temp0[6] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[1] - temp1[6], stageRange[stage]);
+ temp0[7] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[0] - temp1[7], stageRange[stage]);
temp0[8] = temp1[8];
temp0[9] = temp1[9];
- temp0[10] = HalfButterfly(-cospi[32], temp1[10], cospi[32], temp1[13], cosBit);
- temp0[11] = HalfButterfly(-cospi[32], temp1[11], cospi[32], temp1[12], cosBit);
- temp0[12] = HalfButterfly(cospi[32], temp1[11], cospi[32], temp1[12], cosBit);
- temp0[13] = HalfButterfly(cospi[32], temp1[10], cospi[32], temp1[13], cosBit);
+ temp0[10] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[10], cospi[32], temp1[13], cosBit);
+ temp0[11] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[11], cospi[32], temp1[12], cosBit);
+ temp0[12] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[11], cospi[32], temp1[12], cosBit);
+ temp0[13] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[10], cospi[32], temp1[13], cosBit);
temp0[14] = temp1[14];
temp0[15] = temp1[15];
- temp0[16] = ClampValue(temp1[16] + temp1[23], range);
- temp0[17] = ClampValue(temp1[17] + temp1[22], range);
- temp0[18] = ClampValue(temp1[18] + temp1[21], range);
- temp0[19] = ClampValue(temp1[19] + temp1[20], range);
- temp0[20] = ClampValue(temp1[19] - temp1[20], range);
- temp0[21] = ClampValue(temp1[18] - temp1[21], range);
- temp0[22] = ClampValue(temp1[17] - temp1[22], range);
- temp0[23] = ClampValue(temp1[16] - temp1[23], range);
- temp0[24] = ClampValue(-temp1[24] + temp1[31], range);
- temp0[25] = ClampValue(-temp1[25] + temp1[30], range);
- temp0[26] = ClampValue(-temp1[26] + temp1[29], range);
- temp0[27] = ClampValue(-temp1[27] + temp1[28], range);
- temp0[28] = ClampValue(temp1[27] + temp1[28], range);
- temp0[29] = ClampValue(temp1[26] + temp1[29], range);
- temp0[30] = ClampValue(temp1[25] + temp1[30], range);
- temp0[31] = ClampValue(temp1[24] + temp1[31], range);
+ temp0[16] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] + temp1[23], stageRange[stage]);
+ temp0[17] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[17] + temp1[22], stageRange[stage]);
+ temp0[18] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[18] + temp1[21], stageRange[stage]);
+ temp0[19] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[19] + temp1[20], stageRange[stage]);
+ temp0[20] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[19] - temp1[20], stageRange[stage]);
+ temp0[21] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[18] - temp1[21], stageRange[stage]);
+ temp0[22] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[17] - temp1[22], stageRange[stage]);
+ temp0[23] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[16] - temp1[23], stageRange[stage]);
+ temp0[24] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[24] + temp1[31], stageRange[stage]);
+ temp0[25] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[25] + temp1[30], stageRange[stage]);
+ temp0[26] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[26] + temp1[29], stageRange[stage]);
+ temp0[27] = Av1Dct4Inverse1dTransformer.ClampValue(-temp1[27] + temp1[28], stageRange[stage]);
+ temp0[28] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[27] + temp1[28], stageRange[stage]);
+ temp0[29] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[26] + temp1[29], stageRange[stage]);
+ temp0[30] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[25] + temp1[30], stageRange[stage]);
+ temp0[31] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[24] + temp1[31], stageRange[stage]);
temp0[32] = temp1[32];
temp0[33] = temp1[33];
temp0[34] = temp1[34];
temp0[35] = temp1[35];
- temp0[36] = HalfButterfly(-cospi[16], temp1[36], cospi[48], temp1[59], cosBit);
- temp0[37] = HalfButterfly(-cospi[16], temp1[47], cospi[48], temp1[58], cosBit);
- temp0[38] = HalfButterfly(-cospi[16], temp1[48], cospi[48], temp1[57], cosBit);
- temp0[39] = HalfButterfly(-cospi[16], temp1[49], cospi[48], temp1[56], cosBit);
- temp0[40] = HalfButterfly(-cospi[16], temp1[40], -cospi[16], temp1[55], cosBit);
- temp0[41] = HalfButterfly(-cospi[16], temp1[41], -cospi[16], temp1[54], cosBit);
- temp0[42] = HalfButterfly(-cospi[16], temp1[42], -cospi[16], temp1[53], cosBit);
- temp0[43] = HalfButterfly(-cospi[16], temp1[43], -cospi[16], temp1[52], cosBit);
+ temp0[36] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[36], cospi[48], temp1[59], cosBit);
+ temp0[37] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[37], cospi[48], temp1[58], cosBit);
+ temp0[38] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[38], cospi[48], temp1[57], cosBit);
+ temp0[39] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[39], cospi[48], temp1[56], cosBit);
+ temp0[40] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp1[40], -cospi[16], temp1[55], cosBit);
+ temp0[41] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp1[41], -cospi[16], temp1[54], cosBit);
+ temp0[42] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp1[42], -cospi[16], temp1[53], cosBit);
+ temp0[43] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[48], temp1[43], -cospi[16], temp1[52], cosBit);
temp0[44] = temp1[44];
temp0[45] = temp1[45];
temp0[46] = temp1[46];
@@ -569,126 +563,124 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp0[49] = temp1[49];
temp0[50] = temp1[50];
temp0[51] = temp1[51];
- temp0[52] = HalfButterfly(-cospi[16], temp1[43], cospi[48], temp1[52], cosBit);
- temp0[53] = HalfButterfly(-cospi[16], temp1[42], cospi[48], temp1[53], cosBit);
- temp0[54] = HalfButterfly(-cospi[16], temp1[41], cospi[48], temp1[54], cosBit);
- temp0[55] = HalfButterfly(-cospi[16], temp1[40], cospi[48], temp1[55], cosBit);
- temp0[56] = HalfButterfly(cospi[48], temp1[39], cospi[16], temp1[56], cosBit);
- temp0[57] = HalfButterfly(cospi[48], temp1[38], cospi[16], temp1[57], cosBit);
- temp0[58] = HalfButterfly(cospi[48], temp1[37], cospi[16], temp1[58], cosBit);
- temp0[59] = HalfButterfly(cospi[48], temp1[36], cospi[16], temp1[59], cosBit);
+ temp0[52] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[43], cospi[48], temp1[52], cosBit);
+ temp0[53] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[42], cospi[48], temp1[53], cosBit);
+ temp0[54] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[41], cospi[48], temp1[54], cosBit);
+ temp0[55] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[16], temp1[40], cospi[48], temp1[55], cosBit);
+ temp0[56] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[39], cospi[16], temp1[56], cosBit);
+ temp0[57] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[38], cospi[16], temp1[57], cosBit);
+ temp0[58] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[37], cospi[16], temp1[58], cosBit);
+ temp0[59] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[48], temp1[36], cospi[16], temp1[59], cosBit);
temp0[60] = temp1[60];
temp0[61] = temp1[61];
temp0[62] = temp1[62];
temp0[63] = temp1[63];
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 9
stage++;
- range = stageRange[stage];
- temp1[0] = ClampValue(temp0[0] + temp0[15], range);
- temp1[1] = ClampValue(temp0[1] + temp0[14], range);
- temp1[2] = ClampValue(temp0[2] + temp0[13], range);
- temp1[3] = ClampValue(temp0[3] + temp0[12], range);
- temp1[4] = ClampValue(temp0[4] + temp0[11], range);
- temp1[5] = ClampValue(temp0[5] + temp0[10], range);
- temp1[6] = ClampValue(temp0[6] + temp0[9], range);
- temp1[7] = ClampValue(temp0[7] + temp0[8], range);
- temp1[8] = ClampValue(temp0[7] - temp0[8], range);
- temp1[9] = ClampValue(temp0[6] - temp0[9], range);
- temp1[10] = ClampValue(temp0[5] - temp0[10], range);
- temp1[11] = ClampValue(temp0[4] - temp0[11], range);
- temp1[12] = ClampValue(temp0[3] - temp0[12], range);
- temp1[13] = ClampValue(temp0[2] - temp0[13], range);
- temp1[14] = ClampValue(temp0[1] - temp0[14], range);
- temp1[15] = ClampValue(temp0[0] - temp0[15], range);
+ temp1[0] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] + temp0[15], stageRange[stage]);
+ temp1[1] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] + temp0[14], stageRange[stage]);
+ temp1[2] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[2] + temp0[13], stageRange[stage]);
+ temp1[3] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[3] + temp0[12], stageRange[stage]);
+ temp1[4] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[4] + temp0[11], stageRange[stage]);
+ temp1[5] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[5] + temp0[10], stageRange[stage]);
+ temp1[6] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[6] + temp0[9], stageRange[stage]);
+ temp1[7] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[7] + temp0[8], stageRange[stage]);
+ temp1[8] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[7] - temp0[8], stageRange[stage]);
+ temp1[9] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[6] - temp0[9], stageRange[stage]);
+ temp1[10] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[5] - temp0[10], stageRange[stage]);
+ temp1[11] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[4] - temp0[11], stageRange[stage]);
+ temp1[12] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[3] - temp0[12], stageRange[stage]);
+ temp1[13] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[2] - temp0[13], stageRange[stage]);
+ temp1[14] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] - temp0[14], stageRange[stage]);
+ temp1[15] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] - temp0[15], stageRange[stage]);
temp1[16] = temp0[16];
temp1[17] = temp0[17];
temp1[18] = temp0[18];
temp1[19] = temp0[19];
- temp1[20] = HalfButterfly(-cospi[32], temp0[20], cospi[32], temp0[27], cosBit);
- temp1[21] = HalfButterfly(-cospi[32], temp0[21], cospi[32], temp0[26], cosBit);
- temp1[22] = HalfButterfly(-cospi[32], temp0[22], cospi[32], temp0[25], cosBit);
- temp1[23] = HalfButterfly(-cospi[32], temp0[23], cospi[32], temp0[24], cosBit);
- temp1[24] = HalfButterfly(cospi[32], temp0[23], cospi[32], temp0[24], cosBit);
- temp1[25] = HalfButterfly(cospi[32], temp0[22], cospi[32], temp0[25], cosBit);
- temp1[26] = HalfButterfly(cospi[32], temp0[21], cospi[32], temp0[26], cosBit);
- temp1[27] = HalfButterfly(cospi[32], temp0[20], cospi[32], temp0[27], cosBit);
+ temp1[20] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp0[20], cospi[32], temp0[27], cosBit);
+ temp1[21] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp0[21], cospi[32], temp0[26], cosBit);
+ temp1[22] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp0[22], cospi[32], temp0[25], cosBit);
+ temp1[23] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp0[23], cospi[32], temp0[24], cosBit);
+ temp1[24] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp0[23], cospi[32], temp0[24], cosBit);
+ temp1[25] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp0[22], cospi[32], temp0[25], cosBit);
+ temp1[26] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp0[21], cospi[32], temp0[26], cosBit);
+ temp1[27] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp0[20], cospi[32], temp0[27], cosBit);
temp1[28] = temp0[28];
- temp1[29] = temp0[28];
+ temp1[29] = temp0[29];
temp1[30] = temp0[30];
temp1[31] = temp0[31];
- temp1[32] = ClampValue(temp0[32] + temp0[47], range);
- temp1[33] = ClampValue(temp0[33] + temp0[46], range);
- temp1[34] = ClampValue(temp0[34] + temp0[45], range);
- temp1[35] = ClampValue(temp0[35] + temp0[44], range);
- temp1[36] = ClampValue(temp0[36] + temp0[43], range);
- temp1[37] = ClampValue(temp0[37] + temp0[42], range);
- temp1[38] = ClampValue(temp0[38] + temp0[41], range);
- temp1[39] = ClampValue(temp0[39] + temp0[40], range);
- temp1[40] = ClampValue(temp0[39] - temp0[40], range);
- temp1[41] = ClampValue(temp0[38] - temp0[41], range);
- temp1[42] = ClampValue(temp0[37] - temp0[42], range);
- temp1[43] = ClampValue(temp0[36] - temp0[43], range);
- temp1[44] = ClampValue(temp0[35] - temp0[44], range);
- temp1[45] = ClampValue(temp0[34] - temp0[45], range);
- temp1[46] = ClampValue(temp0[33] - temp0[46], range);
- temp1[47] = ClampValue(temp0[32] - temp0[47], range);
- temp1[48] = ClampValue(-temp0[48] + temp0[63], range);
- temp1[49] = ClampValue(-temp0[49] + temp0[63], range);
- temp1[50] = ClampValue(-temp0[50] + temp0[61], range);
- temp1[51] = ClampValue(-temp0[51] + temp0[60], range);
- temp1[52] = ClampValue(-temp0[52] + temp0[59], range);
- temp1[53] = ClampValue(-temp0[53] + temp0[58], range);
- temp1[54] = ClampValue(-temp0[54] + temp0[57], range);
- temp1[55] = ClampValue(-temp0[55] + temp0[56], range);
- temp1[56] = ClampValue(temp0[55] + temp0[56], range);
- temp1[57] = ClampValue(temp0[54] + temp0[57], range);
- temp1[58] = ClampValue(temp0[53] + temp0[58], range);
- temp1[59] = ClampValue(temp0[52] + temp0[59], range);
- temp1[60] = ClampValue(temp0[51] + temp0[60], range);
- temp1[61] = ClampValue(temp0[50] + temp0[61], range);
- temp1[62] = ClampValue(temp0[49] + temp0[62], range);
- temp1[63] = ClampValue(temp0[48] + temp0[63], range);
+ temp1[32] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] + temp0[47], stageRange[stage]);
+ temp1[33] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] + temp0[46], stageRange[stage]);
+ temp1[34] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[34] + temp0[45], stageRange[stage]);
+ temp1[35] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[35] + temp0[44], stageRange[stage]);
+ temp1[36] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[36] + temp0[43], stageRange[stage]);
+ temp1[37] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[37] + temp0[42], stageRange[stage]);
+ temp1[38] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[38] + temp0[41], stageRange[stage]);
+ temp1[39] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[39] + temp0[40], stageRange[stage]);
+ temp1[40] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[39] - temp0[40], stageRange[stage]);
+ temp1[41] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[38] - temp0[41], stageRange[stage]);
+ temp1[42] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[37] - temp0[42], stageRange[stage]);
+ temp1[43] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[36] - temp0[43], stageRange[stage]);
+ temp1[44] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[35] - temp0[44], stageRange[stage]);
+ temp1[45] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[34] - temp0[45], stageRange[stage]);
+ temp1[46] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[33] - temp0[46], stageRange[stage]);
+ temp1[47] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[32] - temp0[47], stageRange[stage]);
+ temp1[48] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[48] + temp0[63], stageRange[stage]);
+ temp1[49] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[49] + temp0[62], stageRange[stage]);
+ temp1[50] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[50] + temp0[61], stageRange[stage]);
+ temp1[51] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[51] + temp0[60], stageRange[stage]);
+ temp1[52] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[52] + temp0[59], stageRange[stage]);
+ temp1[53] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[53] + temp0[58], stageRange[stage]);
+ temp1[54] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[54] + temp0[57], stageRange[stage]);
+ temp1[55] = Av1Dct4Inverse1dTransformer.ClampValue(-temp0[55] + temp0[56], stageRange[stage]);
+ temp1[56] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[55] + temp0[56], stageRange[stage]);
+ temp1[57] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[54] + temp0[57], stageRange[stage]);
+ temp1[58] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[53] + temp0[58], stageRange[stage]);
+ temp1[59] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[52] + temp0[59], stageRange[stage]);
+ temp1[60] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[51] + temp0[60], stageRange[stage]);
+ temp1[61] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[50] + temp0[61], stageRange[stage]);
+ temp1[62] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[49] + temp0[62], stageRange[stage]);
+ temp1[63] = Av1Dct4Inverse1dTransformer.ClampValue(temp0[48] + temp0[63], stageRange[stage]);
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 10
stage++;
- range = stageRange[stage];
- temp0[0] = ClampValue(temp1[0] + temp1[31], range);
- temp0[1] = ClampValue(temp1[1] + temp1[30], range);
- temp0[2] = ClampValue(temp1[2] + temp1[29], range);
- temp0[3] = ClampValue(temp1[3] + temp1[28], range);
- temp0[4] = ClampValue(temp1[4] + temp1[27], range);
- temp0[5] = ClampValue(temp1[5] + temp1[26], range);
- temp0[6] = ClampValue(temp1[6] + temp1[25], range);
- temp0[7] = ClampValue(temp1[7] + temp1[24], range);
- temp0[8] = ClampValue(temp1[8] + temp1[23], range);
- temp0[9] = ClampValue(temp1[9] + temp1[22], range);
- temp0[10] = ClampValue(temp1[10] + temp1[21], range);
- temp0[11] = ClampValue(temp1[11] + temp1[20], range);
- temp0[12] = ClampValue(temp1[12] + temp1[19], range);
- temp0[13] = ClampValue(temp1[13] + temp1[18], range);
- temp0[14] = ClampValue(temp1[14] + temp1[17], range);
- temp0[15] = ClampValue(temp1[15] + temp1[16], range);
- temp0[16] = ClampValue(temp1[15] - temp1[16], range);
- temp0[17] = ClampValue(temp1[14] - temp1[17], range);
- temp0[18] = ClampValue(temp1[13] - temp1[18], range);
- temp0[19] = ClampValue(temp1[12] - temp1[19], range);
- temp0[20] = ClampValue(temp1[11] - temp1[20], range);
- temp0[21] = ClampValue(temp1[10] - temp1[21], range);
- temp0[22] = ClampValue(temp1[9] - temp1[22], range);
- temp0[23] = ClampValue(temp1[8] - temp1[23], range);
- temp0[24] = ClampValue(temp1[7] - temp1[24], range);
- temp0[25] = ClampValue(temp1[6] - temp1[25], range);
- temp0[26] = ClampValue(temp1[5] - temp1[26], range);
- temp0[27] = ClampValue(temp1[4] - temp1[27], range);
- temp0[28] = ClampValue(temp1[3] - temp1[28], range);
- temp0[29] = ClampValue(temp1[2] - temp1[29], range);
- temp0[30] = ClampValue(temp1[1] - temp1[30], range);
- temp0[31] = ClampValue(temp1[0] - temp1[31], range);
+ temp0[0] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[0] + temp1[31], stageRange[stage]);
+ temp0[1] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[1] + temp1[30], stageRange[stage]);
+ temp0[2] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[2] + temp1[29], stageRange[stage]);
+ temp0[3] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[3] + temp1[28], stageRange[stage]);
+ temp0[4] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[4] + temp1[27], stageRange[stage]);
+ temp0[5] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[5] + temp1[26], stageRange[stage]);
+ temp0[6] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[6] + temp1[25], stageRange[stage]);
+ temp0[7] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[7] + temp1[24], stageRange[stage]);
+ temp0[8] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[8] + temp1[23], stageRange[stage]);
+ temp0[9] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[9] + temp1[22], stageRange[stage]);
+ temp0[10] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[10] + temp1[21], stageRange[stage]);
+ temp0[11] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[11] + temp1[20], stageRange[stage]);
+ temp0[12] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[12] + temp1[19], stageRange[stage]);
+ temp0[13] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[13] + temp1[18], stageRange[stage]);
+ temp0[14] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[14] + temp1[17], stageRange[stage]);
+ temp0[15] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[15] + temp1[16], stageRange[stage]);
+ temp0[16] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[15] - temp1[16], stageRange[stage]);
+ temp0[17] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[14] - temp1[17], stageRange[stage]);
+ temp0[18] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[13] - temp1[18], stageRange[stage]);
+ temp0[19] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[12] - temp1[19], stageRange[stage]);
+ temp0[20] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[11] - temp1[20], stageRange[stage]);
+ temp0[21] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[10] - temp1[21], stageRange[stage]);
+ temp0[22] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[9] - temp1[22], stageRange[stage]);
+ temp0[23] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[8] - temp1[23], stageRange[stage]);
+ temp0[24] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[7] - temp1[24], stageRange[stage]);
+ temp0[25] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[6] - temp1[25], stageRange[stage]);
+ temp0[26] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[5] - temp1[26], stageRange[stage]);
+ temp0[27] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[4] - temp1[27], stageRange[stage]);
+ temp0[28] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[3] - temp1[28], stageRange[stage]);
+ temp0[29] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[2] - temp1[29], stageRange[stage]);
+ temp0[30] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[1] - temp1[30], stageRange[stage]);
+ temp0[31] = Av1Dct4Inverse1dTransformer.ClampValue(temp1[0] - temp1[31], stageRange[stage]);
temp0[32] = temp1[32];
temp0[33] = temp1[33];
temp0[34] = temp1[34];
@@ -697,22 +689,22 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp0[37] = temp1[37];
temp0[38] = temp1[38];
temp0[39] = temp1[39];
- temp0[40] = HalfButterfly(-cospi[32], temp1[40], cospi[32], temp1[55], cosBit);
- temp0[41] = HalfButterfly(-cospi[32], temp1[41], cospi[32], temp1[54], cosBit);
- temp0[42] = HalfButterfly(-cospi[32], temp1[42], cospi[32], temp1[53], cosBit);
- temp0[43] = HalfButterfly(-cospi[32], temp1[43], cospi[32], temp1[52], cosBit);
- temp0[44] = HalfButterfly(-cospi[32], temp1[44], cospi[32], temp1[51], cosBit);
- temp0[45] = HalfButterfly(-cospi[32], temp1[45], cospi[32], temp1[50], cosBit);
- temp0[46] = HalfButterfly(-cospi[32], temp1[46], cospi[32], temp1[49], cosBit);
- temp0[47] = HalfButterfly(-cospi[32], temp1[47], cospi[32], temp1[48], cosBit);
- temp0[48] = HalfButterfly(cospi[32], temp1[47], cospi[32], temp1[48], cosBit);
- temp0[49] = HalfButterfly(cospi[32], temp1[46], cospi[32], temp1[49], cosBit);
- temp0[50] = HalfButterfly(cospi[32], temp1[45], cospi[32], temp1[50], cosBit);
- temp0[51] = HalfButterfly(cospi[32], temp1[44], cospi[32], temp1[51], cosBit);
- temp0[52] = HalfButterfly(cospi[32], temp1[43], cospi[32], temp1[52], cosBit);
- temp0[53] = HalfButterfly(cospi[32], temp1[42], cospi[32], temp1[53], cosBit);
- temp0[54] = HalfButterfly(cospi[32], temp1[41], cospi[32], temp1[54], cosBit);
- temp0[55] = HalfButterfly(cospi[32], temp1[40], cospi[32], temp1[55], cosBit);
+ temp0[40] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[40], cospi[32], temp1[55], cosBit);
+ temp0[41] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[41], cospi[32], temp1[54], cosBit);
+ temp0[42] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[42], cospi[32], temp1[53], cosBit);
+ temp0[43] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[43], cospi[32], temp1[52], cosBit);
+ temp0[44] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[44], cospi[32], temp1[51], cosBit);
+ temp0[45] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[45], cospi[32], temp1[50], cosBit);
+ temp0[46] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[46], cospi[32], temp1[49], cosBit);
+ temp0[47] = Av1Dct4Inverse1dTransformer.HalfButterfly(-cospi[32], temp1[47], cospi[32], temp1[48], cosBit);
+ temp0[48] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[47], cospi[32], temp1[48], cosBit);
+ temp0[49] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[46], cospi[32], temp1[49], cosBit);
+ temp0[50] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[45], cospi[32], temp1[50], cosBit);
+ temp0[51] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[44], cospi[32], temp1[51], cosBit);
+ temp0[52] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[43], cospi[32], temp1[52], cosBit);
+ temp0[53] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[42], cospi[32], temp1[53], cosBit);
+ temp0[54] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[41], cospi[32], temp1[54], cosBit);
+ temp0[55] = Av1Dct4Inverse1dTransformer.HalfButterfly(cospi[32], temp1[40], cospi[32], temp1[55], cosBit);
temp0[56] = temp1[56];
temp0[57] = temp1[57];
temp0[58] = temp1[58];
@@ -722,106 +714,73 @@ internal class Av1Dct64Inverse1dTransformer : IAv1Transformer1d
temp0[62] = temp1[62];
temp0[63] = temp1[63];
- // range_check_buf(stage, input, bf1, size, range);
+ // range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 11
stage++;
- range = stageRange[stage];
- Unsafe.Add(ref output, 0) = ClampValue(temp0[0] + temp0[63], range);
- Unsafe.Add(ref output, 1) = ClampValue(temp0[1] + temp0[62], range);
- Unsafe.Add(ref output, 2) = ClampValue(temp0[2] + temp0[61], range);
- Unsafe.Add(ref output, 3) = ClampValue(temp0[3] + temp0[60], range);
- Unsafe.Add(ref output, 4) = ClampValue(temp0[4] + temp0[59], range);
- Unsafe.Add(ref output, 5) = ClampValue(temp0[5] + temp0[58], range);
- Unsafe.Add(ref output, 6) = ClampValue(temp0[6] + temp0[57], range);
- Unsafe.Add(ref output, 7) = ClampValue(temp0[7] + temp0[56], range);
- Unsafe.Add(ref output, 8) = ClampValue(temp0[8] + temp0[55], range);
- Unsafe.Add(ref output, 9) = ClampValue(temp0[9] + temp0[54], range);
- Unsafe.Add(ref output, 10) = ClampValue(temp0[10] + temp0[53], range);
- Unsafe.Add(ref output, 11) = ClampValue(temp0[11] + temp0[52], range);
- Unsafe.Add(ref output, 12) = ClampValue(temp0[12] + temp0[51], range);
- Unsafe.Add(ref output, 13) = ClampValue(temp0[13] + temp0[50], range);
- Unsafe.Add(ref output, 14) = ClampValue(temp0[14] + temp0[49], range);
- Unsafe.Add(ref output, 15) = ClampValue(temp0[15] + temp0[48], range);
- Unsafe.Add(ref output, 16) = ClampValue(temp0[16] + temp0[47], range);
- Unsafe.Add(ref output, 17) = ClampValue(temp0[17] + temp0[46], range);
- Unsafe.Add(ref output, 18) = ClampValue(temp0[18] + temp0[45], range);
- Unsafe.Add(ref output, 19) = ClampValue(temp0[19] + temp0[44], range);
- Unsafe.Add(ref output, 20) = ClampValue(temp0[20] + temp0[43], range);
- Unsafe.Add(ref output, 21) = ClampValue(temp0[21] + temp0[42], range);
- Unsafe.Add(ref output, 22) = ClampValue(temp0[22] + temp0[41], range);
- Unsafe.Add(ref output, 23) = ClampValue(temp0[23] + temp0[40], range);
- Unsafe.Add(ref output, 24) = ClampValue(temp0[24] + temp0[39], range);
- Unsafe.Add(ref output, 25) = ClampValue(temp0[25] + temp0[38], range);
- Unsafe.Add(ref output, 26) = ClampValue(temp0[26] + temp0[37], range);
- Unsafe.Add(ref output, 27) = ClampValue(temp0[27] + temp0[36], range);
- Unsafe.Add(ref output, 28) = ClampValue(temp0[27] + temp0[35], range);
- Unsafe.Add(ref output, 29) = ClampValue(temp0[29] + temp0[34], range);
- Unsafe.Add(ref output, 30) = ClampValue(temp0[30] + temp0[33], range);
- Unsafe.Add(ref output, 31) = ClampValue(temp0[31] + temp0[32], range);
- Unsafe.Add(ref output, 32) = ClampValue(temp0[31] - temp0[32], range);
- Unsafe.Add(ref output, 33) = ClampValue(temp0[30] - temp0[33], range);
- Unsafe.Add(ref output, 34) = ClampValue(temp0[29] - temp0[34], range);
- Unsafe.Add(ref output, 35) = ClampValue(temp0[28] - temp0[35], range);
- Unsafe.Add(ref output, 36) = ClampValue(temp0[27] - temp0[36], range);
- Unsafe.Add(ref output, 37) = ClampValue(temp0[26] - temp0[37], range);
- Unsafe.Add(ref output, 38) = ClampValue(temp0[25] - temp0[38], range);
- Unsafe.Add(ref output, 39) = ClampValue(temp0[24] - temp0[39], range);
- Unsafe.Add(ref output, 40) = ClampValue(temp0[23] - temp0[40], range);
- Unsafe.Add(ref output, 41) = ClampValue(temp0[22] - temp0[41], range);
- Unsafe.Add(ref output, 42) = ClampValue(temp0[21] - temp0[42], range);
- Unsafe.Add(ref output, 43) = ClampValue(temp0[20] - temp0[43], range);
- Unsafe.Add(ref output, 44) = ClampValue(temp0[19] - temp0[44], range);
- Unsafe.Add(ref output, 45) = ClampValue(temp0[18] - temp0[45], range);
- Unsafe.Add(ref output, 46) = ClampValue(temp0[17] - temp0[46], range);
- Unsafe.Add(ref output, 47) = ClampValue(temp0[16] - temp0[47], range);
- Unsafe.Add(ref output, 48) = ClampValue(temp0[15] - temp0[48], range);
- Unsafe.Add(ref output, 49) = ClampValue(temp0[14] - temp0[49], range);
- Unsafe.Add(ref output, 50) = ClampValue(temp0[13] - temp0[50], range);
- Unsafe.Add(ref output, 51) = ClampValue(temp0[12] - temp0[51], range);
- Unsafe.Add(ref output, 52) = ClampValue(temp0[11] - temp0[52], range);
- Unsafe.Add(ref output, 53) = ClampValue(temp0[10] - temp0[53], range);
- Unsafe.Add(ref output, 54) = ClampValue(temp0[9] - temp0[54], range);
- Unsafe.Add(ref output, 55) = ClampValue(temp0[8] - temp0[55], range);
- Unsafe.Add(ref output, 56) = ClampValue(temp0[7] - temp0[56], range);
- Unsafe.Add(ref output, 57) = ClampValue(temp0[6] - temp0[57], range);
- Unsafe.Add(ref output, 58) = ClampValue(temp0[5] - temp0[58], range);
- Unsafe.Add(ref output, 59) = ClampValue(temp0[4] - temp0[59], range);
- Unsafe.Add(ref output, 60) = ClampValue(temp0[3] - temp0[60], range);
- Unsafe.Add(ref output, 61) = ClampValue(temp0[2] - temp0[61], range);
- Unsafe.Add(ref output, 62) = ClampValue(temp0[1] - temp0[62], range);
- Unsafe.Add(ref output, 63) = ClampValue(temp0[0] - temp0[63], range);
- }
-
- internal static int ClampValue(int value, byte bit)
- {
- if (bit <= 0)
- {
- return value; // Do nothing for invalid clamp bit.
- }
-
- long max_value = (1L << (bit - 1)) - 1;
- long min_value = -(1L << (bit - 1));
- return (int)Av1Math.Clamp(value, min_value, max_value);
- }
-
- internal static int HalfButterfly(int w0, int in0, int w1, int in1, int bit)
- {
- long result64 = (long)(w0 * in0) + (w1 * in1);
- long intermediate = result64 + (1L << (bit - 1));
-
- // NOTE(david.barker): The value 'result_64' may not necessarily fit
- // into 32 bits. However, the result of this function is nominally
- // ROUND_POWER_OF_TWO_64(result_64, bit)
- // and that is required to fit into range many bits
- // (checked by range_check_buf()).
- //
- // Here we've unpacked that rounding operation, and it can be shown
- // that the value of 'intermediate' here *does* fit into 32 bits
- // for any conformant bitstream.
- // The upshot is that, if you do all this calculation using
- // wrapping 32-bit arithmetic instead of (non-wrapping) 64-bit arithmetic,
- // then you'll still get the correct result.
- return (int)(intermediate >> bit);
+ Unsafe.Add(ref output, 0) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] + temp0[63], stageRange[stage]);
+ Unsafe.Add(ref output, 1) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] + temp0[62], stageRange[stage]);
+ Unsafe.Add(ref output, 2) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[2] + temp0[61], stageRange[stage]);
+ Unsafe.Add(ref output, 3) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[3] + temp0[60], stageRange[stage]);
+ Unsafe.Add(ref output, 4) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[4] + temp0[59], stageRange[stage]);
+ Unsafe.Add(ref output, 5) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[5] + temp0[58], stageRange[stage]);
+ Unsafe.Add(ref output, 6) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[6] + temp0[57], stageRange[stage]);
+ Unsafe.Add(ref output, 7) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[7] + temp0[56], stageRange[stage]);
+ Unsafe.Add(ref output, 8) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] + temp0[55], stageRange[stage]);
+ Unsafe.Add(ref output, 9) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[9] + temp0[54], stageRange[stage]);
+ Unsafe.Add(ref output, 10) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[10] + temp0[53], stageRange[stage]);
+ Unsafe.Add(ref output, 11) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[11] + temp0[52], stageRange[stage]);
+ Unsafe.Add(ref output, 12) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[12] + temp0[51], stageRange[stage]);
+ Unsafe.Add(ref output, 13) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[13] + temp0[50], stageRange[stage]);
+ Unsafe.Add(ref output, 14) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[14] + temp0[49], stageRange[stage]);
+ Unsafe.Add(ref output, 15) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[15] + temp0[48], stageRange[stage]);
+ Unsafe.Add(ref output, 16) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[16] + temp0[47], stageRange[stage]);
+ Unsafe.Add(ref output, 17) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[17] + temp0[46], stageRange[stage]);
+ Unsafe.Add(ref output, 18) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[18] + temp0[45], stageRange[stage]);
+ Unsafe.Add(ref output, 19) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[19] + temp0[44], stageRange[stage]);
+ Unsafe.Add(ref output, 20) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[20] + temp0[43], stageRange[stage]);
+ Unsafe.Add(ref output, 21) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[21] + temp0[42], stageRange[stage]);
+ Unsafe.Add(ref output, 22) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[22] + temp0[41], stageRange[stage]);
+ Unsafe.Add(ref output, 23) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[23] + temp0[40], stageRange[stage]);
+ Unsafe.Add(ref output, 24) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[24] + temp0[39], stageRange[stage]);
+ Unsafe.Add(ref output, 25) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[25] + temp0[38], stageRange[stage]);
+ Unsafe.Add(ref output, 26) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[26] + temp0[37], stageRange[stage]);
+ Unsafe.Add(ref output, 27) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[27] + temp0[36], stageRange[stage]);
+ Unsafe.Add(ref output, 28) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[28] + temp0[35], stageRange[stage]);
+ Unsafe.Add(ref output, 29) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[29] + temp0[34], stageRange[stage]);
+ Unsafe.Add(ref output, 30) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[30] + temp0[33], stageRange[stage]);
+ Unsafe.Add(ref output, 31) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[31] + temp0[32], stageRange[stage]);
+ Unsafe.Add(ref output, 32) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[31] - temp0[32], stageRange[stage]);
+ Unsafe.Add(ref output, 33) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[30] - temp0[33], stageRange[stage]);
+ Unsafe.Add(ref output, 34) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[29] - temp0[34], stageRange[stage]);
+ Unsafe.Add(ref output, 35) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[28] - temp0[35], stageRange[stage]);
+ Unsafe.Add(ref output, 36) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[27] - temp0[36], stageRange[stage]);
+ Unsafe.Add(ref output, 37) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[26] - temp0[37], stageRange[stage]);
+ Unsafe.Add(ref output, 38) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[25] - temp0[38], stageRange[stage]);
+ Unsafe.Add(ref output, 39) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[24] - temp0[39], stageRange[stage]);
+ Unsafe.Add(ref output, 40) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[23] - temp0[40], stageRange[stage]);
+ Unsafe.Add(ref output, 41) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[22] - temp0[41], stageRange[stage]);
+ Unsafe.Add(ref output, 42) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[21] - temp0[42], stageRange[stage]);
+ Unsafe.Add(ref output, 43) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[20] - temp0[43], stageRange[stage]);
+ Unsafe.Add(ref output, 44) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[19] - temp0[44], stageRange[stage]);
+ Unsafe.Add(ref output, 45) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[18] - temp0[45], stageRange[stage]);
+ Unsafe.Add(ref output, 46) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[17] - temp0[46], stageRange[stage]);
+ Unsafe.Add(ref output, 47) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[16] - temp0[47], stageRange[stage]);
+ Unsafe.Add(ref output, 48) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[15] - temp0[48], stageRange[stage]);
+ Unsafe.Add(ref output, 49) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[14] - temp0[49], stageRange[stage]);
+ Unsafe.Add(ref output, 50) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[13] - temp0[50], stageRange[stage]);
+ Unsafe.Add(ref output, 51) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[12] - temp0[51], stageRange[stage]);
+ Unsafe.Add(ref output, 52) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[11] - temp0[52], stageRange[stage]);
+ Unsafe.Add(ref output, 53) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[10] - temp0[53], stageRange[stage]);
+ Unsafe.Add(ref output, 54) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[9] - temp0[54], stageRange[stage]);
+ Unsafe.Add(ref output, 55) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[8] - temp0[55], stageRange[stage]);
+ Unsafe.Add(ref output, 56) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[7] - temp0[56], stageRange[stage]);
+ Unsafe.Add(ref output, 57) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[6] - temp0[57], stageRange[stage]);
+ Unsafe.Add(ref output, 58) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[5] - temp0[58], stageRange[stage]);
+ Unsafe.Add(ref output, 59) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[4] - temp0[59], stageRange[stage]);
+ Unsafe.Add(ref output, 60) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[3] - temp0[60], stageRange[stage]);
+ Unsafe.Add(ref output, 61) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[2] - temp0[61], stageRange[stage]);
+ Unsafe.Add(ref output, 62) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[1] - temp0[62], stageRange[stage]);
+ Unsafe.Add(ref output, 63) = Av1Dct4Inverse1dTransformer.ClampValue(temp0[0] - temp0[63], stageRange[stage]);
}
}