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

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

Issue 11974002: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 11 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/common/vp9_entropymv.h ('k') | source/libvpx/vp9/common/vp9_extend.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
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ) { 206 if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ) {
207 increment_nmv_component_count(mv->row, &mvctx->comps[0], 1, usehp); 207 increment_nmv_component_count(mv->row, &mvctx->comps[0], 1, usehp);
208 } 208 }
209 if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ) { 209 if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ) {
210 increment_nmv_component_count(mv->col, &mvctx->comps[1], 1, usehp); 210 increment_nmv_component_count(mv->col, &mvctx->comps[1], 1, usehp);
211 } 211 }
212 } 212 }
213 213
214 static void adapt_prob(vp9_prob *dest, vp9_prob prep, vp9_prob newp, 214 static void adapt_prob(vp9_prob *dest, vp9_prob prep, vp9_prob newp,
215 unsigned int ct[2]) { 215 unsigned int ct[2]) {
216 int factor;
217 int prob;
218 int count = ct[0] + ct[1]; 216 int count = ct[0] + ct[1];
217
219 if (count) { 218 if (count) {
220 count = count > MV_COUNT_SAT ? MV_COUNT_SAT : count; 219 count = count > MV_COUNT_SAT ? MV_COUNT_SAT : count;
221 factor = (MV_MAX_UPDATE_FACTOR * count / MV_COUNT_SAT); 220 *dest = weighted_prob(prep, newp,
222 prob = ((int)prep * (256 - factor) + (int)(newp) * factor + 128) >> 8; 221 MV_MAX_UPDATE_FACTOR * count / MV_COUNT_SAT);
223 prob += !prob;
224 prob = (prob > 255 ? 255 : prob);
225 *dest = prob;
226 } 222 }
227 } 223 }
228 224
229 void vp9_counts_process(nmv_context_counts *NMVcount, int usehp) { 225 void vp9_counts_process(nmv_context_counts *NMVcount, int usehp) {
230 counts_to_context(&NMVcount->comps[0], usehp); 226 counts_to_context(&NMVcount->comps[0], usehp);
231 counts_to_context(&NMVcount->comps[1], usehp); 227 counts_to_context(&NMVcount->comps[1], usehp);
232 } 228 }
233 229
234 void vp9_counts_to_nmv_context( 230 void vp9_counts_to_nmv_context(
235 nmv_context_counts *NMVcount, 231 nmv_context_counts *NMVcount,
236 nmv_context *prob, 232 nmv_context *prob,
237 int usehp, 233 int usehp,
238 unsigned int (*branch_ct_joint)[2], 234 unsigned int (*branch_ct_joint)[2],
239 unsigned int (*branch_ct_sign)[2], 235 unsigned int (*branch_ct_sign)[2],
240 unsigned int (*branch_ct_classes)[MV_CLASSES - 1][2], 236 unsigned int (*branch_ct_classes)[MV_CLASSES - 1][2],
241 unsigned int (*branch_ct_class0)[CLASS0_SIZE - 1][2], 237 unsigned int (*branch_ct_class0)[CLASS0_SIZE - 1][2],
242 unsigned int (*branch_ct_bits)[MV_OFFSET_BITS][2], 238 unsigned int (*branch_ct_bits)[MV_OFFSET_BITS][2],
243 unsigned int (*branch_ct_class0_fp)[CLASS0_SIZE][4 - 1][2], 239 unsigned int (*branch_ct_class0_fp)[CLASS0_SIZE][4 - 1][2],
244 unsigned int (*branch_ct_fp)[4 - 1][2], 240 unsigned int (*branch_ct_fp)[4 - 1][2],
245 unsigned int (*branch_ct_class0_hp)[2], 241 unsigned int (*branch_ct_class0_hp)[2],
246 unsigned int (*branch_ct_hp)[2]) { 242 unsigned int (*branch_ct_hp)[2]) {
247 int i, j, k; 243 int i, j, k;
248 vp9_counts_process(NMVcount, usehp); 244 vp9_counts_process(NMVcount, usehp);
249 vp9_tree_probs_from_distribution(MV_JOINTS, 245 vp9_tree_probs_from_distribution(MV_JOINTS,
250 vp9_mv_joint_encodings, 246 vp9_mv_joint_encodings,
251 vp9_mv_joint_tree, 247 vp9_mv_joint_tree,
252 prob->joints, 248 prob->joints,
253 branch_ct_joint, 249 branch_ct_joint,
254 NMVcount->joints, 250 NMVcount->joints);
255 256, 1);
256 for (i = 0; i < 2; ++i) { 251 for (i = 0; i < 2; ++i) {
257 prob->comps[i].sign = 252 prob->comps[i].sign = get_binary_prob(NMVcount->comps[i].sign[0],
258 vp9_bin_prob_from_distribution(NMVcount->comps[i].sign); 253 NMVcount->comps[i].sign[1]);
259 branch_ct_sign[i][0] = NMVcount->comps[i].sign[0]; 254 branch_ct_sign[i][0] = NMVcount->comps[i].sign[0];
260 branch_ct_sign[i][1] = NMVcount->comps[i].sign[1]; 255 branch_ct_sign[i][1] = NMVcount->comps[i].sign[1];
261 vp9_tree_probs_from_distribution(MV_CLASSES, 256 vp9_tree_probs_from_distribution(MV_CLASSES,
262 vp9_mv_class_encodings, 257 vp9_mv_class_encodings,
263 vp9_mv_class_tree, 258 vp9_mv_class_tree,
264 prob->comps[i].classes, 259 prob->comps[i].classes,
265 branch_ct_classes[i], 260 branch_ct_classes[i],
266 NMVcount->comps[i].classes, 261 NMVcount->comps[i].classes);
267 256, 1);
268 vp9_tree_probs_from_distribution(CLASS0_SIZE, 262 vp9_tree_probs_from_distribution(CLASS0_SIZE,
269 vp9_mv_class0_encodings, 263 vp9_mv_class0_encodings,
270 vp9_mv_class0_tree, 264 vp9_mv_class0_tree,
271 prob->comps[i].class0, 265 prob->comps[i].class0,
272 branch_ct_class0[i], 266 branch_ct_class0[i],
273 NMVcount->comps[i].class0, 267 NMVcount->comps[i].class0);
274 256, 1);
275 for (j = 0; j < MV_OFFSET_BITS; ++j) { 268 for (j = 0; j < MV_OFFSET_BITS; ++j) {
276 prob->comps[i].bits[j] = vp9_bin_prob_from_distribution( 269 prob->comps[i].bits[j] = get_binary_prob(NMVcount->comps[i].bits[j][0],
277 NMVcount->comps[i].bits[j]); 270 NMVcount->comps[i].bits[j][1]);
278 branch_ct_bits[i][j][0] = NMVcount->comps[i].bits[j][0]; 271 branch_ct_bits[i][j][0] = NMVcount->comps[i].bits[j][0];
279 branch_ct_bits[i][j][1] = NMVcount->comps[i].bits[j][1]; 272 branch_ct_bits[i][j][1] = NMVcount->comps[i].bits[j][1];
280 } 273 }
281 } 274 }
282 for (i = 0; i < 2; ++i) { 275 for (i = 0; i < 2; ++i) {
283 for (k = 0; k < CLASS0_SIZE; ++k) { 276 for (k = 0; k < CLASS0_SIZE; ++k) {
284 vp9_tree_probs_from_distribution(4, 277 vp9_tree_probs_from_distribution(4,
285 vp9_mv_fp_encodings, 278 vp9_mv_fp_encodings,
286 vp9_mv_fp_tree, 279 vp9_mv_fp_tree,
287 prob->comps[i].class0_fp[k], 280 prob->comps[i].class0_fp[k],
288 branch_ct_class0_fp[i][k], 281 branch_ct_class0_fp[i][k],
289 NMVcount->comps[i].class0_fp[k], 282 NMVcount->comps[i].class0_fp[k]);
290 256, 1);
291 } 283 }
292 vp9_tree_probs_from_distribution(4, 284 vp9_tree_probs_from_distribution(4,
293 vp9_mv_fp_encodings, 285 vp9_mv_fp_encodings,
294 vp9_mv_fp_tree, 286 vp9_mv_fp_tree,
295 prob->comps[i].fp, 287 prob->comps[i].fp,
296 branch_ct_fp[i], 288 branch_ct_fp[i],
297 NMVcount->comps[i].fp, 289 NMVcount->comps[i].fp);
298 256, 1);
299 } 290 }
300 if (usehp) { 291 if (usehp) {
301 for (i = 0; i < 2; ++i) { 292 for (i = 0; i < 2; ++i) {
302 prob->comps[i].class0_hp = vp9_bin_prob_from_distribution( 293 prob->comps[i].class0_hp =
303 NMVcount->comps[i].class0_hp); 294 get_binary_prob(NMVcount->comps[i].class0_hp[0],
295 NMVcount->comps[i].class0_hp[1]);
304 branch_ct_class0_hp[i][0] = NMVcount->comps[i].class0_hp[0]; 296 branch_ct_class0_hp[i][0] = NMVcount->comps[i].class0_hp[0];
305 branch_ct_class0_hp[i][1] = NMVcount->comps[i].class0_hp[1]; 297 branch_ct_class0_hp[i][1] = NMVcount->comps[i].class0_hp[1];
306 298
307 prob->comps[i].hp = 299 prob->comps[i].hp = get_binary_prob(NMVcount->comps[i].hp[0],
308 vp9_bin_prob_from_distribution(NMVcount->comps[i].hp); 300 NMVcount->comps[i].hp[1]);
309 branch_ct_hp[i][0] = NMVcount->comps[i].hp[0]; 301 branch_ct_hp[i][0] = NMVcount->comps[i].hp[0];
310 branch_ct_hp[i][1] = NMVcount->comps[i].hp[1]; 302 branch_ct_hp[i][1] = NMVcount->comps[i].hp[1];
311 } 303 }
312 } 304 }
313 } 305 }
314 306
315 void vp9_adapt_nmv_probs(VP9_COMMON *cm, int usehp) { 307 void vp9_adapt_nmv_probs(VP9_COMMON *cm, int usehp) {
316 int i, j, k; 308 int i, j, k;
317 nmv_context prob; 309 nmv_context prob;
318 unsigned int branch_ct_joint[MV_JOINTS - 1][2]; 310 unsigned int branch_ct_joint[MV_JOINTS - 1][2];
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 void vp9_entropy_mv_init() { 452 void vp9_entropy_mv_init() {
461 vp9_tokens_from_tree(vp9_mv_joint_encodings, vp9_mv_joint_tree); 453 vp9_tokens_from_tree(vp9_mv_joint_encodings, vp9_mv_joint_tree);
462 vp9_tokens_from_tree(vp9_mv_class_encodings, vp9_mv_class_tree); 454 vp9_tokens_from_tree(vp9_mv_class_encodings, vp9_mv_class_tree);
463 vp9_tokens_from_tree(vp9_mv_class0_encodings, vp9_mv_class0_tree); 455 vp9_tokens_from_tree(vp9_mv_class0_encodings, vp9_mv_class0_tree);
464 vp9_tokens_from_tree(vp9_mv_fp_encodings, vp9_mv_fp_tree); 456 vp9_tokens_from_tree(vp9_mv_fp_encodings, vp9_mv_fp_tree);
465 } 457 }
466 458
467 void vp9_init_mv_probs(VP9_COMMON *cm) { 459 void vp9_init_mv_probs(VP9_COMMON *cm) {
468 vpx_memcpy(&cm->fc.nmvc, &vp9_default_nmv_context, sizeof(nmv_context)); 460 vpx_memcpy(&cm->fc.nmvc, &vp9_default_nmv_context, sizeof(nmv_context));
469 } 461 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/vp9_entropymv.h ('k') | source/libvpx/vp9/common/vp9_extend.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698