Comment 7 for bug 153873

Revision history for this message
In , Avillaci (avillaci) wrote :

I have seen this lockup too on my home machine. My machine reports the following on lspci -v:

01:00.0 VGA compatible controller: S3 Inc. VT8375 [ProSavage8 KM266/KL266]
(prog-if 00 [VGA])
        Subsystem: S3 Inc. VT8375 [ProSavage8 KM266/KL266]
        Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 11
        Memory at dfe80000 (32-bit, non-prefetchable) [size=512K]
        Memory at d0000000 (32-bit, prefetchable) [size=128M]
        Expansion ROM at dfe70000 [disabled] [size=64K]
        Capabilities: [dc] Power Management version 2
        Capabilities: [80] AGP version 2.0

If you have gstreamer-tools installed, this bug can be reproduced (at least in my case) as follows (with BCIforXv enabled):

The following command works correctly:
gst-launch videotestsrc ! video/x-raw-yuv,format=\(fourcc\)YV12,width=320 ! xvimagesink

The following command causes diagonal colored corruption to be displayed in the xv window:
gst-launch videotestsrc ! video/x-raw-yuv,format=\(fourcc\)YV12,width=328 ! xvimagesink

The following command locks up the machine hard:
gst-launch videotestsrc ! video/x-raw-yuv,format=\(fourcc\)YV12,width=321 ! xvimagesink

The following command does not use BCI and runs correctly regardless of the value of width (note: it specifies YUY2 instead of YV12):
gst-launch videotestsrc ! video/x-raw-yuv,format=\(fourcc\)YUY2,width=320 ! xvimagesink

The cause seems to be that the BCI code in the driver is unable to handle pixel widths that are not multiples of 16. With multiples of 8, the corruption manifests itself as diagonal ghost images (a real-world example video where the ghost images appear is the "What is Ubuntu" example video that comes with the Ubuntu 7.04 and 7.10 LiveCDs). With non-multiples of 8, the machine locks up.

Fortunately, I have a patch that fixes the problem, at least in my case (applied on top of current git). It restricts the use of BCI to just the cases where the pixel width is a multiple of 16 pixels. Other widths are handled by software, bypassing the BCI (as is the cas with BCIForXV=off).

I have the patches at home, so I need to get there first.