Le jeudi 16 mai 2024 à 14:27 +0300, Laurent Pinchart a écrit : > Hi Nicolas, > > On Wed, May 15, 2024 at 01:43:58PM -0400, nicolas.dufresne@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx wrote: > > Le mardi 14 mai 2024 à 23:42 +0300, Laurent Pinchart a écrit : > > > > You'll hit the same limitation as we hit in GStreamer, which is that KMS driver > > > > only offer allocation for render buffers and most of them are missing allocators > > > > for YUV buffers, even though they can import in these formats. (kms allocators, > > > > except dumb, which has other issues, are format aware). > > > > > > My experience on Arm platforms is that the KMS drivers offer allocation > > > for scanout buffers, not render buffers, and mostly using the dumb > > > allocator API. If the KMS device can scan out YUV natively, YUV buffer > > > allocation should be supported. Am I missing something here ? > > > > There is two APIs, Dumb is the legacy allocation API, only used by display > > Is it legacy only ? I understand the dumb buffers API to be officially > supported, to allocate scanout buffers suitable for software rendering. > > > drivers indeed, and the API does not include a pixel format or a modifier. The > > allocation of YUV buffer has been made through a small hack, > > > > bpp = number of bits per component (of luma plane if multiple planes) > > width = width > > height = height * X > > > > Where X will vary, "3 / 2" is used for 420 subsampling, "2" for 422 and "3" for > > 444. It is far from idea, requires deep knowledge of each formats in the > > application > > I'm not sure I see that as an issue, but our experiences and uses cases > may vary :-) Its extra burden, and does not scale to all available pixel formats. My reply was for readers education as I feel like a lot of linux-media dev don't have a clue of what is going on at the rendering side. This ensure a minimum knowledge to everyone commenting. And yes, within the GFX community, Dumb allocation is to be killed and replacement completely in the future, it simply does not have a complete replacement yet. > > > and cannot allocate each planes seperatly. > > For semi-planar or planar formats, unless I'm mistaken, you can either > allocate a single buffer and use it with appropriate offsets when > constructing your framebuffer (with DRM_IOCTL_MODE_ADDFB2), or allocate > one buffer per plane. We have use cases were single allocation is undesirable, but I don't really feel like this is important enough for me to type this explanation. Ping me if you care. > > > The second is to use the driver specific allocation API. This is then abstracted > > by GBM. This allows allocating render buffers with notably modifiers and/or use > > cases. But no support for YUV formats or multi-planar formats. > > GBM is the way to go for render buffers indeed. It has been designed > with only graphics buffer management use cases in mind, so it's > unfortunately not an option as a generic allocator, at least in its > current form. > What I perhaps should have highlighted that is that all these allocators in the GFX (called DRM, but meh) subsystem abstract away some deep knowledge of the HW requirements. Heaps are lower level APIs that assume that userspace have this knowledge. The Android and ChromeOS solution is to take the implementation from the kernel and move it into userspace, see minigbm from chromeos, or gralloc from Android. As these two projects are device centric, they are not usable on generic Linux. Heaps might have some future, but not without other piece of the puzzle. To come back to you wanting heaps in libcamera, because it makes them better for rendered or display. Well today this is a lie you make to yourself, because this is just a tiny bit of the puzzle, it is pure luck if you allocate dmabuf is usable but a foreign device. At the end of the day, this is just a fallback to satisfy that application are not forced to allocate that memory in libcamera. Thus, I strongly recommend the udmabuf in the short term. Finally, moving to heaps when the reported issue is resolved, as then it gives more options and reduce the number of layers. Nicolas