diff options
author | Kwanghoon Son <k.son@samsung.com> | 2023-01-06 19:15:40 +0900 |
---|---|---|
committer | kwang son <k.son@samsung.com> | 2023-03-06 06:52:53 +0000 |
commit | 63592279482c065e7546f8d35dc5d2208133aada (patch) | |
tree | 67197e8919b03c7e8550217c40c48df7d2c1c0cc | |
parent | 9f54211c9e478d43f20faafa3439f78268cacc0c (diff) | |
download | mediavision-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.cpp | 220 | ||||
-rw-r--r-- | test/testsuites/barcode/test_barcode.cpp | 4 |
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), |