ref: 9eaebda6fe4ecdb85052abbc624c543e7b5fddc2
dir: /src/tables.c/
/*
* Copyright © 2018, VideoLAN and dav1d authors
* Copyright © 2018, Two Orioles, LLC
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include <stdint.h>
#include "common/attributes.h"
#include "src/levels.h"
#include "src/tables.h"
const uint8_t dav1d_al_part_ctx[2][N_BL_LEVELS][N_PARTITIONS] = {
{
// partitions:
// none, h, v, split, tts, tbs, tls, trs, h4, v4
{ 0x00, 0x00, 0x10, -1, 0x00, 0x10, 0x10, 0x10, -1, -1 }, // bl128
{ 0x10, 0x10, 0x18, -1, 0x10, 0x18, 0x18, 0x18, 0x10, 0x1c }, // bl64
{ 0x18, 0x18, 0x1c, -1, 0x18, 0x1c, 0x1c, 0x1c, 0x18, 0x1e }, // bl32
{ 0x1c, 0x1c, 0x1e, -1, 0x1c, 0x1e, 0x1e, 0x1e, 0x1c, 0x1f }, // bl16
{ 0x1e, 0x1e, 0x1f, 0x1f, -1, -1, -1, -1, -1, -1 }, // bl8
}, {
{ 0x00, 0x10, 0x00, -1, 0x10, 0x10, 0x00, 0x10, -1, -1 }, // bl128
{ 0x10, 0x18, 0x10, -1, 0x18, 0x18, 0x10, 0x18, 0x1c, 0x10 }, // bl64
{ 0x18, 0x1c, 0x18, -1, 0x1c, 0x1c, 0x18, 0x1c, 0x1e, 0x18 }, // bl32
{ 0x1c, 0x1e, 0x1c, -1, 0x1e, 0x1e, 0x1c, 0x1e, 0x1f, 0x1c }, // bl16
{ 0x1e, 0x1f, 0x1e, 0x1f, -1, -1, -1, -1, -1, -1 }, // bl8
}
};
const uint8_t /* enum BlockSize */
dav1d_block_sizes[N_BL_LEVELS][N_PARTITIONS][2] =
{
[BL_128X128] = {
[PARTITION_NONE] = { BS_128x128 },
[PARTITION_H] = { BS_128x64 },
[PARTITION_V] = { BS_64x128 },
[PARTITION_T_TOP_SPLIT] = { BS_64x64, BS_128x64 },
[PARTITION_T_BOTTOM_SPLIT] = { BS_128x64, BS_64x64 },
[PARTITION_T_LEFT_SPLIT] = { BS_64x64, BS_64x128 },
[PARTITION_T_RIGHT_SPLIT] = { BS_64x128, BS_64x64 },
}, [BL_64X64] = {
[PARTITION_NONE] = { BS_64x64 },
[PARTITION_H] = { BS_64x32 },
[PARTITION_V] = { BS_32x64 },
[PARTITION_T_TOP_SPLIT] = { BS_32x32, BS_64x32 },
[PARTITION_T_BOTTOM_SPLIT] = { BS_64x32, BS_32x32 },
[PARTITION_T_LEFT_SPLIT] = { BS_32x32, BS_32x64 },
[PARTITION_T_RIGHT_SPLIT] = { BS_32x64, BS_32x32 },
[PARTITION_H4] = { BS_64x16 },
[PARTITION_V4] = { BS_16x64 },
}, [BL_32X32] = {
[PARTITION_NONE] = { BS_32x32 },
[PARTITION_H] = { BS_32x16 },
[PARTITION_V] = { BS_16x32 },
[PARTITION_T_TOP_SPLIT] = { BS_16x16, BS_32x16 },
[PARTITION_T_BOTTOM_SPLIT] = { BS_32x16, BS_16x16 },
[PARTITION_T_LEFT_SPLIT] = { BS_16x16, BS_16x32 },
[PARTITION_T_RIGHT_SPLIT] = { BS_16x32, BS_16x16 },
[PARTITION_H4] = { BS_32x8 },
[PARTITION_V4] = { BS_8x32 },
}, [BL_16X16] = {
[PARTITION_NONE] = { BS_16x16 },
[PARTITION_H] = { BS_16x8 },
[PARTITION_V] = { BS_8x16 },
[PARTITION_T_TOP_SPLIT] = { BS_8x8, BS_16x8 },
[PARTITION_T_BOTTOM_SPLIT] = { BS_16x8, BS_8x8 },
[PARTITION_T_LEFT_SPLIT] = { BS_8x8, BS_8x16 },
[PARTITION_T_RIGHT_SPLIT] = { BS_8x16, BS_8x8 },
[PARTITION_H4] = { BS_16x4 },
[PARTITION_V4] = { BS_4x16 },
}, [BL_8X8] = {
[PARTITION_NONE] = { BS_8x8 },
[PARTITION_H] = { BS_8x4 },
[PARTITION_V] = { BS_4x8 },
[PARTITION_SPLIT] = { BS_4x4 },
}
};
const uint8_t dav1d_block_dimensions[N_BS_SIZES][4] = {
[BS_128x128] = { 32, 32, 5, 5 },
[BS_128x64] = { 32, 16, 5, 4 },
[BS_64x128] = { 16, 32, 4, 5 },
[BS_64x64] = { 16, 16, 4, 4 },
[BS_64x32] = { 16, 8, 4, 3 },
[BS_64x16] = { 16, 4, 4, 2 },
[BS_32x64] = { 8, 16, 3, 4 },
[BS_32x32] = { 8, 8, 3, 3 },
[BS_32x16] = { 8, 4, 3, 2 },
[BS_32x8] = { 8, 2, 3, 1 },
[BS_16x64] = { 4, 16, 2, 4 },
[BS_16x32] = { 4, 8, 2, 3 },
[BS_16x16] = { 4, 4, 2, 2 },
[BS_16x8] = { 4, 2, 2, 1 },
[BS_16x4] = { 4, 1, 2, 0 },
[BS_8x32] = { 2, 8, 1, 3 },
[BS_8x16] = { 2, 4, 1, 2 },
[BS_8x8] = { 2, 2, 1, 1 },
[BS_8x4] = { 2, 1, 1, 0 },
[BS_4x16] = { 1, 4, 0, 2 },
[BS_4x8] = { 1, 2, 0, 1 },
[BS_4x4] = { 1, 1, 0, 0 },
};
const TxfmInfo dav1d_txfm_dimensions[N_RECT_TX_SIZES] = {
[ TX_4X4] = { .w = 1, .h = 1, .lw = 0, .lh = 0,
.min = 0, .max = 0, .ctx = 0 },
[ TX_8X8] = { .w = 2, .h = 2, .lw = 1, .lh = 1,
.min = 1, .max = 1, .sub = TX_4X4, .ctx = 1 },
[ TX_16X16] = { .w = 4, .h = 4, .lw = 2, .lh = 2,
.min = 2, .max = 2, .sub = TX_8X8, .ctx = 2 },
[ TX_32X32] = { .w = 8, .h = 8, .lw = 3, .lh = 3,
.min = 3, .max = 3, .sub = TX_16X16, .ctx = 3 },
[ TX_64X64] = { .w = 16, .h = 16, .lw = 4, .lh = 4,
.min = 4, .max = 4, .sub = TX_32X32, .ctx = 4 },
[RTX_4X8] = { .w = 1, .h = 2, .lw = 0, .lh = 1,
.min = 0, .max = 1, .sub = TX_4X4, .ctx = 1 },
[RTX_8X4] = { .w = 2, .h = 1, .lw = 1, .lh = 0,
.min = 0, .max = 1, .sub = TX_4X4, .ctx = 1 },
[RTX_8X16] = { .w = 2, .h = 4, .lw = 1, .lh = 2,
.min = 1, .max = 2, .sub = TX_8X8, .ctx = 2 },
[RTX_16X8] = { .w = 4, .h = 2, .lw = 2, .lh = 1,
.min = 1, .max = 2, .sub = TX_8X8, .ctx = 2 },
[RTX_16X32] = { .w = 4, .h = 8, .lw = 2, .lh = 3,
.min = 2, .max = 3, .sub = TX_16X16, .ctx = 3 },
[RTX_32X16] = { .w = 8, .h = 4, .lw = 3, .lh = 2,
.min = 2, .max = 3, .sub = TX_16X16, .ctx = 3 },
[RTX_32X64] = { .w = 8, .h = 16, .lw = 3, .lh = 4,
.min = 3, .max = 4, .sub = TX_32X32, .ctx = 4 },
[RTX_64X32] = { .w = 16, .h = 8, .lw = 4, .lh = 3,
.min = 3, .max = 4, .sub = TX_32X32, .ctx = 4 },
[RTX_4X16] = { .w = 1, .h = 4, .lw = 0, .lh = 2,
.min = 0, .max = 2, .sub = RTX_4X8, .ctx = 1 },
[RTX_16X4] = { .w = 4, .h = 1, .lw = 2, .lh = 0,
.min = 0, .max = 2, .sub = RTX_8X4, .ctx = 1 },
[RTX_8X32] = { .w = 2, .h = 8, .lw = 1, .lh = 3,
.min = 1, .max = 3, .sub = RTX_8X16, .ctx = 2 },
[RTX_32X8] = { .w = 8, .h = 2, .lw = 3, .lh = 1,
.min = 1, .max = 3, .sub = RTX_16X8, .ctx = 2 },
[RTX_16X64] = { .w = 4, .h = 16, .lw = 2, .lh = 4,
.min = 2, .max = 4, .sub = RTX_16X32, .ctx = 3 },
[RTX_64X16] = { .w = 16, .h = 4, .lw = 4, .lh = 2,
.min = 2, .max = 4, .sub = RTX_32X16, .ctx = 3 },
};
const uint8_t /* enum (Rect)TxfmSize */
dav1d_max_txfm_size_for_bs[N_BS_SIZES][4 /* y, 420, 422, 444 */] =
{
[BS_128x128] = { TX_64X64, TX_32X32, TX_32X32, TX_32X32 },
[BS_128x64] = { TX_64X64, TX_32X32, TX_32X32, TX_32X32 },
[BS_64x128] = { TX_64X64, TX_32X32, 0, TX_32X32 },
[BS_64x64] = { TX_64X64, TX_32X32, TX_32X32, TX_32X32 },
[BS_64x32] = { RTX_64X32, RTX_32X16, TX_32X32, TX_32X32 },
[BS_64x16] = { RTX_64X16, RTX_32X8, RTX_32X16, RTX_32X16 },
[BS_32x64] = { RTX_32X64, RTX_16X32, 0, TX_32X32 },
[BS_32x32] = { TX_32X32, TX_16X16, RTX_16X32, TX_32X32 },
[BS_32x16] = { RTX_32X16, RTX_16X8, TX_16X16, RTX_32X16 },
[BS_32x8] = { RTX_32X8, RTX_16X4, RTX_16X8, RTX_32X8 },
[BS_16x64] = { RTX_16X64, RTX_8X32, 0, RTX_16X32 },
[BS_16x32] = { RTX_16X32, RTX_8X16, 0, RTX_16X32 },
[BS_16x16] = { TX_16X16, TX_8X8, RTX_8X16, TX_16X16 },
[BS_16x8] = { RTX_16X8, RTX_8X4, TX_8X8, RTX_16X8 },
[BS_16x4] = { RTX_16X4, RTX_8X4, RTX_8X4, RTX_16X4 },
[BS_8x32] = { RTX_8X32, RTX_4X16, 0, RTX_8X32 },
[BS_8x16] = { RTX_8X16, RTX_4X8, 0, RTX_8X16 },
[BS_8x8] = { TX_8X8, TX_4X4, RTX_4X8, TX_8X8 },
[BS_8x4] = { RTX_8X4, TX_4X4, TX_4X4, RTX_8X4 },
[BS_4x16] = { RTX_4X16, RTX_4X8, 0, RTX_4X16 },
[BS_4x8] = { RTX_4X8, TX_4X4, 0, RTX_4X8 },
[BS_4x4] = { TX_4X4, TX_4X4, TX_4X4, TX_4X4 },
};
const uint8_t /* enum TxfmType */
dav1d_txtp_from_uvmode[N_UV_INTRA_PRED_MODES] =
{
[DC_PRED] = DCT_DCT,
[VERT_PRED] = ADST_DCT,
[HOR_PRED] = DCT_ADST,
[DIAG_DOWN_LEFT_PRED] = DCT_DCT,
[DIAG_DOWN_RIGHT_PRED] = ADST_ADST,
[VERT_RIGHT_PRED] = ADST_DCT,
[HOR_DOWN_PRED] = DCT_ADST,
[HOR_UP_PRED] = DCT_ADST,
[VERT_LEFT_PRED] = ADST_DCT,
[SMOOTH_PRED] = ADST_ADST,
[SMOOTH_V_PRED] = ADST_DCT,
[SMOOTH_H_PRED] = DCT_ADST,
[PAETH_PRED] = ADST_ADST,
};
const uint8_t /* enum InterPredMode */
dav1d_comp_inter_pred_modes[N_COMP_INTER_PRED_MODES][2] =
{
[NEARESTMV_NEARESTMV] = { NEARESTMV, NEARESTMV },
[NEARMV_NEARMV] = { NEARMV, NEARMV },
[NEWMV_NEWMV] = { NEWMV, NEWMV },
[GLOBALMV_GLOBALMV] = { GLOBALMV, GLOBALMV },
[NEWMV_NEARESTMV] = { NEWMV, NEARESTMV },
[NEWMV_NEARMV] = { NEWMV, NEARMV },
[NEARESTMV_NEWMV] = { NEARESTMV, NEWMV },
[NEARMV_NEWMV] = { NEARMV, NEWMV },
};
const uint8_t dav1d_tx_type_count[N_TXTP_SETS] = {
[TXTP_SET_DCT] = 1,
[TXTP_SET_DCT_ID] = 2,
[TXTP_SET_DT4_ID] = 5,
[TXTP_SET_DT4_ID_1D] = 7,
[TXTP_SET_DT9_ID_1D] = 12,
[TXTP_SET_ALL] = 16,
[TXTP_SET_LOSSLESS] = 1,
};
const uint8_t /* enum TxfmType */
dav1d_tx_types_per_set[N_TXTP_SETS][N_TX_TYPES] =
{
[TXTP_SET_DCT] = { DCT_DCT },
[TXTP_SET_DCT_ID] = { IDTX, DCT_DCT },
[TXTP_SET_DT4_ID] = { IDTX, DCT_DCT, ADST_ADST, ADST_DCT, DCT_ADST },
[TXTP_SET_DT4_ID_1D] = { IDTX, DCT_DCT, V_DCT, H_DCT, ADST_ADST, ADST_DCT,
DCT_ADST },
[TXTP_SET_DT9_ID_1D] = { IDTX, V_DCT, H_DCT, DCT_DCT, ADST_DCT, DCT_ADST,
FLIPADST_DCT, DCT_FLIPADST, ADST_ADST,
FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST },
[TXTP_SET_ALL] = { IDTX, V_DCT, H_DCT, V_ADST, H_ADST, V_FLIPADST,
H_FLIPADST, DCT_DCT, ADST_DCT, DCT_ADST,
FLIPADST_DCT, DCT_FLIPADST, ADST_ADST,
FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST },
[TXTP_SET_LOSSLESS] = { WHT_WHT },
};
const uint8_t dav1d_tx_type_set_index[2][N_TXTP_SETS] = {
{ 0, -1, 2, 1, -1, -1, 3 },
{ 0, 3, -1, -1, 2, 1, 4 },
};
const uint8_t dav1d_ymode_size_context[N_BS_SIZES] = {
[BS_128x128] = 3,
[BS_128x64] = 3,
[BS_64x128] = 3,
[BS_64x64] = 3,
[BS_64x32] = 3,
[BS_64x16] = 2,
[BS_32x64] = 3,
[BS_32x32] = 3,
[BS_32x16] = 2,
[BS_32x8 ] = 1,
[BS_16x64] = 2,
[BS_16x32] = 2,
[BS_16x16] = 2,
[BS_16x8 ] = 1,
[BS_16x4 ] = 0,
[BS_8x32 ] = 1,
[BS_8x16 ] = 1,
[BS_8x8 ] = 1,
[BS_8x4 ] = 0,
[BS_4x16 ] = 0,
[BS_4x8 ] = 0,
[BS_4x4 ] = 0,
};
const uint8_t dav1d_nz_map_ctx_offset[N_RECT_TX_SIZES][5][5] = {
[TX_4X4] = {
{ 0, 1, 6, 6 },
{ 1, 6, 6, 21 },
{ 6, 6, 21, 21 },
{ 6, 21, 21, 21 },
}, [TX_8X8] = {
{ 0, 1, 6, 6, 21 },
{ 1, 6, 6, 21, 21 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [TX_16X16] = {
{ 0, 1, 6, 6, 21 },
{ 1, 6, 6, 21, 21 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [TX_32X32] = {
{ 0, 1, 6, 6, 21 },
{ 1, 6, 6, 21, 21 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [TX_64X64] = {
{ 0, 1, 6, 6, 21 },
{ 1, 6, 6, 21, 21 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_4X8] = {
{ 0, 11, 11, 11 },
{ 11, 11, 11, 11 },
{ 6, 6, 21, 21 },
{ 6, 21, 21, 21 },
{ 21, 21, 21, 21 }
}, [RTX_8X4] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
}, [RTX_8X16] = {
{ 0, 11, 11, 11, 11 },
{ 11, 11, 11, 11, 11 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_16X8] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 }
}, [RTX_16X32] = {
{ 0, 11, 11, 11, 11 },
{ 11, 11, 11, 11, 11 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_32X16] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 }
}, [RTX_32X64] = {
{ 0, 11, 11, 11, 11 },
{ 11, 11, 11, 11, 11 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_64X32] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 }
}, [RTX_4X16] = {
{ 0, 11, 11, 11 },
{ 11, 11, 11, 11 },
{ 6, 6, 21, 21 },
{ 6, 21, 21, 21 },
{ 21, 21, 21, 21 }
}, [RTX_16X4] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
}, [RTX_8X32] = {
{ 0, 11, 11, 11, 11 },
{ 11, 11, 11, 11, 11 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_32X8] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 }
}, [RTX_16X64] = {
{ 0, 11, 11, 11, 11 },
{ 11, 11, 11, 11, 11 },
{ 6, 6, 21, 21, 21 },
{ 6, 21, 21, 21, 21 },
{ 21, 21, 21, 21, 21 }
}, [RTX_64X16] = {
{ 0, 16, 6, 6, 21 },
{ 16, 16, 6, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 },
{ 16, 16, 21, 21, 21 }
}
};
const uint8_t /* enum TxClass */ dav1d_tx_type_class[N_TX_TYPES_PLUS_LL] = {
[DCT_DCT] = TX_CLASS_2D,
[ADST_DCT] = TX_CLASS_2D,
[DCT_ADST] = TX_CLASS_2D,
[ADST_ADST] = TX_CLASS_2D,
[FLIPADST_DCT] = TX_CLASS_2D,
[DCT_FLIPADST] = TX_CLASS_2D,
[FLIPADST_FLIPADST] = TX_CLASS_2D,
[ADST_FLIPADST] = TX_CLASS_2D,
[FLIPADST_ADST] = TX_CLASS_2D,
[IDTX] = TX_CLASS_2D,
[V_DCT] = TX_CLASS_V,
[H_DCT] = TX_CLASS_H,
[V_ADST] = TX_CLASS_V,
[H_ADST] = TX_CLASS_H,
[V_FLIPADST] = TX_CLASS_V,
[H_FLIPADST] = TX_CLASS_H,
[WHT_WHT] = TX_CLASS_2D,
};
const uint8_t /* enum Filter2d */ dav1d_filter_2d[N_FILTERS][N_FILTERS] = {
[FILTER_8TAP_REGULAR] = {
[FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_REGULAR,
[FILTER_8TAP_SHARP] = FILTER_2D_8TAP_REGULAR_SHARP,
[FILTER_8TAP_SMOOTH] = FILTER_2D_8TAP_REGULAR_SMOOTH,
}, [FILTER_8TAP_SHARP] = {
[FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_SHARP_REGULAR,
[FILTER_8TAP_SHARP] = FILTER_2D_8TAP_SHARP,
[FILTER_8TAP_SMOOTH] = FILTER_2D_8TAP_SHARP_SMOOTH,
}, [FILTER_8TAP_SMOOTH] = {
[FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_SMOOTH_REGULAR,
[FILTER_8TAP_SHARP] = FILTER_2D_8TAP_SMOOTH_SHARP,
[FILTER_8TAP_SMOOTH] = FILTER_2D_8TAP_SMOOTH,
}, [FILTER_BILINEAR] = {
[FILTER_BILINEAR] = FILTER_2D_BILINEAR,
}
};
const uint8_t /* enum FilterMode */ dav1d_filter_dir[N_2D_FILTERS][2] = {
[FILTER_2D_8TAP_REGULAR] = { FILTER_8TAP_REGULAR, FILTER_8TAP_REGULAR },
[FILTER_2D_8TAP_REGULAR_SMOOTH] = { FILTER_8TAP_SMOOTH, FILTER_8TAP_REGULAR },
[FILTER_2D_8TAP_REGULAR_SHARP] = { FILTER_8TAP_SHARP, FILTER_8TAP_REGULAR },
[FILTER_2D_8TAP_SHARP_REGULAR] = { FILTER_8TAP_REGULAR, FILTER_8TAP_SHARP },
[FILTER_2D_8TAP_SHARP_SMOOTH] = { FILTER_8TAP_SMOOTH, FILTER_8TAP_SHARP },
[FILTER_2D_8TAP_SHARP] = { FILTER_8TAP_SHARP, FILTER_8TAP_SHARP },
[FILTER_2D_8TAP_SMOOTH_REGULAR] = { FILTER_8TAP_REGULAR, FILTER_8TAP_SMOOTH },
[FILTER_2D_8TAP_SMOOTH] = { FILTER_8TAP_SMOOTH, FILTER_8TAP_SMOOTH },
[FILTER_2D_8TAP_SMOOTH_SHARP] = { FILTER_8TAP_SHARP, FILTER_8TAP_SMOOTH },
[FILTER_2D_BILINEAR] = { FILTER_2D_BILINEAR, FILTER_2D_BILINEAR },
};
const uint8_t dav1d_filter_mode_to_y_mode[5] = {
DC_PRED, VERT_PRED, HOR_PRED, HOR_DOWN_PRED, DC_PRED
};
const uint8_t dav1d_intra_mode_context[N_INTRA_PRED_MODES] = {
[DC_PRED] = 0,
[VERT_PRED] = 1,
[HOR_PRED] = 2,
[DIAG_DOWN_LEFT_PRED] = 3,
[DIAG_DOWN_RIGHT_PRED] = 4,
[VERT_RIGHT_PRED] = 4,
[HOR_DOWN_PRED] = 4,
[HOR_UP_PRED] = 4,
[VERT_LEFT_PRED] = 3,
[SMOOTH_PRED] = 0,
[SMOOTH_V_PRED] = 1,
[SMOOTH_H_PRED] = 2,
[PAETH_PRED] = 0,
};
const uint8_t dav1d_wedge_ctx_lut[N_BS_SIZES] = {
[BS_32x32] = 6,
[BS_32x16] = 5,
[BS_32x8] = 8,
[BS_16x32] = 4,
[BS_16x16] = 3,
[BS_16x8] = 2,
[BS_8x32] = 7,
[BS_8x16] = 1,
[BS_8x8] = 0,
};
const WarpedMotionParams dav1d_default_wm_params = {
.type = WM_TYPE_IDENTITY,
.matrix = {
0, 0, 1 << 16,
0, 0, 1 << 16,
},
.alpha = 0,
.beta = 0,
.gamma = 0,
.delta = 0,
};
const int16_t dav1d_sgr_params[16][4] = { // r0, r1, e0, e1
{ 2, 1, 140, 3236 }, { 2, 1, 112, 2158 }, { 2, 1, 93, 1618 },
{ 2, 1, 80, 1438 }, { 2, 1, 70, 1295 }, { 2, 1, 58, 1177 },
{ 2, 1, 47, 1079 }, { 2, 1, 37, 996 }, { 2, 1, 30, 925 },
{ 2, 1, 25, 863 }, { 0, 1, -1, 2589 }, { 0, 1, -1, 1618 },
{ 0, 1, -1, 1177 }, { 0, 1, -1, 925 }, { 2, 0, 56, -1 },
{ 2, 0, 22, -1 },
};
const int16_t dav1d_sgr_x_by_xplus1[256] = {
1, 128, 171, 192, 205, 213, 219, 224, 228, 230, 233, 235, 236, 238, 239,
240, 241, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 247,
248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250,
250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252, 252, 252, 252,
252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253, 253,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
256,
};
const int8_t ALIGN(dav1d_mc_subpel_filters[5][15][8], 8) = {
[FILTER_8TAP_REGULAR] = {
{ 0, 1, -3, 63, 4, -1, 0, 0 },
{ 0, 1, -5, 61, 9, -2, 0, 0 },
{ 0, 1, -6, 58, 14, -4, 1, 0 },
{ 0, 1, -7, 55, 19, -5, 1, 0 },
{ 0, 1, -7, 51, 24, -6, 1, 0 },
{ 0, 1, -8, 47, 29, -6, 1, 0 },
{ 0, 1, -7, 42, 33, -6, 1, 0 },
{ 0, 1, -7, 38, 38, -7, 1, 0 },
{ 0, 1, -6, 33, 42, -7, 1, 0 },
{ 0, 1, -6, 29, 47, -8, 1, 0 },
{ 0, 1, -6, 24, 51, -7, 1, 0 },
{ 0, 1, -5, 19, 55, -7, 1, 0 },
{ 0, 1, -4, 14, 58, -6, 1, 0 },
{ 0, 0, -2, 9, 61, -5, 1, 0 },
{ 0, 0, -1, 4, 63, -3, 1, 0 }
}, [FILTER_8TAP_SMOOTH] = {
{ 0, 1, 14, 31, 17, 1, 0, 0 },
{ 0, 0, 13, 31, 18, 2, 0, 0 },
{ 0, 0, 11, 31, 20, 2, 0, 0 },
{ 0, 0, 10, 30, 21, 3, 0, 0 },
{ 0, 0, 9, 29, 22, 4, 0, 0 },
{ 0, 0, 8, 28, 23, 5, 0, 0 },
{ 0, -1, 8, 27, 24, 6, 0, 0 },
{ 0, -1, 7, 26, 26, 7, -1, 0 },
{ 0, 0, 6, 24, 27, 8, -1, 0 },
{ 0, 0, 5, 23, 28, 8, 0, 0 },
{ 0, 0, 4, 22, 29, 9, 0, 0 },
{ 0, 0, 3, 21, 30, 10, 0, 0 },
{ 0, 0, 2, 20, 31, 11, 0, 0 },
{ 0, 0, 2, 18, 31, 13, 0, 0 },
{ 0, 0, 1, 17, 31, 14, 1, 0 }
}, [FILTER_8TAP_SHARP] = {
{ -1, 1, -3, 63, 4, -1, 1, 0 },
{ -1, 3, -6, 62, 8, -3, 2, -1 },
{ -1, 4, -9, 60, 13, -5, 3, -1 },
{ -2, 5, -11, 58, 19, -7, 3, -1 },
{ -2, 5, -11, 54, 24, -9, 4, -1 },
{ -2, 5, -12, 50, 30, -10, 4, -1 },
{ -2, 5, -12, 45, 35, -11, 5, -1 },
{ -2, 6, -12, 40, 40, -12, 6, -2 },
{ -1, 5, -11, 35, 45, -12, 5, -2 },
{ -1, 4, -10, 30, 50, -12, 5, -2 },
{ -1, 4, -9, 24, 54, -11, 5, -2 },
{ -1, 3, -7, 19, 58, -11, 5, -2 },
{ -1, 3, -5, 13, 60, -9, 4, -1 },
{ -1, 2, -3, 8, 62, -6, 3, -1 },
{ 0, 1, -1, 4, 63, -3, 1, -1 }
/* width <= 4 */
}, [3 + FILTER_8TAP_REGULAR] = {
{ 0, 0, -2, 63, 4, -1, 0, 0 },
{ 0, 0, -4, 61, 9, -2, 0, 0 },
{ 0, 0, -5, 58, 14, -3, 0, 0 },
{ 0, 0, -6, 55, 19, -4, 0, 0 },
{ 0, 0, -6, 51, 24, -5, 0, 0 },
{ 0, 0, -7, 47, 29, -5, 0, 0 },
{ 0, 0, -6, 42, 33, -5, 0, 0 },
{ 0, 0, -6, 38, 38, -6, 0, 0 },
{ 0, 0, -5, 33, 42, -6, 0, 0 },
{ 0, 0, -5, 29, 47, -7, 0, 0 },
{ 0, 0, -5, 24, 51, -6, 0, 0 },
{ 0, 0, -4, 19, 55, -6, 0, 0 },
{ 0, 0, -3, 14, 58, -5, 0, 0 },
{ 0, 0, -2, 9, 61, -4, 0, 0 },
{ 0, 0, -1, 4, 63, -2, 0, 0 }
}, [3 + FILTER_8TAP_SMOOTH] = {
{ 0, 0, 15, 31, 17, 1, 0, 0 },
{ 0, 0, 13, 31, 18, 2, 0, 0 },
{ 0, 0, 11, 31, 20, 2, 0, 0 },
{ 0, 0, 10, 30, 21, 3, 0, 0 },
{ 0, 0, 9, 29, 22, 4, 0, 0 },
{ 0, 0, 8, 28, 23, 5, 0, 0 },
{ 0, 0, 7, 27, 24, 6, 0, 0 },
{ 0, 0, 6, 26, 26, 6, 0, 0 },
{ 0, 0, 6, 24, 27, 7, 0, 0 },
{ 0, 0, 5, 23, 28, 8, 0, 0 },
{ 0, 0, 4, 22, 29, 9, 0, 0 },
{ 0, 0, 3, 21, 30, 10, 0, 0 },
{ 0, 0, 2, 20, 31, 11, 0, 0 },
{ 0, 0, 2, 18, 31, 13, 0, 0 },
{ 0, 0, 1, 17, 31, 15, 0, 0 }
}
};
const int8_t dav1d_mc_warp_filter[][8] = {
// [-1, 0)
{ 0, 0, 127, 1, 0, 0, 0, 0 }, { 0, - 1, 127, 2, 0, 0, 0, 0 },
{ 1, - 3, 127, 4, - 1, 0, 0, 0 }, { 1, - 4, 126, 6, - 2, 1, 0, 0 },
{ 1, - 5, 126, 8, - 3, 1, 0, 0 }, { 1, - 6, 125, 11, - 4, 1, 0, 0 },
{ 1, - 7, 124, 13, - 4, 1, 0, 0 }, { 2, - 8, 123, 15, - 5, 1, 0, 0 },
{ 2, - 9, 122, 18, - 6, 1, 0, 0 }, { 2, -10, 121, 20, - 6, 1, 0, 0 },
{ 2, -11, 120, 22, - 7, 2, 0, 0 }, { 2, -12, 119, 25, - 8, 2, 0, 0 },
{ 3, -13, 117, 27, - 8, 2, 0, 0 }, { 3, -13, 116, 29, - 9, 2, 0, 0 },
{ 3, -14, 114, 32, -10, 3, 0, 0 }, { 3, -15, 113, 35, -10, 2, 0, 0 },
{ 3, -15, 111, 37, -11, 3, 0, 0 }, { 3, -16, 109, 40, -11, 3, 0, 0 },
{ 3, -16, 108, 42, -12, 3, 0, 0 }, { 4, -17, 106, 45, -13, 3, 0, 0 },
{ 4, -17, 104, 47, -13, 3, 0, 0 }, { 4, -17, 102, 50, -14, 3, 0, 0 },
{ 4, -17, 100, 52, -14, 3, 0, 0 }, { 4, -18, 98, 55, -15, 4, 0, 0 },
{ 4, -18, 96, 58, -15, 3, 0, 0 }, { 4, -18, 94, 60, -16, 4, 0, 0 },
{ 4, -18, 91, 63, -16, 4, 0, 0 }, { 4, -18, 89, 65, -16, 4, 0, 0 },
{ 4, -18, 87, 68, -17, 4, 0, 0 }, { 4, -18, 85, 70, -17, 4, 0, 0 },
{ 4, -18, 82, 73, -17, 4, 0, 0 }, { 4, -18, 80, 75, -17, 4, 0, 0 },
{ 4, -18, 78, 78, -18, 4, 0, 0 }, { 4, -17, 75, 80, -18, 4, 0, 0 },
{ 4, -17, 73, 82, -18, 4, 0, 0 }, { 4, -17, 70, 85, -18, 4, 0, 0 },
{ 4, -17, 68, 87, -18, 4, 0, 0 }, { 4, -16, 65, 89, -18, 4, 0, 0 },
{ 4, -16, 63, 91, -18, 4, 0, 0 }, { 4, -16, 60, 94, -18, 4, 0, 0 },
{ 3, -15, 58, 96, -18, 4, 0, 0 }, { 4, -15, 55, 98, -18, 4, 0, 0 },
{ 3, -14, 52, 100, -17, 4, 0, 0 }, { 3, -14, 50, 102, -17, 4, 0, 0 },
{ 3, -13, 47, 104, -17, 4, 0, 0 }, { 3, -13, 45, 106, -17, 4, 0, 0 },
{ 3, -12, 42, 108, -16, 3, 0, 0 }, { 3, -11, 40, 109, -16, 3, 0, 0 },
{ 3, -11, 37, 111, -15, 3, 0, 0 }, { 2, -10, 35, 113, -15, 3, 0, 0 },
{ 3, -10, 32, 114, -14, 3, 0, 0 }, { 2, - 9, 29, 116, -13, 3, 0, 0 },
{ 2, - 8, 27, 117, -13, 3, 0, 0 }, { 2, - 8, 25, 119, -12, 2, 0, 0 },
{ 2, - 7, 22, 120, -11, 2, 0, 0 }, { 1, - 6, 20, 121, -10, 2, 0, 0 },
{ 1, - 6, 18, 122, - 9, 2, 0, 0 }, { 1, - 5, 15, 123, - 8, 2, 0, 0 },
{ 1, - 4, 13, 124, - 7, 1, 0, 0 }, { 1, - 4, 11, 125, - 6, 1, 0, 0 },
{ 1, - 3, 8, 126, - 5, 1, 0, 0 }, { 1, - 2, 6, 126, - 4, 1, 0, 0 },
{ 0, - 1, 4, 127, - 3, 1, 0, 0 }, { 0, 0, 2, 127, - 1, 0, 0, 0 },
// [0, 1)
{ 0, 0, 0, 127, 1, 0, 0, 0}, { 0, 0, -1, 127, 2, 0, 0, 0},
{ 0, 1, -3, 127, 4, -2, 1, 0}, { 0, 1, -5, 127, 6, -2, 1, 0},
{ 0, 2, -6, 126, 8, -3, 1, 0}, {-1, 2, -7, 126, 11, -4, 2, -1},
{-1, 3, -8, 125, 13, -5, 2, -1}, {-1, 3, -10, 124, 16, -6, 3, -1},
{-1, 4, -11, 123, 18, -7, 3, -1}, {-1, 4, -12, 122, 20, -7, 3, -1},
{-1, 4, -13, 121, 23, -8, 3, -1}, {-2, 5, -14, 120, 25, -9, 4, -1},
{-1, 5, -15, 119, 27, -10, 4, -1}, {-1, 5, -16, 118, 30, -11, 4, -1},
{-2, 6, -17, 116, 33, -12, 5, -1}, {-2, 6, -17, 114, 35, -12, 5, -1},
{-2, 6, -18, 113, 38, -13, 5, -1}, {-2, 7, -19, 111, 41, -14, 6, -2},
{-2, 7, -19, 110, 43, -15, 6, -2}, {-2, 7, -20, 108, 46, -15, 6, -2},
{-2, 7, -20, 106, 49, -16, 6, -2}, {-2, 7, -21, 104, 51, -16, 7, -2},
{-2, 7, -21, 102, 54, -17, 7, -2}, {-2, 8, -21, 100, 56, -18, 7, -2},
{-2, 8, -22, 98, 59, -18, 7, -2}, {-2, 8, -22, 96, 62, -19, 7, -2},
{-2, 8, -22, 94, 64, -19, 7, -2}, {-2, 8, -22, 91, 67, -20, 8, -2},
{-2, 8, -22, 89, 69, -20, 8, -2}, {-2, 8, -22, 87, 72, -21, 8, -2},
{-2, 8, -21, 84, 74, -21, 8, -2}, {-2, 8, -22, 82, 77, -21, 8, -2},
{-2, 8, -21, 79, 79, -21, 8, -2}, {-2, 8, -21, 77, 82, -22, 8, -2},
{-2, 8, -21, 74, 84, -21, 8, -2}, {-2, 8, -21, 72, 87, -22, 8, -2},
{-2, 8, -20, 69, 89, -22, 8, -2}, {-2, 8, -20, 67, 91, -22, 8, -2},
{-2, 7, -19, 64, 94, -22, 8, -2}, {-2, 7, -19, 62, 96, -22, 8, -2},
{-2, 7, -18, 59, 98, -22, 8, -2}, {-2, 7, -18, 56, 100, -21, 8, -2},
{-2, 7, -17, 54, 102, -21, 7, -2}, {-2, 7, -16, 51, 104, -21, 7, -2},
{-2, 6, -16, 49, 106, -20, 7, -2}, {-2, 6, -15, 46, 108, -20, 7, -2},
{-2, 6, -15, 43, 110, -19, 7, -2}, {-2, 6, -14, 41, 111, -19, 7, -2},
{-1, 5, -13, 38, 113, -18, 6, -2}, {-1, 5, -12, 35, 114, -17, 6, -2},
{-1, 5, -12, 33, 116, -17, 6, -2}, {-1, 4, -11, 30, 118, -16, 5, -1},
{-1, 4, -10, 27, 119, -15, 5, -1}, {-1, 4, -9, 25, 120, -14, 5, -2},
{-1, 3, -8, 23, 121, -13, 4, -1}, {-1, 3, -7, 20, 122, -12, 4, -1},
{-1, 3, -7, 18, 123, -11, 4, -1}, {-1, 3, -6, 16, 124, -10, 3, -1},
{-1, 2, -5, 13, 125, -8, 3, -1}, {-1, 2, -4, 11, 126, -7, 2, -1},
{ 0, 1, -3, 8, 126, -6, 2, 0}, { 0, 1, -2, 6, 127, -5, 1, 0},
{ 0, 1, -2, 4, 127, -3, 1, 0}, { 0, 0, 0, 2, 127, -1, 0, 0},
// [1, 2)
{ 0, 0, 0, 1, 127, 0, 0, 0 }, { 0, 0, 0, - 1, 127, 2, 0, 0 },
{ 0, 0, 1, - 3, 127, 4, - 1, 0 }, { 0, 0, 1, - 4, 126, 6, - 2, 1 },
{ 0, 0, 1, - 5, 126, 8, - 3, 1 }, { 0, 0, 1, - 6, 125, 11, - 4, 1 },
{ 0, 0, 1, - 7, 124, 13, - 4, 1 }, { 0, 0, 2, - 8, 123, 15, - 5, 1 },
{ 0, 0, 2, - 9, 122, 18, - 6, 1 }, { 0, 0, 2, -10, 121, 20, - 6, 1 },
{ 0, 0, 2, -11, 120, 22, - 7, 2 }, { 0, 0, 2, -12, 119, 25, - 8, 2 },
{ 0, 0, 3, -13, 117, 27, - 8, 2 }, { 0, 0, 3, -13, 116, 29, - 9, 2 },
{ 0, 0, 3, -14, 114, 32, -10, 3 }, { 0, 0, 3, -15, 113, 35, -10, 2 },
{ 0, 0, 3, -15, 111, 37, -11, 3 }, { 0, 0, 3, -16, 109, 40, -11, 3 },
{ 0, 0, 3, -16, 108, 42, -12, 3 }, { 0, 0, 4, -17, 106, 45, -13, 3 },
{ 0, 0, 4, -17, 104, 47, -13, 3 }, { 0, 0, 4, -17, 102, 50, -14, 3 },
{ 0, 0, 4, -17, 100, 52, -14, 3 }, { 0, 0, 4, -18, 98, 55, -15, 4 },
{ 0, 0, 4, -18, 96, 58, -15, 3 }, { 0, 0, 4, -18, 94, 60, -16, 4 },
{ 0, 0, 4, -18, 91, 63, -16, 4 }, { 0, 0, 4, -18, 89, 65, -16, 4 },
{ 0, 0, 4, -18, 87, 68, -17, 4 }, { 0, 0, 4, -18, 85, 70, -17, 4 },
{ 0, 0, 4, -18, 82, 73, -17, 4 }, { 0, 0, 4, -18, 80, 75, -17, 4 },
{ 0, 0, 4, -18, 78, 78, -18, 4 }, { 0, 0, 4, -17, 75, 80, -18, 4 },
{ 0, 0, 4, -17, 73, 82, -18, 4 }, { 0, 0, 4, -17, 70, 85, -18, 4 },
{ 0, 0, 4, -17, 68, 87, -18, 4 }, { 0, 0, 4, -16, 65, 89, -18, 4 },
{ 0, 0, 4, -16, 63, 91, -18, 4 }, { 0, 0, 4, -16, 60, 94, -18, 4 },
{ 0, 0, 3, -15, 58, 96, -18, 4 }, { 0, 0, 4, -15, 55, 98, -18, 4 },
{ 0, 0, 3, -14, 52, 100, -17, 4 }, { 0, 0, 3, -14, 50, 102, -17, 4 },
{ 0, 0, 3, -13, 47, 104, -17, 4 }, { 0, 0, 3, -13, 45, 106, -17, 4 },
{ 0, 0, 3, -12, 42, 108, -16, 3 }, { 0, 0, 3, -11, 40, 109, -16, 3 },
{ 0, 0, 3, -11, 37, 111, -15, 3 }, { 0, 0, 2, -10, 35, 113, -15, 3 },
{ 0, 0, 3, -10, 32, 114, -14, 3 }, { 0, 0, 2, - 9, 29, 116, -13, 3 },
{ 0, 0, 2, - 8, 27, 117, -13, 3 }, { 0, 0, 2, - 8, 25, 119, -12, 2 },
{ 0, 0, 2, - 7, 22, 120, -11, 2 }, { 0, 0, 1, - 6, 20, 121, -10, 2 },
{ 0, 0, 1, - 6, 18, 122, - 9, 2 }, { 0, 0, 1, - 5, 15, 123, - 8, 2 },
{ 0, 0, 1, - 4, 13, 124, - 7, 1 }, { 0, 0, 1, - 4, 11, 125, - 6, 1 },
{ 0, 0, 1, - 3, 8, 126, - 5, 1 }, { 0, 0, 1, - 2, 6, 126, - 4, 1 },
{ 0, 0, 0, - 1, 4, 127, - 3, 1 }, { 0, 0, 0, 0, 2, 127, - 1, 0 },
// dummy (replicate row index 191)
{ 0, 0, 0, 0, 2, 127, - 1, 0 },
};
const uint8_t dav1d_sm_weights[128] = {
// Unused, because we always offset by bs, which is at least 2.
0, 0,
// bs = 2
255, 128,
// bs = 4
255, 149, 85, 64,
// bs = 8
255, 197, 146, 105, 73, 50, 37, 32,
// bs = 16
255, 225, 196, 170, 145, 123, 102, 84,
68, 54, 43, 33, 26, 20, 17, 16,
// bs = 32
255, 240, 225, 210, 196, 182, 169, 157,
145, 133, 122, 111, 101, 92, 83, 74,
66, 59, 52, 45, 39, 34, 29, 25,
21, 17, 14, 12, 10, 9, 8, 8,
// bs = 64
255, 248, 240, 233, 225, 218, 210, 203,
196, 189, 182, 176, 169, 163, 156, 150,
144, 138, 133, 127, 121, 116, 111, 106,
101, 96, 91, 86, 82, 77, 73, 69,
65, 61, 57, 54, 50, 47, 44, 41,
38, 35, 32, 29, 27, 25, 22, 20,
18, 16, 15, 13, 12, 10, 9, 8,
7, 6, 6, 5, 5, 4, 4, 4
};
const int16_t dav1d_dr_intra_derivative[90] = {
// More evenly spread out angles and limited to 10-bit
// Values that are 0 will never be used
0, 0, 0, // Approx angle
1023, 0, 0, // 3, ...
547, 0, 0, // 6, ...
372, 0, 0, 0, 0, // 9, ...
273, 0, 0, // 14, ...
215, 0, 0, // 17, ...
178, 0, 0, // 20, ...
151, 0, 0, // 23, ... (113 & 203 are base angles)
132, 0, 0, // 26, ...
116, 0, 0, // 29, ...
102, 0, 0, 0, // 32, ...
90, 0, 0, // 36, ...
80, 0, 0, // 39, ...
71, 0, 0, // 42, ...
64, 0, 0, // 45, ... (45 & 135 are base angles)
57, 0, 0, // 48, ...
51, 0, 0, // 51, ...
45, 0, 0, 0, // 54, ...
40, 0, 0, // 58, ...
35, 0, 0, // 61, ...
31, 0, 0, // 64, ...
27, 0, 0, // 67, ... (67 & 157 are base angles)
23, 0, 0, // 70, ...
19, 0, 0, // 73, ...
15, 0, 0, 0, 0, // 76, ...
11, 0, 0, // 81, ...
7, 0, 0, // 84, ...
3, 0, 0, // 87, ...
};
const int8_t ALIGN(dav1d_filter_intra_taps[5][64], 16) = {
{
-6, 10, -5, 2, -3, 1, -3, 1,
-4, 6, -3, 2, -3, 2, -3, 1,
0, 0, 10, 0, 1, 10, 1, 2,
0, 0, 6, 0, 2, 6, 2, 2,
0, 12, 0, 9, 0, 7, 10, 5,
0, 2, 0, 2, 0, 2, 6, 3,
0, 0, 0, 0, 0, 0, 0, 0,
12, 0, 9, 0, 7, 0, 5, 0
}, {
-10, 16, -6, 0, -4, 0, -2, 0,
-10, 16, -6, 0, -4, 0, -2, 0,
0, 0, 16, 0, 0, 16, 0, 0,
0, 0, 16, 0, 0, 16, 0, 0,
0, 10, 0, 6, 0, 4, 16, 2,
0, 0, 0, 0, 0, 0, 16, 0,
0, 0, 0, 0, 0, 0, 0, 0,
10, 0, 6, 0, 4, 0, 2, 0
}, {
-8, 8, -8, 0, -8, 0, -8, 0,
-4, 4, -4, 0, -4, 0, -4, 0,
0, 0, 8, 0, 0, 8, 0, 0,
0, 0, 4, 0, 0, 4, 0, 0,
0, 16, 0, 16, 0, 16, 8, 16,
0, 0, 0, 0, 0, 0, 4, 0,
0, 0, 0, 0, 0, 0, 0, 0,
16, 0, 16, 0, 16, 0, 16, 0
}, {
-2, 8, -1, 3, -1, 2, 0, 1,
-1, 4, -1, 3, -1, 2, -1, 2,
0, 0, 8, 0, 3, 8, 2, 3,
0, 0, 4, 0, 3, 4, 2, 3,
0, 10, 0, 6, 0, 4, 8, 2,
0, 3, 0, 4, 0, 4, 4, 3,
0, 0, 0, 0, 0, 0, 0, 0,
10, 0, 6, 0, 4, 0, 3, 0
}, {
-12, 14, -10, 0, -9, 0, -8, 0,
-10, 12, -9, 1, -8, 0, -7, 0,
0, 0, 14, 0, 0, 14, 0, 0,
0, 0, 12, 0, 0, 12, 0, 1,
0, 14, 0, 12, 0, 11, 14, 10,
0, 0, 0, 0, 0, 1, 12, 1,
0, 0, 0, 0, 0, 0, 0, 0,
14, 0, 12, 0, 11, 0, 9, 0
}
};