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

Side by Side Diff: source/libvpx/vp8/common/findnearmv.h

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 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/vp8/common/extend.c ('k') | source/libvpx/vp8/common/findnearmv.c » ('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 11
12 #ifndef __INC_FINDNEARMV_H 12 #ifndef __INC_FINDNEARMV_H
13 #define __INC_FINDNEARMV_H 13 #define __INC_FINDNEARMV_H
14 14
15 #include "mv.h" 15 #include "mv.h"
16 #include "blockd.h" 16 #include "blockd.h"
17 #include "modecont.h" 17 #include "modecont.h"
18 #include "treecoder.h" 18 #include "treecoder.h"
19 19
20 typedef union
21 {
22 unsigned int as_int;
23 MV as_mv;
24 } int_mv; /* facilitates rapid equality tests */
25 20
26 static void mv_bias(int refmb_ref_frame_sign_bias, int refframe, int_mv *mvp, co nst int *ref_frame_sign_bias) 21 static void mv_bias(int refmb_ref_frame_sign_bias, int refframe, int_mv *mvp, co nst int *ref_frame_sign_bias)
27 { 22 {
28 MV xmv; 23 MV xmv;
29 xmv = mvp->as_mv; 24 xmv = mvp->as_mv;
30 25
31 if (refmb_ref_frame_sign_bias != ref_frame_sign_bias[refframe]) 26 if (refmb_ref_frame_sign_bias != ref_frame_sign_bias[refframe])
32 { 27 {
33 xmv.row *= -1; 28 xmv.row *= -1;
34 xmv.col *= -1; 29 xmv.col *= -1;
35 } 30 }
36 31
37 mvp->as_mv = xmv; 32 mvp->as_mv = xmv;
38 } 33 }
39 34
40 #define LEFT_TOP_MARGIN (16 << 3) 35 #define LEFT_TOP_MARGIN (16 << 3)
41 #define RIGHT_BOTTOM_MARGIN (16 << 3) 36 #define RIGHT_BOTTOM_MARGIN (16 << 3)
42 static void vp8_clamp_mv(MV *mv, const MACROBLOCKD *xd) 37 static void vp8_clamp_mv2(int_mv *mv, const MACROBLOCKD *xd)
43 { 38 {
44 if (mv->col < (xd->mb_to_left_edge - LEFT_TOP_MARGIN)) 39 if (mv->as_mv.col < (xd->mb_to_left_edge - LEFT_TOP_MARGIN))
45 mv->col = xd->mb_to_left_edge - LEFT_TOP_MARGIN; 40 mv->as_mv.col = xd->mb_to_left_edge - LEFT_TOP_MARGIN;
46 else if (mv->col > xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN) 41 else if (mv->as_mv.col > xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN)
47 mv->col = xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN; 42 mv->as_mv.col = xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN;
48 43
49 if (mv->row < (xd->mb_to_top_edge - LEFT_TOP_MARGIN)) 44 if (mv->as_mv.row < (xd->mb_to_top_edge - LEFT_TOP_MARGIN))
50 mv->row = xd->mb_to_top_edge - LEFT_TOP_MARGIN; 45 mv->as_mv.row = xd->mb_to_top_edge - LEFT_TOP_MARGIN;
51 else if (mv->row > xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN) 46 else if (mv->as_mv.row > xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN)
52 mv->row = xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN; 47 mv->as_mv.row = xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN;
48 }
49
50 static void vp8_clamp_mv(int_mv *mv, int mb_to_left_edge, int mb_to_right_edge,
51 int mb_to_top_edge, int mb_to_bottom_edge)
52 {
53 mv->as_mv.col = (mv->as_mv.col < mb_to_left_edge) ?
54 mb_to_left_edge : mv->as_mv.col;
55 mv->as_mv.col = (mv->as_mv.col > mb_to_right_edge) ?
56 mb_to_right_edge : mv->as_mv.col;
57 mv->as_mv.row = (mv->as_mv.row < mb_to_top_edge) ?
58 mb_to_top_edge : mv->as_mv.row;
59 mv->as_mv.row = (mv->as_mv.row > mb_to_bottom_edge) ?
60 mb_to_bottom_edge : mv->as_mv.row;
61 }
62 static unsigned int vp8_check_mv_bounds(int_mv *mv, int mb_to_left_edge,
63 int mb_to_right_edge, int mb_to_top_edge,
64 int mb_to_bottom_edge)
65 {
66 unsigned int need_to_clamp;
67 need_to_clamp = (mv->as_mv.col < mb_to_left_edge) ? 1 : 0;
68 need_to_clamp |= (mv->as_mv.col > mb_to_right_edge) ? 1 : 0;
69 need_to_clamp |= (mv->as_mv.row < mb_to_top_edge) ? 1 : 0;
70 need_to_clamp |= (mv->as_mv.row > mb_to_bottom_edge) ? 1 : 0;
71 return need_to_clamp;
53 } 72 }
54 73
55 void vp8_find_near_mvs 74 void vp8_find_near_mvs
56 ( 75 (
57 MACROBLOCKD *xd, 76 MACROBLOCKD *xd,
58 const MODE_INFO *here, 77 const MODE_INFO *here,
59 MV *nearest, MV *nearby, MV *best, 78 int_mv *nearest, int_mv *nearby, int_mv *best,
60 int near_mv_ref_cts[4], 79 int near_mv_ref_cts[4],
61 int refframe, 80 int refframe,
62 int *ref_frame_sign_bias 81 int *ref_frame_sign_bias
63 ); 82 );
64 83
65 vp8_prob *vp8_mv_ref_probs( 84 vp8_prob *vp8_mv_ref_probs(
66 vp8_prob p[VP8_MVREFS-1], const int near_mv_ref_ct[4] 85 vp8_prob p[VP8_MVREFS-1], const int near_mv_ref_ct[4]
67 ); 86 );
68 87
69 const B_MODE_INFO *vp8_left_bmi(const MODE_INFO *cur_mb, int b);
70
71 const B_MODE_INFO *vp8_above_bmi(const MODE_INFO *cur_mb, int b, int mi_stride);
72
73 extern const unsigned char vp8_mbsplit_offset[4][16]; 88 extern const unsigned char vp8_mbsplit_offset[4][16];
74 89
90
91 static int left_block_mv(const MODE_INFO *cur_mb, int b)
92 {
93 if (!(b & 3))
94 {
95 /* On L edge, get from MB to left of us */
96 --cur_mb;
97
98 if(cur_mb->mbmi.mode != SPLITMV)
99 return cur_mb->mbmi.mv.as_int;
100 b += 4;
101 }
102
103 return (cur_mb->bmi + b - 1)->mv.as_int;
104 }
105
106 static int above_block_mv(const MODE_INFO *cur_mb, int b, int mi_stride)
107 {
108 if (!(b >> 2))
109 {
110 /* On top edge, get from MB above us */
111 cur_mb -= mi_stride;
112
113 if(cur_mb->mbmi.mode != SPLITMV)
114 return cur_mb->mbmi.mv.as_int;
115 b += 16;
116 }
117
118 return (cur_mb->bmi + b - 4)->mv.as_int;
119 }
120 static B_PREDICTION_MODE left_block_mode(const MODE_INFO *cur_mb, int b)
121 {
122 if (!(b & 3))
123 {
124 /* On L edge, get from MB to left of us */
125 --cur_mb;
126 switch (cur_mb->mbmi.mode)
127 {
128 case B_PRED:
129 return (cur_mb->bmi + b + 3)->as_mode;
130 case DC_PRED:
131 return B_DC_PRED;
132 case V_PRED:
133 return B_VE_PRED;
134 case H_PRED:
135 return B_HE_PRED;
136 case TM_PRED:
137 return B_TM_PRED;
138 default:
139 return B_DC_PRED;
140 }
141 }
142
143 return (cur_mb->bmi + b - 1)->as_mode;
144 }
145
146 static B_PREDICTION_MODE above_block_mode(const MODE_INFO *cur_mb, int b, int mi _stride)
147 {
148 if (!(b >> 2))
149 {
150 /* On top edge, get from MB above us */
151 cur_mb -= mi_stride;
152
153 switch (cur_mb->mbmi.mode)
154 {
155 case B_PRED:
156 return (cur_mb->bmi + b + 12)->as_mode;
157 case DC_PRED:
158 return B_DC_PRED;
159 case V_PRED:
160 return B_VE_PRED;
161 case H_PRED:
162 return B_HE_PRED;
163 case TM_PRED:
164 return B_TM_PRED;
165 default:
166 return B_DC_PRED;
167 }
168 }
169
170 return (cur_mb->bmi + b - 4)->as_mode;
171 }
172
75 #endif 173 #endif
OLDNEW
« no previous file with comments | « source/libvpx/vp8/common/extend.c ('k') | source/libvpx/vp8/common/findnearmv.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698