From a41cbe24c45975aab44389e7e894582ee2622806 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Tue, 8 Mar 2016 15:27:27 +0200 Subject: libkmstest: color & draw_rect --- libkmstest/color.cpp | 19 ++++++++++++++++--- libkmstest/color.h | 28 ++++++++++++---------------- libkmstest/colorbar.cpp | 2 +- libkmstest/kmstest.h | 5 +++++ libkmstest/testpat.cpp | 20 ++++++++++++++++++-- py/pykms.i | 1 + 6 files changed, 53 insertions(+), 22 deletions(-) diff --git a/libkmstest/color.cpp b/libkmstest/color.cpp index 78012ac..3ad8203 100644 --- a/libkmstest/color.cpp +++ b/libkmstest/color.cpp @@ -9,19 +9,32 @@ RGB::RGB() } RGB::RGB(uint8_t r, uint8_t g, uint8_t b) + :RGB(255, r, g, b) +{ +} + +RGB::RGB(uint8_t a, uint8_t r, uint8_t g, uint8_t b) { this->r = r; this->g = g; this->b = b; - this->a = 255; + this->a = a; +} + +RGB::RGB(uint32_t argb) +{ + this->b = (argb >> 0) & 0xff; + this->g = (argb >> 8) & 0xff; + this->r = (argb >> 16) & 0xff; + this->a = (argb >> 24) & 0xff; } -uint32_t RGB::rgb888() const +uint32_t RGB::argb8888() const { return (a << 24) | (r << 16) | (g << 8) | (b << 0); } -uint32_t RGB::bgr888() const +uint32_t RGB::abgr8888() const { return (a << 24) | (b << 16) | (g << 8) | (r << 0); } diff --git a/libkmstest/color.h b/libkmstest/color.h index f84fc68..f99a951 100644 --- a/libkmstest/color.h +++ b/libkmstest/color.h @@ -10,19 +10,18 @@ struct RGB { RGB(); RGB(uint8_t r, uint8_t g, uint8_t b); + RGB(uint8_t a, uint8_t r, uint8_t g, uint8_t b); + RGB(uint32_t argb); - uint32_t rgb888() const; - uint32_t bgr888() const; + uint32_t argb8888() const; + uint32_t abgr8888() const; uint16_t rgb565() const; YUV yuv() const; - struct - { - uint8_t b; - uint8_t g; - uint8_t r; - uint8_t a; - }; + uint8_t b; + uint8_t g; + uint8_t r; + uint8_t a; }; struct YUV @@ -31,12 +30,9 @@ struct YUV YUV(uint8_t y, uint8_t u, uint8_t v); YUV(const RGB& rgb); - struct - { - uint8_t v; - uint8_t u; - uint8_t y; - uint8_t a; - }; + uint8_t v; + uint8_t u; + uint8_t y; + uint8_t a; }; } diff --git a/libkmstest/colorbar.cpp b/libkmstest/colorbar.cpp index c1b6c16..811b81c 100644 --- a/libkmstest/colorbar.cpp +++ b/libkmstest/colorbar.cpp @@ -49,7 +49,7 @@ static void drm_draw_color_bar_rgb888(DumbFramebuffer& buf, int old_xpos, int xp } for (int x = xpos; x < xpos + width; ++x) - line[x] = bcol.rgb888(); + line[x] = bcol.argb8888(); } } diff --git a/libkmstest/kmstest.h b/libkmstest/kmstest.h index 0482072..0564ab5 100644 --- a/libkmstest/kmstest.h +++ b/libkmstest/kmstest.h @@ -1,5 +1,7 @@ #pragma once +#include "color.h" + namespace kms { class MappedBuffer; @@ -9,4 +11,7 @@ void draw_color_bar(kms::DumbFramebuffer& buf, int old_xpos, int xpos, int width void draw_test_pattern(MappedBuffer& fb); void draw_test_pattern(DumbFramebuffer &fb); + +void draw_rect(MappedBuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color); +void draw_rect(DumbFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color); } diff --git a/libkmstest/testpat.cpp b/libkmstest/testpat.cpp index 33a4ec1..059c1bc 100644 --- a/libkmstest/testpat.cpp +++ b/libkmstest/testpat.cpp @@ -26,14 +26,14 @@ static void draw_rgb_pixel(MappedBuffer& buf, unsigned x, unsigned y, RGB color) case PixelFormat::ARGB8888: { uint32_t *p = (uint32_t*)(buf.map(0) + buf.stride(0) * y + x * 4); - *p = color.rgb888(); + *p = color.argb8888(); break; } case PixelFormat::XBGR8888: case PixelFormat::ABGR8888: { uint32_t *p = (uint32_t*)(buf.map(0) + buf.stride(0) * y + x * 4); - *p = color.bgr888(); + *p = color.abgr8888(); break; } case PixelFormat::RGB565: @@ -290,4 +290,20 @@ void draw_test_pattern(MappedBuffer &fb) printf("draw took %u us\n", (unsigned)time_span.count()); #endif } + +void draw_rect(MappedBuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color) +{ + for (unsigned i = x; i < x + w; ++i) { + for (unsigned j = y; j < y + h; ++j) { + draw_rgb_pixel(fb, i, j, color); + } + } +} + +void draw_rect(DumbFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h, RGB color) +{ + MappedDumbBuffer mfb(fb); + draw_rect(mfb, x, y, w, h, color); +} + } diff --git a/py/pykms.i b/py/pykms.i index d1b6581..0801653 100644 --- a/py/pykms.i +++ b/py/pykms.i @@ -28,6 +28,7 @@ using namespace kms; %include "pagefliphandler.h" %include "videomode.h" +%include "color.h" %include "kmstest.h" %template(ConnectorVector) std::vector; -- cgit v1.2.3