Hi!

Dne sreda, 29. januar 2020 ob 03:37:26 CET je Roman Beránek napisal(a):
> A good portion of LCD panels available on the market has a portrait
> orientation.
> Although the screen rotation can be performed in userspace, a system-wide
> solution would be much welcome.
> 
> Seeing the DE2 rotate core be involved in the recently submitted media
> driver
> for rotating CSI camera input, a question comes to mind: is it feasible to
> write
> an alternative driver incorporating the core inside the DRM subsystem in
> order
> to facilitate screen rotation?

Possible? Yes. Feasable? No.

It wouldn't be accepted upstream:
- 1 peripheral 1 driver rule
- natural fit to V4L2 M2M framework
- you can share buffers between V4L2 and DRM subsystem, this is also used in 
that camera app you saw
- you would need to write very complex DRM logic, it is better done in 
userspace

For last one, consider this: rotation engine can rotate only one buffer at the 
same time, but DRM driver supports 2 or 4 planes. Most of the time, only one 
is used, but sometimes, like in that camera app or video player app, 2 or more 
can be used. Would you cache buffers, rotate one by one and when all are 
finished, submitted them all at once to DRM driver? But then you would 
introduce very bad latency, which userspace would be unaware of. You would 
have audio/video sync issues, for example. There is writeback functionality in 
HW, which is not exposed in mainline yet. This would solve multiple buffers 
issue, but it's unusuable because at the time you get composed image back, it 
is already displayed. It's meant only for taking screenshots or mirroring on 
another display. Another issue - what do you do if two displays are active at 
the same time (A-series SoCs which have rotation engine have two independent 
display pipelines) - would you take care only for one display?

Anyway, AW doesn't really use this core much in Android. The only place I saw 
it is used is for video rotation in CedarX library. I guess display is rotated 
with GPU.

As I said earlier, buffer sharing between V4L2 and DRM is possible and simple. 
You just need to export buffer in V4L2 to get dma-buf handle and import it in 
DRM driver to get drmprime handle. You can also allocate all buffers in display 
driver (dumb buffers), export them to get dma-buf handles and import them in 
V4L2 driver. AFAIK you need to do that just once.

Best regards,
Jernej


-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/2400368.Lt9SDvczpP%40jernej-laptop.

Reply via email to