2 * Copyright (c) 2017, Alliance for Open Media. All rights reserved
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.
12 #include "aom_dsp/binary_codes_reader.h"
13 #include "aom_dsp/recenter.h"
15 uint16_t aom_read_primitive_quniform_(aom_reader
*r
,
16 uint16_t n ACCT_STR_PARAM
) {
18 const int l
= get_msb(n
) + 1;
19 const int m
= (1 << l
) - n
;
20 const int v
= aom_read_literal(r
, l
- 1, ACCT_STR_NAME
);
21 return v
< m
? v
: (v
<< 1) - m
+ aom_read_bit(r
, ACCT_STR_NAME
);
24 // Decode finite subexponential code that for a symbol v in [0, n-1] with
26 uint16_t aom_read_primitive_subexpfin_(aom_reader
*r
, uint16_t n
,
27 uint16_t k ACCT_STR_PARAM
) {
32 int b
= (i
? k
+ i
- 1 : k
);
35 if (n
<= mk
+ 3 * a
) {
36 return aom_read_primitive_quniform(r
, n
- mk
, ACCT_STR_NAME
) + mk
;
39 if (!aom_read_bit(r
, ACCT_STR_NAME
)) {
40 return aom_read_literal(r
, b
, ACCT_STR_NAME
) + mk
;
51 uint16_t aom_read_primitive_refsubexpfin_(aom_reader
*r
, uint16_t n
, uint16_t k
,
52 uint16_t ref ACCT_STR_PARAM
) {
53 return inv_recenter_finite_nonneg(
54 n
, ref
, aom_read_primitive_subexpfin(r
, n
, k
, ACCT_STR_NAME
));