XvShmPutImage() of odd-width source to RGB format makes X server spin
I'm working on some code that uses XvShmPutImage() to quickly put
images on the screen. I've used it with several image sizes (input
and output), image formats, and both PutImage-supporting adaptors
(overlay and blitter), and it all pretty much works...
...with one exception. If the image format is id 0x3 (the 32-bpp,
depth 24, packed RGB format supported by the blitter adaptor), and the
input image width is odd, X hangs.
The client program makes it though its outer loop once, with
XvShmPutImage() and XSync() both returning (although the image does
not show up on the screen). But the second time through the loop,
XSync() does not return. The console hangs -- does not respond to the
keyboard (include vt switching and CTRL-ALT-Backspace) or the mouse
(well, sometimes it responds to mouse movement, but nothing else). I
have to log in remotely to do anything else. top(1) shows X going
flat out. I have to kill X before the console is usable again.
In the attached zip file is some source to reproduce the problem. As
it is, it works fine. But when I change the "#if 0" to "#if 1",
resulting in an odd-width image, I get the trouble described.
The zip file also contains my XFree86Config and XFree86.0.log files.
Other pertinent info:
# cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)
# uname -a
Linux helium 2.4.20-20.9 #1 Mon Aug 18 11:45:58 EDT 2003 i686 i686 i386 GNU/Linux
# lspci | grep -i nvidia
01:08.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440] (rev a3)
# nvidia-installer -i
Welcome to the NVIDIA Software Installer for Unix/Linux
The currently installed driver is: 'NVIDIA Accelerated Graphics Driver for Linux-x86' (version: 1.0-4496).
Is this a known problem? Any suggested fixes/workarounds (other than
"don't do that")?