34 extern emu_edge_core_func ff_emu_edge_core_mmx;
35 extern emu_edge_core_func ff_emu_edge_core_sse;
39 int block_w,
int block_h,
42 emu_edge_core_func *core_fn)
44 int start_y, start_x, end_y, end_x, src_y_add = 0;
47 src_y_add = h - 1 - src_y;
49 }
else if (src_y <= -block_h) {
50 src_y_add = 1 - block_h - src_y;
56 }
else if (src_x <= -block_w) {
57 src += 1 - block_w - src_x;
61 start_y =
FFMAX(0, -src_y);
62 start_x =
FFMAX(0, -src_x);
63 end_y =
FFMIN(block_h, h-src_y);
64 end_x =
FFMIN(block_w, w-src_x);
65 assert(start_x < end_x && block_w > 0);
66 assert(start_y < end_y && block_h > 0);
69 src += (src_y_add + start_y) * linesize + start_x;
71 core_fn(buf, src, linesize, start_y, end_y,
72 block_h, start_x, end_x, block_w);
78 int block_w,
int block_h,
79 int src_x,
int src_y,
int w,
int h)
81 emulated_edge_mc(buf, src, linesize, block_w, block_h, src_x, src_y,
82 w, h, &ff_emu_edge_core_mmx);
88 int block_w,
int block_h,
89 int src_x,
int src_y,
int w,
int h)
91 emulated_edge_mc(buf, src, linesize, block_w, block_h, src_x, src_y,
92 w, h, &ff_emu_edge_core_sse);