|
Double Buffered display vs Overlays: msg#00145python.pygame
Hi, I'm currently decoding and displaying video in a pygame overlay. I also have a bunch of surfaces I regularly blit into the display surface. If I render all the surfaces first, and the force the overlay to display, then any surfaces overlapping the overlay area are rendered behind the overlay. This is pretty much what you'd expect, and this doesn't have any issues. (eg no flickering, does what you expect, etc) If however I render the overlay first, and then all the surfaces, then if any of the surfaces overlap the display surfaces. This works as you'd expect - the surfaces are visible over the video. (And keying also works, which allows an element of live titling for example) However, even with a double buffered display surface this flickers, which isn't very pleasant. This leads me to my questions: * This strikes me as potentially a problem in SDL rather than PyGame. Does anyone know of a way of making this work without flickering? * Am I doing something really dumb? :-) * The older pygame.movie interface has the option to use an arbitrary surface instead. Short of me implementing a method to convert IYUV data and manually fill a surface with RGB data, am I missing a trick in pygame that will do this for me? * Would, for example, does anyone know if pygame.movie's mpeg handling can handle mpeg YUV ? Versions: * pygame 1.7.1release (pygame-1.7.1release.tar.gz) * python 2.4 (Hmm... SuSE 9.3 shipped with 2.4 alpha3 ...) The actual code I'm talking about here is the code here: Non-Flickery - surfaces behind overlay: http://cvs.sourceforge.net/viewcvs.py/kamaelia/Code/Python/Kamaelia/Kamaelia/UI/PygameDisplay.py?rev=1.11&view=auto Flickery - surfaces in front of overlay: http://cvs.sourceforge.net/viewcvs.py/kamaelia/Code/Python/Kamaelia/Kamaelia/UI/PygameDisplay.py?rev=1.13&view=auto Specific class/method: PygameDisplay.updateDisplay In case it's not clear, the section: # now update overlays for theoverlay in self.overlays: has simply been lifted and shifted wholesale before the block starting: for surface, position, callbackcomms, eventcomms in self.surfaces: display.blit(surface, position) We've seen some other oddities as well with overlays, so I wouldn't be suprised if the answers here are negative, but any comments welcome :) In case it's of interest/means something to people the video we're decoding and displaying is Dirac :) (if it doesn't, it's really the explanation for not using the pygame.movie stuff) Thanks in advance for any comments/thoughts/ideas, Regards, Michael. |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Big Tile Maps: 00145, Kris Schnee |
|---|---|
| Next by Date: | pygame display position: 00145, Roel Smulders |
| Previous by Thread: | Big Tile Mapsi: 00145, Simon Wittber |
| Next by Thread: | Re: Double Buffered display vs Overlays: 00145, Pete Shinners |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |