21 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
22 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 |
* |
* |
24 |
* $Id: motion_est.h,v 1.3.2.15 2003-08-03 10:10:54 syskin Exp $ |
* $Id: motion_est.h,v 1.3.2.17 2003-08-26 09:25:25 edgomez Exp $ |
25 |
* |
* |
26 |
****************************************************************************/ |
****************************************************************************/ |
27 |
|
|
160 |
int32_t * const max_dy, |
int32_t * const max_dy, |
161 |
const uint32_t x, |
const uint32_t x, |
162 |
const uint32_t y, |
const uint32_t y, |
163 |
uint32_t block_sz, /* block dimension, 8 or 16 */ |
uint32_t block_sz, /* block dimension, 3(8) or 4(16) */ |
164 |
const uint32_t width, |
const uint32_t width, |
165 |
const uint32_t height, |
const uint32_t height, |
166 |
const uint32_t fcode, |
const uint32_t fcode, |
167 |
const int qpel, /* 1 if the resulting range should be in qpel precision; otherwise 0 */ |
const int precision, /* 2 for qpel, 1 for halfpel */ |
168 |
const int rrv) |
const int rrv) |
169 |
{ |
{ |
170 |
int k, m = qpel ? 4 : 2; |
int k; |
171 |
const int search_range = 32 << (fcode - 1); |
const int search_range = 16 << fcode; |
172 |
int high = search_range - 1; |
int high = search_range - 1; |
173 |
int low = -search_range; |
int low = -search_range; |
174 |
|
|
175 |
if (rrv) { |
if (rrv) { |
176 |
high = RRV_MV_SCALEUP(high); |
high = RRV_MV_SCALEUP(high); |
177 |
low = RRV_MV_SCALEUP(low); |
low = RRV_MV_SCALEUP(low); |
178 |
block_sz *= 2; |
block_sz++; |
179 |
} |
} |
180 |
|
|
181 |
k = m * (int)(width - x * block_sz); |
k = (int)(width - (x<<block_sz))<<precision; |
182 |
*max_dx = MIN(high, k); |
*max_dx = MIN(high, k); |
183 |
k = m * (int)(height - y * block_sz); |
k = (int)(height - (y<<block_sz))<<precision; |
184 |
*max_dy = MIN(high, k); |
*max_dy = MIN(high, k); |
185 |
|
|
186 |
k = -m * (int)((x+1) * block_sz); |
k = (-(int)((x+1)<<block_sz))<<precision; |
187 |
*min_dx = MAX(low, k); |
*min_dx = MAX(low, k); |
188 |
k = -m * (int)((y+1) * block_sz); |
k = (-(int)((y+1)<<block_sz))<<precision; |
189 |
*min_dy = MAX(low, k); |
*min_dy = MAX(low, k); |
190 |
} |
} |
191 |
|
|