From 0466ef87a87fd54ae2c58ecab9c42cba672eda63 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 2 Sep 2024 13:06:37 +0200 Subject: [PATCH] video_pattern_generator: new pattern pixel_bars makes the bars as the default pattern, but width is set to 1 pixel (and repeated). --- src/utils/video_pattern_generator.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/utils/video_pattern_generator.cpp b/src/utils/video_pattern_generator.cpp index d778c12eb..d7dd27d93 100644 --- a/src/utils/video_pattern_generator.cpp +++ b/src/utils/video_pattern_generator.cpp @@ -94,8 +94,8 @@ using std::uniform_int_distribution; using std::vector; enum class generator_depth { - bits8, - bits16 + bits8, ///< RGBA + bits16 ///< RG48 }; class image_pattern { @@ -424,6 +424,21 @@ class image_pattern_noise : public image_pattern { } }; +class image_pattern_pixel_bars : public image_pattern +{ + enum generator_depth fill(int width, int height, + unsigned char *data) override + { + auto *ptr = reinterpret_cast(data); + for (int j = 0; j < height; j += 1) { + for (int i = 0; i < width; i += 1) { + *ptr++ = rect_colors[i % COL_NUM]; + } + } + return generator_depth::bits8; + } +}; + class image_pattern_raw : public image_pattern { public: explicit image_pattern_raw(string config) { @@ -571,6 +586,9 @@ unique_ptr image_pattern::create(string const &pattern, string co if (pattern == "noise") { return make_unique(); } + if (pattern == "pixel_bars") { + return make_unique(); + } if (pattern == "raw") { return make_unique(params); } @@ -760,7 +778,7 @@ video_pattern_generator_create(const char *config, int width, int height, codec_ "bars, " BLANK_USAGE ", ebu_bars, gradient[=0x], gradient2*, " "gray, interlaced, noise, raw=0xXX[YYZZ..], " - "smpte_bars, uv_plane[=], diagonal*\n"); + "smpte_bars, pixel_bars, uv_plane[=], diagonal*\n"); col() << "\t\t- patterns " SBOLD("'gradient'") ", " SBOLD("'gradient2'") ", " SBOLD("'noise'") " and " SBOLD("'uv_plane'") " generate higher bit-depth patterns with"; for (codec_t c = VIDEO_CODEC_FIRST; c != VIDEO_CODEC_COUNT; c = static_cast(static_cast(c) + 1)) { if (get_decoder_from_to(RG48, c) != NULL && get_bits_per_component(c) > 8) {