- s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, srcU,
- s->uvlinesize, s->uvlinesize,
- 8 + 1, 8 + 1, uvsrc_x, uvsrc_y,
- s->h_edge_pos >> 1, v_edge_pos >> 1);
- s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16, srcV,
- s->uvlinesize, s->uvlinesize,
- 8 + 1, 8 + 1, uvsrc_x, uvsrc_y,
- s->h_edge_pos >> 1, v_edge_pos >> 1);
+ if (interlace) {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer,
+ srcU,
+ uvlinesize << 1,
+ uvlinesize << 1,
+ 9,
+ v->field_mode ? 9 : 5,
+ uvsrc_x,
+ uvsrc_y >> !v->field_mode,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 2);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16,
+ srcV,
+ uvlinesize << 1,
+ uvlinesize << 1,
+ 9,
+ v->field_mode ? 9 : 5,
+ uvsrc_x,
+ uvsrc_y >> !v->field_mode,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 2);
+ if (!v->field_mode) {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + uvlinesize,
+ srcU + uvlinesize,
+ uvlinesize << 1,
+ uvlinesize << 1,
+ 9,
+ 4,
+ uvsrc_x,
+ uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 2);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16 + uvlinesize,
+ srcV + uvlinesize,
+ uvlinesize << 1,
+ uvlinesize << 1,
+ 9,
+ 4,
+ uvsrc_x,
+ uvsrc_y + 1 >> 1,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 2);
+ }
+ } else {
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer,
+ srcU,
+ uvlinesize,
+ uvlinesize,
+ 9,
+ v->field_mode ? 17 : 9,
+ uvsrc_x,
+ v->field_mode ? 2 * uvsrc_y + chroma_ref_type : uvsrc_y,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 1);
+ s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer + 16,
+ srcV,
+ uvlinesize,
+ uvlinesize,
+ 9,
+ v->field_mode ? 17 : 9,
+ uvsrc_x,
+ v->field_mode ? 2 * uvsrc_y + chroma_ref_type : uvsrc_y,
+ s->h_edge_pos >> 1,
+ s->v_edge_pos >> 1);
+ }