| OLD | NEW |
| 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 | |
| 12 #include "vp9/common/vp9_onyxc_int.h" | 11 #include "vp9/common/vp9_onyxc_int.h" |
| 13 #include "vp9/common/vp9_entropymv.h" | 12 #include "vp9/common/vp9_entropymv.h" |
| 14 | 13 |
| 15 #define MV_COUNT_SAT 20 | 14 #define MV_COUNT_SAT 20 |
| 16 #define MV_MAX_UPDATE_FACTOR 128 | 15 #define MV_MAX_UPDATE_FACTOR 128 |
| 17 | 16 |
| 18 /* Integer pel reference mv threshold for use of high-precision 1/8 mv */ | 17 // Integer pel reference mv threshold for use of high-precision 1/8 mv |
| 19 #define COMPANDED_MVREF_THRESH 8 | 18 #define COMPANDED_MVREF_THRESH 8 |
| 20 | 19 |
| 21 const vp9_tree_index vp9_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = { | 20 const vp9_tree_index vp9_mv_joint_tree[TREE_SIZE(MV_JOINTS)] = { |
| 22 -MV_JOINT_ZERO, 2, | 21 -MV_JOINT_ZERO, 2, |
| 23 -MV_JOINT_HNZVZ, 4, | 22 -MV_JOINT_HNZVZ, 4, |
| 24 -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ | 23 -MV_JOINT_HZVNZ, -MV_JOINT_HNZVNZ |
| 25 }; | 24 }; |
| 26 | 25 |
| 27 const vp9_tree_index vp9_mv_class_tree[TREE_SIZE(MV_CLASSES)] = { | 26 const vp9_tree_index vp9_mv_class_tree[TREE_SIZE(MV_CLASSES)] = { |
| 28 -MV_CLASS_0, 2, | 27 -MV_CLASS_0, 2, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 42 }; | 41 }; |
| 43 | 42 |
| 44 const vp9_tree_index vp9_mv_fp_tree[TREE_SIZE(MV_FP_SIZE)] = { | 43 const vp9_tree_index vp9_mv_fp_tree[TREE_SIZE(MV_FP_SIZE)] = { |
| 45 -0, 2, | 44 -0, 2, |
| 46 -1, 4, | 45 -1, 4, |
| 47 -2, -3 | 46 -2, -3 |
| 48 }; | 47 }; |
| 49 | 48 |
| 50 static const nmv_context default_nmv_context = { | 49 static const nmv_context default_nmv_context = { |
| 51 {32, 64, 96}, | 50 {32, 64, 96}, |
| 52 { // NOLINT | 51 { |
| 53 { /* vert component */ // NOLINT | 52 { // Vertical component |
| 54 128, /* sign */ | 53 128, // sign |
| 55 {224, 144, 192, 168, 192, 176, 192, 198, 198, 245}, /* class */ | 54 {224, 144, 192, 168, 192, 176, 192, 198, 198, 245}, // class |
| 56 {216}, /* class0 */ | 55 {216}, // class0 |
| 57 {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, /* bits */ | 56 {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits |
| 58 {{128, 128, 64}, {96, 112, 64}}, /* class0_fp */ | 57 {{128, 128, 64}, {96, 112, 64}}, // class0_fp |
| 59 {64, 96, 64}, /* fp */ | 58 {64, 96, 64}, // fp |
| 60 160, /* class0_hp bit */ | 59 160, // class0_hp bit |
| 61 128, /* hp */ | 60 128, // hp |
| 62 }, | 61 }, |
| 63 { /* hor component */ // NOLINT | 62 { // Horizontal component |
| 64 128, /* sign */ | 63 128, // sign |
| 65 {216, 128, 176, 160, 176, 176, 192, 198, 198, 208}, /* class */ | 64 {216, 128, 176, 160, 176, 176, 192, 198, 198, 208}, // class |
| 66 {208}, /* class0 */ | 65 {208}, // class0 |
| 67 {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, /* bits */ | 66 {136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, // bits |
| 68 {{128, 128, 64}, {96, 112, 64}}, /* class0_fp */ | 67 {{128, 128, 64}, {96, 112, 64}}, // class0_fp |
| 69 {64, 96, 64}, /* fp */ | 68 {64, 96, 64}, // fp |
| 70 160, /* class0_hp bit */ | 69 160, // class0_hp bit |
| 71 128, /* hp */ | 70 128, // hp |
| 72 } | 71 } |
| 73 }, | 72 }, |
| 74 }; | 73 }; |
| 75 | 74 |
| 76 #define mv_class_base(c) ((c) ? (CLASS0_SIZE << (c + 2)) : 0) | |
| 77 | |
| 78 static const uint8_t log_in_base_2[] = { | 75 static const uint8_t log_in_base_2[] = { |
| 79 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, | 76 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, |
| 80 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, | 77 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, |
| 81 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, | 78 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, |
| 82 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, | 79 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, |
| 83 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, | 80 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, |
| 84 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 81 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 85 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 82 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 86 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 83 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 87 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, | 84 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 114 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 111 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 115 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 112 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 116 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 113 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 117 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 114 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 118 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 115 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 119 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 116 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 120 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 117 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
| 121 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 | 118 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 |
| 122 }; | 119 }; |
| 123 | 120 |
| 121 static INLINE int mv_class_base(MV_CLASS_TYPE c) { |
| 122 return c ? CLASS0_SIZE << (c + 2) : 0; |
| 123 } |
| 124 |
| 124 MV_CLASS_TYPE vp9_get_mv_class(int z, int *offset) { | 125 MV_CLASS_TYPE vp9_get_mv_class(int z, int *offset) { |
| 125 MV_CLASS_TYPE c = MV_CLASS_0; | 126 const MV_CLASS_TYPE c = (z >= CLASS0_SIZE * 4096) ? |
| 126 if (z >= CLASS0_SIZE * 4096) | 127 MV_CLASS_10 : (MV_CLASS_TYPE)log_in_base_2[z >> 3]; |
| 127 c = MV_CLASS_10; | |
| 128 else | |
| 129 c = log_in_base_2[z >> 3]; | |
| 130 | |
| 131 if (offset) | 128 if (offset) |
| 132 *offset = z - mv_class_base(c); | 129 *offset = z - mv_class_base(c); |
| 133 return c; | 130 return c; |
| 134 } | 131 } |
| 135 | 132 |
| 136 int vp9_use_mv_hp(const MV *ref) { | 133 int vp9_use_mv_hp(const MV *ref) { |
| 137 return (abs(ref->row) >> 3) < COMPANDED_MVREF_THRESH && | 134 return (abs(ref->row) >> 3) < COMPANDED_MVREF_THRESH && |
| 138 (abs(ref->col) >> 3) < COMPANDED_MVREF_THRESH; | 135 (abs(ref->col) >> 3) < COMPANDED_MVREF_THRESH; |
| 139 } | 136 } |
| 140 | 137 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 if (allow_hp) { | 224 if (allow_hp) { |
| 228 comp->class0_hp = adapt_prob(pre_comp->class0_hp, c->class0_hp); | 225 comp->class0_hp = adapt_prob(pre_comp->class0_hp, c->class0_hp); |
| 229 comp->hp = adapt_prob(pre_comp->hp, c->hp); | 226 comp->hp = adapt_prob(pre_comp->hp, c->hp); |
| 230 } | 227 } |
| 231 } | 228 } |
| 232 } | 229 } |
| 233 | 230 |
| 234 void vp9_init_mv_probs(VP9_COMMON *cm) { | 231 void vp9_init_mv_probs(VP9_COMMON *cm) { |
| 235 cm->fc.nmvc = default_nmv_context; | 232 cm->fc.nmvc = default_nmv_context; |
| 236 } | 233 } |
| OLD | NEW |