diff options
| author | Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> | 2026-05-04 16:19:04 +0300 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> | 2026-05-08 17:25:34 +0300 |
| commit | 549c347d6feb2e94a810a720c97a8bf0f57317a1 (patch) | |
| tree | 8225a757a97e3aadb561f107adee7b1bc526c711 /kms++util/src/conv-rgb.h | |
| parent | 4e2b291a4acdc2cbd39f005c88bda363bc06bd34 (diff) | |
kms++util: Replace test-pattern generator with pixpat
Switch draw_test_pattern() to call libpixpat (linked statically into
libkms++util.so) instead of the in-tree pattern generator. Pixpat
covers every pattern (kmstest, smpte, solid colors) and every pixel
format the previous generator handled, so behavior is unchanged for
all callers.
Drop the now-unused machinery: conv.h and conv-*.h template writers,
color16.h (RGB16/YUV16 plus conversions), the *_old / _single / _multi
declarations that had no definitions or callers, and the c_draw_test_pattern
C ABI which had no callers anywhere in the tree. RecStandard and
ColorRange move from color16.h directly into kms++util.h, since they
are still part of the public TestPatternOptions struct.
Diffstat (limited to 'kms++util/src/conv-rgb.h')
| -rw-r--r-- | kms++util/src/conv-rgb.h | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/kms++util/src/conv-rgb.h b/kms++util/src/conv-rgb.h deleted file mode 100644 index 6993247..0000000 --- a/kms++util/src/conv-rgb.h +++ /dev/null @@ -1,299 +0,0 @@ -#pragma once - -#include <vector> - -#include <kms++/framebuffer.h> -#include <kms++util/color16.h> - -#include "conv-common.h" - -namespace kms -{ - -/* - * RGB - */ - -template<ComponentType C3, size_t size3, size_t offset3, - ComponentType C2, size_t size2, size_t offset2, - ComponentType C1, size_t size1, size_t offset1, - ComponentType C0, size_t size0, size_t offset0> -struct RGB_16_Layout - : public FormatLayout<PlaneLayout<uint16_t, - ComponentLayout<C0, size0, offset0>, - ComponentLayout<C1, size1, offset1>, - ComponentLayout<C2, size2, offset2>, - ComponentLayout<C3, size3, offset3>>> -{ -}; - -using XRGB4444_Layout = RGB_16_Layout< - ComponentType::X, 4, 12, - ComponentType::R, 4, 8, - ComponentType::G, 4, 4, - ComponentType::B, 4, 0 ->; - -using ARGB4444_Layout = RGB_16_Layout< - ComponentType::A, 4, 12, - ComponentType::R, 4, 8, - ComponentType::G, 4, 4, - ComponentType::B, 4, 0 ->; - -using XRGB1555_Layout = RGB_16_Layout< - ComponentType::X, 1, 15, - ComponentType::R, 5, 10, - ComponentType::G, 5, 5, - ComponentType::B, 5, 0 ->; - -using ARGB1555_Layout = RGB_16_Layout< - ComponentType::A, 1, 15, - ComponentType::R, 5, 10, - ComponentType::G, 5, 5, - ComponentType::B, 5, 0 ->; - -using RGB565_Layout = FormatLayout<PlaneLayout<uint16_t, - ComponentLayout<ComponentType::R, 5, 11>, - ComponentLayout<ComponentType::G, 6, 5>, - ComponentLayout<ComponentType::B, 5, 0>> ->; - -using BGR565_Layout = FormatLayout<PlaneLayout<uint16_t, - ComponentLayout<ComponentType::B, 5, 11>, - ComponentLayout<ComponentType::G, 6, 5>, - ComponentLayout<ComponentType::R, 5, 0>> ->; - -using RGB888_Layout = FormatLayout<PlaneLayout<uint32_t, - ComponentLayout<ComponentType::R, 8, 16>, - ComponentLayout<ComponentType::G, 8, 8>, - ComponentLayout<ComponentType::B, 8, 0>> ->; - -using BGR888_Layout = FormatLayout<PlaneLayout<uint32_t, - ComponentLayout<ComponentType::B, 8, 16>, - ComponentLayout<ComponentType::G, 8, 8>, - ComponentLayout<ComponentType::R, 8, 0>> ->; - -template<ComponentType C3, size_t size3, size_t offset3, - ComponentType C2, size_t size2, size_t offset2, - ComponentType C1, size_t size1, size_t offset1, - ComponentType C0, size_t size0, size_t offset0> -struct RGB_32_Layout - : public FormatLayout<PlaneLayout<uint32_t, - ComponentLayout<C0, size0, offset0>, - ComponentLayout<C1, size1, offset1>, - ComponentLayout<C2, size2, offset2>, - ComponentLayout<C3, size3, offset3>>> -{ -}; - -template<ComponentType C3, ComponentType C2, ComponentType C1, ComponentType C0> -struct RGB_8_32_Layout - : public RGB_32_Layout< - C0, 8, 0, - C1, 8, 8, - C2, 8, 16, - C3, 8, 24> -{ -}; - -using XRGB8888_Layout = RGB_8_32_Layout<ComponentType::X, ComponentType::R, ComponentType::G, ComponentType::B>; -using ARGB8888_Layout = RGB_8_32_Layout<ComponentType::A, ComponentType::R, ComponentType::G, ComponentType::B>; - -using XBGR8888_Layout = RGB_8_32_Layout<ComponentType::X, ComponentType::B, ComponentType::G, ComponentType::R>; -using ABGR8888_Layout = RGB_8_32_Layout<ComponentType::A, ComponentType::B, ComponentType::G, ComponentType::R>; - -using RGBX8888_Layout = RGB_8_32_Layout<ComponentType::R, ComponentType::G, ComponentType::B, ComponentType::X>; -using RGBA8888_Layout = RGB_8_32_Layout<ComponentType::R, ComponentType::G, ComponentType::B, ComponentType::A>; - -using BGRX8888_Layout = RGB_8_32_Layout<ComponentType::B, ComponentType::G, ComponentType::R, ComponentType::X>; -using BGRA8888_Layout = RGB_8_32_Layout<ComponentType::B, ComponentType::G, ComponentType::R, ComponentType::A>; - -using XRGB2101010_Layout = RGB_32_Layout< - ComponentType::X, 2, 30, - ComponentType::R, 10, 20, - ComponentType::G, 10, 10, - ComponentType::B, 10, 0 ->; - -using ARGB2101010_Layout = RGB_32_Layout< - ComponentType::A, 2, 30, - ComponentType::R, 10, 20, - ComponentType::G, 10, 10, - ComponentType::B, 10, 0 ->; - -using XBGR2101010_Layout = RGB_32_Layout< - ComponentType::X, 2, 30, - ComponentType::B, 10, 20, - ComponentType::G, 10, 10, - ComponentType::R, 10, 0 ->; - -using ABGR2101010_Layout = RGB_32_Layout< - ComponentType::A, 2, 30, - ComponentType::B, 10, 20, - ComponentType::G, 10, 10, - ComponentType::R, 10, 0 ->; - -using RGBX1010102_Layout = RGB_32_Layout< - ComponentType::R, 10, 22, - ComponentType::G, 10, 12, - ComponentType::B, 10, 2, - ComponentType::X, 2, 0 ->; - -using RGBA1010102_Layout = RGB_32_Layout< - ComponentType::R, 10, 22, - ComponentType::G, 10, 12, - ComponentType::B, 10, 2, - ComponentType::A, 2, 0 ->; - -using BGRX1010102_Layout = RGB_32_Layout< - ComponentType::B, 10, 22, - ComponentType::G, 10, 12, - ComponentType::R, 10, 2, - ComponentType::X, 2, 0 ->; - -using BGRA1010102_Layout = RGB_32_Layout< - ComponentType::B, 10, 22, - ComponentType::G, 10, 12, - ComponentType::R, 10, 2, - ComponentType::A, 2, 0 ->; - -template<typename Layout> -class ARGB_Writer -{ - using Plane = typename Layout::template plane<0>; - using TStorage = typename Plane::storage_type; - - static_assert(Layout::num_planes == 1); - static_assert(Plane::num_components == 3 || Plane::num_components == 4); - - static_assert(Plane::template component_count<ComponentType::R>() == 1); - static_assert(Plane::template component_count<ComponentType::G>() == 1); - static_assert(Plane::template component_count<ComponentType::B>() == 1); - - static constexpr bool has_alpha = Plane::template component_count<ComponentType::A>(); - static constexpr bool has_padding = Plane::template component_count<ComponentType::X>(); - - static constexpr bool needs_packed_access = Plane::total_bits != Plane::storage_bits; - - static constexpr size_t a_idx = Plane::template find_pos<ComponentType::A>(); - static constexpr size_t x_idx = Plane::template find_pos<ComponentType::X>(); - static constexpr size_t r_idx = Plane::template find_pos<ComponentType::R>(); - static constexpr size_t g_idx = Plane::template find_pos<ComponentType::G>(); - static constexpr size_t b_idx = Plane::template find_pos<ComponentType::B>(); - - static constexpr size_t a_shift = has_alpha ? 16 - Plane::template component_size<a_idx> : 0; - static constexpr size_t r_shift = 16 - Plane::template component_size<r_idx>; - static constexpr size_t g_shift = 16 - Plane::template component_size<g_idx>; - static constexpr size_t b_shift = 16 - Plane::template component_size<b_idx>; - - static_assert(Plane::total_bits % 8 == 0); - static constexpr size_t bytes_per_pixel = Plane::total_bits / 8; - -public: - // Pack and write num_pixels pixels from src_line to dst_line - static void pack_line(HasIndexOperatorReturning<TStorage> auto&& dst_line, - HasIndexOperatorReturning<RGB16> auto&& src_line, - size_t num_pixels) - { - for (size_t x = 0; x < num_pixels; x++) { - const RGB16& pix = src_line[x]; - - std::array<component_storage_type, Plane::num_components> - components; - - if constexpr (has_alpha) - components[a_idx] = pix.a >> a_shift; - - if constexpr (has_padding) - components[x_idx] = 0; - - components[r_idx] = pix.r >> r_shift; - components[g_idx] = pix.g >> g_shift; - components[b_idx] = pix.b >> b_shift; - - if constexpr (!needs_packed_access) { - dst_line[x] = Plane::pack(components); - } else { - auto dst_bytes = reinterpret_cast<uint8_t*>(&dst_line[0]); - - TStorage packed = Plane::pack(components); - - memcpy(dst_bytes + x * bytes_per_pixel, &packed, - bytes_per_pixel); - } - } - } - - // Read and unpack num_pixels pixels from src_line to dst_line - static void unpack_line(HasIndexOperatorReturning<RGB16> auto&& dst_line, - HasIndexOperatorReturning<TStorage> auto&& src_line, - size_t num_pixels) - { - for (size_t x = 0; x < num_pixels; x++) { - decltype(Plane::unpack(src_line[x])) components; - - if constexpr (!needs_packed_access) { - components = Plane::unpack(src_line[x]); - } else { - auto src_bytes = - reinterpret_cast<const uint8_t*>(&src_line[0]); - TStorage packed; - - memcpy(&packed, src_bytes + x * bytes_per_pixel, - bytes_per_pixel); - - components = Plane::unpack(packed); - } - - dst_line[x] = RGB16 { - static_cast<uint16_t>(components[r_idx] << r_shift), - static_cast<uint16_t>(components[g_idx] << g_shift), - static_cast<uint16_t>(components[b_idx] << b_shift), - static_cast<uint16_t>(has_alpha ? components[a_idx] << a_shift : 0), - }; - } - } - - static void write_pattern(IFramebuffer& fb, size_t start_y, size_t end_y, - auto&& generate_line) - { - std::vector<RGB16> linebuf(fb.width()); - - // View to the plane - auto view = make_strided_fb_view<TStorage>(fb.map(0), fb.height(), fb.width(), - fb.stride(0)); - - for (size_t y_src = start_y; y_src <= end_y; y_src++) { - generate_line(y_src, linebuf); - - auto dst = md::submdspan(view, y_src, md::full_extent); - - pack_line(dst, linebuf, fb.width()); - } - } - - static void get_line(IFramebuffer& fb, size_t w, size_t h, size_t row, std::span<RGB16> linebuf) - { - auto view = make_strided_fb_view<const TStorage>(fb.map(0), fb.height(), fb.width(), - fb.stride(0)); - - auto src = md::submdspan(view, row, md::full_extent); - - unpack_line(linebuf, src); - } -}; - -} // namespace kms |
