Home | History | Annotate | Download | only in common
      1 /*
      2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #include <assert.h>
     12 
     13 #include "vpx_ports/mem.h"
     14 
     15 #include "vp9/common/vp9_filter.h"
     16 
     17 DECLARE_ALIGNED(256, const subpel_kernel,
     18                 vp9_bilinear_filters[SUBPEL_SHIFTS]) = {
     19   { 0, 0, 0, 128,   0, 0, 0, 0 },
     20   { 0, 0, 0, 120,   8, 0, 0, 0 },
     21   { 0, 0, 0, 112,  16, 0, 0, 0 },
     22   { 0, 0, 0, 104,  24, 0, 0, 0 },
     23   { 0, 0, 0,  96,  32, 0, 0, 0 },
     24   { 0, 0, 0,  88,  40, 0, 0, 0 },
     25   { 0, 0, 0,  80,  48, 0, 0, 0 },
     26   { 0, 0, 0,  72,  56, 0, 0, 0 },
     27   { 0, 0, 0,  64,  64, 0, 0, 0 },
     28   { 0, 0, 0,  56,  72, 0, 0, 0 },
     29   { 0, 0, 0,  48,  80, 0, 0, 0 },
     30   { 0, 0, 0,  40,  88, 0, 0, 0 },
     31   { 0, 0, 0,  32,  96, 0, 0, 0 },
     32   { 0, 0, 0,  24, 104, 0, 0, 0 },
     33   { 0, 0, 0,  16, 112, 0, 0, 0 },
     34   { 0, 0, 0,   8, 120, 0, 0, 0 }
     35 };
     36 
     37 // Lagrangian interpolation filter
     38 DECLARE_ALIGNED(256, const subpel_kernel,
     39                 vp9_sub_pel_filters_8[SUBPEL_SHIFTS]) = {
     40   { 0,   0,   0, 128,   0,   0,   0,  0},
     41   { 0,   1,  -5, 126,   8,  -3,   1,  0},
     42   { -1,   3, -10, 122,  18,  -6,   2,  0},
     43   { -1,   4, -13, 118,  27,  -9,   3, -1},
     44   { -1,   4, -16, 112,  37, -11,   4, -1},
     45   { -1,   5, -18, 105,  48, -14,   4, -1},
     46   { -1,   5, -19,  97,  58, -16,   5, -1},
     47   { -1,   6, -19,  88,  68, -18,   5, -1},
     48   { -1,   6, -19,  78,  78, -19,   6, -1},
     49   { -1,   5, -18,  68,  88, -19,   6, -1},
     50   { -1,   5, -16,  58,  97, -19,   5, -1},
     51   { -1,   4, -14,  48, 105, -18,   5, -1},
     52   { -1,   4, -11,  37, 112, -16,   4, -1},
     53   { -1,   3,  -9,  27, 118, -13,   4, -1},
     54   { 0,   2,  -6,  18, 122, -10,   3, -1},
     55   { 0,   1,  -3,   8, 126,  -5,   1,  0}
     56 };
     57 
     58 // DCT based filter
     59 DECLARE_ALIGNED(256, const subpel_kernel,
     60                 vp9_sub_pel_filters_8s[SUBPEL_SHIFTS]) = {
     61   {0,   0,   0, 128,   0,   0,   0, 0},
     62   {-1,   3,  -7, 127,   8,  -3,   1, 0},
     63   {-2,   5, -13, 125,  17,  -6,   3, -1},
     64   {-3,   7, -17, 121,  27, -10,   5, -2},
     65   {-4,   9, -20, 115,  37, -13,   6, -2},
     66   {-4,  10, -23, 108,  48, -16,   8, -3},
     67   {-4,  10, -24, 100,  59, -19,   9, -3},
     68   {-4,  11, -24,  90,  70, -21,  10, -4},
     69   {-4,  11, -23,  80,  80, -23,  11, -4},
     70   {-4,  10, -21,  70,  90, -24,  11, -4},
     71   {-3,   9, -19,  59, 100, -24,  10, -4},
     72   {-3,   8, -16,  48, 108, -23,  10, -4},
     73   {-2,   6, -13,  37, 115, -20,   9, -4},
     74   {-2,   5, -10,  27, 121, -17,   7, -3},
     75   {-1,   3,  -6,  17, 125, -13,   5, -2},
     76   {0,   1,  -3,   8, 127,  -7,   3, -1}
     77 };
     78 
     79 // freqmultiplier = 0.5
     80 DECLARE_ALIGNED(256, const subpel_kernel,
     81                 vp9_sub_pel_filters_8lp[SUBPEL_SHIFTS]) = {
     82   { 0,  0,  0, 128,  0,  0,  0,  0},
     83   {-3, -1, 32,  64, 38,  1, -3,  0},
     84   {-2, -2, 29,  63, 41,  2, -3,  0},
     85   {-2, -2, 26,  63, 43,  4, -4,  0},
     86   {-2, -3, 24,  62, 46,  5, -4,  0},
     87   {-2, -3, 21,  60, 49,  7, -4,  0},
     88   {-1, -4, 18,  59, 51,  9, -4,  0},
     89   {-1, -4, 16,  57, 53, 12, -4, -1},
     90   {-1, -4, 14,  55, 55, 14, -4, -1},
     91   {-1, -4, 12,  53, 57, 16, -4, -1},
     92   { 0, -4,  9,  51, 59, 18, -4, -1},
     93   { 0, -4,  7,  49, 60, 21, -3, -2},
     94   { 0, -4,  5,  46, 62, 24, -3, -2},
     95   { 0, -4,  4,  43, 63, 26, -2, -2},
     96   { 0, -3,  2,  41, 63, 29, -2, -2},
     97   { 0, -3,  1,  38, 64, 32, -1, -3}
     98 };
     99 
    100 
    101 static const subpel_kernel* vp9_filter_kernels[4] = {
    102   vp9_sub_pel_filters_8,
    103   vp9_sub_pel_filters_8lp,
    104   vp9_sub_pel_filters_8s,
    105   vp9_bilinear_filters
    106 };
    107 
    108 const subpel_kernel *vp9_get_filter_kernel(INTERPOLATION_TYPE type) {
    109   return vp9_filter_kernels[type];
    110 }
    111 
    112