In an XMMS visualization plugin, I use the XVideo extension in the root
window. This gives me a full-screen display running underneath any
application windows that I happen to have open. It works great.

But when I shut it down, any pixels in the normal root image that
happen to match XVideo's masking color will still allow the last frame
of the video image to show through. The hardware that XVideo uses
apparently isn't being reset.

Previously I used a Voodoo3 card which used not-quite-bright-blue as
the mask color. Since that color didn't appear very often in photos,
I didn't worry about it much. But now I'm using an ATI Rage3D card
which uses not-quite-black as the mask color, and that occurs very
often in photos, so my root image looks weird most of the time.

Am I missing something? Did I neglect to call a standard XVideo
function while shutting down? Or am I expected to draw the last frame
as a solid YUV version of the mask color? Or move the image to an
off-screen area? Any advise would be appreciated.

Here's what I'm doing now. The big thing to note here is that my
visualization plugin uses a separate connection to the X server for
sending the XVideo images, and closes that connection when shutting
down the XVideo output.

void xv_end()
{
/* If the full-screen display isn't open then do nothing */
if (!xvDisplay)
return;

/* Free the image buffer, if there is one */
if (xvImg)
{
free_image();
}

/* Tell Gtk to stop sending us events */
gdk_input_remove(xvInput);

/* If we were using the root window, then erase it so the
* wallpaper image is redrawn.
*/
if (xvOptRoot)
{
XClearWindow(xvDisplay, xvWindow);
}
XFlush(xvDisplay);

/* Close the connection. This frees all XV resources */
XCloseDisplay(xvDisplay);
xvDisplay = NULL;

/* Tell the main Blursk module to resume window updates */
blursk_fullscreen(TRUE);
}