Hey, There's one relevant patch in the F13 DDX package that hasn't been pushed into git still.
The patch simply switches off the bicubic filtering if we're scaling the image by less than 200% in either direction in order to prevent some excessive blurriness in the image (very noticable with the gstreamer xvideo test). The patch has been in the Fedora package since F11 as a user reported the issue as a bug, and the radeon driver has similar code, but I thought I'd ask for opinions before I pushed this to git. Ben.
>From 9e1f2ff45e5b22406f3575298113f1168b3bde5a Mon Sep 17 00:00:00 2001 From: Ben Skeggs <[email protected]> Date: Mon, 4 May 2009 17:04:34 +1000 Subject: [PATCH 1/2] xv: only use bicubic filtering when scaling >=2x --- src/nv30_xv_tex.c | 7 +++++-- src/nv40_xv_tex.c | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/nv30_xv_tex.c b/src/nv30_xv_tex.c index 617e63b..f4bc1da 100644 --- a/src/nv30_xv_tex.c +++ b/src/nv30_xv_tex.c @@ -258,7 +258,7 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *rankine = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - Bool redirected = FALSE; + Bool redirected = FALSE, bicubic = pPriv->bicubic; float X1, X2, Y1, Y2; BoxPtr pbox; int nbox; @@ -342,7 +342,10 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, BEGIN_RING(chan, rankine, NV34TCL_TX_ENABLE(3), 1); OUT_RING (chan, 0x0); - if (!NV30_LoadFragProg(pScrn, pPriv->bicubic ? + if (drw_w / 2 < src_w || drw_h / 2 < src_h) + bicubic = FALSE; + + if (!NV30_LoadFragProg(pScrn, bicubic ? &nv30_fp_yv12_bicubic : &nv30_fp_yv12_bilinear)) { MARK_UNDO(chan); diff --git a/src/nv40_xv_tex.c b/src/nv40_xv_tex.c index 3a5d439..a46f1e3 100644 --- a/src/nv40_xv_tex.c +++ b/src/nv40_xv_tex.c @@ -262,7 +262,7 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *curie = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - Bool redirected = FALSE; + Bool redirected = FALSE, bicubic = pPriv->bicubic; float X1, X2, Y1, Y2; BoxPtr pbox; int nbox; @@ -322,7 +322,11 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, } NV40_LoadVtxProg(pScrn, &nv40_vp_video); - if (!NV40_LoadFragProg(pScrn, pPriv->bicubic ? + + if (drw_w / 2 < src_w || drw_h / 2 < src_h) + bicubic = FALSE; + + if (!NV40_LoadFragProg(pScrn, bicubic ? &nv40_fp_yv12_bicubic : &nv30_fp_yv12_bilinear)) { MARK_UNDO(chan); -- 1.7.0.1
_______________________________________________ Nouveau mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/nouveau
