blob: 16b82742c80345eb88bc97be6a98434ed9a7255d [file] [log] [blame]
// Copyright 2021 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/intrapred_smooth.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include "src/dsp/constants.h"
#include "src/dsp/dsp.h"
#include "src/utils/common.h"
#include "src/utils/constants.h"
namespace libgav1 {
namespace dsp {
namespace {
template <int block_width, int block_height, typename Pixel>
struct SmoothFuncs_C {
SmoothFuncs_C() = delete;
static void Smooth(void* dest, ptrdiff_t stride, const void* top_row,
const void* left_column);
static void SmoothVertical(void* dest, ptrdiff_t stride, const void* top_row,
const void* left_column);
static void SmoothHorizontal(void* dest, ptrdiff_t stride,
const void* top_row, const void* left_column);
};
constexpr uint8_t kSmoothWeights[] = {
#include "src/dsp/smooth_weights.inc"
};
// SmoothFuncs_C::Smooth
template <int block_width, int block_height, typename Pixel>
void SmoothFuncs_C<block_width, block_height, Pixel>::Smooth(
void* LIBGAV1_RESTRICT const dest, ptrdiff_t stride,
const void* LIBGAV1_RESTRICT const top_row,
const void* LIBGAV1_RESTRICT const left_column) {
const auto* const top = static_cast<const Pixel*>(top_row);
const auto* const left = static_cast<const Pixel*>(left_column);
const Pixel top_right = top[block_width - 1];
const Pixel bottom_left = left[block_height - 1];
static_assert(
block_width >= 4 && block_height >= 4,
"Weights for smooth predictor undefined for block width/height < 4");
const uint8_t* const weights_x = kSmoothWeights + block_width - 4;
const uint8_t* const weights_y = kSmoothWeights + block_height - 4;
const uint16_t scale_value = (1 << kSmoothWeightScale);
auto* dst = static_cast<Pixel*>(dest);
stride /= sizeof(Pixel);
for (int y = 0; y < block_height; ++y) {
for (int x = 0; x < block_width; ++x) {
assert(scale_value >= weights_y[y] && scale_value >= weights_x[x]);
uint32_t pred = weights_y[y] * top[x];
pred += weights_x[x] * left[y];
pred += static_cast<uint8_t>(scale_value - weights_y[y]) * bottom_left;
pred += static_cast<uint8_t>(scale_value - weights_x[x]) * top_right;
// The maximum value of pred with the rounder is 2^9 * (2^bitdepth - 1)
// + 256. With the descale there's no need for saturation.
dst[x] = static_cast<Pixel>(
RightShiftWithRounding(pred, kSmoothWeightScale + 1));
}
dst += stride;
}
}
// SmoothFuncs_C::SmoothVertical
template <int block_width, int block_height, typename Pixel>
void SmoothFuncs_C<block_width, block_height, Pixel>::SmoothVertical(
void* LIBGAV1_RESTRICT const dest, ptrdiff_t stride,
const void* LIBGAV1_RESTRICT const top_row,
const void* LIBGAV1_RESTRICT const left_column) {
const auto* const top = static_cast<const Pixel*>(top_row);
const auto* const left = static_cast<const Pixel*>(left_column);
const Pixel bottom_left = left[block_height - 1];
static_assert(block_height >= 4,
"Weights for smooth predictor undefined for block height < 4");
const uint8_t* const weights_y = kSmoothWeights + block_height - 4;
const uint16_t scale_value = (1 << kSmoothWeightScale);
auto* dst = static_cast<Pixel*>(dest);
stride /= sizeof(Pixel);
for (int y = 0; y < block_height; ++y) {
for (int x = 0; x < block_width; ++x) {
assert(scale_value >= weights_y[y]);
uint32_t pred = weights_y[y] * top[x];
pred += static_cast<uint8_t>(scale_value - weights_y[y]) * bottom_left;
dst[x] =
static_cast<Pixel>(RightShiftWithRounding(pred, kSmoothWeightScale));
}
dst += stride;
}
}
// SmoothFuncs_C::SmoothHorizontal
template <int block_width, int block_height, typename Pixel>
void SmoothFuncs_C<block_width, block_height, Pixel>::SmoothHorizontal(
void* LIBGAV1_RESTRICT const dest, ptrdiff_t stride,
const void* LIBGAV1_RESTRICT const top_row,
const void* LIBGAV1_RESTRICT const left_column) {
const auto* const top = static_cast<const Pixel*>(top_row);
const auto* const left = static_cast<const Pixel*>(left_column);
const Pixel top_right = top[block_width - 1];
static_assert(block_width >= 4,
"Weights for smooth predictor undefined for block width < 4");
const uint8_t* const weights_x = kSmoothWeights + block_width - 4;
const uint16_t scale_value = (1 << kSmoothWeightScale);
auto* dst = static_cast<Pixel*>(dest);
stride /= sizeof(Pixel);
for (int y = 0; y < block_height; ++y) {
for (int x = 0; x < block_width; ++x) {
assert(scale_value >= weights_x[x]);
uint32_t pred = weights_x[x] * left[y];
pred += static_cast<uint8_t>(scale_value - weights_x[x]) * top_right;
dst[x] =
static_cast<Pixel>(RightShiftWithRounding(pred, kSmoothWeightScale));
}
dst += stride;
}
}
// -----------------------------------------------------------------------------
template <typename Pixel>
struct SmoothDefs {
SmoothDefs() = delete;
using _4x4 = SmoothFuncs_C<4, 4, Pixel>;
using _4x8 = SmoothFuncs_C<4, 8, Pixel>;
using _4x16 = SmoothFuncs_C<4, 16, Pixel>;
using _8x4 = SmoothFuncs_C<8, 4, Pixel>;
using _8x8 = SmoothFuncs_C<8, 8, Pixel>;
using _8x16 = SmoothFuncs_C<8, 16, Pixel>;
using _8x32 = SmoothFuncs_C<8, 32, Pixel>;
using _16x4 = SmoothFuncs_C<16, 4, Pixel>;
using _16x8 = SmoothFuncs_C<16, 8, Pixel>;
using _16x16 = SmoothFuncs_C<16, 16, Pixel>;
using _16x32 = SmoothFuncs_C<16, 32, Pixel>;
using _16x64 = SmoothFuncs_C<16, 64, Pixel>;
using _32x8 = SmoothFuncs_C<32, 8, Pixel>;
using _32x16 = SmoothFuncs_C<32, 16, Pixel>;
using _32x32 = SmoothFuncs_C<32, 32, Pixel>;
using _32x64 = SmoothFuncs_C<32, 64, Pixel>;
using _64x16 = SmoothFuncs_C<64, 16, Pixel>;
using _64x32 = SmoothFuncs_C<64, 32, Pixel>;
using _64x64 = SmoothFuncs_C<64, 64, Pixel>;
};
using Defs = SmoothDefs<uint8_t>;
// Initializes dsp entries for kTransformSize|W|x|H| from |DEFS| of
// the same size.
#define INIT_SMOOTH_WxH(DEFS, W, H) \
dsp->intra_predictors[kTransformSize##W##x##H][kIntraPredictorSmooth] = \
DEFS::_##W##x##H::Smooth; \
dsp->intra_predictors[kTransformSize##W##x##H] \
[kIntraPredictorSmoothVertical] = \
DEFS::_##W##x##H::SmoothVertical; \
dsp->intra_predictors[kTransformSize##W##x##H] \
[kIntraPredictorSmoothHorizontal] = \
DEFS::_##W##x##H::SmoothHorizontal
#define INIT_SMOOTH(DEFS) \
INIT_SMOOTH_WxH(DEFS, 4, 4); \
INIT_SMOOTH_WxH(DEFS, 4, 8); \
INIT_SMOOTH_WxH(DEFS, 4, 16); \
INIT_SMOOTH_WxH(DEFS, 8, 4); \
INIT_SMOOTH_WxH(DEFS, 8, 8); \
INIT_SMOOTH_WxH(DEFS, 8, 16); \
INIT_SMOOTH_WxH(DEFS, 8, 32); \
INIT_SMOOTH_WxH(DEFS, 16, 4); \
INIT_SMOOTH_WxH(DEFS, 16, 8); \
INIT_SMOOTH_WxH(DEFS, 16, 16); \
INIT_SMOOTH_WxH(DEFS, 16, 32); \
INIT_SMOOTH_WxH(DEFS, 16, 64); \
INIT_SMOOTH_WxH(DEFS, 32, 8); \
INIT_SMOOTH_WxH(DEFS, 32, 16); \
INIT_SMOOTH_WxH(DEFS, 32, 32); \
INIT_SMOOTH_WxH(DEFS, 32, 64); \
INIT_SMOOTH_WxH(DEFS, 64, 16); \
INIT_SMOOTH_WxH(DEFS, 64, 32); \
INIT_SMOOTH_WxH(DEFS, 64, 64)
void Init8bpp() {
Dsp* const dsp = dsp_internal::GetWritableDspTable(8);
assert(dsp != nullptr);
#if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
INIT_SMOOTH(Defs);
#else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
static_cast<void>(dsp);
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmooth] =
Defs::_4x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothVertical] =
Defs::_4x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothHorizontal] =
Defs::_4x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmooth] =
Defs::_4x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothVertical] =
Defs::_4x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothHorizontal] =
Defs::_4x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmooth] =
Defs::_4x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothVertical] =
Defs::_4x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothHorizontal] =
Defs::_4x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmooth] =
Defs::_8x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothVertical] =
Defs::_8x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothHorizontal] =
Defs::_8x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmooth] =
Defs::_8x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothVertical] =
Defs::_8x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothHorizontal] =
Defs::_8x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmooth] =
Defs::_8x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothVertical] =
Defs::_8x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothHorizontal] =
Defs::_8x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmooth] =
Defs::_8x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothVertical] =
Defs::_8x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothHorizontal] =
Defs::_8x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmooth] =
Defs::_16x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothVertical] =
Defs::_16x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothHorizontal] =
Defs::_16x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmooth] =
Defs::_16x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothVertical] =
Defs::_16x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothHorizontal] =
Defs::_16x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmooth] =
Defs::_16x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothVertical] =
Defs::_16x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothHorizontal] =
Defs::_16x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmooth] =
Defs::_16x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothVertical] =
Defs::_16x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothHorizontal] =
Defs::_16x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmooth] =
Defs::_16x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothVertical] =
Defs::_16x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize16x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothHorizontal] =
Defs::_16x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmooth] =
Defs::_32x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothVertical] =
Defs::_32x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothHorizontal] =
Defs::_32x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmooth] =
Defs::_32x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothVertical] =
Defs::_32x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothHorizontal] =
Defs::_32x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmooth] =
Defs::_32x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothVertical] =
Defs::_32x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothHorizontal] =
Defs::_32x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmooth] =
Defs::_32x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothVertical] =
Defs::_32x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize32x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothHorizontal] =
Defs::_32x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmooth] =
Defs::_64x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothVertical] =
Defs::_64x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothHorizontal] =
Defs::_64x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmooth] =
Defs::_64x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothVertical] =
Defs::_64x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothHorizontal] =
Defs::_64x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmooth] =
Defs::_64x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothVertical] =
Defs::_64x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp8bpp_TransformSize64x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothHorizontal] =
Defs::_64x64::SmoothHorizontal;
#endif
#endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
} // NOLINT(readability/fn_size)
#if LIBGAV1_MAX_BITDEPTH >= 10
using DefsHbd = SmoothDefs<uint16_t>;
void Init10bpp() {
Dsp* const dsp = dsp_internal::GetWritableDspTable(10);
assert(dsp != nullptr);
#if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
INIT_SMOOTH(DefsHbd);
#else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
static_cast<void>(dsp);
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmooth] =
DefsHbd::_4x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothVertical] =
DefsHbd::_4x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmooth] =
DefsHbd::_4x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothVertical] =
DefsHbd::_4x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmooth] =
DefsHbd::_4x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothVertical] =
DefsHbd::_4x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmooth] =
DefsHbd::_8x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothVertical] =
DefsHbd::_8x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmooth] =
DefsHbd::_8x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothVertical] =
DefsHbd::_8x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmooth] =
DefsHbd::_8x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothVertical] =
DefsHbd::_8x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmooth] =
DefsHbd::_8x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothVertical] =
DefsHbd::_8x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmooth] =
DefsHbd::_16x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothVertical] =
DefsHbd::_16x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmooth] =
DefsHbd::_16x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothVertical] =
DefsHbd::_16x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmooth] =
DefsHbd::_16x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothVertical] =
DefsHbd::_16x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmooth] =
DefsHbd::_16x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothVertical] =
DefsHbd::_16x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmooth] =
DefsHbd::_16x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothVertical] =
DefsHbd::_16x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize16x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmooth] =
DefsHbd::_32x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothVertical] =
DefsHbd::_32x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmooth] =
DefsHbd::_32x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothVertical] =
DefsHbd::_32x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmooth] =
DefsHbd::_32x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothVertical] =
DefsHbd::_32x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmooth] =
DefsHbd::_32x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothVertical] =
DefsHbd::_32x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize32x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmooth] =
DefsHbd::_64x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothVertical] =
DefsHbd::_64x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmooth] =
DefsHbd::_64x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothVertical] =
DefsHbd::_64x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmooth] =
DefsHbd::_64x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothVertical] =
DefsHbd::_64x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp10bpp_TransformSize64x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x64::SmoothHorizontal;
#endif
#endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
} // NOLINT(readability/fn_size)
#endif // LIBGAV1_MAX_BITDEPTH >= 10
#if LIBGAV1_MAX_BITDEPTH == 12
using DefsHbd = SmoothDefs<uint16_t>;
void Init12bpp() {
Dsp* const dsp = dsp_internal::GetWritableDspTable(12);
assert(dsp != nullptr);
#if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
INIT_SMOOTH(DefsHbd);
#else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
static_cast<void>(dsp);
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmooth] =
DefsHbd::_4x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothVertical] =
DefsHbd::_4x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmooth] =
DefsHbd::_4x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothVertical] =
DefsHbd::_4x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmooth] =
DefsHbd::_4x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothVertical] =
DefsHbd::_4x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize4x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_4x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmooth] =
DefsHbd::_8x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothVertical] =
DefsHbd::_8x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmooth] =
DefsHbd::_8x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothVertical] =
DefsHbd::_8x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmooth] =
DefsHbd::_8x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothVertical] =
DefsHbd::_8x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmooth] =
DefsHbd::_8x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothVertical] =
DefsHbd::_8x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize8x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_8x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmooth] =
DefsHbd::_16x4::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothVertical] =
DefsHbd::_16x4::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x4][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x4::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmooth] =
DefsHbd::_16x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothVertical] =
DefsHbd::_16x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmooth] =
DefsHbd::_16x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothVertical] =
DefsHbd::_16x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmooth] =
DefsHbd::_16x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothVertical] =
DefsHbd::_16x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmooth] =
DefsHbd::_16x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothVertical] =
DefsHbd::_16x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize16x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize16x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_16x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmooth] =
DefsHbd::_32x8::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothVertical] =
DefsHbd::_32x8::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x8][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x8::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmooth] =
DefsHbd::_32x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothVertical] =
DefsHbd::_32x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmooth] =
DefsHbd::_32x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothVertical] =
DefsHbd::_32x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmooth] =
DefsHbd::_32x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothVertical] =
DefsHbd::_32x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize32x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize32x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_32x64::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x16_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmooth] =
DefsHbd::_64x16::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x16_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothVertical] =
DefsHbd::_64x16::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x16_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x16][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x16::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x32_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmooth] =
DefsHbd::_64x32::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x32_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothVertical] =
DefsHbd::_64x32::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x32_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x32][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x32::SmoothHorizontal;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x64_IntraPredictorSmooth
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmooth] =
DefsHbd::_64x64::Smooth;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x64_IntraPredictorSmoothVertical
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothVertical] =
DefsHbd::_64x64::SmoothVertical;
#endif
#ifndef LIBGAV1_Dsp12bpp_TransformSize64x64_IntraPredictorSmoothHorizontal
dsp->intra_predictors[kTransformSize64x64][kIntraPredictorSmoothHorizontal] =
DefsHbd::_64x64::SmoothHorizontal;
#endif
#endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
} // NOLINT(readability/fn_size)
#endif // LIBGAV1_MAX_BITDEPTH == 12
#undef INIT_SMOOTH_WxH
#undef INIT_SMOOTH
} // namespace
void IntraPredSmoothInit_C() {
Init8bpp();
#if LIBGAV1_MAX_BITDEPTH >= 10
Init10bpp();
#endif
#if LIBGAV1_MAX_BITDEPTH == 12
Init12bpp();
#endif
}
} // namespace dsp
} // namespace libgav1