media/libvpx/vp9/common/vp9_scan.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  *  Copyright (c) 2013 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  */
    11 #ifndef VP9_COMMON_VP9_SCAN_H_
    12 #define VP9_COMMON_VP9_SCAN_H_
    14 #include "vpx/vpx_integer.h"
    15 #include "vpx_ports/mem.h"
    17 #include "vp9/common/vp9_enums.h"
    19 #define MAX_NEIGHBORS 2
    21 extern DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_4x4[16]);
    22 extern DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_4x4[16]);
    23 extern DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_4x4[16]);
    25 extern DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_8x8[64]);
    26 extern DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_8x8[64]);
    27 extern DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_8x8[64]);
    29 extern DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_16x16[256]);
    30 extern DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_16x16[256]);
    31 extern DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_16x16[256]);
    33 extern DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_32x32[1024]);
    35 extern DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_4x4[16]);
    36 extern DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_4x4[16]);
    37 extern DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_4x4[16]);
    39 extern DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_8x8[64]);
    40 extern DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_8x8[64]);
    41 extern DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_8x8[64]);
    43 extern DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_16x16[256]);
    44 extern DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_16x16[256]);
    45 extern DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_16x16[256]);
    47 extern DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_32x32[1024]);
    49 extern DECLARE_ALIGNED(16, int16_t,
    50                        vp9_default_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    51 extern DECLARE_ALIGNED(16, int16_t,
    52                        vp9_col_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    53 extern DECLARE_ALIGNED(16, int16_t,
    54                        vp9_row_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    55 extern DECLARE_ALIGNED(16, int16_t,
    56                        vp9_col_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    57 extern DECLARE_ALIGNED(16, int16_t,
    58                        vp9_row_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    59 extern DECLARE_ALIGNED(16, int16_t,
    60                        vp9_default_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    61 extern DECLARE_ALIGNED(16, int16_t,
    62                        vp9_col_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    63 extern DECLARE_ALIGNED(16, int16_t,
    64                        vp9_row_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    65 extern DECLARE_ALIGNED(16, int16_t,
    66                        vp9_default_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    67 extern DECLARE_ALIGNED(16, int16_t,
    68                        vp9_default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]);
    71 void vp9_init_neighbors();
    73 static INLINE const int16_t* get_scan_4x4(TX_TYPE tx_type) {
    74   switch (tx_type) {
    75     case ADST_DCT:
    76       return vp9_row_scan_4x4;
    77     case DCT_ADST:
    78       return vp9_col_scan_4x4;
    79     default:
    80       return vp9_default_scan_4x4;
    81   }
    82 }
    84 static INLINE void get_scan_nb_4x4(TX_TYPE tx_type,
    85                                    const int16_t **scan, const int16_t **nb) {
    86   switch (tx_type) {
    87     case ADST_DCT:
    88       *scan = vp9_row_scan_4x4;
    89       *nb = vp9_row_scan_4x4_neighbors;
    90       break;
    91     case DCT_ADST:
    92       *scan = vp9_col_scan_4x4;
    93       *nb = vp9_col_scan_4x4_neighbors;
    94       break;
    95     default:
    96       *scan = vp9_default_scan_4x4;
    97       *nb = vp9_default_scan_4x4_neighbors;
    98       break;
    99   }
   100 }
   102 static INLINE const int16_t* get_iscan_4x4(TX_TYPE tx_type) {
   103   switch (tx_type) {
   104     case ADST_DCT:
   105       return vp9_row_iscan_4x4;
   106     case DCT_ADST:
   107       return vp9_col_iscan_4x4;
   108     default:
   109       return vp9_default_iscan_4x4;
   110   }
   111 }
   113 static INLINE const int16_t* get_scan_8x8(TX_TYPE tx_type) {
   114   switch (tx_type) {
   115     case ADST_DCT:
   116       return vp9_row_scan_8x8;
   117     case DCT_ADST:
   118       return vp9_col_scan_8x8;
   119     default:
   120       return vp9_default_scan_8x8;
   121   }
   122 }
   124 static INLINE void get_scan_nb_8x8(TX_TYPE tx_type,
   125                                    const int16_t **scan, const int16_t **nb) {
   126   switch (tx_type) {
   127     case ADST_DCT:
   128       *scan = vp9_row_scan_8x8;
   129       *nb = vp9_row_scan_8x8_neighbors;
   130       break;
   131     case DCT_ADST:
   132       *scan = vp9_col_scan_8x8;
   133       *nb = vp9_col_scan_8x8_neighbors;
   134       break;
   135     default:
   136       *scan = vp9_default_scan_8x8;
   137       *nb = vp9_default_scan_8x8_neighbors;
   138       break;
   139   }
   140 }
   142 static INLINE const int16_t* get_iscan_8x8(TX_TYPE tx_type) {
   143   switch (tx_type) {
   144     case ADST_DCT:
   145       return vp9_row_iscan_8x8;
   146     case DCT_ADST:
   147       return vp9_col_iscan_8x8;
   148     default:
   149       return vp9_default_iscan_8x8;
   150   }
   151 }
   153 static INLINE const int16_t* get_scan_16x16(TX_TYPE tx_type) {
   154   switch (tx_type) {
   155     case ADST_DCT:
   156       return vp9_row_scan_16x16;
   157     case DCT_ADST:
   158       return vp9_col_scan_16x16;
   159     default:
   160       return vp9_default_scan_16x16;
   161   }
   162 }
   164 static INLINE void get_scan_nb_16x16(TX_TYPE tx_type,
   165                                      const int16_t **scan, const int16_t **nb) {
   166   switch (tx_type) {
   167     case ADST_DCT:
   168       *scan = vp9_row_scan_16x16;
   169       *nb = vp9_row_scan_16x16_neighbors;
   170       break;
   171     case DCT_ADST:
   172       *scan = vp9_col_scan_16x16;
   173       *nb = vp9_col_scan_16x16_neighbors;
   174       break;
   175     default:
   176       *scan = vp9_default_scan_16x16;
   177       *nb = vp9_default_scan_16x16_neighbors;
   178       break;
   179   }
   180 }
   182 static INLINE const int16_t* get_iscan_16x16(TX_TYPE tx_type) {
   183   switch (tx_type) {
   184     case ADST_DCT:
   185       return vp9_row_iscan_16x16;
   186     case DCT_ADST:
   187       return vp9_col_iscan_16x16;
   188     default:
   189       return vp9_default_iscan_16x16;
   190   }
   191 }
   193 static INLINE int get_coef_context(const int16_t *neighbors,
   194                                    const uint8_t *token_cache, int c) {
   195   return (1 + token_cache[neighbors[MAX_NEIGHBORS * c + 0]] +
   196           token_cache[neighbors[MAX_NEIGHBORS * c + 1]]) >> 1;
   197 }
   199 #endif  // VP9_COMMON_VP9_SCAN_H_

mercurial