// Copyright 2019 The libgav1 Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "src/dsp/constants.h"

#include <cstdint>

namespace libgav1 {

// Each set of 7 taps is padded with a 0 to easily align and pack into the high
// and low 8 bytes. This way, we can load 16 at a time to fit mulhi and mullo.
const int8_t kFilterIntraTaps[kNumFilterIntraPredictors][8][8] = {
    {{-6, 10, 0, 0, 0, 12, 0, 0},
     {-5, 2, 10, 0, 0, 9, 0, 0},
     {-3, 1, 1, 10, 0, 7, 0, 0},
     {-3, 1, 1, 2, 10, 5, 0, 0},
     {-4, 6, 0, 0, 0, 2, 12, 0},
     {-3, 2, 6, 0, 0, 2, 9, 0},
     {-3, 2, 2, 6, 0, 2, 7, 0},
     {-3, 1, 2, 2, 6, 3, 5, 0}},
    {{-10, 16, 0, 0, 0, 10, 0, 0},
     {-6, 0, 16, 0, 0, 6, 0, 0},
     {-4, 0, 0, 16, 0, 4, 0, 0},
     {-2, 0, 0, 0, 16, 2, 0, 0},
     {-10, 16, 0, 0, 0, 0, 10, 0},
     {-6, 0, 16, 0, 0, 0, 6, 0},
     {-4, 0, 0, 16, 0, 0, 4, 0},
     {-2, 0, 0, 0, 16, 0, 2, 0}},
    {{-8, 8, 0, 0, 0, 16, 0, 0},
     {-8, 0, 8, 0, 0, 16, 0, 0},
     {-8, 0, 0, 8, 0, 16, 0, 0},
     {-8, 0, 0, 0, 8, 16, 0, 0},
     {-4, 4, 0, 0, 0, 0, 16, 0},
     {-4, 0, 4, 0, 0, 0, 16, 0},
     {-4, 0, 0, 4, 0, 0, 16, 0},
     {-4, 0, 0, 0, 4, 0, 16, 0}},
    {{-2, 8, 0, 0, 0, 10, 0, 0},
     {-1, 3, 8, 0, 0, 6, 0, 0},
     {-1, 2, 3, 8, 0, 4, 0, 0},
     {0, 1, 2, 3, 8, 2, 0, 0},
     {-1, 4, 0, 0, 0, 3, 10, 0},
     {-1, 3, 4, 0, 0, 4, 6, 0},
     {-1, 2, 3, 4, 0, 4, 4, 0},
     {-1, 2, 2, 3, 4, 3, 3, 0}},
    {{-12, 14, 0, 0, 0, 14, 0, 0},
     {-10, 0, 14, 0, 0, 12, 0, 0},
     {-9, 0, 0, 14, 0, 11, 0, 0},
     {-8, 0, 0, 0, 14, 10, 0, 0},
     {-10, 12, 0, 0, 0, 0, 14, 0},
     {-9, 1, 12, 0, 0, 0, 12, 0},
     {-8, 0, 0, 12, 0, 1, 11, 0},
     {-7, 0, 0, 1, 12, 1, 9, 0}}};

// A lookup table replacing the calculation of the variable s in Section 7.17.3
// (Box filter process). The first index is sgr_proj_index (the lr_sgr_set
// syntax element in the Spec, saved in the sgr_proj_info.index field of a
// RestorationUnitInfo struct). The second index is pass (0 or 1).
//
// const uint8_t scale = kSgrProjParams[sgr_proj_index][pass * 2 + 1];
// const uint32_t n2_with_scale = n * n * scale;
// const uint32_t s =
// ((1 << kSgrProjScaleBits) + (n2_with_scale >> 1)) / n2_with_scale;
// 0 is an invalid value, corresponding to radius = 0, where the filter is
// skipped.
const uint16_t kSgrScaleParameter[16][2] = {
    {140, 3236}, {112, 2158}, {93, 1618}, {80, 1438}, {70, 1295}, {58, 1177},
    {47, 1079},  {37, 996},   {30, 925},  {25, 863},  {0, 2589},  {0, 1618},
    {0, 1177},   {0, 925},    {56, 0},    {22, 0},
};

}  // namespace libgav1
