20 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
21 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 |
* |
* |
23 |
* $Id: motion_comp.c,v 1.18.2.7 2003-06-28 15:53:07 chl Exp $ |
* $Id: motion_comp.c,v 1.18.2.8 2003-08-22 15:52:35 Isibaar Exp $ |
24 |
* |
* |
25 |
****************************************************************************/ |
****************************************************************************/ |
26 |
|
|
29 |
#include "../encoder.h" |
#include "../encoder.h" |
30 |
#include "../utils/mbfunctions.h" |
#include "../utils/mbfunctions.h" |
31 |
#include "../image/interpolate8x8.h" |
#include "../image/interpolate8x8.h" |
32 |
|
#include "../image/qpel.h" |
33 |
#include "../image/reduced.h" |
#include "../image/reduced.h" |
34 |
#include "../utils/timer.h" |
#include "../utils/timer.h" |
35 |
#include "motion.h" |
#include "motion.h" |
90 |
|
|
91 |
if(quarterpel) { |
if(quarterpel) { |
92 |
if ((dx&3) | (dy&3)) { |
if ((dx&3) | (dy&3)) { |
93 |
|
#if defined(ARCH_IS_IA32) /* new_interpolate is only faster on x86 (MMX) machines */ |
94 |
|
new_interpolate16x16_quarterpel(tmp - y * stride - x, |
95 |
|
(uint8_t *) ref, tmp + 32, |
96 |
|
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
97 |
|
#else |
98 |
interpolate16x16_quarterpel(tmp - y * stride - x, |
interpolate16x16_quarterpel(tmp - y * stride - x, |
99 |
(uint8_t *) ref, tmp + 32, |
(uint8_t *) ref, tmp + 32, |
100 |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
101 |
|
#endif |
102 |
ptr = tmp; |
ptr = tmp; |
103 |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
104 |
|
|
158 |
|
|
159 |
if(quarterpel) { |
if(quarterpel) { |
160 |
if ((dx&3) | (dy&3)) { |
if ((dx&3) | (dy&3)) { |
161 |
|
#if defined(ARCH_IS_IA32) /* new_interpolate is only faster on x86 (MMX) machines */ |
162 |
|
new_interpolate8x8_quarterpel(tmp - y*stride - x, |
163 |
|
(uint8_t *) ref, tmp + 32, |
164 |
|
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
165 |
|
#else |
166 |
interpolate8x8_quarterpel(tmp - y*stride - x, |
interpolate8x8_quarterpel(tmp - y*stride - x, |
167 |
(uint8_t *) ref, tmp + 32, |
(uint8_t *) ref, tmp + 32, |
168 |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
tmp + 64, tmp + 96, x, y, dx, dy, stride, rounding); |
169 |
|
#endif |
170 |
ptr = tmp; |
ptr = tmp; |
171 |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
} else ptr = ref + (y + dy/4)*stride + x + dx/4; /* fullpixel position */ |
172 |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |
} else ptr = get_ref(ref, refh, refv, refhv, x, y, 1, dx, dy, stride); |