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

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

Issue 394353005: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 5 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
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
(...skipping 10 matching lines...) Expand all
21 #define ONE_CONTEXT_NODE 2 21 #define ONE_CONTEXT_NODE 2
22 #define LOW_VAL_CONTEXT_NODE 0 22 #define LOW_VAL_CONTEXT_NODE 0
23 #define TWO_CONTEXT_NODE 1 23 #define TWO_CONTEXT_NODE 1
24 #define THREE_CONTEXT_NODE 2 24 #define THREE_CONTEXT_NODE 2
25 #define HIGH_LOW_CONTEXT_NODE 3 25 #define HIGH_LOW_CONTEXT_NODE 3
26 #define CAT_ONE_CONTEXT_NODE 4 26 #define CAT_ONE_CONTEXT_NODE 4
27 #define CAT_THREEFOUR_CONTEXT_NODE 5 27 #define CAT_THREEFOUR_CONTEXT_NODE 5
28 #define CAT_THREE_CONTEXT_NODE 6 28 #define CAT_THREE_CONTEXT_NODE 6
29 #define CAT_FIVE_CONTEXT_NODE 7 29 #define CAT_FIVE_CONTEXT_NODE 7
30 30
31 #define CAT1_MIN_VAL 5
32 #define CAT2_MIN_VAL 7
33 #define CAT3_MIN_VAL 11
34 #define CAT4_MIN_VAL 19
35 #define CAT5_MIN_VAL 35
36 #define CAT6_MIN_VAL 67
37 #define CAT1_PROB0 159
38 #define CAT2_PROB0 145
39 #define CAT2_PROB1 165
40
41 #define CAT3_PROB0 140
42 #define CAT3_PROB1 148
43 #define CAT3_PROB2 173
44
45 #define CAT4_PROB0 135
46 #define CAT4_PROB1 140
47 #define CAT4_PROB2 155
48 #define CAT4_PROB3 176
49
50 #define CAT5_PROB0 130
51 #define CAT5_PROB1 134
52 #define CAT5_PROB2 141
53 #define CAT5_PROB3 157
54 #define CAT5_PROB4 180
55
56 static const vp9_prob cat6_prob[15] = {
57 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0
58 };
59
60 #define INCREMENT_COUNT(token) \ 31 #define INCREMENT_COUNT(token) \
61 do { \ 32 do { \
62 if (!cm->frame_parallel_decoding_mode) \ 33 if (!cm->frame_parallel_decoding_mode) \
63 ++coef_counts[band][ctx][token]; \ 34 ++coef_counts[band][ctx][token]; \
64 } while (0) 35 } while (0)
65 36
66 #define WRITE_COEF_CONTINUE(val, token) \ 37 #define WRITE_COEF_CONTINUE(val, token) \
67 { \ 38 { \
68 v = (val * dqv) >> dq_shift; \ 39 v = (val * dqv) >> dq_shift; \
69 dqcoeff[scan[c]] = vp9_read_bit(r) ? -v : v; \ 40 dqcoeff[scan[c]] = vp9_read_bit(r) ? -v : v; \
(...skipping 19 matching lines...) Expand all
89 const int ref = is_inter_block(&xd->mi[0]->mbmi); 60 const int ref = is_inter_block(&xd->mi[0]->mbmi);
90 int band, c = 0; 61 int band, c = 0;
91 const vp9_prob (*coef_probs)[COEFF_CONTEXTS][UNCONSTRAINED_NODES] = 62 const vp9_prob (*coef_probs)[COEFF_CONTEXTS][UNCONSTRAINED_NODES] =
92 fc->coef_probs[tx_size][type][ref]; 63 fc->coef_probs[tx_size][type][ref];
93 const vp9_prob *prob; 64 const vp9_prob *prob;
94 unsigned int (*coef_counts)[COEFF_CONTEXTS][UNCONSTRAINED_NODES + 1] = 65 unsigned int (*coef_counts)[COEFF_CONTEXTS][UNCONSTRAINED_NODES + 1] =
95 counts->coef[tx_size][type][ref]; 66 counts->coef[tx_size][type][ref];
96 unsigned int (*eob_branch_count)[COEFF_CONTEXTS] = 67 unsigned int (*eob_branch_count)[COEFF_CONTEXTS] =
97 counts->eob_branch[tx_size][type][ref]; 68 counts->eob_branch[tx_size][type][ref];
98 uint8_t token_cache[32 * 32]; 69 uint8_t token_cache[32 * 32];
99 const uint8_t *cat6;
100 const uint8_t *band_translate = get_band_translate(tx_size); 70 const uint8_t *band_translate = get_band_translate(tx_size);
101 const int dq_shift = (tx_size == TX_32X32); 71 const int dq_shift = (tx_size == TX_32X32);
102 int v; 72 int v;
103 int16_t dqv = dq[0]; 73 int16_t dqv = dq[0];
104 74
105 while (c < max_eob) { 75 while (c < max_eob) {
106 int val; 76 int val;
107 band = *band_translate++; 77 band = *band_translate++;
108 prob = coef_probs[band][ctx]; 78 prob = coef_probs[band][ctx];
109 if (!cm->frame_parallel_decoding_mode) 79 if (!cm->frame_parallel_decoding_mode)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 111 }
142 if (!vp9_read(r, prob[THREE_CONTEXT_NODE])) { 112 if (!vp9_read(r, prob[THREE_CONTEXT_NODE])) {
143 WRITE_COEF_CONTINUE(3, THREE_TOKEN); 113 WRITE_COEF_CONTINUE(3, THREE_TOKEN);
144 } 114 }
145 WRITE_COEF_CONTINUE(4, FOUR_TOKEN); 115 WRITE_COEF_CONTINUE(4, FOUR_TOKEN);
146 } 116 }
147 117
148 if (!vp9_read(r, prob[HIGH_LOW_CONTEXT_NODE])) { 118 if (!vp9_read(r, prob[HIGH_LOW_CONTEXT_NODE])) {
149 if (!vp9_read(r, prob[CAT_ONE_CONTEXT_NODE])) { 119 if (!vp9_read(r, prob[CAT_ONE_CONTEXT_NODE])) {
150 val = CAT1_MIN_VAL; 120 val = CAT1_MIN_VAL;
151 ADJUST_COEF(CAT1_PROB0, 0); 121 ADJUST_COEF(vp9_cat1_prob[0], 0);
152 WRITE_COEF_CONTINUE(val, CATEGORY1_TOKEN); 122 WRITE_COEF_CONTINUE(val, CATEGORY1_TOKEN);
153 } 123 }
154 val = CAT2_MIN_VAL; 124 val = CAT2_MIN_VAL;
155 ADJUST_COEF(CAT2_PROB1, 1); 125 ADJUST_COEF(vp9_cat2_prob[0], 1);
156 ADJUST_COEF(CAT2_PROB0, 0); 126 ADJUST_COEF(vp9_cat2_prob[1], 0);
157 WRITE_COEF_CONTINUE(val, CATEGORY2_TOKEN); 127 WRITE_COEF_CONTINUE(val, CATEGORY2_TOKEN);
158 } 128 }
159 129
160 if (!vp9_read(r, prob[CAT_THREEFOUR_CONTEXT_NODE])) { 130 if (!vp9_read(r, prob[CAT_THREEFOUR_CONTEXT_NODE])) {
161 if (!vp9_read(r, prob[CAT_THREE_CONTEXT_NODE])) { 131 if (!vp9_read(r, prob[CAT_THREE_CONTEXT_NODE])) {
162 val = CAT3_MIN_VAL; 132 val = CAT3_MIN_VAL;
163 ADJUST_COEF(CAT3_PROB2, 2); 133 ADJUST_COEF(vp9_cat3_prob[0], 2);
164 ADJUST_COEF(CAT3_PROB1, 1); 134 ADJUST_COEF(vp9_cat3_prob[1], 1);
165 ADJUST_COEF(CAT3_PROB0, 0); 135 ADJUST_COEF(vp9_cat3_prob[2], 0);
166 WRITE_COEF_CONTINUE(val, CATEGORY3_TOKEN); 136 WRITE_COEF_CONTINUE(val, CATEGORY3_TOKEN);
167 } 137 }
168 val = CAT4_MIN_VAL; 138 val = CAT4_MIN_VAL;
169 ADJUST_COEF(CAT4_PROB3, 3); 139 ADJUST_COEF(vp9_cat4_prob[0], 3);
170 ADJUST_COEF(CAT4_PROB2, 2); 140 ADJUST_COEF(vp9_cat4_prob[1], 2);
171 ADJUST_COEF(CAT4_PROB1, 1); 141 ADJUST_COEF(vp9_cat4_prob[2], 1);
172 ADJUST_COEF(CAT4_PROB0, 0); 142 ADJUST_COEF(vp9_cat4_prob[3], 0);
173 WRITE_COEF_CONTINUE(val, CATEGORY4_TOKEN); 143 WRITE_COEF_CONTINUE(val, CATEGORY4_TOKEN);
174 } 144 }
175 145
176 if (!vp9_read(r, prob[CAT_FIVE_CONTEXT_NODE])) { 146 if (!vp9_read(r, prob[CAT_FIVE_CONTEXT_NODE])) {
177 val = CAT5_MIN_VAL; 147 val = CAT5_MIN_VAL;
178 ADJUST_COEF(CAT5_PROB4, 4); 148 ADJUST_COEF(vp9_cat5_prob[0], 4);
179 ADJUST_COEF(CAT5_PROB3, 3); 149 ADJUST_COEF(vp9_cat5_prob[1], 3);
180 ADJUST_COEF(CAT5_PROB2, 2); 150 ADJUST_COEF(vp9_cat5_prob[2], 2);
181 ADJUST_COEF(CAT5_PROB1, 1); 151 ADJUST_COEF(vp9_cat5_prob[3], 1);
182 ADJUST_COEF(CAT5_PROB0, 0); 152 ADJUST_COEF(vp9_cat5_prob[4], 0);
183 WRITE_COEF_CONTINUE(val, CATEGORY5_TOKEN); 153 WRITE_COEF_CONTINUE(val, CATEGORY5_TOKEN);
184 } 154 }
185 val = 0; 155 val = 0;
186 cat6 = cat6_prob; 156 val = (val << 1) | vp9_read(r, vp9_cat6_prob[0]);
187 while (*cat6) 157 val = (val << 1) | vp9_read(r, vp9_cat6_prob[1]);
188 val = (val << 1) | vp9_read(r, *cat6++); 158 val = (val << 1) | vp9_read(r, vp9_cat6_prob[2]);
159 val = (val << 1) | vp9_read(r, vp9_cat6_prob[3]);
160 val = (val << 1) | vp9_read(r, vp9_cat6_prob[4]);
161 val = (val << 1) | vp9_read(r, vp9_cat6_prob[5]);
162 val = (val << 1) | vp9_read(r, vp9_cat6_prob[6]);
163 val = (val << 1) | vp9_read(r, vp9_cat6_prob[7]);
164 val = (val << 1) | vp9_read(r, vp9_cat6_prob[8]);
165 val = (val << 1) | vp9_read(r, vp9_cat6_prob[9]);
166 val = (val << 1) | vp9_read(r, vp9_cat6_prob[10]);
167 val = (val << 1) | vp9_read(r, vp9_cat6_prob[11]);
168 val = (val << 1) | vp9_read(r, vp9_cat6_prob[12]);
169 val = (val << 1) | vp9_read(r, vp9_cat6_prob[13]);
189 val += CAT6_MIN_VAL; 170 val += CAT6_MIN_VAL;
190 171
191 WRITE_COEF_CONTINUE(val, CATEGORY6_TOKEN); 172 WRITE_COEF_CONTINUE(val, CATEGORY6_TOKEN);
192 } 173 }
193 174
194 return c; 175 return c;
195 } 176 }
196 177
197 int vp9_decode_block_tokens(VP9_COMMON *cm, MACROBLOCKD *xd, 178 int vp9_decode_block_tokens(VP9_COMMON *cm, MACROBLOCKD *xd,
198 int plane, int block, BLOCK_SIZE plane_bsize, 179 int plane, int block, BLOCK_SIZE plane_bsize,
199 int x, int y, TX_SIZE tx_size, vp9_reader *r) { 180 int x, int y, TX_SIZE tx_size, vp9_reader *r) {
200 struct macroblockd_plane *const pd = &xd->plane[plane]; 181 struct macroblockd_plane *const pd = &xd->plane[plane];
201 const int ctx = get_entropy_context(tx_size, pd->above_context + x, 182 const int ctx = get_entropy_context(tx_size, pd->above_context + x,
202 pd->left_context + y); 183 pd->left_context + y);
203 const scan_order *so = get_scan(xd, tx_size, pd->plane_type, block); 184 const scan_order *so = get_scan(xd, tx_size, pd->plane_type, block);
204 const int eob = decode_coefs(cm, xd, pd->plane_type, 185 const int eob = decode_coefs(cm, xd, pd->plane_type,
205 BLOCK_OFFSET(pd->dqcoeff, block), tx_size, 186 BLOCK_OFFSET(pd->dqcoeff, block), tx_size,
206 pd->dequant, ctx, so->scan, so->neighbors, r); 187 pd->dequant, ctx, so->scan, so->neighbors, r);
207 vp9_set_contexts(xd, pd, plane_bsize, tx_size, eob > 0, x, y); 188 vp9_set_contexts(xd, pd, plane_bsize, tx_size, eob > 0, x, y);
208 return eob; 189 return eob;
209 } 190 }
210 191
211 192
OLDNEW
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_decoder.c ('k') | source/libvpx/vp9/encoder/arm/neon/vp9_sad_neon.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698