index 2f23a33ed538e7c793827feff640fe03265b3f5f..12e59b7d4188db12b411aa33b94d5a7969137071 100644 (file)
#include <cstring>
+#include <cerrno>
+
#include <stdexcept>
#include <sys/mman.h>
#include <xf86drm.h>
{
ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
- uint32_t handles[], uint32_t pitches[], uint32_t offsets[])
- : MappedFramebuffer(card, width, height)
+ vector<uint32_t> handles, vector<uint32_t> pitches, vector<uint32_t> offsets)
+ : Framebuffer(card, width, height)
{
m_format = format;
}
uint32_t id;
- int r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format, handles, pitches, offsets, &id, 0);
+ int r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format, handles.data(), pitches.data(), offsets.data(), &id, 0);
if (r)
throw std::invalid_argument(string("Failed to create ExtFramebuffer: ") + strerror(r));
}
ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
- int fds[4], uint32_t pitches[4], uint32_t offsets[4])
- : MappedFramebuffer(card, width, height)
+ vector<int> fds, vector<uint32_t> pitches, vector<uint32_t> offsets)
+ : Framebuffer(card, width, height)
{
int r;
uint32_t id;
uint32_t bo_handles[4] = { m_planes[0].handle, m_planes[1].handle };
r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format,
- bo_handles, pitches, offsets, &id, 0);
+ bo_handles, pitches.data(), offsets.data(), &id, 0);
if (r)
throw invalid_argument(string("drmModeAddFB2 failed: ") + strerror(errno));
return p.map;
}
+int ExtFramebuffer::prime_fd(unsigned plane)
+{
+ FramebufferPlane& p = m_planes[plane];
+
+ if (!p.prime_fd)
+ throw invalid_argument("no primefb for non-dmabuf fb");
+
+ return p.prime_fd;
+}
+
}