aboutsummaryrefslogtreecommitdiff
path: root/kms++/src/omap/omapframebuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kms++/src/omap/omapframebuffer.cpp')
-rw-r--r--kms++/src/omap/omapframebuffer.cpp53
1 files changed, 31 insertions, 22 deletions
diff --git a/kms++/src/omap/omapframebuffer.cpp b/kms++/src/omap/omapframebuffer.cpp
index f33a286..3bea13e 100644
--- a/kms++/src/omap/omapframebuffer.cpp
+++ b/kms++/src/omap/omapframebuffer.cpp
@@ -18,23 +18,22 @@ extern "C" {
}
#define __round_mask(x, y) ((__typeof__(x))((y)-1))
-#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
+#define round_up(x, y) ((((x)-1) | __round_mask(x, y)) + 1)
#define PAGE_SIZE 4096
using namespace std;
namespace kms
{
-
OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const string& fourcc, Flags flags)
: OmapFramebuffer(card, width, height, FourCCToPixelFormat(fourcc), flags)
{
}
OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format, Flags flags)
- :Framebuffer(card, width, height), m_omap_card(card), m_format(format)
+ : Framebuffer(card, width, height), m_omap_card(card), m_format(format)
{
- Create(flags);
+ Create(width, height, format, flags);
}
OmapFramebuffer::~OmapFramebuffer()
@@ -42,9 +41,9 @@ OmapFramebuffer::~OmapFramebuffer()
Destroy();
}
-void OmapFramebuffer::Create(Flags buffer_flags)
+void OmapFramebuffer::Create(uint32_t width, uint32_t height, PixelFormat format, Flags buffer_flags)
{
- const PixelFormatInfo& format_info = get_pixel_format_info(m_format);
+ const PixelFormatInfo& format_info = get_pixel_format_info(format);
m_num_planes = format_info.num_planes;
@@ -68,9 +67,9 @@ void OmapFramebuffer::Create(Flags buffer_flags)
uint32_t stride;
if (!(buffer_flags & Flags::Tiled)) {
- stride = width() * pi.bitspp / 8;
+ stride = width * pi.bitspp / 8;
- uint32_t size = stride * height() / pi.ysub;
+ uint32_t size = stride * height / pi.ysub;
bo = omap_bo_new(m_omap_card.dev(), size, flags);
if (!bo)
@@ -78,36 +77,46 @@ void OmapFramebuffer::Create(Flags buffer_flags)
} else {
unsigned bitspertiler;
- switch (m_format) {
+ switch (format) {
case PixelFormat::NV12:
- bitspertiler = i == 0 ? 8 : 16; break;
+ bitspertiler = i == 0 ? 8 : 16;
+ break;
case PixelFormat::YUYV:
case PixelFormat::UYVY:
- bitspertiler = 32; break;
+ bitspertiler = 32;
+ break;
case PixelFormat::ARGB8888:
case PixelFormat::XRGB8888:
- bitspertiler = 32; break;
+ bitspertiler = 32;
+ break;
case PixelFormat::RGB565:
- bitspertiler = 16; break;
+ bitspertiler = 16;
+ break;
default:
throw invalid_argument("unimplemented format");
}
switch (bitspertiler) {
- case 8: flags |= OMAP_BO_TILED_8; break;
- case 16: flags |= OMAP_BO_TILED_16; break;
- case 32: flags |= OMAP_BO_TILED_32; break;
+ case 8:
+ flags |= OMAP_BO_TILED_8;
+ break;
+ case 16:
+ flags |= OMAP_BO_TILED_16;
+ break;
+ case 32:
+ flags |= OMAP_BO_TILED_32;
+ break;
default:
throw invalid_argument("bad bitspertiler");
}
- uint32_t width_tiler = width() * pi.bitspp / bitspertiler;
+ uint32_t width_tiler = width * pi.bitspp / bitspertiler;
- bo = omap_bo_new_tiled(m_omap_card.dev(), width_tiler, height(), flags);
+ bo = omap_bo_new_tiled(m_omap_card.dev(), width_tiler, height, flags);
if (!bo)
throw invalid_argument(string("omap_bo_new_tiled failed: ") + strerror(errno));
- stride = round_up(width() * pi.bitspp / 8, PAGE_SIZE);
+ stride = round_up(width * pi.bitspp / 8, PAGE_SIZE);
}
plane.omap_bo = bo;
@@ -124,8 +133,8 @@ void OmapFramebuffer::Create(Flags buffer_flags)
uint32_t pitches[4] = { m_planes[0].stride, m_planes[1].stride };
uint32_t offsets[4] = { m_planes[0].offset, m_planes[1].offset };
uint32_t id;
- int r = drmModeAddFB2(card().fd(), width(), height(), (uint32_t)format(),
- bo_handles, pitches, offsets, &id, 0);
+ int r = drmModeAddFB2(card().fd(), width, height, (uint32_t)format,
+ bo_handles, pitches, offsets, &id, 0);
if (r)
throw invalid_argument(string("drmModeAddFB2 failed: ") + strerror(errno));
@@ -181,4 +190,4 @@ int OmapFramebuffer::prime_fd(unsigned int plane)
return fd;
}
-}
+} // namespace kms