tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

recenter.h (1915B)


      1 /*
      2 * Copyright (c) 2018, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 
     12 #ifndef AOM_AOM_DSP_RECENTER_H_
     13 #define AOM_AOM_DSP_RECENTER_H_
     14 
     15 #include "config/aom_config.h"
     16 
     17 #include "aom/aom_integer.h"
     18 
     19 // Inverse recenters a non-negative literal v around a reference r
     20 static inline uint16_t inv_recenter_nonneg(uint16_t r, uint16_t v) {
     21  if (v > (r << 1))
     22    return v;
     23  else if ((v & 1) == 0)
     24    return (v >> 1) + r;
     25  else
     26    return r - ((v + 1) >> 1);
     27 }
     28 
     29 // Inverse recenters a non-negative literal v in [0, n-1] around a
     30 // reference r also in [0, n-1]
     31 static inline uint16_t inv_recenter_finite_nonneg(uint16_t n, uint16_t r,
     32                                                  uint16_t v) {
     33  if ((r << 1) <= n) {
     34    return inv_recenter_nonneg(r, v);
     35  } else {
     36    return n - 1 - inv_recenter_nonneg(n - 1 - r, v);
     37  }
     38 }
     39 
     40 // Recenters a non-negative literal v around a reference r
     41 static inline uint16_t recenter_nonneg(uint16_t r, uint16_t v) {
     42  if (v > (r << 1))
     43    return v;
     44  else if (v >= r)
     45    return ((v - r) << 1);
     46  else
     47    return ((r - v) << 1) - 1;
     48 }
     49 
     50 // Recenters a non-negative literal v in [0, n-1] around a
     51 // reference r also in [0, n-1]
     52 static inline uint16_t recenter_finite_nonneg(uint16_t n, uint16_t r,
     53                                              uint16_t v) {
     54  if ((r << 1) <= n) {
     55    return recenter_nonneg(r, v);
     56  } else {
     57    return recenter_nonneg(n - 1 - r, n - 1 - v);
     58  }
     59 }
     60 
     61 #endif  // AOM_AOM_DSP_RECENTER_H_