From fa3a69473cb30e2920ca0792cf2f879a3acb9a7f Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Fri, 19 May 2023 08:53:17 +0200 Subject: [PATCH] video_pattern_generator can have C API --- src/utils/video_pattern_generator.cpp | 13 +++++++------ ...n_generator.hpp => video_pattern_generator.h} | 16 ++++++++++------ src/video_capture/testcard.cpp | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) rename src/utils/{video_pattern_generator.hpp => video_pattern_generator.h} (90%) diff --git a/src/utils/video_pattern_generator.cpp b/src/utils/video_pattern_generator.cpp index abf937050..ccc50dbc1 100644 --- a/src/utils/video_pattern_generator.cpp +++ b/src/utils/video_pattern_generator.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -71,7 +72,7 @@ #include "utils/text.h" #include "video.h" #include "video_capture/testcard_common.h" -#include "video_pattern_generator.hpp" +#include "video_pattern_generator.h" constexpr size_t headroom = 128; // headroom for cases when dst color_spec has wider block size #define MOD_NAME "[vid. patt. generator] " @@ -681,9 +682,9 @@ private: }; video_pattern_generator_t -video_pattern_generator_create(std::string const & config, int width, int height, codec_t color_spec, int offset) +video_pattern_generator_create(const char *config, int width, int height, codec_t color_spec, int offset) { - if (config == "help") { + if (string(config) == "help") { col() << "Pattern to use, one of: " << SBOLD("bars, blank[=0x], ebu_bars, gradient[=0x], gradient2*, gray, interlaced, noise, raw=0xXX[YYZZ..], smpte_bars, uv_plane[=]\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)) { @@ -700,9 +701,9 @@ video_pattern_generator_create(std::string const & config, int width, int height try { string pattern = config; string params; - if (string::size_type delim = config.find('='); delim != string::npos) { - pattern = config.substr(0, delim); - params = config.substr(delim + 1); + if (string::size_type delim = pattern.find('='); delim != string::npos) { + params = pattern.substr(delim + 1); + pattern = pattern.substr(0, delim); } if (pattern == "gray" || pattern == "grey") { return new gray_video_pattern_generator{width, height, color_spec, params}; diff --git a/src/utils/video_pattern_generator.hpp b/src/utils/video_pattern_generator.h similarity index 90% rename from src/utils/video_pattern_generator.hpp rename to src/utils/video_pattern_generator.h index 33de73d5b..4bd5ce9ad 100644 --- a/src/utils/video_pattern_generator.hpp +++ b/src/utils/video_pattern_generator.h @@ -38,19 +38,23 @@ #ifndef VIDEO_PATTERN_GENERATOR_H_411E8141_A7AE_4FCD_8464_41CE032CF81B #define VIDEO_PATTERN_GENERATOR_H_411E8141_A7AE_4FCD_8464_41CE032CF81B -#include -#include - -#include "video.h" +#include "types.h" struct video_pattern_generator; - typedef struct video_pattern_generator *video_pattern_generator_t; +#ifdef __cplusplus +extern "C" { +#endif + /// @param offset offset between still image frames (in bytes) -video_pattern_generator_t video_pattern_generator_create(std::string const & config, int width, int height, codec_t color_spec, int offset); +video_pattern_generator_t video_pattern_generator_create(const char *config, int width, int height, codec_t color_spec, int offset); char *video_pattern_generator_next_frame(video_pattern_generator_t); void video_pattern_generator_fill_data(video_pattern_generator_t, const char *data); void video_pattern_generator_destroy(video_pattern_generator_t); +#ifdef __cplusplus +} // extern "C" +#endif + #endif // defined VIDEO_PATTERN_GENERATOR_H_411E8141_A7AE_4FCD_8464_41CE032CF81B diff --git a/src/video_capture/testcard.cpp b/src/video_capture/testcard.cpp index acf46be19..605931023 100644 --- a/src/video_capture/testcard.cpp +++ b/src/video_capture/testcard.cpp @@ -76,7 +76,7 @@ #include #include #include "audio/types.h" -#include "utils/video_pattern_generator.hpp" +#include "utils/video_pattern_generator.h" #include "video_capture/testcard_common.h" #define AUDIO_SAMPLE_RATE 48000