On Thu, Apr 15, 2004 at 02:59:40PM +0200, Michael Lampe wrote: >I'm rehashing an old thread from xpert, >http://marc.theaimsgroup.com/?t=97722090500003&r=1&w=2 and propose the >following patch, derived from how mga_vid.c (kernel module for Matrox >BES from mplayer) programs the card. It basically disables that >'accelerated 2x horizontal zoom' thing which causes the problem. (With >this option on, it looks like information from only every other pixel is >used.)
Isn't the 'accelerated 2x horizontal zoom' thing something that is required (because of hardware limitation) above certain clock rates? I don't have the relevant specs handy to check. David > >It also turns back on 'chroma upsampling' (which was only turned off in >a failed attempt to solve the issue, see quoted thread) and changes the >vsync position to 2 (a la mga_vid.c, seems as good a constant as what >was used before but is simpler). > >A good example for testing is >http://cox.iwr.uni-heidelberg.de/~ug/films/stefan.mov > >-Michael > >Index: programs/Xserver/hw/xfree86/drivers/mga/mga_video.c >=================================================================== >RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_video.c,v >retrieving revision 1.34 >diff -u -r1.34 mga_video.c >--- programs/Xserver/hw/xfree86/drivers/mga/mga_video.c 20 Feb 2004 16:59:49 >-0000 1.34 >+++ programs/Xserver/hw/xfree86/drivers/mga/mga_video.c 15 Apr 2004 12:35:35 >-0000 >@@ -578,48 +578,29 @@ > short src_w, short src_h, > short drw_w, short drw_h > ){ >+#define VSYNC_POS 2 >+ > MGAPtr pMga = MGAPTR(pScrn); >- int tmp, hzoom, intrep; >- int maxOverlayClock; >+ int tmp, intrep; > > CHECK_DMA_QUIESCENT(pMga, pScrn); > >- /* got 48 scanlines to do it in */ >- tmp = INREG(MGAREG_VCOUNT) + 48; >- /* FIXME always change it in vertical retrace use CrtcV ?*/ >- if(tmp > pScrn->currentMode->CrtcVTotal) >- tmp -= 49; /* too bad */ >- else >- tmp = pScrn->currentMode->CrtcVTotal -1; >- >- tmp = pScrn->currentMode->VDisplay +1; >- /* enable accelerated 2x horizontal zoom when pixelclock >135MHz */ >- >- if ((pMga->ChipRev >= 0x80) || (pMga->Chipset == PCI_CHIP_MGAG550)) { >- /* G450, G550 */ >- maxOverlayClock = 234000; >- } else { >- maxOverlayClock = 135000; >- } >- >- hzoom = (pScrn->currentMode->Clock > maxOverlayClock) ? 1 : 0; >- > switch(id) { > case FOURCC_UYVY: >- OUTREG(MGAREG_BESGLOBCTL, 0x000000c0 | (3 * hzoom) | (tmp << 16)); >+ OUTREG(MGAREG_BESGLOBCTL, 0x000000c0 | (VSYNC_POS << 16)); > break; > case FOURCC_YUY2: > default: >- OUTREG(MGAREG_BESGLOBCTL, 0x00000080 | (3 * hzoom) | (tmp << 16)); >+ OUTREG(MGAREG_BESGLOBCTL, 0x00000080 | (VSYNC_POS << 16)); > break; > } > > OUTREG(MGAREG_BESA1ORG, offset); > > if(y1 & 0x00010000) >- OUTREG(MGAREG_BESCTL, 0x00040c41); >+ OUTREG(MGAREG_BESCTL, 0x00050c41); > else >- OUTREG(MGAREG_BESCTL, 0x00040c01); >+ OUTREG(MGAREG_BESCTL, 0x00050c01); > > OUTREG(MGAREG_BESHCOORD, (dstBox->x1 << 16) | (dstBox->x2 - 1)); > OUTREG(MGAREG_BESVCOORD, (dstBox->y1 << 16) | (dstBox->y2 - 1)); >@@ -640,7 +621,7 @@ > OUTREG(MGAREG_BESVISCAL, tmp & 0x001ffffc); > > intrep = ((drw_w == src_w) || (drw_w < 2)) ? 0 : 1; >- tmp = (((src_w - intrep) << 16)/(drw_w - intrep)) << hzoom; >+ tmp = (((src_w - intrep) << 16)/(drw_w - intrep)); > if(tmp >= (32 << 16)) > tmp = (32 << 16) - 1; > OUTREG(MGAREG_BESHISCAL, tmp & 0x001ffffc); _______________________________________________ Devel mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/devel