BarcodeConfig::update handle more config
authorKwanghoon Son <k.son@samsung.com>
Mon, 1 Jul 2024 05:57:45 +0000 (14:57 +0900)
committerKwanghoon Son <k.son@samsung.com>
Fri, 5 Jul 2024 02:05:52 +0000 (11:05 +0900)
This will be replaced getColorFromEngine, prepareMessageToGenerate

Change-Id: I1bb4d8babc946100c72f9aa0fdd1e459dff82e02
Signed-off-by: Kwanghoon Son <k.son@samsung.com>
mv_barcode/barcode_generator/src/BarcodeGenerator.cpp

index be72ccf861b4a5de27a7c04c89a4f66247910481..103ad0f27119244de7a283b977a62e9a18250583 100644 (file)
@@ -330,15 +330,78 @@ void swapBR(uint16_t *color)
 
 int BarcodeConfig::update(mv_engine_config_h engine_cfg)
 {
+       switch (qr_enc_mode) {
+       case MV_BARCODE_QR_MODE_NUMERIC:
+               if (message.find_first_not_of("0123456789") != std::string::npos) {
+                       LOGE("Barcode message can't be used according to support "
+                                "numeric (0..9) mode: %s",
+                                message.c_str());
+                       return MEDIA_VISION_ERROR_INVALID_PARAMETER;
+               }
+               break;
+       case MV_BARCODE_QR_MODE_ALPHANUMERIC:
+               if (type == MV_BARCODE_QR) {
+                       std::transform(message.begin(), message.end(), message.begin(), ::toupper);
+                       if (std::string::npos != message.find_first_not_of("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")) {
+                               LOGE("Barcode message can't be converted according to support "
+                                        "alphanumeric (0..9, A..Z, space, $, %%, *, +, -, ., /, :) "
+                                        "mode: %s",
+                                        message.c_str());
+                               return MEDIA_VISION_ERROR_INVALID_DATA;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
        if (!engine_cfg)
                return MEDIA_VISION_ERROR_NONE;
 
-       int showText;
-       int error = mv_engine_config_get_int_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_TEXT, &showText);
+       int value;
+       int error = mv_engine_config_get_int_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_TEXT, &value);
+       if (error != MEDIA_VISION_ERROR_NONE) {
+               LOGE("mv_engine_config_get_int_attribute failed");
+               return error;
+       }
+       if (value == BARCODE_GEN_TEXT_VISIBLE && type == MV_BARCODE_QR) {
+               LOGE("QR code generation with visible text is not supported");
+               return MEDIA_VISION_ERROR_INVALID_OPERATION;
+       }
+       text_opt = value;
+
+       error = mv_engine_config_get_int_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_DATA_SHAPE, &value);
+       if (error != MEDIA_VISION_ERROR_NONE) {
+               LOGE("mv_engine_config_get_int_attribute failed");
+               return error;
+       }
+       data_shape = (mv_barcode_generate_attr_shape_e) value;
+       switch (data_shape) {
+       case MV_BARCODE_GENERATE_ATTR_SHAPE_RECT:
+       case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
+               break;
+
+       default:
+               LOGE("Invalid data shape");
+               return MEDIA_VISION_ERROR_INVALID_PARAMETER;
+       }
+
+       error = mv_engine_config_get_int_attribute(engine_cfg, MV_BARCODE_GENERATE_ATTR_FINDER_SHAPE, &value);
        if (error != MEDIA_VISION_ERROR_NONE) {
                LOGE("mv_engine_config_get_int_attribute failed");
                return error;
        }
+       finder_shape = (mv_barcode_generate_attr_shape_e) value;
+       switch (finder_shape) {
+       case MV_BARCODE_GENERATE_ATTR_SHAPE_RECT:
+       case MV_BARCODE_GENERATE_ATTR_SHAPE_ROUND_RECT:
+       case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
+               break;
+
+       default:
+               LOGE("Invalid finder shape");
+               return MEDIA_VISION_ERROR_INVALID_PARAMETER;
+       }
 
        /* get color value */
        char *fgcolor;
@@ -358,7 +421,6 @@ int BarcodeConfig::update(mv_engine_config_h engine_cfg)
        swapBR((uint16_t *) fgcolor);
        swapBR((uint16_t *) bgcolor);
 
-       text_opt = showText;
        this->fgcolor = fgcolor;
        this->bgcolor = bgcolor;