142 |
uint32_t edged_width, |
uint32_t edged_width, |
143 |
uint32_t edged_height, |
uint32_t edged_height, |
144 |
uint32_t width, |
uint32_t width, |
145 |
uint32_t height, |
uint32_t height) |
|
uint32_t interlacing) |
|
146 |
{ |
{ |
147 |
const uint32_t edged_width2 = edged_width / 2; |
const uint32_t edged_width2 = edged_width / 2; |
148 |
const uint32_t width2 = width / 2; |
const uint32_t width2 = width / 2; |
155 |
src = image->y; |
src = image->y; |
156 |
|
|
157 |
for (i = 0; i < EDGE_SIZE; i++) { |
for (i = 0; i < EDGE_SIZE; i++) { |
|
/* // if interlacing, edges contain top-most data from each field |
|
|
if (interlacing && (i & 1)) { |
|
|
memset(dst, *(src + edged_width), EDGE_SIZE); |
|
|
memcpy(dst + EDGE_SIZE, src + edged_width, width); |
|
|
memset(dst + edged_width - EDGE_SIZE, |
|
|
*(src + edged_width + width - 1), EDGE_SIZE); |
|
|
} else {*/ |
|
158 |
memset(dst, *src, EDGE_SIZE); |
memset(dst, *src, EDGE_SIZE); |
159 |
memcpy(dst + EDGE_SIZE, src, width); |
memcpy(dst + EDGE_SIZE, src, width); |
160 |
memset(dst + edged_width - EDGE_SIZE, *(src + width - 1), |
memset(dst + edged_width - EDGE_SIZE, *(src + width - 1), |
161 |
EDGE_SIZE); |
EDGE_SIZE); |
|
/*}*/ |
|
162 |
dst += edged_width; |
dst += edged_width; |
163 |
} |
} |
164 |
|
|
171 |
|
|
172 |
src -= edged_width; |
src -= edged_width; |
173 |
for (i = 0; i < EDGE_SIZE; i++) { |
for (i = 0; i < EDGE_SIZE; i++) { |
|
/* // if interlacing, edges contain bottom-most data from each field |
|
|
if (interlacing && !(i & 1)) { |
|
|
memset(dst, *(src - edged_width), EDGE_SIZE); |
|
|
memcpy(dst + EDGE_SIZE, src - edged_width, width); |
|
|
memset(dst + edged_width - EDGE_SIZE, |
|
|
*(src - edged_width + width - 1), EDGE_SIZE); |
|
|
} else {*/ |
|
174 |
memset(dst, *src, EDGE_SIZE); |
memset(dst, *src, EDGE_SIZE); |
175 |
memcpy(dst + EDGE_SIZE, src, width); |
memcpy(dst + EDGE_SIZE, src, width); |
176 |
memset(dst + edged_width - EDGE_SIZE, *(src + width - 1), |
memset(dst + edged_width - EDGE_SIZE, *(src + width - 1), |
177 |
EDGE_SIZE); |
EDGE_SIZE); |
|
/*}*/ |
|
178 |
dst += edged_width; |
dst += edged_width; |
179 |
} |
} |
180 |
|
|
248 |
const uint32_t offset = EDGE_SIZE * (edged_width + 1); |
const uint32_t offset = EDGE_SIZE * (edged_width + 1); |
249 |
const uint32_t stride_add = 7 * edged_width; |
const uint32_t stride_add = 7 * edged_width; |
250 |
|
|
|
#ifdef BFRAMES |
|
|
const uint32_t edged_width2 = edged_width / 2; |
|
|
const uint32_t edged_height2 = edged_height / 2; |
|
|
const uint32_t offset2 = EDGE_SIZE2 * (edged_width2 + 1); |
|
|
const uint32_t stride_add2 = 7 * edged_width2; |
|
|
#endif |
|
|
|
|
251 |
uint8_t *n_ptr, *h_ptr, *v_ptr, *hv_ptr; |
uint8_t *n_ptr, *h_ptr, *v_ptr, *hv_ptr; |
252 |
uint32_t x, y; |
uint32_t x, y; |
253 |
|
|
279 |
n_ptr += stride_add; |
n_ptr += stride_add; |
280 |
} |
} |
281 |
|
|
|
#ifdef BFRAMES |
|
|
n_ptr = refn->u; |
|
|
h_ptr = refh->u; |
|
|
v_ptr = refv->u; |
|
|
hv_ptr = refhv->u; |
|
|
|
|
|
n_ptr -= offset2; |
|
|
h_ptr -= offset2; |
|
|
v_ptr -= offset2; |
|
|
hv_ptr -= offset2; |
|
|
|
|
|
for (y = 0; y < edged_height2; y = y + 8) { |
|
|
for (x = 0; x < edged_width2; x = x + 8) { |
|
|
interpolate8x8_halfpel_h(h_ptr, n_ptr, edged_width2, rounding); |
|
|
interpolate8x8_halfpel_v(v_ptr, n_ptr, edged_width2, rounding); |
|
|
interpolate8x8_halfpel_hv(hv_ptr, n_ptr, edged_width2, rounding); |
|
|
|
|
|
n_ptr += 8; |
|
|
h_ptr += 8; |
|
|
v_ptr += 8; |
|
|
hv_ptr += 8; |
|
|
} |
|
|
h_ptr += stride_add2; |
|
|
v_ptr += stride_add2; |
|
|
hv_ptr += stride_add2; |
|
|
n_ptr += stride_add2; |
|
|
} |
|
|
|
|
|
n_ptr = refn->v; |
|
|
h_ptr = refh->v; |
|
|
v_ptr = refv->v; |
|
|
hv_ptr = refhv->v; |
|
|
|
|
|
n_ptr -= offset2; |
|
|
h_ptr -= offset2; |
|
|
v_ptr -= offset2; |
|
|
hv_ptr -= offset2; |
|
|
|
|
|
for (y = 0; y < edged_height2; y = y + 8) { |
|
|
for (x = 0; x < edged_width2; x = x + 8) { |
|
|
interpolate8x8_halfpel_h(h_ptr, n_ptr, edged_width2, rounding); |
|
|
interpolate8x8_halfpel_v(v_ptr, n_ptr, edged_width2, rounding); |
|
|
interpolate8x8_halfpel_hv(hv_ptr, n_ptr, edged_width2, rounding); |
|
|
|
|
|
n_ptr += 8; |
|
|
h_ptr += 8; |
|
|
v_ptr += 8; |
|
|
hv_ptr += 8; |
|
|
} |
|
|
h_ptr += stride_add2; |
|
|
v_ptr += stride_add2; |
|
|
hv_ptr += stride_add2; |
|
|
n_ptr += stride_add2; |
|
|
} |
|
|
#endif |
|
|
|
|
282 |
/* |
/* |
283 |
interpolate_halfpel_h( |
interpolate_halfpel_h( |
284 |
refh->y - offset, |
refh->y - offset, |