- s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, srcU,
- s->uvlinesize, s->uvlinesize,
- 5, (5 << fieldmv), uvsrc_x, uvsrc_y,
- s->h_edge_pos >> 1, v_edge_pos);
- s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16, srcV,
- s->uvlinesize, s->uvlinesize,
- 5, (5 << fieldmv), uvsrc_x, uvsrc_y,
- s->h_edge_pos >> 1, v_edge_pos);
+ if (v->fcm == ILACE_FRAME) {
+ if (uvsrc_y & 1) {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, srcU,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) + 1 >> 1, uvsrc_x, uvsrc_y >> 1,
+ s->h_edge_pos >> 1, v_edge_pos + 1 >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + s->uvlinesize, srcU + s->uvlinesize,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) >> 1, uvsrc_x, uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1, v_edge_pos >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16, srcV,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) + 1 >> 1, uvsrc_x, uvsrc_y >> 1,
+ s->h_edge_pos >> 1, v_edge_pos + 1 >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16 + s->uvlinesize, srcV + s->uvlinesize,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) >> 1, uvsrc_x, uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1, v_edge_pos >> 1);
+ } else {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, srcU,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) + 1 >> 1, uvsrc_x, uvsrc_y >> 1,
+ s->h_edge_pos >> 1, v_edge_pos >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + s->uvlinesize, srcU + s->uvlinesize,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) >> 1, uvsrc_x, uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1, v_edge_pos + 1 >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16, srcV,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) + 1 >> 1, uvsrc_x, uvsrc_y >> 1,
+ s->h_edge_pos >> 1, v_edge_pos >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16 + s->uvlinesize, srcV + s->uvlinesize,
+ 2 * s->uvlinesize, 2 * s->uvlinesize,
+ 5, (5 << fieldmv) + 1, uvsrc_x, uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1, v_edge_pos + 1 >> 1);
+ }
+ } else {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, srcU,
+ s->uvlinesize, s->uvlinesize,
+ 5, 5, uvsrc_x, uvsrc_y,
+ s->h_edge_pos >> 1, v_edge_pos);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16, srcV,
+ s->uvlinesize, s->uvlinesize,
+ 5, 5, uvsrc_x, uvsrc_y,
+ s->h_edge_pos >> 1, v_edge_pos);
+ }