From 1eade3271ab167a83fcb0d8994530ea677d68575 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Tue, 9 Nov 2010 23:18:33 +0100 Subject: [PATCH] [g3dvl] workaround for motion vertical field selection --- .../auxiliary/vl/vl_mpeg12_mc_renderer.c | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c index e24186ea6db..975f0c1d10f 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c +++ b/src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c @@ -911,8 +911,13 @@ gen_macroblock_verts(struct vl_mpeg12_mc_renderer *r, } } else { + mo_vec[0].y = mb->pmv[0][1][1] - (mb->pmv[0][1][1] % 4); + mo_vec[1].x = mb->pmv[1][1][0]; - mo_vec[1].y = mb->pmv[1][1][1]; + mo_vec[1].y = mb->pmv[1][1][1] - (mb->pmv[1][1][1] % 4); + + if(mb->mvfs[0][1]) mo_vec[0].y += 2; + if(!mb->mvfs[1][1]) mo_vec[1].y -= 2; for (i = 0; i < 24 * 2; i += 2) { vb[i].x = mo_vec[0].x; @@ -934,21 +939,31 @@ gen_macroblock_verts(struct vl_mpeg12_mc_renderer *r, vb = ref_vb[0] + pos * 2 * 24; if (mb->mb_type == PIPE_MPEG12_MACROBLOCK_TYPE_BKWD) { - mo_vec[0].x = mb->pmv[0][1][0]; - mo_vec[0].y = mb->pmv[0][1][1]; + mo_vec[0].x = mb->pmv[0][1][0]; + mo_vec[0].y = mb->pmv[0][1][1]; + + if (mb->mo_type == PIPE_MPEG12_MOTION_TYPE_FIELD) { + mo_vec[0].y = mb->pmv[0][1][1] - (mb->pmv[0][1][1] % 4); - if (mb->mo_type == PIPE_MPEG12_MOTION_TYPE_FIELD) { - mo_vec[1].x = mb->pmv[1][1][0]; - mo_vec[1].y = mb->pmv[1][1][1]; - } + mo_vec[1].x = mb->pmv[1][1][0]; + mo_vec[1].y = mb->pmv[1][1][1] - (mb->pmv[1][1][1] % 4); + + if(mb->mvfs[0][1]) mo_vec[0].y += 2; + if(!mb->mvfs[1][1]) mo_vec[1].y -= 2; + } } else { mo_vec[0].x = mb->pmv[0][0][0]; mo_vec[0].y = mb->pmv[0][0][1]; if (mb->mo_type == PIPE_MPEG12_MOTION_TYPE_FIELD) { + mo_vec[0].y = mb->pmv[0][0][1] - (mb->pmv[0][0][1] % 4); + mo_vec[1].x = mb->pmv[1][0][0]; - mo_vec[1].y = mb->pmv[1][0][1]; + mo_vec[1].y = mb->pmv[1][0][1] - (mb->pmv[1][0][1] % 4); + + if(mb->mvfs[0][0]) mo_vec[0].y += 2; + if(!mb->mvfs[1][0]) mo_vec[1].y -= 2; } } -- 2.30.2