diff options
Diffstat (limited to 'kms++/src/omap/omapframebuffer.cpp')
-rw-r--r-- | kms++/src/omap/omapframebuffer.cpp | 53 |
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 |