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

Side by Side Diff: source/libvpx/vp9/common/vp9_entropymv.c

Issue 896343003: Cherry-pick potential divide-by-zero fix (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@m41-2272
Patch Set: Created 5 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
« no previous file with comments | « source/libvpx/vp9/common/vp9_entropymode.c ('k') | source/libvpx/vp9/common/vp9_prob.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_onyxc_int.h" 11 #include "vp9/common/vp9_onyxc_int.h"
12 #include "vp9/common/vp9_entropymv.h" 12 #include "vp9/common/vp9_entropymv.h"
13 13
14 #define MV_COUNT_SAT 20
15 #define MV_MAX_UPDATE_FACTOR 128
16
17 // Integer pel reference mv threshold for use of high-precision 1/8 mv 14 // Integer pel reference mv threshold for use of high-precision 1/8 mv
18 #define COMPANDED_MVREF_THRESH 8 15 #define COMPANDED_MVREF_THRESH 8
19 16
20 const vp9_tree_index vp9_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = { 17 const vp9_tree_index vp9_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = {
21 -MV_JOINT_ZERO, 2, 18 -MV_JOINT_ZERO, 2,
22 -MV_JOINT_HNZVZ, 4, 19 -MV_JOINT_HNZVZ, 4,
23 -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ 20 -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ
24 }; 21 };
25 22
26 const vp9_tree_index vp9_mv_class_tree[TREE_SIZE(MV_CLASSES)] = { 23 const vp9_tree_index vp9_mv_class_tree[TREE_SIZE(MV_CLASSES)] = {
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 if (mv_joint_vertical(j)) { 173 if (mv_joint_vertical(j)) {
177 inc_mv_component(mv->row, &counts->comps[0], 1, 1); 174 inc_mv_component(mv->row, &counts->comps[0], 1, 1);
178 } 175 }
179 176
180 if (mv_joint_horizontal(j)) { 177 if (mv_joint_horizontal(j)) {
181 inc_mv_component(mv->col, &counts->comps[1], 1, 1); 178 inc_mv_component(mv->col, &counts->comps[1], 1, 1);
182 } 179 }
183 } 180 }
184 } 181 }
185 182
186 static vp9_prob adapt_prob(vp9_prob prep, const unsigned int ct[2]) {
187 return merge_probs(prep, ct, MV_COUNT_SAT, MV_MAX_UPDATE_FACTOR);
188 }
189
190 static void adapt_probs(const vp9_tree_index *tree, const vp9_prob *pre_probs,
191 const unsigned int *counts, vp9_prob *probs) {
192 vp9_tree_merge_probs(tree, pre_probs, counts, MV_COUNT_SAT,
193 MV_MAX_UPDATE_FACTOR, probs);
194 }
195
196 void vp9_adapt_mv_probs(VP9_COMMON *cm, int allow_hp) { 183 void vp9_adapt_mv_probs(VP9_COMMON *cm, int allow_hp) {
197 int i, j; 184 int i, j;
198 185
199 nmv_context *fc = &cm->fc->nmvc; 186 nmv_context *fc = &cm->fc->nmvc;
200 const nmv_context *pre_fc = &cm->frame_contexts[cm->frame_context_idx].nmvc; 187 const nmv_context *pre_fc = &cm->frame_contexts[cm->frame_context_idx].nmvc;
201 const nmv_context_counts *counts = &cm->counts.mv; 188 const nmv_context_counts *counts = &cm->counts.mv;
202 189
203 adapt_probs(vp9_mv_joint_tree, pre_fc->joints, counts->joints, fc->joints); 190 vp9_tree_merge_probs(vp9_mv_joint_tree, pre_fc->joints, counts->joints,
191 fc->joints);
204 192
205 for (i = 0; i < 2; ++i) { 193 for (i = 0; i < 2; ++i) {
206 nmv_component *comp = &fc->comps[i]; 194 nmv_component *comp = &fc->comps[i];
207 const nmv_component *pre_comp = &pre_fc->comps[i]; 195 const nmv_component *pre_comp = &pre_fc->comps[i];
208 const nmv_component_counts *c = &counts->comps[i]; 196 const nmv_component_counts *c = &counts->comps[i];
209 197
210 comp->sign = adapt_prob(pre_comp->sign, c->sign); 198 comp->sign = mode_mv_merge_probs(pre_comp->sign, c->sign);
211 adapt_probs(vp9_mv_class_tree, pre_comp->classes, c->classes, 199 vp9_tree_merge_probs(vp9_mv_class_tree, pre_comp->classes, c->classes,
212 comp->classes); 200 comp->classes);
213 adapt_probs(vp9_mv_class0_tree, pre_comp->class0, c->class0, comp->class0); 201 vp9_tree_merge_probs(vp9_mv_class0_tree, pre_comp->class0, c->class0,
202 comp->class0);
214 203
215 for (j = 0; j < MV_OFFSET_BITS; ++j) 204 for (j = 0; j < MV_OFFSET_BITS; ++j)
216 comp->bits[j] = adapt_prob(pre_comp->bits[j], c->bits[j]); 205 comp->bits[j] = mode_mv_merge_probs(pre_comp->bits[j], c->bits[j]);
217 206
218 for (j = 0; j < CLASS0_SIZE; ++j) 207 for (j = 0; j < CLASS0_SIZE; ++j)
219 adapt_probs(vp9_mv_fp_tree, pre_comp->class0_fp[j], c->class0_fp[j], 208 vp9_tree_merge_probs(vp9_mv_fp_tree, pre_comp->class0_fp[j],
220 comp->class0_fp[j]); 209 c->class0_fp[j], comp->class0_fp[j]);
221 210
222 adapt_probs(vp9_mv_fp_tree, pre_comp->fp, c->fp, comp->fp); 211 vp9_tree_merge_probs(vp9_mv_fp_tree, pre_comp->fp, c->fp, comp->fp);
223 212
224 if (allow_hp) { 213 if (allow_hp) {
225 comp->class0_hp = adapt_prob(pre_comp->class0_hp, c->class0_hp); 214 comp->class0_hp = mode_mv_merge_probs(pre_comp->class0_hp, c->class0_hp);
226 comp->hp = adapt_prob(pre_comp->hp, c->hp); 215 comp->hp = mode_mv_merge_probs(pre_comp->hp, c->hp);
227 } 216 }
228 } 217 }
229 } 218 }
230 219
231 void vp9_init_mv_probs(VP9_COMMON *cm) { 220 void vp9_init_mv_probs(VP9_COMMON *cm) {
232 cm->fc->nmvc = default_nmv_context; 221 cm->fc->nmvc = default_nmv_context;
233 } 222 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/vp9_entropymode.c ('k') | source/libvpx/vp9/common/vp9_prob.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698