Rework framebuffer classes
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 3 Oct 2017 09:32:52 +0000 (12:32 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 3 Oct 2017 09:33:11 +0000 (12:33 +0300)
Drop (I)MappedFramebuffer, as it doesn't really provide any value, and
have most of the methods be present in IFramebuffer with default
exception throwing implementation.

This gives us simpler way to use the framebuffers, as almost always we
can just use a pointer to IFramebuffer.

20 files changed:
kms++/inc/kms++/dumbframebuffer.h
kms++/inc/kms++/extframebuffer.h
kms++/inc/kms++/framebuffer.h
kms++/inc/kms++/kms++.h
kms++/inc/kms++/mappedframebuffer.h [deleted file]
kms++/inc/kms++/omap/omapframebuffer.h
kms++/src/dumbframebuffer.cpp
kms++/src/extframebuffer.cpp
kms++/src/mappedframebuffer.cpp [deleted file]
kms++/src/omap/omapframebuffer.cpp
kms++util/inc/kms++util/cpuframebuffer.h
kms++util/inc/kms++util/extcpuframebuffer.h
kms++util/inc/kms++util/kms++util.h
kms++util/src/colorbar.cpp
kms++util/src/drawing.cpp
kms++util/src/testpat.cpp
py/pykms/pykmsbase.cpp
py/pykms/pykmsomap.cpp
py/pykms/pykmsutil.cpp
utils/kmstest.cpp

index 15d25d105af4485e8bbaa651f8933313539052f3..fb99d0eeec5f744aa5aa233b11f6e8d7cffb3d77 100644 (file)
@@ -1,12 +1,12 @@
 #pragma once
 
-#include "mappedframebuffer.h"
+#include "framebuffer.h"
 #include "pixelformats.h"
 
 namespace kms
 {
 
-class DumbFramebuffer : public MappedFramebuffer
+class DumbFramebuffer : public Framebuffer
 {
 public:
        DumbFramebuffer(Card& card, uint32_t width, uint32_t height, const std::string& fourcc);
index 1ec614fbd07e1095a447291e832575e0f48af8c8..5f0660c9498beff975283fbd740bd63b7f9c9314 100644 (file)
@@ -1,12 +1,12 @@
 #pragma once
 
-#include "mappedframebuffer.h"
+#include "framebuffer.h"
 #include "pixelformats.h"
 
 namespace kms
 {
 
-class ExtFramebuffer : public MappedFramebuffer
+class ExtFramebuffer : public Framebuffer
 {
 public:
        ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
index faf2e71757ae6942c0ea5ea00528b00c15f3977a..3d43d08a26bb52f4efc9ad5006e3bf79b7a5f33d 100644 (file)
@@ -5,7 +5,24 @@
 
 namespace kms
 {
-class Framebuffer : public DrmObject
+class IFramebuffer {
+public:
+       virtual ~IFramebuffer() { }
+
+       virtual uint32_t width() const = 0;
+       virtual uint32_t height() const = 0;
+
+       virtual PixelFormat format() const { throw std::runtime_error("not implemented"); }
+       virtual unsigned num_planes() const { throw std::runtime_error("not implemented"); }
+
+       virtual uint32_t stride(unsigned plane) const { throw std::runtime_error("not implemented"); }
+       virtual uint32_t size(unsigned plane) const { throw std::runtime_error("not implemented"); }
+       virtual uint32_t offset(unsigned plane) const { throw std::runtime_error("not implemented"); }
+       virtual uint8_t* map(unsigned plane) { throw std::runtime_error("not implemented"); }
+       virtual int prime_fd(unsigned plane) { throw std::runtime_error("not implemented"); }
+};
+
+class Framebuffer : public DrmObject, public IFramebuffer
 {
 public:
        Framebuffer(Card& card, uint32_t id);
@@ -23,20 +40,4 @@ private:
        uint32_t m_height;
 };
 
-class IMappedFramebuffer {
-public:
-       virtual ~IMappedFramebuffer() { }
-
-       virtual uint32_t width() const = 0;
-       virtual uint32_t height() const = 0;
-
-       virtual PixelFormat format() const = 0;
-       virtual unsigned num_planes() const = 0;
-
-       virtual uint32_t stride(unsigned plane) const = 0;
-       virtual uint32_t size(unsigned plane) const = 0;
-       virtual uint32_t offset(unsigned plane) const = 0;
-       virtual uint8_t* map(unsigned plane) = 0;
-};
-
 }
index 6fc6977db9e5b3ac19e74ae6877b9761261d471b..3365ef7bb77430face1174614f9c075f4d6f4a75 100644 (file)
@@ -8,7 +8,6 @@
 #include "framebuffer.h"
 #include "dumbframebuffer.h"
 #include "extframebuffer.h"
-#include "mappedframebuffer.h"
 #include "plane.h"
 #include "property.h"
 #include "blob.h"
diff --git a/kms++/inc/kms++/mappedframebuffer.h b/kms++/inc/kms++/mappedframebuffer.h
deleted file mode 100644 (file)
index 2905136..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include "framebuffer.h"
-
-namespace kms
-{
-
-class MappedFramebuffer : public Framebuffer, public IMappedFramebuffer
-{
-public:
-       virtual ~MappedFramebuffer() { }
-
-protected:
-       MappedFramebuffer(Card& card, uint32_t id);
-       MappedFramebuffer(Card& card, uint32_t width, uint32_t height);
-
-public:
-       virtual uint32_t width() const = 0;
-       virtual uint32_t height() const = 0;
-
-};
-
-}
index d1152b571e0e970570e06485b9f009c37d84791e..70bf946b37ce540bda4d98e63a652c58eaa240e7 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <kms++/mappedframebuffer.h>
+#include <kms++/framebuffer.h>
 #include <kms++/pixelformats.h>
 
 struct omap_bo;
@@ -9,7 +9,7 @@ namespace kms
 {
 class OmapCard;
 
-class OmapFramebuffer : public MappedFramebuffer
+class OmapFramebuffer : public Framebuffer
 {
 public:
        enum Flags
index 9de7ee1cc960557e48edfd82ff603d91cb927a27..b21e8ff0072e6fce3fbf0634311d6d40552455d9 100644 (file)
@@ -25,7 +25,7 @@ DumbFramebuffer::DumbFramebuffer(Card &card, uint32_t width, uint32_t height, co
 }
 
 DumbFramebuffer::DumbFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format)
-       :MappedFramebuffer(card, width, height), m_format(format)
+       :Framebuffer(card, width, height), m_format(format)
 {
        Create();
 }
index f50c36ec939ea3de427c852584a3528d0e50ab53..c1f562e282951662fa538be7439e71ffa09f4f45 100644 (file)
@@ -14,7 +14,7 @@ namespace kms
 
 ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
                               vector<uint32_t> handles, vector<uint32_t> pitches, vector<uint32_t> offsets)
-       : MappedFramebuffer(card, width, height)
+       : Framebuffer(card, width, height)
 {
        m_format = format;
 
@@ -44,7 +44,7 @@ ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, Pixe
 
 ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
                               vector<int> fds, vector<uint32_t> pitches, vector<uint32_t> offsets)
-       : MappedFramebuffer(card, width, height)
+       : Framebuffer(card, width, height)
 {
        int r;
 
diff --git a/kms++/src/mappedframebuffer.cpp b/kms++/src/mappedframebuffer.cpp
deleted file mode 100644 (file)
index 21e082f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <kms++/kms++.h>
-
-using namespace std;
-
-namespace kms
-{
-
-MappedFramebuffer::MappedFramebuffer(Card& card, uint32_t id)
-       : Framebuffer(card, id)
-{
-
-}
-
-MappedFramebuffer::MappedFramebuffer(Card& card, uint32_t width, uint32_t height)
-       : Framebuffer(card, width, height)
-{
-
-}
-
-}
index b27ca2258f7bca9b1eb88c7abba0b9262ad96ae2..f33a28686709c5a960a443d9e8f47640be9d34bb 100644 (file)
@@ -32,7 +32,7 @@ OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height
 }
 
 OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format, Flags flags)
-       :MappedFramebuffer(card, width, height), m_omap_card(card), m_format(format)
+       :Framebuffer(card, width, height), m_omap_card(card), m_format(format)
 {
        Create(flags);
 }
index 14985288214a189b41e8d03234ad860f1a7cf661..4273e0d7ee6733ae0c58ab6e974a61b24442aac6 100644 (file)
@@ -5,7 +5,7 @@
 namespace kms
 {
 
-class CPUFramebuffer : public IMappedFramebuffer {
+class CPUFramebuffer : public IFramebuffer {
 public:
        CPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format);
 
index 3652ec403ecd784ce1a71afaac70cb58f5701a77..92ca43a72f83d385ae0daef4f5945a19b0ac9699 100644 (file)
@@ -5,7 +5,7 @@
 namespace kms
 {
 
-class ExtCPUFramebuffer : public IMappedFramebuffer
+class ExtCPUFramebuffer : public IFramebuffer
 {
 public:
        ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
index d45497ec2b2b6791a66aaf14c5a76323f93fbe08..8e45b0df3cde923e6b675ff2967abcc6acab50f2 100644 (file)
 
 namespace kms
 {
-class IMappedFramebuffer;
+class IFramebuffer;
 
-void draw_rgb_pixel(IMappedFramebuffer& buf, unsigned x, unsigned y, RGB color);
-void draw_yuv422_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y, YUV yuv1, YUV yuv2);
-void draw_yuv420_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y,
+void draw_rgb_pixel(IFramebuffer& buf, unsigned x, unsigned y, RGB color);
+void draw_yuv422_macropixel(IFramebuffer& buf, unsigned x, unsigned y, YUV yuv1, YUV yuv2);
+void draw_yuv420_macropixel(IFramebuffer& buf, unsigned x, unsigned y,
                                   YUV yuv1, YUV yuv2, YUV yuv3, YUV yuv4);
-void draw_rect(IMappedFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color);
-void draw_text(IMappedFramebuffer& buf, uint32_t x, uint32_t y, const std::string& str, RGB color);
+void draw_rect(IFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color);
+void draw_text(IFramebuffer& buf, uint32_t x, uint32_t y, const std::string& str, RGB color);
 
-void draw_color_bar(IMappedFramebuffer& buf, int old_xpos, int xpos, int width);
+void draw_color_bar(IFramebuffer& buf, int old_xpos, int xpos, int width);
 
-void draw_test_pattern(IMappedFramebuffer &fb, YUVType yuvt = YUVType::BT601_Lim);
+void draw_test_pattern(IFramebuffer &fb, YUVType yuvt = YUVType::BT601_Lim);
 }
 
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
index e2d257b2cbcc380f8c611861395a910019e7f998..c08ed9d8986b655bba279c143553ede64903a2b0 100644 (file)
@@ -35,7 +35,7 @@ static const uint16_t colors16[] = {
        colors32[11].rgb565(),
 };
 
-static void drm_draw_color_bar_rgb888(IMappedFramebuffer& buf, int old_xpos, int xpos, int width)
+static void drm_draw_color_bar_rgb888(IFramebuffer& buf, int old_xpos, int xpos, int width)
 {
        for (unsigned y = 0; y < buf.height(); ++y) {
                RGB bcol = colors32[y * ARRAY_SIZE(colors32) / buf.height()];
@@ -51,7 +51,7 @@ static void drm_draw_color_bar_rgb888(IMappedFramebuffer& buf, int old_xpos, int
        }
 }
 
-static void drm_draw_color_bar_rgb565(IMappedFramebuffer& buf, int old_xpos, int xpos, int width)
+static void drm_draw_color_bar_rgb565(IFramebuffer& buf, int old_xpos, int xpos, int width)
 {
        static_assert(ARRAY_SIZE(colors32) == ARRAY_SIZE(colors16), "bad colors arrays");
 
@@ -69,7 +69,7 @@ static void drm_draw_color_bar_rgb565(IMappedFramebuffer& buf, int old_xpos, int
        }
 }
 
-static void drm_draw_color_bar_semiplanar_yuv(IMappedFramebuffer& buf, int old_xpos, int xpos, int width)
+static void drm_draw_color_bar_semiplanar_yuv(IFramebuffer& buf, int old_xpos, int xpos, int width)
 {
        const uint8_t colors[] = {
                0xff,
@@ -97,7 +97,7 @@ static void drm_draw_color_bar_semiplanar_yuv(IMappedFramebuffer& buf, int old_x
        }
 }
 
-void draw_color_bar(IMappedFramebuffer& buf, int old_xpos, int xpos, int width)
+void draw_color_bar(IFramebuffer& buf, int old_xpos, int xpos, int width)
 {
        switch (buf.format()) {
        case PixelFormat::NV12:
index ffb7febf1530448bbb6cfabd146a7b0ec0159b16..a187dc08409541110717da327506aa40453d7df2 100644 (file)
@@ -6,7 +6,7 @@ using namespace std;
 
 namespace kms
 {
-void draw_rgb_pixel(IMappedFramebuffer& buf, unsigned x, unsigned y, RGB color)
+void draw_rgb_pixel(IFramebuffer& buf, unsigned x, unsigned y, RGB color)
 {
        switch (buf.format()) {
        case PixelFormat::XRGB8888:
@@ -56,7 +56,7 @@ void draw_rgb_pixel(IMappedFramebuffer& buf, unsigned x, unsigned y, RGB color)
        }
 }
 
-void draw_yuv422_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y, YUV yuv1, YUV yuv2)
+void draw_yuv422_macropixel(IFramebuffer& buf, unsigned x, unsigned y, YUV yuv1, YUV yuv2)
 {
        ASSERT((x & 1) == 0);
 
@@ -101,7 +101,7 @@ void draw_yuv422_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y, YUV
        }
 }
 
-void draw_yuv420_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y,
+void draw_yuv420_macropixel(IFramebuffer& buf, unsigned x, unsigned y,
                            YUV yuv1, YUV yuv2, YUV yuv3, YUV yuv4)
 {
        ASSERT((x & 1) == 0);
@@ -143,7 +143,7 @@ void draw_yuv420_macropixel(IMappedFramebuffer& buf, unsigned x, unsigned y,
        }
 }
 
-void draw_rect(IMappedFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color)
+void draw_rect(IFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color)
 {
        unsigned i, j;
        YUV yuvcolor = color.yuv();
@@ -199,7 +199,7 @@ static bool get_char_pixel(char c, uint32_t x, uint32_t y)
        return bit;
 }
 
-static void draw_char(IMappedFramebuffer& buf, uint32_t xpos, uint32_t ypos, char c, RGB color)
+static void draw_char(IFramebuffer& buf, uint32_t xpos, uint32_t ypos, char c, RGB color)
 {
        unsigned x, y;
        YUV yuvcolor = color.yuv();
@@ -257,7 +257,7 @@ static void draw_char(IMappedFramebuffer& buf, uint32_t xpos, uint32_t ypos, cha
        }
 }
 
-void draw_text(IMappedFramebuffer& buf, uint32_t x, uint32_t y, const string& str, RGB color)
+void draw_text(IFramebuffer& buf, uint32_t x, uint32_t y, const string& str, RGB color)
 {
        for(unsigned i = 0; i < str.size(); i++)
                draw_char(buf, (x + 8 * i), y, str[i], color);
index faacda3a437f8c377b16a8c427e5ad2a864678c3..cf43d002a31dd1c40021775d12746bfc287d5282 100644 (file)
@@ -13,7 +13,7 @@ using namespace std;
 namespace kms
 {
 
-static RGB get_test_pattern_pixel(IMappedFramebuffer& fb, unsigned x, unsigned y)
+static RGB get_test_pattern_pixel(IFramebuffer& fb, unsigned x, unsigned y)
 {
        const unsigned w = fb.width();
        const unsigned h = fb.height();
@@ -97,7 +97,7 @@ static RGB get_test_pattern_pixel(IMappedFramebuffer& fb, unsigned x, unsigned y
        }
 }
 
-static void draw_test_pattern_part(IMappedFramebuffer& fb, unsigned start_y, unsigned end_y, YUVType yuvt)
+static void draw_test_pattern_part(IFramebuffer& fb, unsigned start_y, unsigned end_y, YUVType yuvt)
 {
        unsigned x, y;
        unsigned w = fb.width();
@@ -151,7 +151,7 @@ static void draw_test_pattern_part(IMappedFramebuffer& fb, unsigned start_y, uns
        }
 }
 
-static void draw_test_pattern_impl(IMappedFramebuffer& fb, YUVType yuvt)
+static void draw_test_pattern_impl(IFramebuffer& fb, YUVType yuvt)
 {
        if (fb.height() < 20) {
                draw_test_pattern_part(fb, 0, fb.height(), yuvt);
@@ -181,7 +181,7 @@ static void draw_test_pattern_impl(IMappedFramebuffer& fb, YUVType yuvt)
                t.join();
 }
 
-void draw_test_pattern(IMappedFramebuffer &fb, YUVType yuvt)
+void draw_test_pattern(IFramebuffer &fb, YUVType yuvt)
 {
 #ifdef DRAW_PERF_PRINT
        Stopwatch sw;
index e53fe54f18ee4c60fe7d051babdc110e3679d588..258167a9834b11a8527789aa5bcc961ace39a842 100644 (file)
@@ -102,12 +102,12 @@ void init_pykmsbase(py::module &m)
        py::class_<Framebuffer>(m, "Framebuffer", py::base<DrmObject>())
                        ;
 
-       py::class_<MappedFramebuffer>(m, "MappedFramebuffer", py::base<Framebuffer>())
-                       .def_property_readonly("width", &MappedFramebuffer::width)
-                       .def_property_readonly("height", &MappedFramebuffer::height)
+       py::class_<Framebuffer>(m, "Framebuffer", py::base<Framebuffer>())
+                       .def_property_readonly("width", &Framebuffer::width)
+                       .def_property_readonly("height", &Framebuffer::height)
                        ;
 
-       py::class_<DumbFramebuffer>(m, "DumbFramebuffer", py::base<MappedFramebuffer>())
+       py::class_<DumbFramebuffer>(m, "DumbFramebuffer", py::base<Framebuffer>())
                        .def(py::init<Card&, uint32_t, uint32_t, const string&>(),
                             py::keep_alive<1, 2>())    // Keep Card alive until this is destructed
                        .def(py::init<Card&, uint32_t, uint32_t, PixelFormat>(),
@@ -119,7 +119,7 @@ void init_pykmsbase(py::module &m)
                        .def("offset", &DumbFramebuffer::offset)
                        ;
 
-       py::class_<ExtFramebuffer>(m, "ExtFramebuffer", py::base<MappedFramebuffer>())
+       py::class_<ExtFramebuffer>(m, "ExtFramebuffer", py::base<Framebuffer>())
                        .def(py::init<Card&, uint32_t, uint32_t, PixelFormat, vector<int>, vector<uint32_t>, vector<uint32_t>>(),
                             py::keep_alive<1, 2>())    // Keep Card alive until this is destructed
                        ;
index 0c3a8eecda2a3fef47a480a9a50a611680b8cee1..2662a18a6f29c33cc16b03ccf803761a76d90be8 100644 (file)
@@ -14,7 +14,7 @@ void init_pykmsomap(py::module &m)
                        .def(py::init<>())
                        ;
 
-       py::class_<OmapFramebuffer> omapfb(m, "OmapFramebuffer", py::base<MappedFramebuffer>());
+       py::class_<OmapFramebuffer> omapfb(m, "OmapFramebuffer", py::base<Framebuffer>());
 
        // XXX we should use py::arithmetic() here to support or and and operators, but it's not supported in the pybind11 we use
        py::enum_<OmapFramebuffer::Flags>(omapfb, "Flags")
index a5a6041a22ebf40c38ce8ee1522973a8ffe7d942..10dee8136fe7f5de1185e64af208d4e80355008f 100644 (file)
@@ -47,16 +47,16 @@ void init_pykmstest(py::module &m)
                        .value("BT709_Full", YUVType::BT709_Full)
                        ;
 
-       // Use lambdas to handle IMappedFramebuffer
-       m.def("draw_test_pattern", [](MappedFramebuffer& fb, YUVType yuvt) { draw_test_pattern(fb, yuvt); },
+       // Use lambdas to handle IFramebuffer
+       m.def("draw_test_pattern", [](Framebuffer& fb, YUVType yuvt) { draw_test_pattern(fb, yuvt); },
              py::arg("fb"),
              py::arg("yuvt") = YUVType::BT601_Lim);
-       m.def("draw_color_bar", [](MappedFramebuffer& fb, int old_xpos, int xpos, int width) {
+       m.def("draw_color_bar", [](Framebuffer& fb, int old_xpos, int xpos, int width) {
                draw_color_bar(fb, old_xpos, xpos, width);
        } );
-       m.def("draw_rect", [](MappedFramebuffer& fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color) {
+       m.def("draw_rect", [](Framebuffer& fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color) {
                draw_rect(fb, x, y, w, h, color);
        } );
-       m.def("draw_text", [](MappedFramebuffer& fb, uint32_t x, uint32_t y, const string& str, RGB color) {
+       m.def("draw_text", [](Framebuffer& fb, uint32_t x, uint32_t y, const string& str, RGB color) {
                draw_text(fb, x, y, str, color); } );
 }
index ba7d7906d7955d511a42838e00b612887168f91a..63b7d44df51a3e92f9cc27c437bf555cc3b0d5fb 100644 (file)
@@ -30,7 +30,7 @@ struct PlaneInfo
        unsigned view_w;
        unsigned view_h;
 
-       vector<MappedFramebuffer*> fbs;
+       vector<Framebuffer*> fbs;
 };
 
 struct OutputInfo
@@ -41,7 +41,7 @@ struct OutputInfo
        Plane* primary_plane;
        Videomode mode;
        bool user_set_crtc;
-       vector<MappedFramebuffer*> fbs;
+       vector<Framebuffer*> fbs;
 
        vector<PlaneInfo> planes;
 };
@@ -288,9 +288,9 @@ static void parse_plane(Card& card, const string& plane_str, const OutputInfo& o
                pinfo.y = output.mode.vdisplay / 2 - pinfo.h / 2;
 }
 
-static vector<MappedFramebuffer*> get_default_fb(Card& card, unsigned width, unsigned height)
+static vector<Framebuffer*> get_default_fb(Card& card, unsigned width, unsigned height)
 {
-       vector<MappedFramebuffer*> v;
+       vector<Framebuffer*> v;
 
        for (unsigned i = 0; i < s_num_buffers; ++i)
                v.push_back(new DumbFramebuffer(card, width, height, PixelFormat::XRGB8888));
@@ -298,7 +298,7 @@ static vector<MappedFramebuffer*> get_default_fb(Card& card, unsigned width, uns
        return v;
 }
 
-static vector<MappedFramebuffer*> parse_fb(Card& card, const string& fb_str, unsigned def_w, unsigned def_h)
+static vector<Framebuffer*> parse_fb(Card& card, const string& fb_str, unsigned def_w, unsigned def_h)
 {
        unsigned w = def_w;
        unsigned h = def_h;
@@ -323,7 +323,7 @@ static vector<MappedFramebuffer*> parse_fb(Card& card, const string& fb_str, uns
                        format = FourCCToPixelFormat(sm[3]);
        }
 
-       vector<MappedFramebuffer*> v;
+       vector<Framebuffer*> v;
 
        for (unsigned i = 0; i < s_num_buffers; ++i)
                v.push_back(new DumbFramebuffer(card, w, h, format));
@@ -883,12 +883,12 @@ private:
                queue_next();
        }
 
-       static unsigned get_bar_pos(MappedFramebuffer* fb, unsigned frame_num)
+       static unsigned get_bar_pos(Framebuffer* fb, unsigned frame_num)
        {
                return (frame_num * bar_speed) % (fb->width() - bar_width + 1);
        }
 
-       static void draw_bar(MappedFramebuffer* fb, unsigned frame_num)
+       static void draw_bar(Framebuffer* fb, unsigned frame_num)
        {
                int old_xpos = frame_num < s_num_buffers ? -1 : get_bar_pos(fb, frame_num - s_num_buffers);
                int new_xpos = get_bar_pos(fb, frame_num);