cancel
Showing results for 
Search instead for 
Did you mean: 

TOUCHGFX: Animated images run not smooth

H S
Associate III

Hello,

I have a little problem with an animated image at startup (logo with 6 pictures, change every 600 ms). The demo runs on an STM32F769I-DISCO.

The outline and a symbol in the middle of the logo is fixed all the time, just some other parts apear with every new picture.

My problem is that I see the changes of every image on the fixed parts of the images.

I have tried to set the animated image in a container and set it "Chacheabel" and additional to increase the "Canvas Buffer size" but sadly without any improvement.

Is there any optimization available that the images change "smoother"?

Thank you in advance.

6 REPLIES 6
Alexandre RENOUX
Principal

Hello,

Actually, the fact that you have only 6 pictures with a delay between each picture of 600 ms (that's quite a lot) might be the issue.

If you want something smoother, you might need to think about increasing the number of images and/or decreasing the time between two images.

If it does not help, could you also provide a video of your animatedImage ? I don't understand the "The outline and a symbol in the middle of the logo is fixed all the time, just some other parts appear with every new picture."

/Alexandre

H S
Associate III

Hi Alexandre,

thank you for your answer.

I don't need a fast running animation or something like this, I just want a short intro logo were some text parts appear after some time.

Attached a sample logo from the internet were I tried to describe my needs.

There are some pictures and at the end of the animation is the full logo visible.

0693W000001rgffQAA.jpg

I also tried it with different screens and a wait time and screen change on my own, but there is the same behavior with the short refresh flicker on the fixes parts (outer circle and inner symbol).

Do you know a better way to do this short "animation" flicker free?

Alexandre RENOUX
Principal

Hello,

I now understand a bit more what you are trying to do.

But it is still blurry to me how it flickers and what do you call flicker.

No need to have several screens. This animation should be possible with just one screen and make texts appear one at the time with handleTickEvent().

I can see that the text is following the outline of the circle but it's important to understand that the pixels updated when the text appear will be a rectangle encompassing the text.

Anyway, does it run correctly on the Simulator ?

If you didn't touch the AT of the STM32F769I-DISCO (what version of the AT do you use ?), could you enclose your GUI project without the hardware (so only the TouchGFX/ folder without the generated files) ?

/Alexandre

H S
Associate III

Hi Alexandre,

My problem is that I see the refreshing of the logo when a new part of the text appear.

Maybe my sample/refresh rate or something like this is too low?

I have a GPIO signal (LED) of the VSYNC_FREQ from the sample project but I don't know at which code part/function I have to toggle the pins for RENDER_TIME and FRAME_RATE. Can you tell me in which functions/positions I have to toggle these two pins?

Yes, in the simulator it works correct without flickering at image refresh.

What do you mean with AT of the STM32F769I-DISCO?

I can share the TGFX project with you in private but not in the forum.

Thank you in advance.

Alexandre RENOUX
Principal

Hello,

It looks like the rendering time takes too long because in your case, this only happens when some text appears and it refreshes an important part of the screen.

The RENDER_TIME led is toggled at beginFrame() and endFrame() in TouchGFXHAL.cpp.

The time between two calls of HAL_DSI_TearingEffectCallback() is equivalent to the time for one frame.

AT stands for Application Template, it is basically the hardware code on top of where the GUI will be placed. For instance on the following picture, you can see the selected version is 3.0.1.

0693W000001roUpQAI.png

/Alexandre

H S
Associate III

Thanks for the clarification.

Yes, it's the AT V3.0.1 for the STM32F769I Disco but I use now a different DSI Display with the same resolution.

I adapt the driver for the display driver and the touch controller and it works so far. But of course it's possible that there is something wrong...

I added the Render Pin to the begin/endFrame() and the VSYNC is already in the TearingEffectCallback as you explained.

Yellow = VSYNC PIN

Blue = RENDER PIN

0693W000001rpxTQAQ.png

^ Here we see the ~600ms delay between two images (animated picture).

Otherwise the framerate is ~60Hz

0693W000001rpxYQAQ.png

^ Here the same screenshot with more zoom to the first event.

For me it seems that the rendering time isn't the problem.

What do you think?