IRE palette for bars pattern

This commit is contained in:
itten
2026-06-23 18:36:39 +03:00
parent b960c413b2
commit 49ead70b10
+20 -2
View File
@@ -20,6 +20,24 @@ constexpr std::array<Color, 7> SMPTE_BARS = {{
{111, 848, 481}, // blue {111, 848, 481}, // blue
}}; }};
// IRE 11-step greyscale bars
// from total black to 100% white
// Y_10bit = 64 + (IRE / 100) × (940 64) Rec. 709/Rec. 2020
// Y_10bit = 64 + (IRE × 8.76)
constexpr std::array<Color, 11> IRE_BARS = {{
{64, 512, 512}, // IRE 0
{152, 512, 512}, // IRE 10
{239, 512, 512}, // IRE 20 and so on
{327, 512, 512},
{414, 512, 512},
{502, 512, 512},
{590, 512, 512},
{677, 512, 512},
{765, 512, 512},
{852, 512, 512},
{940, 512, 512},
}};
// Pack 6 pixels into 4 x 32-bit V210 words (16 bytes total). // Pack 6 pixels into 4 x 32-bit V210 words (16 bytes total).
// //
// V210 is 4:2:2 — each pair of pixels shares one Cb and one Cr sample. // V210 is 4:2:2 — each pair of pixels shares one Cb and one Cr sample.
@@ -41,7 +59,7 @@ inline void pack_block(
w[3] = (y4 & 0x3FFu) | ((p45.cr & 0x3FFu) << 10) | ((y5 & 0x3FFu) << 20); w[3] = (y4 & 0x3FFu) | ((p45.cr & 0x3FFu) << 10) | ((y5 & 0x3FFu) << 20);
} }
// Write one horizontal line of SMPTE 75% bars. // Write one horizontal line of bars.
// `stride` is the line size in bytes as returned by MXL (configInfo.discrete.sliceSizes[0]). // `stride` is the line size in bytes as returned by MXL (configInfo.discrete.sliceSizes[0]).
// Bytes beyond the active pixels are already zeroed by the mmap, so no explicit padding needed. // Bytes beyond the active pixels are already zeroed by the mmap, so no explicit padding needed.
inline void write_bar_line(uint8_t* line, int width, uint32_t /*stride*/) inline void write_bar_line(uint8_t* line, int width, uint32_t /*stride*/)
@@ -64,7 +82,7 @@ inline void write_bar_line(uint8_t* line, int width, uint32_t /*stride*/)
} }
} }
// Fill an entire frame buffer with SMPTE 75% color bars. // Fill an entire frame buffer with color bars.
inline void fill_frame(uint8_t* buf, int width, int height, uint32_t stride) inline void fill_frame(uint8_t* buf, int width, int height, uint32_t stride)
{ {
for (int y = 0; y < height; y++) { for (int y = 0; y < height; y++) {