diff options
author | Tae-Young Chung <ty83.chung@samsung.com> | 2020-07-01 04:12:57 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@review> | 2020-07-01 04:12:57 +0000 |
commit | 2acb2a1149d8008c80f3f63f8749c0726e9402e8 (patch) | |
tree | b9e76d74b593c5a3a6bc0fd0905aa704ee15ebd1 | |
parent | 2b903e7eef466ecf7dc3edee94db00a57a0bdffa (diff) | |
parent | 1c025fb5725fd99e3ad9fed32304cc30664c1322 (diff) | |
download | mediavision-2acb2a1149d8008c80f3f63f8749c0726e9402e8.tar.gz mediavision-2acb2a1149d8008c80f3f63f8749c0726e9402e8.tar.bz2 mediavision-2acb2a1149d8008c80f3f63f8749c0726e9402e8.zip |
Merge "[Barcode] Add new barcode types" into tizensubmit/tizen/20200701.041707
-rw-r--r-- | include/mv_barcode_generate.h | 2 | ||||
-rw-r--r-- | include/mv_barcode_type.h | 10 | ||||
-rw-r--r-- | mv_barcode/barcode_detector/src/Barcode.cpp | 30 | ||||
-rw-r--r-- | mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp | 30 | ||||
-rw-r--r-- | mv_barcode/barcode_generator/include/BarcodeOptions.h | 8 | ||||
-rw-r--r-- | mv_barcode/barcode_generator/src/BarcodeGenerator.cpp | 2 | ||||
-rw-r--r-- | mv_barcode/barcode_generator/src/mv_barcode_generate.c | 4 | ||||
-rw-r--r-- | mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp | 18 | ||||
-rw-r--r-- | packaging/capi-media-vision.spec | 2 | ||||
-rw-r--r-- | test/testsuites/barcode/barcode_test_suite.c | 57 |
10 files changed, 140 insertions, 23 deletions
diff --git a/include/mv_barcode_generate.h b/include/mv_barcode_generate.h index ade34c2e..547771aa 100644 --- a/include/mv_barcode_generate.h +++ b/include/mv_barcode_generate.h @@ -100,7 +100,7 @@ typedef enum { * #MV_BARCODE_QR_ECC_UNAVAILABLE) * @param [in] qr_version QR code version (for 1D barcodes set this * parameter to 0) - * @param [in, out] image The media source handle which will be used to + * @param [in,out] image The media source handle which will be used to * fill by the buffer with generated image * @return @c 0 on success, otherwise a negative error value * @retval #MEDIA_VISION_ERROR_NONE Successful diff --git a/include/mv_barcode_type.h b/include/mv_barcode_type.h index 86f5247d..89080b28 100644 --- a/include/mv_barcode_type.h +++ b/include/mv_barcode_type.h @@ -36,6 +36,7 @@ extern "C" { * @details QR codes (versions 1 to 40) and set of 1D barcodes are supported * * @since_tizen @if MOBILE 2.4 @else 3.0 @endif + * @remarks #MV_BARCODE_UNDEFINED is deprecated. Use #MV_BARCODE_UNKNOWN instead */ typedef enum { MV_BARCODE_QR, /**< 2D barcode - Quick Response code */ @@ -46,7 +47,14 @@ typedef enum { MV_BARCODE_CODE128, /**< 1D barcode - Code 128 */ MV_BARCODE_CODE39, /**< 1D barcode - Code 39 */ MV_BARCODE_I2_5, /**< 1D barcode - Interleaved Two of Five */ - MV_BARCODE_UNDEFINED /**< Undefined */ + MV_BARCODE_UNDEFINED, /**< @deprecated Undefined (Deprecated since 6.0) */ + MV_BARCODE_EAN_2, /**< 1D barcode - International Article Number with 2-digit(add-on) (since 6.0) */ + MV_BARCODE_EAN_5, /**< 1D barcode - International Article Number with 5-digit(add-on) (since 6.0) */ + MV_BARCODE_CODE93, /**< 1D barcode - Code 93 (since 6.0) */ + MV_BARCODE_CODABAR, /**< 1D barcode - CODABAR (since 6.0) */ + MV_BARCODE_DATABAR, /**< 1D barcode - GS1 DATABAR (since 6.0) */ + MV_BARCODE_DATABAR_EXPAND, /**< 1D barcode - GS1 DATABAR EXPAND(since 6.0) */ + MV_BARCODE_UNKNOWN = 100 /**< Unknown (since 6.0) */ } mv_barcode_type_e; /** diff --git a/mv_barcode/barcode_detector/src/Barcode.cpp b/mv_barcode/barcode_detector/src/Barcode.cpp index 8523722d..cff005cb 100644 --- a/mv_barcode/barcode_detector/src/Barcode.cpp +++ b/mv_barcode/barcode_detector/src/Barcode.cpp @@ -68,9 +68,27 @@ mv_barcode_type_e Barcode::getType(void) const case zbar::ZBAR_I25: return MV_BARCODE_I2_5; + case zbar::ZBAR_EAN2: + return MV_BARCODE_EAN_2; + + case zbar::ZBAR_EAN5: + return MV_BARCODE_EAN_5; + + case zbar::ZBAR_CODE93: + return MV_BARCODE_CODE93; + + case zbar::ZBAR_CODABAR: + return MV_BARCODE_CODABAR; + + case zbar::ZBAR_DATABAR: + return MV_BARCODE_DATABAR; + + case zbar::ZBAR_DATABAR_EXP: + return MV_BARCODE_DATABAR_EXPAND; + default: - LOGE("ZBar symbol colorspace is not supported by media vision"); - return MV_BARCODE_UNDEFINED; + LOGE("ZBar symbol colorspace[%d] is not supported by media vision", barcodeType); + return MV_BARCODE_UNKNOWN; } } @@ -87,7 +105,6 @@ int Barcode::calculateLocation(mv_quadrangle_s& location) const numberOfVertexes); return MEDIA_VISION_ERROR_INVALID_OPERATION; } - /* bounding quadrangle is computing by 4 marginal points */ mv_point_s first = {__pBarcodeObj->get_location_x(0), __pBarcodeObj->get_location_y(0)}; @@ -113,6 +130,13 @@ int Barcode::calculateLocation(mv_quadrangle_s& location) const } } + zbar::zbar_symbol_type_t type = __pBarcodeObj->get_type(); + if (type == zbar::ZBAR_EAN2 || type == zbar::ZBAR_EAN5) { + /* In case of EAN2 and EAN5, they are add-on and + zbar returns only the last column's location. + So, minX is always maxX. */ + minX = 0; + } /* magic number("5") mean minimal size of detected area which will be returned. */ if (abs(minX - maxX) < 5 || abs(minY - maxY) < 5) return MEDIA_VISION_ERROR_INVALID_OPERATION; diff --git a/mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp b/mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp index c58909bb..0d4be8e8 100644 --- a/mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp +++ b/mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp @@ -67,12 +67,28 @@ int mv_barcode_detect_open( * 1 - only linear barcodes * 2 - only QR codes */ + scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 0); + scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_POSITION, 1); switch (target_val) { case 0: - scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_UPCA, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_UPCE, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN8, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN13, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_CODE128, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_CODE39, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_I25, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN2, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN2, zbar::ZBAR_CFG_POSITION, 1); + scanner.set_config(zbar::ZBAR_EAN5, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN5, zbar::ZBAR_CFG_POSITION, 1); + scanner.set_config(zbar::ZBAR_CODE93, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_CODABAR, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_DATABAR, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_DATABAR_EXP, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_ENABLE, 1); break; case 1: - scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 0); scanner.set_config(zbar::ZBAR_UPCA, zbar::ZBAR_CFG_ENABLE, 1); scanner.set_config(zbar::ZBAR_UPCE, zbar::ZBAR_CFG_ENABLE, 1); scanner.set_config(zbar::ZBAR_EAN8, zbar::ZBAR_CFG_ENABLE, 1); @@ -80,13 +96,18 @@ int mv_barcode_detect_open( scanner.set_config(zbar::ZBAR_CODE128, zbar::ZBAR_CFG_ENABLE, 1); scanner.set_config(zbar::ZBAR_CODE39, zbar::ZBAR_CFG_ENABLE, 1); scanner.set_config(zbar::ZBAR_I25, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN2, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_EAN5, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_CODE93, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_CODABAR, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_DATABAR, zbar::ZBAR_CFG_ENABLE, 1); + scanner.set_config(zbar::ZBAR_DATABAR_EXP, zbar::ZBAR_CFG_ENABLE, 1); break; case 2: - scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 0); scanner.set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_ENABLE, 1); break; default: - LOGW("Unavailabe target value %d", target_val); + LOGW("Unavailable target value %d", target_val); } int numberOfBarcodes = scanner.scan(greyImage); @@ -125,6 +146,7 @@ int mv_barcode_detect_open( types[i] = curBarcode.getType(); + LOGI("barcode type: %d with message %s", types[i], curMessage); int err = curBarcode.calculateLocation(barcodeLocations[i]); if (err != MEDIA_VISION_ERROR_NONE) { LOGW("Can't determine location for barcode, detection is terminated"); diff --git a/mv_barcode/barcode_generator/include/BarcodeOptions.h b/mv_barcode/barcode_generator/include/BarcodeOptions.h index bebfe46c..5399b8a6 100644 --- a/mv_barcode/barcode_generator/include/BarcodeOptions.h +++ b/mv_barcode/barcode_generator/include/BarcodeOptions.h @@ -37,7 +37,13 @@ enum BarcodeType { BARCODE_EAN13 = BARCODE_EAN8, BARCODE_CODE39 = 8, BARCODE_CODE128 = 20, - BARCODE_INTERLEAVE_2_5 = 3 + BARCODE_INTERLEAVE_2_5 = 3, + BARCODE_EAN2 = BARCODE_EAN8, + BARCODE_EAN5 = BARCODE_EAN8, + BARCODE_CODE93 = 25, + BARCODE_CODABAR = 18, + BARCODE_DATABAR = 29, + BARCODE_DATABAR_EXPAND = 31 }; /** diff --git a/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp b/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp index 11a01cd2..c54bfe1f 100644 --- a/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp +++ b/mv_barcode/barcode_generator/src/BarcodeGenerator.cpp @@ -29,6 +29,8 @@ #include <vector> #include <unistd.h> +#define ZINT_COLOUR_SIZE 10 + namespace MediaVision { namespace Barcode { diff --git a/mv_barcode/barcode_generator/src/mv_barcode_generate.c b/mv_barcode/barcode_generator/src/mv_barcode_generate.c index 5f0c38de..83b69e5e 100644 --- a/mv_barcode/barcode_generator/src/mv_barcode_generate.c +++ b/mv_barcode/barcode_generator/src/mv_barcode_generate.c @@ -55,7 +55,7 @@ int mv_barcode_generate_source( MEDIA_VISION_FUNCTION_ENTER(); if (type < MV_BARCODE_QR || - type >= MV_BARCODE_UNDEFINED) { + type >= MV_BARCODE_UNKNOWN) { LOGE("Not supported barcode type [%d]", type); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } @@ -122,7 +122,7 @@ int mv_barcode_generate_image( } if (type < MV_BARCODE_QR || - type >= MV_BARCODE_UNDEFINED) { + type >= MV_BARCODE_UNKNOWN) { LOGE("Not supported barcode type [%d]", type); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } 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 62a3c823..c689f9ff 100644 --- a/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp +++ b/mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp @@ -73,6 +73,24 @@ BarcodeType convertBarcodeType(mv_barcode_type_e type) case MV_BARCODE_I2_5: barcodeType = BARCODE_INTERLEAVE_2_5; break; + case MV_BARCODE_EAN_2: + barcodeType = BARCODE_EAN2; + break; + case MV_BARCODE_EAN_5: + barcodeType = BARCODE_EAN5; + break; + case MV_BARCODE_CODE93: + barcodeType = BARCODE_CODE93; + break; + case MV_BARCODE_DATABAR: + barcodeType = BARCODE_DATABAR; + break; + case MV_BARCODE_DATABAR_EXPAND: + barcodeType = BARCODE_DATABAR_EXPAND; + break; + case MV_BARCODE_CODABAR: + barcodeType = BARCODE_CODABAR; + break; default: break; } diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 534cf8c7..49104f7c 100644 --- a/packaging/capi-media-vision.spec +++ b/packaging/capi-media-vision.spec @@ -1,6 +1,6 @@ Name: capi-media-vision Summary: Media Vision library for Tizen Native API -Version: 0.5.2 +Version: 0.5.3 Release: 1 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/barcode/barcode_test_suite.c b/test/testsuites/barcode/barcode_test_suite.c index bf32127c..431ad7e9 100644 --- a/test/testsuites/barcode/barcode_test_suite.c +++ b/test/testsuites/barcode/barcode_test_suite.c @@ -379,6 +379,24 @@ void barcode_detected_cb( case MV_BARCODE_I2_5: str_type = "I25"; break; + case MV_BARCODE_EAN_2: + str_type = "EAN_2"; + break; + case MV_BARCODE_EAN_5: + str_type = "EAN_5"; + break; + case MV_BARCODE_CODE93: + str_type = "CODE93"; + break; + case MV_BARCODE_CODABAR: + str_type = "CODABAR"; + break; + case MV_BARCODE_DATABAR: + str_type = "DATABAR"; + break; + case MV_BARCODE_DATABAR_EXPAND: + str_type = "DATABAR_EXPAND"; + break; default: str_type = "Undetected"; break; @@ -457,7 +475,7 @@ int generate_barcode_to_image(barcode_model_s model) MV_BARCODE_GENERATE_ATTR_TEXT, model.is_hrt); if (MEDIA_VISION_ERROR_NONE != err) { - mvprintw(current_y++, MINX, "ERROR : Errors were occured during set integer attribute to " + mvprintw(current_y++, MINX, "ERROR : Errors were occurred during set integer attribute to " "media engine config : %i", err); goto cleanup; } @@ -466,7 +484,7 @@ int generate_barcode_to_image(barcode_model_s model) MV_BARCODE_GENERATE_ATTR_COLOR_FRONT, model.front_color); if (MEDIA_VISION_ERROR_NONE != err) { - mvprintw(current_y++, MINX, "ERROR : Errors were occured during set string attribute to " + mvprintw(current_y++, MINX, "ERROR : Errors were occurred during set string attribute to " "media engine config : %i", err); goto cleanup; } @@ -475,7 +493,7 @@ int generate_barcode_to_image(barcode_model_s model) MV_BARCODE_GENERATE_ATTR_COLOR_BACK, model.back_color); if (MEDIA_VISION_ERROR_NONE != err) { - mvprintw(current_y++, MINX, "ERROR : Errors were occured during set string attribute to " + mvprintw(current_y++, MINX, "ERROR : Errors were occurred during set string attribute to " "media engine config : %i", err); goto cleanup; } @@ -713,7 +731,7 @@ int detect_barcode(barcode_model_s model, mv_rectangle_s roi) err = mv_engine_config_set_int_attribute( mv_engine_config, MV_BARCODE_DETECT_ATTR_TARGET, - MV_BARCODE_DETECT_ATTR_TARGET_2D_BARCODE); + MV_BARCODE_DETECT_ATTR_TARGET_ALL); if (MEDIA_VISION_ERROR_NONE != err) { mvprintw(current_y++, MINX, "ERROR : Errors were occurred during target attribute" "configuration : %i", err); @@ -906,15 +924,16 @@ int show_menu(const char *title, const int *options, const char **names, int cnt mv_barcode_type_e select_type(void) { - mv_barcode_type_e selected_type = MV_BARCODE_UNDEFINED; + mv_barcode_type_e selected_type = MV_BARCODE_UNKNOWN; int sel_opt = 0; - const int options[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; - const char *names[8] = { "qr", "upca", "upce", "ean8", "ean13", "code39", "code128", "interleave25" }; + const int options[14] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; + const char *names[14] = { "qr", "upca", "upce", "ean8", "ean13", "code39", "code128", "interleave25", + "ean2", "ean5", "code93", "codabar", "databar", "databarExpand" }; MEDIA_VISION_FUNCTION_ENTER(); while (sel_opt == 0) { - sel_opt = show_menu("Select barcode type : ", options, names, 8); + sel_opt = show_menu("Select barcode type : ", options, names, 14); switch (sel_opt) { case 1: @@ -941,6 +960,24 @@ mv_barcode_type_e select_type(void) case 8: selected_type = MV_BARCODE_I2_5; break; + case 9: + selected_type = MV_BARCODE_EAN_2; + break; + case 10: + selected_type = MV_BARCODE_EAN_5; + break; + case 11: + selected_type = MV_BARCODE_CODE93; + break; + case 12: + selected_type = MV_BARCODE_CODABAR; + break; + case 13: + selected_type = MV_BARCODE_DATABAR; + break; + case 14: + selected_type = MV_BARCODE_DATABAR_EXPAND; + break; default: sel_opt = 0; break; @@ -1135,7 +1172,7 @@ int perform_detect() MEDIA_VISION_FUNCTION_ENTER(); barcode_model_s detect_model = { - MV_BARCODE_UNDEFINED, + MV_BARCODE_UNKNOWN, MV_BARCODE_QR_ECC_UNAVAILABLE, MV_BARCODE_QR_MODE_UNAVAILABLE, 0, @@ -1217,7 +1254,7 @@ int perform_generate(void) MEDIA_VISION_FUNCTION_ENTER(); barcode_model_s generate_model = { - MV_BARCODE_UNDEFINED, + MV_BARCODE_UNKNOWN, MV_BARCODE_QR_ECC_UNAVAILABLE, MV_BARCODE_QR_MODE_UNAVAILABLE, 0, |