Banshee quality bilinear filtering (tdfx_vid)
Hello to everyone. With the help of Alban Bedel, the author of tdfx_vid, I'm finally able to watch movies with bilinear hardware filtering on my Voodoo Banshee. If you ask yourself, what is this, I'll tell you. Banshee (and Voodoo 3/4/5 I suppose) supports two methods of image stretching (they are used when you are rescalling smaller image to fit fullscreen) - point and bilinear. Point looks ugly and if you want to see what it is like, rescale with -vop scale=x:y (set x and y to your fullscreen dimensions) and then add -sws 4, which turns on SwScaler with filter "nearest neighbour", which is EXACTLY the same type of filtering. Then try the same, but with -sws 1 (fast bilinear). If the movie was low-res and you are rescalling to high-res, the difference is obvious. I personally just can't watch the ugly point stretched movie. The good news are that XVideo for example always uses bilinear filtering with Banshee, and the bad ones are that tdfxfb and tdfx_vid (this one can be fixed, read on) use point stretching. Because tdfxfb doesn't use overlay, bilinear filtering can't be turned on (am I wrong? The specs don't say it directly, but I think it's so). The good news (again:) are that tdfx_vid can use bilinear filtering and it's VERY easy to turn it on. I sent email to Alban Bedel (tdfx_vid author) with my problem and I'm very thankful, that he told me where to change the code. The remaining was consulting with 3dfx Banshee 2D Reference and changing four lines of code. Voodoo Banshee (3/4/5) have 1x and 2x video mode. The specs say: "2X mode refreshes two screen pixels per video clock". Obviously 1X refreshes them once. I personally don't know if there is visible difference between these two modes, but what I know is that bilinear filtering can't be enabled in 2X mode. If you still think that I'm talking stupid things, just try and see the difference for yourself. If you have been watching movies using tdfxfb of tdfx_vid with point stretching, that's sad. I'm not sure tdfxfb can be fixed, but tdfx_vid can. See this code from drivers/tdfx_vid.c: if (!(vidcfg | (1<<26))) vidcfg |= (3<<16); else vidcfg &= ~(3<<16); What does this code? vidcfg points to one register in the video card, which is responsible for many things. Among them is the swithing on/off of both 1X/2X and bilinear filtering. Since bilinear filtering isn't supported in 2X mode, this code first tests which mode is turned on - 1X or 2X and based upon this value turns off or on bilinear filtering. Exactly here lies the problem - on my system when getting vidcfg (it's read from video card I think, but I'm not sure) 2X mode is always enabled, which results in bilinear filtering being TURNED OFF! I ask: Why don't we always set 1X mode and bilinear filtering, since 2X give us nothing except the only choice to use inferior stretching algorithm? Since many movies are actually lower resolution than our desktop one, everyone should care about this. My suggestion is to remove this code and write the following: vidcfg &= ~(1<<26); //Turns 2X mode off vidcfg |= (3<<16); //Turns bilinear high quality filtering on But I have one more suggestion. Since when I run tdfx_vid undex X11, the hardware cursor stays WHILE I'm wathing the movie, turn it also off: vidcfg &= ~(1<<27); //Turns hardware cursor off Because I don't want to introduce new bugs, please if this gets into the official source, someone have also to turn hardware cursor somewhere back on! It's important! I have changed those few lines and all (not all, read on) my problems are almost gone. 1 and 1/2 weeks I was trying to figure out why the picture looks so bad with tdfx* drivers and so good with XVideo. Now I got it and I want all of you to fix this in order to get better quality - something we all want. I said not all of my problems since Direct Rendering (-dr) works very slow with tdfx_vid. I'll try to fix that later. My primary goal is accomplished - quality bilinear filtering with as little CPU usage as possible (well, with Direct Rendering it will be even faster!). Now, i have another three dreams - to make this possible under tdfxfb, to make overlay work from the console, because now it must be run from X and the final dream is to get Direct Rendering right with tdfx_vid. Thanks for the great player guys, keep up the good work. Georgi Petrov Bulgaria __________________________________ Do you Yahoo!? Yahoo! SiteBuilder - Free, easy-to-use web site design software http://sitebuilder.yahoo.com
participants (1)
-
Georgi Petrov