summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTae-Young Chung <ty83.chung@samsung.com>2020-07-01 04:12:57 +0000
committerGerrit Code Review <gerrit@review>2020-07-01 04:12:57 +0000
commit2acb2a1149d8008c80f3f63f8749c0726e9402e8 (patch)
treeb9e76d74b593c5a3a6bc0fd0905aa704ee15ebd1
parent2b903e7eef466ecf7dc3edee94db00a57a0bdffa (diff)
parent1c025fb5725fd99e3ad9fed32304cc30664c1322 (diff)
downloadmediavision-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.h2
-rw-r--r--include/mv_barcode_type.h10
-rw-r--r--mv_barcode/barcode_detector/src/Barcode.cpp30
-rw-r--r--mv_barcode/barcode_detector/src/mv_barcode_detect_open.cpp30
-rw-r--r--mv_barcode/barcode_generator/include/BarcodeOptions.h8
-rw-r--r--mv_barcode/barcode_generator/src/BarcodeGenerator.cpp2
-rw-r--r--mv_barcode/barcode_generator/src/mv_barcode_generate.c4
-rw-r--r--mv_barcode/barcode_generator/src/mv_barcode_generate_open.cpp18
-rw-r--r--packaging/capi-media-vision.spec2
-rw-r--r--test/testsuites/barcode/barcode_test_suite.c57
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,