libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf
The dma-buf allocator currently allocates from CMA and system heaps. Extend the dma-buf allocator to support allocating dma-buffers by creating memfd-s and turning those into dma-buffers using /dev/udmabuf. The buffers allocated through memfd/udmabuf are not suitable for zero-copy buffer sharing with other devices. Co-developed-by: Harvey Yang <chenghaoyang@chromium.org> Signed-off-by: Harvey Yang <chenghaoyang@chromium.org> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # Lenovo-x13s Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
447da4a11f
commit
ea4baaacc3
2 changed files with 90 additions and 15 deletions
|
@ -20,6 +20,7 @@ public:
|
|||
enum class DmaBufAllocatorFlag {
|
||||
CmaHeap = 1 << 0,
|
||||
SystemHeap = 1 << 1,
|
||||
UDmaBuf = 1 << 2,
|
||||
};
|
||||
|
||||
using DmaBufAllocatorFlags = Flags<DmaBufAllocatorFlag>;
|
||||
|
@ -30,7 +31,10 @@ public:
|
|||
UniqueFD alloc(const char *name, std::size_t size);
|
||||
|
||||
private:
|
||||
UniqueFD allocFromHeap(const char *name, std::size_t size);
|
||||
UniqueFD allocFromUDmaBuf(const char *name, std::size_t size);
|
||||
UniqueFD providerHandle_;
|
||||
DmaBufAllocatorFlag type_;
|
||||
};
|
||||
|
||||
LIBCAMERA_FLAGS_ENABLE_OPERATORS(DmaBufAllocator::DmaBufAllocatorFlag)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue