LCOV - code coverage report
Current view: top level - third_party/aom/aom_dsp - binary_codes_reader.c (source / functions) Hit Total Coverage
Test: output.info Lines: 0 60 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 8 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2017, 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             : #include "aom_dsp/binary_codes_reader.h"
      13             : 
      14             : #include "av1/common/common.h"
      15             : 
      16             : // Inverse recenters a non-negative literal v around a reference r
      17           0 : static uint16_t inv_recenter_nonneg(uint16_t r, uint16_t v) {
      18           0 :   if (v > (r << 1))
      19           0 :     return v;
      20           0 :   else if ((v & 1) == 0)
      21           0 :     return (v >> 1) + r;
      22             :   else
      23           0 :     return r - ((v + 1) >> 1);
      24             : }
      25             : 
      26             : // Inverse recenters a non-negative literal v in [0, n-1] around a
      27             : // reference r also in [0, n-1]
      28           0 : static uint16_t inv_recenter_finite_nonneg(uint16_t n, uint16_t r, uint16_t v) {
      29           0 :   if ((r << 1) <= n) {
      30           0 :     return inv_recenter_nonneg(r, v);
      31             :   } else {
      32           0 :     return n - 1 - inv_recenter_nonneg(n - 1 - r, v);
      33             :   }
      34             : }
      35             : 
      36           0 : int16_t aom_read_primitive_symmetric_(aom_reader *r,
      37             :                                       unsigned int mag_bits ACCT_STR_PARAM) {
      38           0 :   if (aom_read_bit(r, ACCT_STR_NAME)) {
      39           0 :     int s = aom_read_bit(r, ACCT_STR_NAME);
      40           0 :     int16_t x = aom_read_literal(r, mag_bits, ACCT_STR_NAME) + 1;
      41           0 :     return (s > 0 ? -x : x);
      42             :   } else {
      43           0 :     return 0;
      44             :   }
      45             : }
      46             : 
      47           0 : uint16_t aom_read_primitive_quniform_(aom_reader *r,
      48             :                                       uint16_t n ACCT_STR_PARAM) {
      49           0 :   if (n <= 1) return 0;
      50           0 :   const int l = get_msb(n - 1) + 1;
      51           0 :   const int m = (1 << l) - n;
      52           0 :   const int v = aom_read_literal(r, l - 1, ACCT_STR_NAME);
      53           0 :   return v < m ? v : (v << 1) - m + aom_read_bit(r, ACCT_STR_NAME);
      54             : }
      55             : 
      56           0 : uint16_t aom_read_primitive_refbilevel_(aom_reader *r, uint16_t n, uint16_t p,
      57             :                                         uint16_t ref ACCT_STR_PARAM) {
      58           0 :   if (n <= 1) return 0;
      59           0 :   assert(p > 0 && p <= n);
      60           0 :   assert(ref < n);
      61           0 :   int lolimit = ref - p / 2;
      62           0 :   const int hilimit = lolimit + p - 1;
      63           0 :   if (lolimit < 0) {
      64           0 :     lolimit = 0;
      65           0 :   } else if (hilimit >= n) {
      66           0 :     lolimit = n - p;
      67             :   }
      68             :   int v;
      69           0 :   if (aom_read_bit(r, ACCT_STR_NAME)) {
      70           0 :     v = aom_read_primitive_quniform(r, p, ACCT_STR_NAME) + lolimit;
      71             :   } else {
      72           0 :     v = aom_read_primitive_quniform(r, n - p, ACCT_STR_NAME);
      73           0 :     if (v >= lolimit) v += p;
      74             :   }
      75           0 :   return v;
      76             : }
      77             : 
      78             : // Decode finite subexponential code that for a symbol v in [0, n-1] with
      79             : // parameter k
      80           0 : uint16_t aom_read_primitive_subexpfin_(aom_reader *r, uint16_t n,
      81             :                                        uint16_t k ACCT_STR_PARAM) {
      82           0 :   int i = 0;
      83           0 :   int mk = 0;
      84             :   uint16_t v;
      85           0 :   while (1) {
      86           0 :     int b = (i ? k + i - 1 : k);
      87           0 :     int a = (1 << b);
      88           0 :     if (n <= mk + 3 * a) {
      89           0 :       v = aom_read_primitive_quniform(r, n - mk, ACCT_STR_NAME) + mk;
      90           0 :       break;
      91             :     } else {
      92           0 :       if (aom_read_bit(r, ACCT_STR_NAME)) {
      93           0 :         i = i + 1;
      94           0 :         mk += a;
      95             :       } else {
      96           0 :         v = aom_read_literal(r, b, ACCT_STR_NAME) + mk;
      97           0 :         break;
      98             :       }
      99             :     }
     100             :   }
     101           0 :   return v;
     102             : }
     103             : 
     104             : // Decode finite subexponential code that for a symbol v in [0, n-1] with
     105             : // parameter k
     106             : // based on a reference ref also in [0, n-1].
     107           0 : uint16_t aom_read_primitive_refsubexpfin_(aom_reader *r, uint16_t n, uint16_t k,
     108             :                                           uint16_t ref ACCT_STR_PARAM) {
     109           0 :   return inv_recenter_finite_nonneg(
     110           0 :       n, ref, aom_read_primitive_subexpfin(r, n, k, ACCT_STR_NAME));
     111             : }
     112             : 
     113             : // Decode finite subexponential code that for a symbol v in [-(n-1), n-1] with
     114             : // parameter k based on a reference ref also in [-(n-1), n-1].
     115           0 : int16_t aom_read_signed_primitive_refsubexpfin_(aom_reader *r, uint16_t n,
     116             :                                                 uint16_t k,
     117             :                                                 int16_t ref ACCT_STR_PARAM) {
     118           0 :   ref += n - 1;
     119           0 :   const uint16_t scaled_n = (n << 1) - 1;
     120           0 :   return aom_read_primitive_refsubexpfin(r, scaled_n, k, ref, ACCT_STR_NAME) -
     121           0 :          n + 1;
     122             : }

Generated by: LCOV version 1.13