#pragma once #include #include #include namespace rk3588 { struct DmaBuffer { int fd = -1; void* ptr = nullptr; size_t size = 0; DmaBuffer() = default; ~DmaBuffer(); DmaBuffer(const DmaBuffer&) = delete; DmaBuffer& operator=(const DmaBuffer&) = delete; DmaBuffer(DmaBuffer&& other) noexcept; DmaBuffer& operator=(DmaBuffer&& other) noexcept; uint8_t* data() { return static_cast(ptr); } const uint8_t* data() const { return static_cast(ptr); } bool valid() const { return fd >= 0 && ptr != nullptr; } }; using DmaBufferPtr = std::shared_ptr; // Allocate DMA buffer using dma_heap // Returns nullptr on failure DmaBufferPtr DmaAlloc(size_t size); // Sync DMA buffer for CPU access void DmaSyncStart(DmaBuffer* buf); void DmaSyncEnd(DmaBuffer* buf); // Sync DMA-BUF fd for CPU access (when only fd is available on Frame) void DmaSyncStartFd(int fd); void DmaSyncEndFd(int fd); } // namespace rk3588