130 |
} |
} |
131 |
} |
} |
132 |
|
|
133 |
|
|
134 |
|
|
135 |
|
/* XXX: slow, inelegant... */ |
136 |
|
static void |
137 |
|
interpolate18x18_switch(uint8_t * const cur, |
138 |
|
const uint8_t * const refn, |
139 |
|
const uint32_t x, |
140 |
|
const uint32_t y, |
141 |
|
const int32_t dx, |
142 |
|
const int dy, |
143 |
|
const uint32_t stride, |
144 |
|
const uint32_t rounding) |
145 |
|
{ |
146 |
|
interpolate8x8_switch(cur, refn, x-1, y-1, dx, dy, stride, rounding); |
147 |
|
interpolate8x8_switch(cur, refn, x+7, y-1, dx, dy, stride, rounding); |
148 |
|
interpolate8x8_switch(cur, refn, x+9, y-1, dx, dy, stride, rounding); |
149 |
|
|
150 |
|
interpolate8x8_switch(cur, refn, x-1, y+7, dx, dy, stride, rounding); |
151 |
|
interpolate8x8_switch(cur, refn, x+7, y+7, dx, dy, stride, rounding); |
152 |
|
interpolate8x8_switch(cur, refn, x+9, y+7, dx, dy, stride, rounding); |
153 |
|
|
154 |
|
interpolate8x8_switch(cur, refn, x-1, y+9, dx, dy, stride, rounding); |
155 |
|
interpolate8x8_switch(cur, refn, x+7, y+9, dx, dy, stride, rounding); |
156 |
|
interpolate8x8_switch(cur, refn, x+9, y+9, dx, dy, stride, rounding); |
157 |
|
} |
158 |
|
|
159 |
|
|
160 |
void |
void |
161 |
MBMotionCompensation(MACROBLOCK * const mb, |
MBMotionCompensation(MACROBLOCK * const mb, |
162 |
const uint32_t i, |
const uint32_t i, |
224 |
|
|
225 |
current = cur->u + 16*j*stride + 16*i; |
current = cur->u + 16*j*stride + 16*i; |
226 |
reference = refv->u + 16*j*stride + 16*i; |
reference = refv->u + 16*j*stride + 16*i; |
227 |
interpolate16x16_switch(refv->u, ref->u, 16*i, 16*j, dx, dy, stride, rounding); |
//interpolate16x16_switch(refv->u, ref->u, 16*i, 16*j, dx, dy, stride, rounding); |
228 |
|
interpolate18x18_switch(refv->u, ref->u, 16*i, 16*j, dx, dy, stride, rounding); |
229 |
filter_18x18_to_8x8(dct_codes + 4*64, current, stride); |
filter_18x18_to_8x8(dct_codes + 4*64, current, stride); |
230 |
filter_diff_18x18_to_8x8(dct_codes + 4*64, reference, stride); |
filter_diff_18x18_to_8x8(dct_codes + 4*64, reference, stride); |
231 |
transfer16x16_copy(current, reference, stride); |
transfer16x16_copy(current, reference, stride); |
232 |
|
|
233 |
current = cur->v + 16*j*stride + 16*i; |
current = cur->v + 16*j*stride + 16*i; |
234 |
reference = refv->v + 16*j*stride + 16*i; |
reference = refv->v + 16*j*stride + 16*i; |
235 |
interpolate16x16_switch(refv->v, ref->v, 16*i, 16*j, dx, dy, stride, rounding); |
//interpolate16x16_switch(refv->v, ref->v, 16*i, 16*j, dx, dy, stride, rounding); |
236 |
|
interpolate18x18_switch(refv->v, ref->v, 16*i, 16*j, dx, dy, stride, rounding); |
237 |
filter_18x18_to_8x8(dct_codes + 5*64, current, stride); |
filter_18x18_to_8x8(dct_codes + 5*64, current, stride); |
238 |
filter_diff_18x18_to_8x8(dct_codes + 5*64, reference, stride); |
filter_diff_18x18_to_8x8(dct_codes + 5*64, reference, stride); |
239 |
transfer16x16_copy(current, reference, stride); |
transfer16x16_copy(current, reference, stride); |