summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKwanghoon Son <k.son@samsung.com>2023-01-06 19:15:40 +0900
committerkwang son <k.son@samsung.com>2023-03-06 06:52:53 +0000
commit63592279482c065e7546f8d35dc5d2208133aada (patch)
tree67197e8919b03c7e8550217c40c48df7d2c1c0cc
parent9f54211c9e478d43f20faafa3439f78268cacc0c (diff)
downloadmediavision-63592279482c065e7546f8d35dc5d2208133aada.tar.gz
mediavision-63592279482c065e7546f8d35dc5d2208133aada.tar.bz2
mediavision-63592279482c065e7546f8d35dc5d2208133aada.zip
mv_barcode: clean duplicate code
mv_barcode_generate_{source,image}_open share duplicate code Change-Id: Icf22352e4225de141d54c1a677f52dff958cbc23 Signed-off-by: Kwanghoon Son <k.son@samsung.com> (cherry picked from commit f1d5b22becf989379318f55e219265d384282611)
-rw-r--r--mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp220
-rw-r--r--test/testsuites/barcode/test_barcode.cpp4
2 files changed, 96 insertions, 128 deletions
diff --git a/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp b/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp
index 32657d4f..d7e77c5e 100644
--- a/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp
+++ b/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp
@@ -217,83 +217,104 @@ BarcodeImageFormat convertImageFormat(mv_barcode_image_format_e format)
} /* anonymous namespace */
-int mv_barcode_generate_source_open(mv_engine_config_h engine_cfg, const char *message, mv_barcode_type_e type,
- mv_barcode_qr_mode_e qr_enc_mode, mv_barcode_qr_ecc_e qr_ecc, int qr_version,
- mv_source_h image)
+static int prepareMessageToGenerate(const char *message, mv_barcode_type_e type, mv_barcode_qr_mode_e qr_enc_mode,
+ std::string &messageStr)
+{
+ messageStr = message;
+ switch (qr_enc_mode) {
+ case MV_BARCODE_QR_MODE_NUMERIC:
+ if (messageStr.find_first_not_of("0123456789") != std::string::npos) {
+ LOGE("Barcode message can't be used according to support "
+ "numeric (0..9) mode: %s",
+ messageStr.c_str());
+ return MEDIA_VISION_ERROR_INVALID_PARAMETER;
+ }
+ break;
+ case MV_BARCODE_QR_MODE_ALPHANUMERIC:
+ if (type == MV_BARCODE_QR) {
+ int error = alphanumToUpper(messageStr);
+ if (error != BARCODE_ERROR_NONE)
+ return convertBarcodeError(error);
+ }
+ break;
+ default:
+ break;
+ }
+ return MEDIA_VISION_ERROR_NONE;
+}
+
+/*
+The input colorspace is RGB but the generators' is BGR.
+Replace the value of R with that of B
+*/
+static void swapBR(uint16_t *color)
{
- std::string messageStr = std::string(message);
+ std::swap(color[0], color[2]);
+}
+
+static int getColorFromEngine(mv_engine_config_h engine_cfg, mv_barcode_type_e type, int &showText, char **fgcolour,
+ char **bgcolour)
+{
+ if (!engine_cfg)
+ return MEDIA_VISION_ERROR_NONE;
- if (qr_enc_mode == MV_BARCODE_QR_MODE_NUMERIC && messageStr.find_first_not_of("0123456789") != std::string::npos) {
- LOGE("Barcode message can't be used according to support "
- "numeric (0..9) mode: %s",
- messageStr.c_str());
- return MEDIA_VISION_ERROR_INVALID_DATA;
+ int error = mv_engine_config_get_int_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_TEXT, &showText);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("mv_engine_config_get_int_attribute failed");
+ return error;
}
- int error = BARCODE_ERROR_NONE;
- if (MV_BARCODE_QR == type && MV_BARCODE_QR_MODE_ALPHANUMERIC == qr_enc_mode) {
- error = alphanumToUpper(messageStr);
- if (BARCODE_ERROR_NONE != error)
- return convertBarcodeError(error);
+ if (showText == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) {
+ LOGE("QR code generation with visible text is not supported");
+ return MEDIA_VISION_ERROR_INVALID_OPERATION;
}
- unsigned char *imageBuffer = NULL;
- unsigned int imageWidth = 0u;
- unsigned int imageHeight = 0u;
- unsigned int imageChannels = 0u;
+ /* get color value */
+ error = mv_engine_config_get_string_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_COLOR_FRONT, fgcolour);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("mv_engine_config_get_string_attribute failed");
+ return error;
+ }
- int showText = 0;
- char value;
- char *fgcolour = NULL;
- char *bgcolour = NULL;
+ error = mv_engine_config_get_string_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_COLOR_BACK, bgcolour);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ free(*fgcolour);
+ LOGE("mv_engine_config_get_string_attribute failed");
+ return error;
+ }
- if (engine_cfg != NULL) {
- error = mv_engine_config_get_int_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_TEXT", &showText);
- if (error != MEDIA_VISION_ERROR_NONE) {
- LOGE("mv_engine_config_get_int_attribute failed");
- return error;
- }
+ swapBR((uint16_t *) *fgcolour);
+ swapBR((uint16_t *) *bgcolour);
- if (showText == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) {
- LOGE("QR code generation with visible text is not supported");
- return MEDIA_VISION_ERROR_INVALID_OPERATION;
- }
+ return MEDIA_VISION_ERROR_NONE;
+}
- /* set color value */
- error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_FRONT", &fgcolour);
- if (error != MEDIA_VISION_ERROR_NONE) {
- LOGE("mv_engine_config_get_string_attribute failed");
- return error;
- }
+int mv_barcode_generate_source_open(mv_engine_config_h engine_cfg, const char *message, mv_barcode_type_e type,
+ mv_barcode_qr_mode_e qr_enc_mode, mv_barcode_qr_ecc_e qr_ecc, int qr_version,
+ mv_source_h image)
+{
+ std::string messageStr;
+ int error = prepareMessageToGenerate(message, type, qr_enc_mode, messageStr);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("prepareMessageToGenerate failed");
+ return error;
+ }
- error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_BACK", &bgcolour);
- if (error != MEDIA_VISION_ERROR_NONE) {
- free(fgcolour);
- LOGE("mv_engine_config_get_string_attribute failed");
- return error;
- }
+ int showText = 0;
+ char *fgcolour = NULL;
+ char *bgcolour = NULL;
- /*
- The input colorspace is RGB but the generators' is BGR.
- Replace the value of R with that of B
- */
- value = fgcolour[0];
- fgcolour[0] = fgcolour[4];
- fgcolour[4] = value;
-
- value = fgcolour[1];
- fgcolour[1] = fgcolour[5];
- fgcolour[5] = value;
-
- value = bgcolour[0];
- bgcolour[0] = bgcolour[4];
- bgcolour[4] = value;
-
- value = bgcolour[1];
- bgcolour[1] = bgcolour[5];
- bgcolour[5] = value;
+ error = getColorFromEngine(engine_cfg, type, showText, &fgcolour, &bgcolour);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("getColorFromEngine failed");
+ return error;
}
+ unsigned char *imageBuffer = NULL;
+ unsigned int imageWidth = 0u;
+ unsigned int imageHeight = 0u;
+ unsigned int imageChannels = 0u;
+
error = BarcodeGenerator::generateBarcodeToBuffer(&imageBuffer, &imageWidth, &imageHeight, &imageChannels,
messageStr, convertBarcodeType(type),
convertEncodingMode(qr_enc_mode), convertECC(qr_ecc), qr_version,
@@ -330,79 +351,26 @@ int mv_barcode_generate_image_open(mv_engine_config_h engine_cfg, const char *me
mv_barcode_qr_ecc_e qr_ecc, int qr_version, const char *image_path,
mv_barcode_image_format_e image_format)
{
- std::string messageStr = std::string(message);
-
- if (qr_enc_mode == MV_BARCODE_QR_MODE_NUMERIC && messageStr.find_first_not_of("0123456789") != std::string::npos) {
- LOGE("Barcode message can't be used according to support "
- "numeric (0..9) mode: %s",
- messageStr.c_str());
- return MEDIA_VISION_ERROR_INVALID_DATA;
- }
-
- if (NULL == image_path) {
+ if (!image_path) {
LOGE("Can't save barcode image to the path[%p]. The path has to be specified", image_path);
return MEDIA_VISION_ERROR_INVALID_PATH;
}
- int error = BARCODE_ERROR_NONE;
- if (MV_BARCODE_QR == type && MV_BARCODE_QR_MODE_ALPHANUMERIC == qr_enc_mode) {
- error = alphanumToUpper(messageStr);
- if (BARCODE_ERROR_NONE != error) {
- return convertBarcodeError(error);
- }
+ std::string messageStr;
+ int error = prepareMessageToGenerate(message, type, qr_enc_mode, messageStr);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("prepareMessageToGenerate failed");
+ return error;
}
int showText = 0;
- char value;
char *fgcolour = NULL;
char *bgcolour = NULL;
- if (engine_cfg != NULL) {
- /* set visible text attribute */
- error = mv_engine_config_get_int_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_TEXT", &showText);
- if (error != MEDIA_VISION_ERROR_NONE) {
- LOGE("mv_engine_config_get_int_attribute failed");
- return error;
- }
-
- if (showText == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) {
- LOGE("QR code generation with visible text is not supported");
- return MEDIA_VISION_ERROR_INVALID_OPERATION;
- }
-
- /* set color value */
- error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_FRONT", &fgcolour);
- if (error != MEDIA_VISION_ERROR_NONE) {
- LOGE("mv_engine_config_get_string_attribute failed");
- return error;
- }
-
- error = mv_engine_config_get_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_BACK", &bgcolour);
- if (error != MEDIA_VISION_ERROR_NONE) {
- free(fgcolour);
- LOGE("mv_engine_config_get_string_attribute failed");
- return error;
- }
-
- /*
- The input colorspace is RGB but the generators' is BGR.
- Replace the value of R with that of B
- */
- value = fgcolour[0];
- fgcolour[0] = fgcolour[4];
- fgcolour[4] = value;
-
- value = fgcolour[1];
- fgcolour[1] = fgcolour[5];
- fgcolour[5] = value;
-
- value = bgcolour[0];
- bgcolour[0] = bgcolour[4];
- bgcolour[4] = value;
-
- value = bgcolour[1];
- bgcolour[1] = bgcolour[5];
- bgcolour[5] = value;
+ error = getColorFromEngine(engine_cfg, type, showText, &fgcolour, &bgcolour);
+ if (error != MEDIA_VISION_ERROR_NONE) {
+ LOGE("getColorFromEngine failed");
+ return error;
}
error = BarcodeGenerator::generateBarcodeToImage(std::string(image_path), convertImageFormat(image_format),
diff --git a/test/testsuites/barcode/test_barcode.cpp b/test/testsuites/barcode/test_barcode.cpp
index 6d123ebe..92b0bc13 100644
--- a/test/testsuites/barcode/test_barcode.cpp
+++ b/test/testsuites/barcode/test_barcode.cpp
@@ -136,9 +136,9 @@ TEST_F(TestBarcodeGen, SimpleNegativeQR)
TEST_F(TestBarcodeGen, ColorPositiveQR)
{
ASSERT_EQ(mv_create_engine_config(&engine_cfg), MEDIA_VISION_ERROR_NONE);
- ASSERT_EQ(mv_engine_config_set_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_FRONT", "3366ff"),
+ ASSERT_EQ(mv_engine_config_set_string_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_COLOR_FRONT, "3366ff"),
MEDIA_VISION_ERROR_NONE);
- ASSERT_EQ(mv_engine_config_set_string_attribute(engine_cfg, "MV_BARCODE_GENERATE_ATTR_COLOR_BACK", "ff9966"),
+ ASSERT_EQ(mv_engine_config_set_string_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_COLOR_BACK, "ff9966"),
MEDIA_VISION_ERROR_NONE);
ASSERT_EQ(mv_barcode_generate_image(engine_cfg, "1239592https://test.com", 100, 100, type, qr_enc_mode, qr_ecc,
qr_version, test_file.c_str(), image_format),