OrangePi3588Media/include/utils/dma_alloc.h
sladro c5abff62a0
Some checks are pending
CI / host-build (push) Waiting to run
CI / rk3588-cross-build (push) Waiting to run
修复花屏
2026-01-05 18:36:53 +08:00

43 lines
1.0 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <memory>
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<uint8_t*>(ptr); }
const uint8_t* data() const { return static_cast<const uint8_t*>(ptr); }
bool valid() const { return fd >= 0 && ptr != nullptr; }
};
using DmaBufferPtr = std::shared_ptr<DmaBuffer>;
// 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