1019 lines · 52.9 KB · C
RawDownload
/* * 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_partition_type_count[N_BL_LEVELS] = {    [BL_128X128] = N_PARTITIONS - 3,    [BL_64X64]   = N_PARTITIONS - 1,    [BL_32X32]   = N_PARTITIONS - 1,    [BL_16X16]   = N_PARTITIONS - 1,    [BL_8X8]     = N_SUB8X8_PARTITIONS - 1,}; const uint8_t /* enum TxfmType */ dav1d_tx_types_per_set[40] = {    /* Intra2 */    IDTX, DCT_DCT, ADST_ADST, ADST_DCT, DCT_ADST,    /* Intra1 */    IDTX, DCT_DCT, V_DCT, H_DCT, ADST_ADST, ADST_DCT, DCT_ADST,    /* Inter2 */    IDTX, V_DCT, H_DCT, DCT_DCT, ADST_DCT, DCT_ADST, FLIPADST_DCT,    DCT_FLIPADST, ADST_ADST, FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST,    /* Inter1 */    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,}; 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_lo_ctx_offsets[3][5][5] = {    { /* w == h */        {  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 },    }, { /* w > h */        {  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 },    }, { /* w < h */        {  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 },    },}; const uint8_t dav1d_skip_ctx[5][5] = {    { 1, 2, 2, 2, 3 },    { 2, 4, 4, 4, 5 },    { 2, 4, 4, 4, 5 },    { 2, 4, 4, 4, 5 },    { 3, 5, 5, 5, 6 },}; 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[DAV1D_N_FILTERS][DAV1D_N_FILTERS] = {    [DAV1D_FILTER_8TAP_REGULAR] = {        [DAV1D_FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_REGULAR,        [DAV1D_FILTER_8TAP_SHARP]   = FILTER_2D_8TAP_REGULAR_SHARP,        [DAV1D_FILTER_8TAP_SMOOTH]  = FILTER_2D_8TAP_REGULAR_SMOOTH,    }, [DAV1D_FILTER_8TAP_SHARP] = {        [DAV1D_FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_SHARP_REGULAR,        [DAV1D_FILTER_8TAP_SHARP]   = FILTER_2D_8TAP_SHARP,        [DAV1D_FILTER_8TAP_SMOOTH]  = FILTER_2D_8TAP_SHARP_SMOOTH,    }, [DAV1D_FILTER_8TAP_SMOOTH] = {        [DAV1D_FILTER_8TAP_REGULAR] = FILTER_2D_8TAP_SMOOTH_REGULAR,        [DAV1D_FILTER_8TAP_SHARP]   = FILTER_2D_8TAP_SMOOTH_SHARP,        [DAV1D_FILTER_8TAP_SMOOTH]  = FILTER_2D_8TAP_SMOOTH,    }, [DAV1D_FILTER_BILINEAR] = {        [DAV1D_FILTER_BILINEAR]     = FILTER_2D_BILINEAR,    }}; const uint8_t /* enum Dav1dFilterMode */ dav1d_filter_dir[N_2D_FILTERS][2] = {    [FILTER_2D_8TAP_REGULAR]        = { DAV1D_FILTER_8TAP_REGULAR, DAV1D_FILTER_8TAP_REGULAR },    [FILTER_2D_8TAP_REGULAR_SMOOTH] = { DAV1D_FILTER_8TAP_SMOOTH,  DAV1D_FILTER_8TAP_REGULAR },    [FILTER_2D_8TAP_REGULAR_SHARP]  = { DAV1D_FILTER_8TAP_SHARP,   DAV1D_FILTER_8TAP_REGULAR },    [FILTER_2D_8TAP_SHARP_REGULAR]  = { DAV1D_FILTER_8TAP_REGULAR, DAV1D_FILTER_8TAP_SHARP   },    [FILTER_2D_8TAP_SHARP_SMOOTH]   = { DAV1D_FILTER_8TAP_SMOOTH,  DAV1D_FILTER_8TAP_SHARP   },    [FILTER_2D_8TAP_SHARP]          = { DAV1D_FILTER_8TAP_SHARP,   DAV1D_FILTER_8TAP_SHARP   },    [FILTER_2D_8TAP_SMOOTH_REGULAR] = { DAV1D_FILTER_8TAP_REGULAR, DAV1D_FILTER_8TAP_SMOOTH  },    [FILTER_2D_8TAP_SMOOTH]         = { DAV1D_FILTER_8TAP_SMOOTH,  DAV1D_FILTER_8TAP_SMOOTH  },    [FILTER_2D_8TAP_SMOOTH_SHARP]   = { DAV1D_FILTER_8TAP_SHARP,   DAV1D_FILTER_8TAP_SMOOTH  },    [FILTER_2D_BILINEAR]            = { DAV1D_FILTER_BILINEAR,     DAV1D_FILTER_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 Dav1dWarpedMotionParams dav1d_default_wm_params = {    .type = DAV1D_WM_TYPE_IDENTITY,    .matrix = {        0, 0, 1 << 16,        0, 0, 1 << 16,    },    0}; const int8_t dav1d_cdef_directions[2 + 8 + 2 /* dir */][2 /* pass */] = {    {  1 * 12 + 0,  2 * 12 + 0 }, // 6    {  1 * 12 + 0,  2 * 12 - 1 }, // 7    { -1 * 12 + 1, -2 * 12 + 2 }, // 0    {  0 * 12 + 1, -1 * 12 + 2 }, // 1    {  0 * 12 + 1,  0 * 12 + 2 }, // 2    {  0 * 12 + 1,  1 * 12 + 2 }, // 3    {  1 * 12 + 1,  2 * 12 + 2 }, // 4    {  1 * 12 + 0,  2 * 12 + 1 }, // 5    {  1 * 12 + 0,  2 * 12 + 0 }, // 6    {  1 * 12 + 0,  2 * 12 - 1 }, // 7    { -1 * 12 + 1, -2 * 12 + 2 }, // 0    {  0 * 12 + 1, -1 * 12 + 2 }, // 1}; 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 uint8_t ALIGN(dav1d_sgr_x_by_x[256], 16) = {    255, 128,  85,  64,  51,  43,  37,  32,  28,  26,  23,  21,  20,  18,  17,     16,  15,  14,  13,  13,  12,  12,  11,  11,  10,  10,   9,   9,   9,   9,      8,   8,   8,   8,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,      6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4,      4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,      3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,      2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,      2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,      0}; const int8_t ALIGN(dav1d_mc_subpel_filters[5+ARCH_X86_64][15][8], 8) = {    [DAV1D_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 }    }, [DAV1D_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 }    }, [DAV1D_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 + DAV1D_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 },

Lines 1–500 of 1019.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t