libcamera  v0.3.2
Supporting cameras in Linux since 2019
dma_buf_allocator.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2020, Raspberry Pi Ltd
4  *
5  * Helper class for dma-buf allocations.
6  */
7 
8 #pragma once
9 
10 #include <libcamera/base/flags.h>
12 
13 namespace libcamera {
14 
16 {
17 public:
18  enum class DmaBufAllocatorFlag {
19  CmaHeap = 1 << 0,
20  SystemHeap = 1 << 1,
21  UDmaBuf = 1 << 2,
22  };
23 
25 
28  bool isValid() const { return providerHandle_.isValid(); }
29  UniqueFD alloc(const char *name, std::size_t size);
30 
31 private:
32  UniqueFD allocFromHeap(const char *name, std::size_t size);
33  UniqueFD allocFromUDmaBuf(const char *name, std::size_t size);
34  UniqueFD providerHandle_;
35  DmaBufAllocatorFlag type_;
36 };
37 
39 
40 } /* namespace libcamera */
Helper class for dma-buf allocations.
Definition: dma_buf_allocator.h:16
bool isValid() const
Check if the DmaBufAllocator instance is valid.
Definition: dma_buf_allocator.h:28
DmaBufAllocator(DmaBufAllocatorFlags flags=DmaBufAllocatorFlag::CmaHeap)
Construct a DmaBufAllocator of a given type.
Definition: dma_buf_allocator.cpp:94
DmaBufAllocatorFlag
Type of the dma-buf provider.
Definition: dma_buf_allocator.h:18
@ CmaHeap
Allocate from a CMA dma-heap, providing physically-contiguous memory.
@ SystemHeap
Allocate from the system dma-heap, using the page allocator.
@ UDmaBuf
Allocate using a memfd + /dev/udmabuf.
~DmaBufAllocator()
Destroy the DmaBufAllocator instance.
UniqueFD alloc(const char *name, std::size_t size)
Allocate a dma-buf from the DmaBufAllocator.
Definition: dma_buf_allocator.cpp:197
Type-safe container for enum-based bitfields.
Definition: flags.h:16
unique_ptr-like wrapper for a file descriptor
Definition: unique_fd.h:18
bool isValid() const
Check if the UniqueFD owns a valid file descriptor.
Definition: unique_fd.h:61
Enum-based bit fields.
#define LIBCAMERA_FLAGS_ENABLE_OPERATORS(_enum)
Enable bitwise operations on the enum enumeration.
Top-level libcamera namespace.
Definition: backtrace.h:17
File descriptor wrapper that owns a file descriptor.