summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kms++util/inc/kms++util/extcpuframebuffer.h7
-rw-r--r--kms++util/src/extcpuframebuffer.cpp12
-rw-r--r--utils/fbtestpat.cpp3
3 files changed, 12 insertions, 10 deletions
diff --git a/kms++util/inc/kms++util/extcpuframebuffer.h b/kms++util/inc/kms++util/extcpuframebuffer.h
index 5d3be74..3652ec4 100644
--- a/kms++util/inc/kms++util/extcpuframebuffer.h
+++ b/kms++util/inc/kms++util/extcpuframebuffer.h
@@ -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;
};
diff --git a/kms++util/src/extcpuframebuffer.cpp b/kms++util/src/extcpuframebuffer.cpp
index 232c778..feb3add 100644
--- a/kms++util/src/extcpuframebuffer.cpp
+++ b/kms++util/src/extcpuframebuffer.cpp
@@ -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];
}
}
diff --git a/utils/fbtestpat.cpp b/utils/fbtestpat.cpp
index 6216c04..1c9a5f1 100644
--- a/utils/fbtestpat.cpp
+++ b/utils/fbtestpat.cpp
@@ -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,