Xv Reput/Reget behaviour changes

ville.syrjala at nokia.com ville.syrjala at nokia.com
Fri Oct 29 11:18:56 PDT 2010


I'm trying to eliminate some rather nasty looking on/off blinking
that's bothering my video overlays.

The xfree86 xv code hooks into ClipNotify, WindowExposures and
AdjustFrame and does something a little different in each of them.
I tried to decipher the intention of the original code, but even
after trawling through the xfree86 cvs, I was unable to find any
explanation for most of the differences. I suspect the code reached
it's current state simply due to some ad-hoc copy pasting in an
effort to fix some specific issues.

So I just gave up on the history and tried to think what would make
the most sense for each case and did that. The end result is that
Reput/Reget is done in most cases if the window is visible,
StopVideo is done if the window is invisible, and if ReputImage
isn't supported the port is removed from the window.

With these changes most of the blinking is gone. There is still at
least one case left though. Window (un)redirection does an internal
UnmapWindow+MapWindow cycle which causes ClipNotify to get called with
visibility = NotViewable. If anyone has a suggestion how to eliminate
that problem without a majore rewrite, I'd be happy to try it.

I'd also like the overlays to track RandR state properly so I added a
new hook 'ModeSet' that gets called when something interesting happens.
I just realized that I should probably call it from
xf86DisableUnusedFunctions() as well. Hmm, actually it looks like
xf86DisableUnusedFunctions() already has this crtc_notify hook I could
maybe use. Would there be objections to adding more calls to that
hook from set_origin (and perhaps some other mode setting functions)?

Also CCing Luc since he did something for xf86XVAdjustFrame at some
point in the past...


More information about the xorg-devel mailing list