// Copyright 2026 The Wuffs Authors.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT

// --------

// A simplified and optimized version of decoder.inverse_dct_full when the AC
// coefficients are all zero.
pri func decoder.inverse_dct_dc_only!(
        cachex: base.u32[..= 28],
        cachey: base.u32[..= 22],
        b: base.u32[..= 23]) {
    var dc : base.u16
    var i  : base.u32

    dc = this.util.sign_extend_rshift_u16(a: this.mb_coeffs[args.b][0] ~mod+ 4, n: 3)

    i = 0
    while i < 16 {
        this.yuv_cache[args.cachey + (i >> 2)][args.cachex + (i & 3)] = CLAMP[1023 & (dc ~mod+
                (this.yuv_cache[args.cachey + (i >> 2)][args.cachex + (i & 3)] as base.u16))]
        i += 1
    }
}

// RFC 6386 Section 14.4. Implementation of the DCT Inversion.
//
// It reads from mb_coeffs and yuv_cache and writes to yuv_cache.
pri func decoder.inverse_dct_full!(
        cachex: base.u32[..= 28],
        cachey: base.u32[..= 22],
        b: base.u32[..= 23]) {
    var a00 : base.u32
    var a01 : base.u32
    var a02 : base.u32
    var a03 : base.u32
    var a10 : base.u32
    var a11 : base.u32
    var a12 : base.u32
    var a13 : base.u32
    var a20 : base.u32
    var a21 : base.u32
    var a22 : base.u32
    var a23 : base.u32
    var a30 : base.u32
    var a31 : base.u32
    var a32 : base.u32
    var a33 : base.u32

    var b00 : base.u32
    var b01 : base.u32
    var b02 : base.u32
    var b03 : base.u32
    var b10 : base.u32
    var b11 : base.u32
    var b12 : base.u32
    var b13 : base.u32
    var b20 : base.u32
    var b21 : base.u32
    var b22 : base.u32
    var b23 : base.u32
    var b30 : base.u32
    var b31 : base.u32
    var b32 : base.u32
    var b33 : base.u32

    var m00 : base.u32
    var m01 : base.u32
    var m02 : base.u32
    var m03 : base.u32
    var m10 : base.u32
    var m11 : base.u32
    var m12 : base.u32
    var m13 : base.u32
    var m20 : base.u32
    var m21 : base.u32
    var m22 : base.u32
    var m23 : base.u32
    var m30 : base.u32
    var m31 : base.u32
    var m32 : base.u32
    var m33 : base.u32

    var dc0 : base.u32
    var dc1 : base.u32
    var dc2 : base.u32
    var dc3 : base.u32

    var p00 : base.u32
    var p01 : base.u32
    var p02 : base.u32
    var p03 : base.u32
    var p10 : base.u32
    var p11 : base.u32
    var p12 : base.u32
    var p13 : base.u32
    var p20 : base.u32
    var p21 : base.u32
    var p22 : base.u32
    var p23 : base.u32
    var p30 : base.u32
    var p31 : base.u32
    var p32 : base.u32
    var p33 : base.u32

    var q00 : base.u32
    var q01 : base.u32
    var q02 : base.u32
    var q03 : base.u32
    var q10 : base.u32
    var q11 : base.u32
    var q12 : base.u32
    var q13 : base.u32
    var q20 : base.u32
    var q21 : base.u32
    var q22 : base.u32
    var q23 : base.u32
    var q30 : base.u32
    var q31 : base.u32
    var q32 : base.u32
    var q33 : base.u32

    // 35468 is approximately 65536 * sin(pi/8) * sqrt(2).
    //
    // 85627 is approximately 65536 * cos(pi/8) * sqrt(2). Compared to the RFC
    // implementation 85627 is also (20091 + 65536).

    // --------

    a00 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x0])
    a01 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x4])
    a02 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x8])
    a03 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xC])

    b00 = a00 ~mod+ a02
    b01 = a00 ~mod- a02
    b02 = this.util.sign_extend_rshift_u32(a: a01 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: a03 ~mod* 85627, n: 16)
    b03 = this.util.sign_extend_rshift_u32(a: a01 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: a03 ~mod* 35468, n: 16)

    m00 = b00 ~mod+ b03
    m01 = b01 ~mod+ b02
    m02 = b01 ~mod- b02
    m03 = b00 ~mod- b03

    // ----

    a10 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x1])
    a11 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x5])
    a12 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x9])
    a13 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xD])

    b10 = a10 ~mod+ a12
    b11 = a10 ~mod- a12
    b12 = this.util.sign_extend_rshift_u32(a: a11 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: a13 ~mod* 85627, n: 16)
    b13 = this.util.sign_extend_rshift_u32(a: a11 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: a13 ~mod* 35468, n: 16)

    m10 = b10 ~mod+ b13
    m11 = b11 ~mod+ b12
    m12 = b11 ~mod- b12
    m13 = b10 ~mod- b13

    // ----

    a20 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x2])
    a21 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x6])
    a22 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xA])
    a23 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xE])

    b20 = a20 ~mod+ a22
    b21 = a20 ~mod- a22
    b22 = this.util.sign_extend_rshift_u32(a: a21 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: a23 ~mod* 85627, n: 16)
    b23 = this.util.sign_extend_rshift_u32(a: a21 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: a23 ~mod* 35468, n: 16)

    m20 = b20 ~mod+ b23
    m21 = b21 ~mod+ b22
    m22 = b21 ~mod- b22
    m23 = b20 ~mod- b23

    // ----

    a30 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x3])
    a31 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0x7])
    a32 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xB])
    a33 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[args.b][0xF])

    b30 = a30 ~mod+ a32
    b31 = a30 ~mod- a32
    b32 = this.util.sign_extend_rshift_u32(a: a31 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: a33 ~mod* 85627, n: 16)
    b33 = this.util.sign_extend_rshift_u32(a: a31 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: a33 ~mod* 35468, n: 16)

    m30 = b30 ~mod+ b33
    m31 = b31 ~mod+ b32
    m32 = b31 ~mod- b32
    m33 = b30 ~mod- b33

    // --------

    dc0 = m00 ~mod+ 4

    p00 = dc0 ~mod+ m20
    p01 = dc0 ~mod- m20
    p02 = this.util.sign_extend_rshift_u32(a: m10 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: m30 ~mod* 85627, n: 16)
    p03 = this.util.sign_extend_rshift_u32(a: m10 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: m30 ~mod* 35468, n: 16)

    q00 = this.util.sign_extend_rshift_u32(a: p00 ~mod+ p03, n: 3)
    q01 = this.util.sign_extend_rshift_u32(a: p01 ~mod+ p02, n: 3)
    q02 = this.util.sign_extend_rshift_u32(a: p01 ~mod- p02, n: 3)
    q03 = this.util.sign_extend_rshift_u32(a: p00 ~mod- p03, n: 3)

    this.yuv_cache[args.cachey + 0][args.cachex + 0] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 0][args.cachex + 0] as base.u32) ~mod+ q00)]
    this.yuv_cache[args.cachey + 0][args.cachex + 1] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 0][args.cachex + 1] as base.u32) ~mod+ q01)]
    this.yuv_cache[args.cachey + 0][args.cachex + 2] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 0][args.cachex + 2] as base.u32) ~mod+ q02)]
    this.yuv_cache[args.cachey + 0][args.cachex + 3] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 0][args.cachex + 3] as base.u32) ~mod+ q03)]

    // ----

    dc1 = m01 ~mod+ 4

    p10 = dc1 ~mod+ m21
    p11 = dc1 ~mod- m21
    p12 = this.util.sign_extend_rshift_u32(a: m11 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: m31 ~mod* 85627, n: 16)
    p13 = this.util.sign_extend_rshift_u32(a: m11 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: m31 ~mod* 35468, n: 16)

    q10 = this.util.sign_extend_rshift_u32(a: p10 ~mod+ p13, n: 3)
    q11 = this.util.sign_extend_rshift_u32(a: p11 ~mod+ p12, n: 3)
    q12 = this.util.sign_extend_rshift_u32(a: p11 ~mod- p12, n: 3)
    q13 = this.util.sign_extend_rshift_u32(a: p10 ~mod- p13, n: 3)

    this.yuv_cache[args.cachey + 1][args.cachex + 0] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 1][args.cachex + 0] as base.u32) ~mod+ q10)]
    this.yuv_cache[args.cachey + 1][args.cachex + 1] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 1][args.cachex + 1] as base.u32) ~mod+ q11)]
    this.yuv_cache[args.cachey + 1][args.cachex + 2] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 1][args.cachex + 2] as base.u32) ~mod+ q12)]
    this.yuv_cache[args.cachey + 1][args.cachex + 3] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 1][args.cachex + 3] as base.u32) ~mod+ q13)]

    // ----

    dc2 = m02 ~mod+ 4

    p20 = dc2 ~mod+ m22
    p21 = dc2 ~mod- m22
    p22 = this.util.sign_extend_rshift_u32(a: m12 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: m32 ~mod* 85627, n: 16)
    p23 = this.util.sign_extend_rshift_u32(a: m12 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: m32 ~mod* 35468, n: 16)

    q20 = this.util.sign_extend_rshift_u32(a: p20 ~mod+ p23, n: 3)
    q21 = this.util.sign_extend_rshift_u32(a: p21 ~mod+ p22, n: 3)
    q22 = this.util.sign_extend_rshift_u32(a: p21 ~mod- p22, n: 3)
    q23 = this.util.sign_extend_rshift_u32(a: p20 ~mod- p23, n: 3)

    this.yuv_cache[args.cachey + 2][args.cachex + 0] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 2][args.cachex + 0] as base.u32) ~mod+ q20)]
    this.yuv_cache[args.cachey + 2][args.cachex + 1] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 2][args.cachex + 1] as base.u32) ~mod+ q21)]
    this.yuv_cache[args.cachey + 2][args.cachex + 2] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 2][args.cachex + 2] as base.u32) ~mod+ q22)]
    this.yuv_cache[args.cachey + 2][args.cachex + 3] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 2][args.cachex + 3] as base.u32) ~mod+ q23)]

    // ----

    dc3 = m03 ~mod+ 4

    p30 = dc3 ~mod+ m23
    p31 = dc3 ~mod- m23
    p32 = this.util.sign_extend_rshift_u32(a: m13 ~mod* 35468, n: 16) ~mod-
            this.util.sign_extend_rshift_u32(a: m33 ~mod* 85627, n: 16)
    p33 = this.util.sign_extend_rshift_u32(a: m13 ~mod* 85627, n: 16) ~mod+
            this.util.sign_extend_rshift_u32(a: m33 ~mod* 35468, n: 16)

    q30 = this.util.sign_extend_rshift_u32(a: p30 ~mod+ p33, n: 3)
    q31 = this.util.sign_extend_rshift_u32(a: p31 ~mod+ p32, n: 3)
    q32 = this.util.sign_extend_rshift_u32(a: p31 ~mod- p32, n: 3)
    q33 = this.util.sign_extend_rshift_u32(a: p30 ~mod- p33, n: 3)

    this.yuv_cache[args.cachey + 3][args.cachex + 0] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 3][args.cachex + 0] as base.u32) ~mod+ q30)]
    this.yuv_cache[args.cachey + 3][args.cachex + 1] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 3][args.cachex + 1] as base.u32) ~mod+ q31)]
    this.yuv_cache[args.cachey + 3][args.cachex + 2] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 3][args.cachex + 2] as base.u32) ~mod+ q32)]
    this.yuv_cache[args.cachey + 3][args.cachex + 3] = CLAMP[1023 & ((
            this.yuv_cache[args.cachey + 3][args.cachex + 3] as base.u32) ~mod+ q33)]
}

