[Qt-interest] Flicker with QtEmbedded-4.5 on arm/Davinci platform
Oliver.Knoll at comit.ch
Oliver.Knoll at comit.ch
Thu Jan 29 18:06:29 CET 2009
Abdelrazak Younes wrote on Thursday, January 29, 2009 3:37 PM:
>> Does anyone know of any setting or compilation trick
>> that will diminish the flicker? I know that everything is double
>> buffered on X11 and Windows but what about embedded platforms on the
>> framebuffer?
>
> Maybe I should also indicate that the framebuffer runs on a TV set
> via a SVideo connection.
That's the tiny little bit of information which might make the difference ;)
I am not a TV technician, but usually TVs have a refresh rate of 50 Hz interlaced. So depending with which framerate the framebuffer is updated (e.g. 60 Hz) you'll likely to see effects to which you are referring to as "flicker". Because a typical TV (not LCD, but CRT - http://en.wikipedia.org/wiki/Cathode_ray_tube) draws "line by line", and if you refresh the graphic card memory while the "cathode ray" is in the middle of "updating the TV screen" you'll notice this as flicker or similar visual ugly "artefacts".
Off course my assumption would only make sense if you observe the same flicker effect with other (non-Qt) applications with update-intensive (="lots of moving stuff") graphic output. When you see a "static" image (e.g. when you don't move any windows around on the screen, for instance), the flicker-effect is off course not so obvious - the screen always "paints" the same image.
Some graphic hardware drivers have an option like "Synchronise memory refresh with display refresh rate" (which makes only a visible difference with CRT monitors, I guess): it doesn't refresh the graphic card memory, until the cathode ray has "jumped back" to "top-left", where it starts again to draw line by line... (which takes some time, and in this time the graphic card memory is updated).
Note that with modern LCD displays you won't notice any flicker, because they don't have a "cathode ray" which draws each line after another, just like with a good old CRT monitor (and I assume your TV falls into this category). But generally it is pretty useless to refresh the graphic card memory faster than your screen's refresh rate - Unless you want to prove the power of your Giga-Game-Blaster 3D card... ;)
So my guess is that with your specific embedded device you'll have to find a way to convince the framebuffer to synchronise with your TV - since the framebuffer can't possibly know when the TV's cathode ray "jumps back" (this information is not transmitted over a plain SVideo cable ;) I am not even sure if this is possible. At least try to set the same refresh rate as the TV has (50 Hz or so).
Cheers, Oliver
--
Oliver Knoll
Dipl. Informatik-Ing. ETH
COMIT AG - ++41 79 520 95 22
More information about the Qt-interest-old
mailing list