ExtCPUFramebuffer: add size and offset params
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 12 Aug 2016 08:42:19 +0000 (11:42 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 12 Aug 2016 08:43:07 +0000 (11:43 +0300)
Add size and offset params to ExtCPUFramebuffer, so that we can fix
fbtestpat's test pattern size on larger virtual fbdevs.

kms++util/inc/kms++util/extcpuframebuffer.h
kms++util/src/extcpuframebuffer.cpp
utils/fbtestpat.cpp

index 5d3be7414ef8351f72ae0143ef6c84528ed47f40..3652ec403ecd784ce1a71afaac70cb58f5701a77 100644 (file)
@@ -9,9 +9,9 @@ class ExtCPUFramebuffer : public IMappedFramebuffer
 {
 public:
        ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
-                         uint8_t* buffer, uint32_t pitch);
+                         uint8_t* buffer, uint32_t size, uint32_t pitch, uint32_t offset);
        ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
-                         uint8_t* buffers[4], uint32_t pitches[4]);
+                         uint8_t* buffers[4], uint32_t sizes[4], uint32_t pitches[4], uint32_t offsets[4]);
        virtual ~ExtCPUFramebuffer();
 
        uint32_t width() const { return m_width; }
@@ -22,13 +22,14 @@ public:
 
        uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
        uint32_t size(unsigned plane) const { return m_planes[plane].size; }
-       uint32_t offset(unsigned plane) const { return 0; }
+       uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
        uint8_t* map(unsigned plane) { return m_planes[plane].map; }
 
 private:
        struct FramebufferPlane {
                uint32_t size;
                uint32_t stride;
+               uint32_t offset;
                uint8_t *map;
        };
 
index 232c778ae74cda8593457a2c5808cee1ed964887..feb3addd091f7d883e2e3be1fff6fd25fdf6d920 100644 (file)
@@ -7,7 +7,7 @@ namespace kms
 {
 
 ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
-                                    uint8_t* buffer, uint32_t pitch)
+                                    uint8_t* buffer, uint32_t size, uint32_t pitch, uint32_t offset)
        : m_width(width), m_height(height), m_format(format)
 {
        const PixelFormatInfo& format_info = get_pixel_format_info(m_format);
@@ -16,16 +16,16 @@ ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelForma
 
        ASSERT(m_num_planes == 1);
 
-       const PixelFormatPlaneInfo& pi = format_info.planes[0];
        FramebufferPlane& plane = m_planes[0];
 
        plane.stride = pitch;
-       plane.size = plane.stride * height / pi.ysub;
+       plane.size = size;
+       plane.offset = offset;
        plane.map = buffer;
 }
 
 ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format,
-                                    uint8_t* buffers[4], uint32_t pitches[4])
+                                    uint8_t* buffers[4], uint32_t sizes[4], uint32_t pitches[4], uint32_t offsets[4])
        : m_width(width), m_height(height), m_format(format)
 {
        const PixelFormatInfo& format_info = get_pixel_format_info(m_format);
@@ -33,11 +33,11 @@ ExtCPUFramebuffer::ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelForma
        m_num_planes = format_info.num_planes;
 
        for (unsigned i = 0; i < format_info.num_planes; ++i) {
-               const PixelFormatPlaneInfo& pi = format_info.planes[i];
                FramebufferPlane& plane = m_planes[i];
 
                plane.stride = pitches[i];
-               plane.size = plane.stride * height / pi.ysub;
+               plane.size = sizes[i];
+               plane.offset = offsets[i];
                plane.map = buffers[i];
        }
 }
index 6216c04c933152eea746761a979e7342a5dd540e..1c9a5f1a297119a4747178e9310291df7113aa33 100644 (file)
@@ -40,7 +40,8 @@ int main(int argc, char** argv)
 
        FAIL_IF(ptr == MAP_FAILED, "mmap failed");
 
-       ExtCPUFramebuffer buf(var.xres, var.yres_virtual, PixelFormat::XRGB8888, ptr, fix.line_length);
+       ExtCPUFramebuffer buf(var.xres, var.yres, PixelFormat::XRGB8888,
+                             ptr, var.yres_virtual * fix.line_length, fix.line_length, 0);
 
        printf("%s: res %dx%d, virtual %dx%d, line_len %d\n",
               fbdev,