Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: source/libvpx/vp9/decoder/vp9_dsubexp.c

Issue 168343002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: libvpx: Pull from upstream Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_detokenize.c ('k') | source/libvpx/vp9/decoder/vp9_dthread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "vp9/common/vp9_entropy.h" 11 #include "vp9/common/vp9_entropy.h"
12 12
13 #include "vp9/decoder/vp9_dsubexp.h" 13 #include "vp9/decoder/vp9_dsubexp.h"
14 14
15 static int inv_recenter_nonneg(int v, int m) { 15 static int inv_recenter_nonneg(int v, int m) {
16 if (v > 2 * m) 16 if (v > 2 * m)
17 return v; 17 return v;
18 18
19 return v % 2 ? m - (v + 1) / 2 : m + v / 2; 19 return v % 2 ? m - (v + 1) / 2 : m + v / 2;
20 } 20 }
21 21
22 static int decode_uniform(vp9_reader *r, int n) { 22 static int decode_uniform(vp9_reader *r) {
23 int v; 23 const int l = 8;
24 const int l = get_unsigned_bits(n); 24 const int m = (1 << l) - 191;
25 const int m = (1 << l) - n; 25 const int v = vp9_read_literal(r, l - 1);
26 if (!l)
27 return 0;
28
29 v = vp9_read_literal(r, l - 1);
30 return v < m ? v : (v << 1) - m + vp9_read_bit(r); 26 return v < m ? v : (v << 1) - m + vp9_read_bit(r);
31 } 27 }
32 28
33 29
34 static int merge_index(int v, int n, int modulus) { 30 static int merge_index(int v, int n, int modulus) {
35 int max1 = (n - 1 - modulus / 2) / modulus + 1; 31 int max1 = (n - 1 - modulus / 2) / modulus + 1;
36 if (v < max1) { 32 if (v < max1) {
37 v = v * modulus + modulus / 2; 33 v = v * modulus + modulus / 2;
38 } else { 34 } else {
39 int w; 35 int w;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 v = clamp(v, 0, 253); 67 v = clamp(v, 0, 253);
72 v = inv_map_table[v]; 68 v = inv_map_table[v];
73 m--; 69 m--;
74 if ((m << 1) <= MAX_PROB) { 70 if ((m << 1) <= MAX_PROB) {
75 return 1 + inv_recenter_nonneg(v + 1, m); 71 return 1 + inv_recenter_nonneg(v + 1, m);
76 } else { 72 } else {
77 return MAX_PROB - inv_recenter_nonneg(v + 1, MAX_PROB - 1 - m); 73 return MAX_PROB - inv_recenter_nonneg(v + 1, MAX_PROB - 1 - m);
78 } 74 }
79 } 75 }
80 76
81 static int decode_term_subexp(vp9_reader *r, int k, int num_syms) { 77 static int decode_term_subexp(vp9_reader *r) {
82 int i = 0, mk = 0, word; 78 if (!vp9_read_bit(r))
83 while (1) { 79 return vp9_read_literal(r, 4);
84 const int b = i ? k + i - 1 : k; 80 if (!vp9_read_bit(r))
85 const int a = 1 << b; 81 return vp9_read_literal(r, 4) + 16;
86 if (num_syms <= mk + 3 * a) { 82 if (!vp9_read_bit(r))
87 word = decode_uniform(r, num_syms - mk) + mk; 83 return vp9_read_literal(r, 5) + 32;
88 break; 84 return decode_uniform(r) + 64;
89 } else {
90 if (vp9_read_bit(r)) {
91 i++;
92 mk += a;
93 } else {
94 word = vp9_read_literal(r, b) + mk;
95 break;
96 }
97 }
98 }
99 return word;
100 } 85 }
101 86
102 void vp9_diff_update_prob(vp9_reader *r, vp9_prob* p) { 87 void vp9_diff_update_prob(vp9_reader *r, vp9_prob* p) {
103 if (vp9_read(r, DIFF_UPDATE_PROB)) { 88 if (vp9_read(r, DIFF_UPDATE_PROB)) {
104 const int delp = decode_term_subexp(r, SUBEXP_PARAM, 255); 89 const int delp = decode_term_subexp(r);
105 *p = (vp9_prob)inv_remap_prob(delp, *p); 90 *p = (vp9_prob)inv_remap_prob(delp, *p);
106 } 91 }
107 } 92 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_detokenize.c ('k') | source/libvpx/vp9/decoder/vp9_dthread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698