mv_barcode_generate_attr_shape_e finder_shape { MV_BARCODE_GENERATE_ATTR_SHAPE_RECT };
};
-int createBarcode(const std::string &message, BarcodeType type, BarcodeQREncodingMode encodingMode,
- BarcodeQRErrorCorrectionLevel correctionLevel, int qrVersion, int showText, char *fgcolour,
- char *bgcolour, zint_symbol *symbol, Common::EngineConfig *engineCfg);
-
int write_buffer_to_img(zint_symbol *symbol, const std::string &imageFileName, mv_barcode_image_format_e image_format,
const int imageWidth, const int imageHeight, mv_engine_config_h engine_cfg);
void swapBR(uint16_t *color);
+int mv_barcode_generate_symbol(zint_symbol *symbol, const BarcodeConfig &config);
+
} /* Barcode */
} /* MediaVision */
+++ /dev/null
-/**
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __MEDIA_VISION_BARCODE_GENERATE_OPEN_H__
-#define __MEDIA_VISION_BARCODE_GENERATE_OPEN_H__
-
-#include "BarcodeGenerator.h"
-#include "mv_barcode_generate.h"
-#include <zint.h>
-
-/**
- * @file mv_barcode_generate_open.h
- * @brief This file contains the Media Vision barcode generate module API for
- * the open module.
- */
-
-/**
- * @brief Generates @ref mv_source_h with barcode image.
- *
- * @since_tizen 2.4
- * @param [in] engine_cfg The handle to the configuration of the engine
- * @param [in] message The message to be encoded in the barcode
- * @param [in] type Type of the barcode to be generated
- * @param [in] qr_enc_mode Encoding mode for the message (only for QR codes;
- * for 1D barcodes set this parameter to
- * @ref MV_BARCODE_QR_MODE_UNAVAILABLE)
- * @param [in] qr_ecc Error correction level (only for QR codes; for
- * 1D barcodes set this parameter to
- * @ref MV_BARCODE_QR_ECC_UNAVAILABLE)
- * @param [in] qr_version QR code version (for 1D barcodes set this
- * parameter to 0)
- * @param [out] symbol The media source handle which will be used to
- * fill by the buffer with generated symbol
- * @return @c 0 on success, otherwise a negative error value
- * @retval #MEDIA_VISION_ERROR_NONE Successful
- * @retval #MEDIA_VISION_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #MEDIA_VISION_ERROR_MSG_TOO_LONG Too long or short message
- * @retval #MEDIA_VISION_ERROR_PERMISSION_DENIED Permission denied
- *
- * @see mv_barcode_generate_image_open()
- */
-int mv_barcode_generate_symbol(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,
- zint_symbol *symbol);
-
-#endif /* __MEDIA_VISION_BARCODE_GENERATE_OPEN_H__ */
return BARCODE_ERROR_NONE;
}
-int createBarcode(const std::string &message, BarcodeType type, BarcodeQREncodingMode encodingMode,
- BarcodeQRErrorCorrectionLevel correctionLevel, int qrVersion, int showText, char *fgcolour,
- char *bgcolour, zint_symbol *symbol, Common::EngineConfig *engineCfg)
+BarcodeType convertBarcodeType(mv_barcode_type_e type)
{
- /* set input values */
- symbol->symbology = type;
- symbol->input_mode = encodingMode;
- symbol->option_1 = correctionLevel;
- symbol->option_2 = qrVersion;
- symbol->scale = 1;
- symbol->show_hrt = showText;
+ BarcodeType barcodeType = ZINT_BARCODE_QR;
+ switch (type) {
+ case MV_BARCODE_UPC_A:
+ barcodeType = ZINT_BARCODE_UPCA;
+ break;
+ case MV_BARCODE_UPC_E:
+ barcodeType = ZINT_BARCODE_UPCE;
+ break;
+ case MV_BARCODE_EAN_8:
+ barcodeType = ZINT_BARCODE_EAN8;
+ break;
+ case MV_BARCODE_EAN_13:
+ barcodeType = ZINT_BARCODE_EAN13;
+ break;
+ case MV_BARCODE_CODE128:
+ barcodeType = ZINT_BARCODE_CODE128;
+ break;
+ case MV_BARCODE_CODE39:
+ barcodeType = ZINT_BARCODE_CODE39;
+ break;
+ case MV_BARCODE_I2_5:
+ barcodeType = ZINT_BARCODE_INTERLEAVE_2_5;
+ break;
+ case MV_BARCODE_EAN_2:
+ barcodeType = ZINT_BARCODE_EAN2;
+ break;
+ case MV_BARCODE_EAN_5:
+ barcodeType = ZINT_BARCODE_EAN5;
+ break;
+ case MV_BARCODE_CODE93:
+ barcodeType = ZINT_BARCODE_CODE93;
+ break;
+ case MV_BARCODE_DATABAR:
+ barcodeType = ZINT_BARCODE_DATABAR;
+ break;
+ case MV_BARCODE_DATABAR_EXPAND:
+ barcodeType = ZINT_BARCODE_DATABAR_EXPAND;
+ break;
+ case MV_BARCODE_CODABAR:
+ barcodeType = ZINT_BARCODE_CODABAR;
+ break;
+ default:
+ break;
+ }
- /* set default values */
- if (fgcolour) {
- std::strncpy(symbol->fgcolour, fgcolour, ZINT_COLOUR_SIZE - 1);
- if (strlen(fgcolour) > 9) {
- symbol->fgcolour[9] = '\0';
- }
- } else {
- std::strncpy(symbol->fgcolour, "000000", ZINT_COLOUR_SIZE - 1);
+ LOGI("Media vision barcode type has been converted to ZInt barcode type "
+ "(%i -> %i)",
+ type, barcodeType);
+ return barcodeType;
+}
+
+BarcodeQREncodingMode convertEncodingMode(mv_barcode_qr_mode_e mode)
+{
+ BarcodeQREncodingMode encodingMode = BARCODE_QR_MODE_ALPHANUMERIC;
+
+ switch (mode) {
+ case MV_BARCODE_QR_MODE_NUMERIC:
+ encodingMode = BARCODE_QR_MODE_NUMERIC;
+ break;
+ case MV_BARCODE_QR_MODE_BYTE:
+ encodingMode = BARCODE_QR_MODE_BYTE;
+ break;
+ case MV_BARCODE_QR_MODE_UTF8:
+ encodingMode = BARCODE_QR_MODE_UTF8;
+ break;
+ default:
+ break;
}
- if (bgcolour) {
- std::strncpy(symbol->bgcolour, bgcolour, ZINT_COLOUR_SIZE - 1);
- if (strlen(bgcolour) > 9) {
- symbol->bgcolour[9] = '\0';
- }
- } else {
- std::strncpy(symbol->bgcolour, "ffffff", ZINT_COLOUR_SIZE - 1);
+ LOGI("Media vision QRCode encoding mode has been converted to "
+ "ZInt encoding mode (%i -> %i)",
+ mode, encodingMode);
+ return encodingMode;
+}
+
+BarcodeQRErrorCorrectionLevel convertECC(mv_barcode_qr_ecc_e ecc)
+{
+ BarcodeQRErrorCorrectionLevel ecclevel = BARCODE_QR_ECC_LOW;
+
+ switch (ecc) {
+ case MV_BARCODE_QR_ECC_MEDIUM:
+ ecclevel = BARCODE_QR_ECC_MEDIUM;
+ break;
+ case MV_BARCODE_QR_ECC_QUARTILE:
+ ecclevel = BARCODE_QR_ECC_QUARTILE;
+ break;
+ case MV_BARCODE_QR_ECC_HIGH:
+ ecclevel = BARCODE_QR_ECC_HIGH;
+ break;
+ default:
+ break;
}
- LOGI("Check colors: front %s, back %s", symbol->fgcolour, symbol->bgcolour);
+ LOGI("Media vision ECC level has been converted to "
+ "ZInt ECC level (%i -> %i)",
+ ecc, ecclevel);
+ return ecclevel;
+}
- symbol->border_width = 1;
- symbol->height = 50;
+int convertBarcodeError(int barcodeError)
+{
+ int mvError;
- if (engineCfg) {
- int value;
- int ret = engineCfg->getIntegerAttribute(MV_BARCODE_GENERATE_ATTR_DATA_SHAPE, &value);
+ switch (barcodeError) {
+ case BARCODE_ERROR_NONE:
+ mvError = MEDIA_VISION_ERROR_NONE;
+ break;
+ case BARCODE_WARNING_INVALID_OPTION:
+ mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
+ break;
+ case BARCODE_ERROR_TOO_LONG:
+ mvError = MEDIA_VISION_ERROR_MSG_TOO_LONG;
+ break;
+ case BARCODE_ERROR_INVALID_DATA:
+ mvError = MEDIA_VISION_ERROR_INVALID_DATA;
+ break;
+ case BARCODE_ERROR_INVALID_CHECK:
+ mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
+ break;
+ case BARCODE_ERROR_INVALID_OPTION:
+ mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
+ break;
+ case BARCODE_ERROR_ENCODING_PROBLEM:
+ mvError = MEDIA_VISION_ERROR_INTERNAL;
+ break;
+ case BARCODE_ERROR_FILE_ACCESS:
+ mvError = MEDIA_VISION_ERROR_PERMISSION_DENIED;
+ break;
+ case BARCODE_ERROR_MEMORY:
+ mvError = MEDIA_VISION_ERROR_OUT_OF_MEMORY;
+ break;
+ case BARCODE_ERROR_INVALID_PATH:
+ mvError = MEDIA_VISION_ERROR_INVALID_PATH;
+ break;
+ default:
+ mvError = MEDIA_VISION_ERROR_INTERNAL;
+ }
- if (ret == MEDIA_VISION_ERROR_NONE) {
- switch (value) {
- case MV_BARCODE_GENERATE_ATTR_SHAPE_RECT:
- break;
- case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
- symbol->output_options |= BARCODE_DATA_CIRCLE;
- break;
+ LOGI("ZInt error code has been converted to the media vision error code "
+ "(%i -> (0x%08x))",
+ barcodeError, mvError);
+ return mvError;
+}
- default:
- LOGE("Invalid data shape");
- return BARCODE_WARNING_INVALID_OPTION;
- }
- }
+static int createBarcode(zint_symbol *symbol, const BarcodeConfig &config)
+{
+ /* set input values */
+ BarcodeType type = convertBarcodeType(config.type);
+ symbol->symbology = type;
+ symbol->input_mode = convertEncodingMode(config.qr_enc_mode);
+ symbol->option_1 = convertECC(config.qr_ecc);
+ symbol->option_2 = config.qr_version;
+ symbol->scale = 1;
+ symbol->show_hrt = config.text_opt;
- ret = engineCfg->getIntegerAttribute(MV_BARCODE_GENERATE_ATTR_FINDER_SHAPE, &value);
+ std::strncpy(symbol->fgcolour, config.fgcolor.c_str(), ZINT_COLOUR_SIZE - 1);
+ std::strncpy(symbol->bgcolour, config.bgcolor.c_str(), ZINT_COLOUR_SIZE - 1);
- if (ret == MEDIA_VISION_ERROR_NONE) {
- switch (value) {
- case MV_BARCODE_GENERATE_ATTR_SHAPE_RECT:
- break;
- case MV_BARCODE_GENERATE_ATTR_SHAPE_ROUND_RECT:
- symbol->output_options |= BARCODE_FINDER_ROUNDRECT;
- break;
- case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
- symbol->output_options |= BARCODE_FINDER_CIRCLE;
- break;
+ LOGI("Check colors: front %s, back %s", symbol->fgcolour, symbol->bgcolour);
- default:
- LOGE("Invalid finder shape");
- return BARCODE_WARNING_INVALID_OPTION;
- }
- }
+ symbol->border_width = 1;
+ symbol->height = 50;
+
+ switch (config.data_shape) {
+ case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
+ symbol->output_options |= BARCODE_DATA_CIRCLE;
+ break;
+ default:
+ break;
+ }
+
+ switch (config.finder_shape) {
+ case MV_BARCODE_GENERATE_ATTR_SHAPE_ROUND_RECT:
+ symbol->output_options |= BARCODE_FINDER_ROUNDRECT;
+ break;
+ case MV_BARCODE_GENERATE_ATTR_SHAPE_CIRCLE:
+ symbol->output_options |= BARCODE_FINDER_CIRCLE;
+ break;
+ default:
+ break;
}
if (type == ZINT_BARCODE_QR) {
}
/* create barcode */
- const int rotationAngle = 0;
int error =
- ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) (message.c_str()), message.length(), rotationAngle);
+ ZBarcode_Encode_and_Buffer(symbol, (unsigned char *) (config.message.c_str()), config.message.length(), 0);
return error;
}
+int mv_barcode_generate_symbol(zint_symbol *symbol, const BarcodeConfig &config)
+{
+ int error = createBarcode(symbol, config);
+
+ if (error != BARCODE_ERROR_NONE) {
+ const auto channel = 3;
+ LOGI("Barcode has been generated to the buffer: Buffer size = %ui x %ui; Channels = %ui; Message = %s",
+ symbol->bitmap_width, symbol->bitmap_height, channel, config.message.c_str());
+ }
+ return convertBarcodeError(error);
+}
+
static void __round_rect(cv::Mat &inOutImg, cv::Rect &rect, cv::Scalar &color)
{
auto gapW = rect.width / 4;
#include <zint.h>
/* Include headers of open barcode generate module here. */
-#include "mv_barcode_generate_open.h"
+#include "BarcodeGenerator.h"
using namespace std;
using namespace MediaVision::Barcode;
return MEDIA_VISION_ERROR_INTERNAL;
}
- ret = mv_barcode_generate_symbol(engine_cfg, message, type, qr_enc_mode, qr_ecc, qr_version, symbol);
+ ret = mv_barcode_generate_symbol(symbol, config);
if (ret != MEDIA_VISION_ERROR_NONE) {
ZBarcode_Delete(symbol);
return ret;
return MEDIA_VISION_ERROR_INTERNAL;
}
- ret = mv_barcode_generate_symbol(engine_cfg, message, type, qr_enc_mode, qr_ecc, qr_version, symbol);
+ ret = mv_barcode_generate_symbol(symbol, config);
if (ret != MEDIA_VISION_ERROR_NONE) {
ZBarcode_Delete(symbol);
return ret;
+++ /dev/null
-/**
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "mv_barcode_generate_open.h"
-
-#include "BarcodeGenerator.h"
-#include "mv_common.h"
-
-#include <mv_private.h>
-
-#include <algorithm>
-#include <cstring>
-
-using namespace MediaVision::Barcode;
-
-int alphanumToUpper(std::string &strToTransform)
-{
- std::string tempString = strToTransform;
- std::transform(tempString.begin(), tempString.end(), tempString.begin(), ::toupper);
-
- if (std::string::npos != tempString.find_first_not_of("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")) {
- LOGE("Barcode message can't be converted according to support "
- "alphanumeric (0..9, A..Z, space, $, %%, *, +, -, ., /, :) "
- "mode: %s",
- strToTransform.c_str());
- return BARCODE_ERROR_INVALID_DATA;
- }
-
- LOGI("Barcode message was converted according to support alphanumeric "
- "mode: %s -> %s",
- strToTransform.c_str(), tempString.c_str());
- strToTransform = tempString;
- return BARCODE_ERROR_NONE;
-}
-
-BarcodeType convertBarcodeType(mv_barcode_type_e type)
-{
- BarcodeType barcodeType = ZINT_BARCODE_QR;
- switch (type) {
- case MV_BARCODE_UPC_A:
- barcodeType = ZINT_BARCODE_UPCA;
- break;
- case MV_BARCODE_UPC_E:
- barcodeType = ZINT_BARCODE_UPCE;
- break;
- case MV_BARCODE_EAN_8:
- barcodeType = ZINT_BARCODE_EAN8;
- break;
- case MV_BARCODE_EAN_13:
- barcodeType = ZINT_BARCODE_EAN13;
- break;
- case MV_BARCODE_CODE128:
- barcodeType = ZINT_BARCODE_CODE128;
- break;
- case MV_BARCODE_CODE39:
- barcodeType = ZINT_BARCODE_CODE39;
- break;
- case MV_BARCODE_I2_5:
- barcodeType = ZINT_BARCODE_INTERLEAVE_2_5;
- break;
- case MV_BARCODE_EAN_2:
- barcodeType = ZINT_BARCODE_EAN2;
- break;
- case MV_BARCODE_EAN_5:
- barcodeType = ZINT_BARCODE_EAN5;
- break;
- case MV_BARCODE_CODE93:
- barcodeType = ZINT_BARCODE_CODE93;
- break;
- case MV_BARCODE_DATABAR:
- barcodeType = ZINT_BARCODE_DATABAR;
- break;
- case MV_BARCODE_DATABAR_EXPAND:
- barcodeType = ZINT_BARCODE_DATABAR_EXPAND;
- break;
- case MV_BARCODE_CODABAR:
- barcodeType = ZINT_BARCODE_CODABAR;
- break;
- default:
- break;
- }
-
- LOGI("Media vision barcode type has been converted to ZInt barcode type "
- "(%i -> %i)",
- type, barcodeType);
- return barcodeType;
-}
-
-BarcodeQREncodingMode convertEncodingMode(mv_barcode_qr_mode_e mode)
-{
- BarcodeQREncodingMode encodingMode = BARCODE_QR_MODE_ALPHANUMERIC;
-
- switch (mode) {
- case MV_BARCODE_QR_MODE_NUMERIC:
- encodingMode = BARCODE_QR_MODE_NUMERIC;
- break;
- case MV_BARCODE_QR_MODE_BYTE:
- encodingMode = BARCODE_QR_MODE_BYTE;
- break;
- case MV_BARCODE_QR_MODE_UTF8:
- encodingMode = BARCODE_QR_MODE_UTF8;
- break;
- default:
- break;
- }
-
- LOGI("Media vision QRCode encoding mode has been converted to "
- "ZInt encoding mode (%i -> %i)",
- mode, encodingMode);
- return encodingMode;
-}
-
-BarcodeQRErrorCorrectionLevel convertECC(mv_barcode_qr_ecc_e ecc)
-{
- BarcodeQRErrorCorrectionLevel ecclevel = BARCODE_QR_ECC_LOW;
-
- switch (ecc) {
- case MV_BARCODE_QR_ECC_MEDIUM:
- ecclevel = BARCODE_QR_ECC_MEDIUM;
- break;
- case MV_BARCODE_QR_ECC_QUARTILE:
- ecclevel = BARCODE_QR_ECC_QUARTILE;
- break;
- case MV_BARCODE_QR_ECC_HIGH:
- ecclevel = BARCODE_QR_ECC_HIGH;
- break;
- default:
- break;
- }
-
- LOGI("Media vision ECC level has been converted to "
- "ZInt ECC level (%i -> %i)",
- ecc, ecclevel);
- return ecclevel;
-}
-
-int convertBarcodeError(int barcodeError)
-{
- int mvError;
-
- switch (barcodeError) {
- case BARCODE_ERROR_NONE:
- mvError = MEDIA_VISION_ERROR_NONE;
- break;
- case BARCODE_WARNING_INVALID_OPTION:
- mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
- break;
- case BARCODE_ERROR_TOO_LONG:
- mvError = MEDIA_VISION_ERROR_MSG_TOO_LONG;
- break;
- case BARCODE_ERROR_INVALID_DATA:
- mvError = MEDIA_VISION_ERROR_INVALID_DATA;
- break;
- case BARCODE_ERROR_INVALID_CHECK:
- mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
- break;
- case BARCODE_ERROR_INVALID_OPTION:
- mvError = MEDIA_VISION_ERROR_INVALID_PARAMETER;
- break;
- case BARCODE_ERROR_ENCODING_PROBLEM:
- mvError = MEDIA_VISION_ERROR_INTERNAL;
- break;
- case BARCODE_ERROR_FILE_ACCESS:
- mvError = MEDIA_VISION_ERROR_PERMISSION_DENIED;
- break;
- case BARCODE_ERROR_MEMORY:
- mvError = MEDIA_VISION_ERROR_OUT_OF_MEMORY;
- break;
- case BARCODE_ERROR_INVALID_PATH:
- mvError = MEDIA_VISION_ERROR_INVALID_PATH;
- break;
- default:
- mvError = MEDIA_VISION_ERROR_INTERNAL;
- }
-
- LOGI("ZInt error code has been converted to the media vision error code "
- "(%i -> (0x%08x))",
- barcodeError, mvError);
- return mvError;
-}
-
-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;
-}
-
-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;
-
- 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;
- }
-
- 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;
- }
-
- /* 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;
- }
-
- 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;
- }
-
- swapBR((uint16_t *) *fgcolour);
- swapBR((uint16_t *) *bgcolour);
-
- return MEDIA_VISION_ERROR_NONE;
-}
-
-int mv_barcode_generate_symbol(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,
- zint_symbol *symbol)
-{
- 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 *fgcolour = NULL;
- char *bgcolour = NULL;
-
- auto engineCfg = static_cast<MediaVision::Common::EngineConfig *>(engine_cfg);
-
- error = getColorFromEngine(engine_cfg, type, showText, &fgcolour, &bgcolour);
- if (error != MEDIA_VISION_ERROR_NONE) {
- LOGE("getColorFromEngine failed");
- return error;
- }
- error = createBarcode(message, convertBarcodeType(type), convertEncodingMode(qr_enc_mode), convertECC(qr_ecc),
- qr_version, showText, fgcolour, bgcolour, symbol, engineCfg);
-
- free(fgcolour);
- free(bgcolour);
- if (error != BARCODE_ERROR_NONE) {
- const auto channel = 3;
- LOGI("Barcode has been generated to the buffer: Buffer size = %ui x %ui; Channels = %ui; Message = %s",
- symbol->bitmap_width, symbol->bitmap_height, channel, messageStr.c_str());
- }
- return convertBarcodeError(error);
-}