2023-11-16 06:51 AM
Hello all,
I currently have to deal with a display which has an inactive zone in the middle. Its "interface" resolution is 540x1280px, but the 140px columns in the middle are not connected to the screen. That is, the display is of 400x1280px of resolution but the whole 540 columns have to be provided through its interface. In order to display a 400x1280px image, I need to split it into two 200x1280px regions and send them with the dead zone in the middle.
Here is a diagram about how this is working (active are in red):
I wonder if there is a way to use the LTDC peripheral to do this in an efficient way. I am thinking about using layers and/or windows to achieve this. Currently I am using QT to generate the content on-screen.
Does anybody have a clue on how to deal with this kind of component?
Thank you very much in advance!
Solved! Go to Solution.
2023-11-22 06:42 AM
Hello @APeña.1,
Unfortunately, with LTDC hardware, it's not possible to divide the layer refresh into blocks in the horizontal direction; you can only divide in the vertical direction using line detection. However, as you've mentioned, you can use the second layer to perform the material composition of your drawn content.
You can use offscreen rendering and the grab you content and send it to the display engine in two parts with appropriate positioning on the layers & screen.
Depending on your Qt based UI implementation there should be multiple ways to do offscreen rendering. One of these solutions would be to use the QQuickRenderControl Class | Qt Quick 5.15.16.
You can also implement your own display_engine which do the split and send back the two 200x1280px regions to the display.
Best Regards,
Akram
2023-11-17 05:48 AM
Hello @APeña.1 ,
Can you just highlight us the final aim this research ? Is it to save some DDR bandwith or power consumption ? Depending on the final target, maybe the solution would not be the same.
Kind regards,
Erwan
2023-11-17 08:11 AM
Hello @Erwan SZYMANSKI ,
the aim is to be able to display images in this display. Right now I have to split a 400x1280px frame in two, create a new 540x1280px frame with the hole in the middle and send that through the RGB interface. That does not allow me to just generate the 400x1280px frames with the GPU (Qt as a framework) and just output them without further core intervention.
My question is if there is a way to transform the 400x1280px frame the GPU generates (my Qt GUI) into the 540x1280px frame with the hole in the middle without having to copy it manually and lose a horrendous amount of performance. Is there anything which can be done with the LTDC driver or similar to do it per hardware?
2023-11-22 06:42 AM
Hello @APeña.1,
Unfortunately, with LTDC hardware, it's not possible to divide the layer refresh into blocks in the horizontal direction; you can only divide in the vertical direction using line detection. However, as you've mentioned, you can use the second layer to perform the material composition of your drawn content.
You can use offscreen rendering and the grab you content and send it to the display engine in two parts with appropriate positioning on the layers & screen.
Depending on your Qt based UI implementation there should be multiple ways to do offscreen rendering. One of these solutions would be to use the QQuickRenderControl Class | Qt Quick 5.15.16.
You can also implement your own display_engine which do the split and send back the two 200x1280px regions to the display.
Best Regards,
Akram