// RFC 6386 Section 14.3. Implementation of the WHT Inversion.
//
// It reads from and writes to mb_coeffs.
pri func decoder.inverse_wht!() {
    var a00 : base.u32
    var a01 : base.u32
    var a02 : base.u32
    var a03 : base.u32
    var a10 : base.u32
    var a11 : base.u32
    var a12 : base.u32
    var a13 : base.u32
    var a20 : base.u32
    var a21 : base.u32
    var a22 : base.u32
    var a23 : base.u32
    var a30 : base.u32
    var a31 : base.u32
    var a32 : base.u32
    var a33 : base.u32

    var b00 : base.u32
    var b01 : base.u32
    var b02 : base.u32
    var b03 : base.u32
    var b10 : base.u32
    var b11 : base.u32
    var b12 : base.u32
    var b13 : base.u32
    var b20 : base.u32
    var b21 : base.u32
    var b22 : base.u32
    var b23 : base.u32
    var b30 : base.u32
    var b31 : base.u32
    var b32 : base.u32
    var b33 : base.u32

    var m00 : base.u32
    var m01 : base.u32
    var m02 : base.u32
    var m03 : base.u32
    var m10 : base.u32
    var m11 : base.u32
    var m12 : base.u32
    var m13 : base.u32
    var m20 : base.u32
    var m21 : base.u32
    var m22 : base.u32
    var m23 : base.u32
    var m30 : base.u32
    var m31 : base.u32
    var m32 : base.u32
    var m33 : base.u32

    var p00 : base.u32
    var p01 : base.u32
    var p02 : base.u32
    var p03 : base.u32
    var p10 : base.u32
    var p11 : base.u32
    var p12 : base.u32
    var p13 : base.u32
    var p20 : base.u32
    var p21 : base.u32
    var p22 : base.u32
    var p23 : base.u32
    var p30 : base.u32
    var p31 : base.u32
    var p32 : base.u32
    var p33 : base.u32

    // --------

    a00 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x0])
    a01 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x4])
    a02 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x8])
    a03 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xC])

    b00 = a00 ~mod+ a03
    b01 = a01 ~mod+ a02
    b02 = a01 ~mod- a02
    b03 = a00 ~mod- a03

    m00 = b00 ~mod+ b01
    m01 = b03 ~mod+ b02
    m02 = b00 ~mod- b01
    m03 = b03 ~mod- b02

    // ----

    a10 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x1])
    a11 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x5])
    a12 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x9])
    a13 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xD])

    b10 = a10 ~mod+ a13
    b11 = a11 ~mod+ a12
    b12 = a11 ~mod- a12
    b13 = a10 ~mod- a13

    m10 = b10 ~mod+ b11
    m11 = b13 ~mod+ b12
    m12 = b10 ~mod- b11
    m13 = b13 ~mod- b12

    // ----

    a20 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x2])
    a21 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x6])
    a22 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xA])
    a23 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xE])

    b20 = a20 ~mod+ a23
    b21 = a21 ~mod+ a22
    b22 = a21 ~mod- a22
    b23 = a20 ~mod- a23

    m20 = b20 ~mod+ b21
    m21 = b23 ~mod+ b22
    m22 = b20 ~mod- b21
    m23 = b23 ~mod- b22

    // ----

    a30 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x3])
    a31 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0x7])
    a32 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xB])
    a33 = this.util.sign_extend_convert_u16_u32(a: this.mb_coeffs[24][0xF])

    b30 = a30 ~mod+ a33
    b31 = a31 ~mod+ a32
    b32 = a31 ~mod- a32
    b33 = a30 ~mod- a33

    m30 = b30 ~mod+ b31
    m31 = b33 ~mod+ b32
    m32 = b30 ~mod- b31
    m33 = b33 ~mod- b32

    // --------

    p00 = (m00 ~mod+ m30) ~mod+ 3
    p01 = (m10 ~mod+ m20)
    p02 = (m10 ~mod- m20)
    p03 = (m00 ~mod- m30) ~mod+ 3

    this.mb_coeffs[0x0][0] = (this.util.sign_extend_rshift_u32(a: p00 ~mod+ p01, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x1][0] = (this.util.sign_extend_rshift_u32(a: p03 ~mod+ p02, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x2][0] = (this.util.sign_extend_rshift_u32(a: p00 ~mod- p01, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x3][0] = (this.util.sign_extend_rshift_u32(a: p03 ~mod- p02, n: 3) & 0xFFFF) as base.u16

    // ----

    p10 = (m01 ~mod+ m31) ~mod+ 3
    p11 = (m11 ~mod+ m21)
    p12 = (m11 ~mod- m21)
    p13 = (m01 ~mod- m31) ~mod+ 3

    this.mb_coeffs[0x4][0] = (this.util.sign_extend_rshift_u32(a: p10 ~mod+ p11, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x5][0] = (this.util.sign_extend_rshift_u32(a: p13 ~mod+ p12, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x6][0] = (this.util.sign_extend_rshift_u32(a: p10 ~mod- p11, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x7][0] = (this.util.sign_extend_rshift_u32(a: p13 ~mod- p12, n: 3) & 0xFFFF) as base.u16

    // ----

    p20 = (m02 ~mod+ m32) ~mod+ 3
    p21 = (m12 ~mod+ m22)
    p22 = (m12 ~mod- m22)
    p23 = (m02 ~mod- m32) ~mod+ 3

    this.mb_coeffs[0x8][0] = (this.util.sign_extend_rshift_u32(a: p20 ~mod+ p21, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0x9][0] = (this.util.sign_extend_rshift_u32(a: p23 ~mod+ p22, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0xA][0] = (this.util.sign_extend_rshift_u32(a: p20 ~mod- p21, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0xB][0] = (this.util.sign_extend_rshift_u32(a: p23 ~mod- p22, n: 3) & 0xFFFF) as base.u16

    // ----

    p30 = (m03 ~mod+ m33) ~mod+ 3
    p31 = (m13 ~mod+ m23)
    p32 = (m13 ~mod- m23)
    p33 = (m03 ~mod- m33) ~mod+ 3

    this.mb_coeffs[0xC][0] = (this.util.sign_extend_rshift_u32(a: p30 ~mod+ p31, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0xD][0] = (this.util.sign_extend_rshift_u32(a: p33 ~mod+ p32, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0xE][0] = (this.util.sign_extend_rshift_u32(a: p30 ~mod- p31, n: 3) & 0xFFFF) as base.u16
    this.mb_coeffs[0xF][0] = (this.util.sign_extend_rshift_u32(a: p33 ~mod- p32, n: 3) & 0xFFFF) as base.u16
}
