Skip to content

Commit a9ca2a6

Browse files
committed
优化zbar的流程
1 parent 11b19e5 commit a9ca2a6

3 files changed

Lines changed: 19 additions & 22 deletions

File tree

czxing/src/main/cpp/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ set_target_properties(tegra_hal PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}
3434
#set_target_properties(opencv_java4 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libopencv_java4.so)
3535

3636
# 导入zbar
37-
add_library(iconv SHARED IMPORTED)
37+
#add_library(iconv SHARED IMPORTED)
3838
add_library(zbar_croe SHARED IMPORTED)
39-
set_target_properties(iconv PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libiconv.so)
39+
#set_target_properties(iconv PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libiconv.so)
4040
set_target_properties(zbar_croe PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/libzbarjni.so)
4141

4242
find_library(
@@ -47,7 +47,7 @@ target_link_libraries(
4747
czxing
4848
ZXingCore
4949

50-
iconv
50+
# iconv
5151
zbar_croe
5252

5353
opencv_imgproc

czxing/src/main/cpp/ImageScheduler.cpp

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ ImageScheduler::ImageScheduler(JNIEnv *env, MultiFormatReader *_reader,
1515
this->env = env;
1616
this->reader = _reader;
1717
this->javaCallHelper = javaCallHelper;
18+
zbarScanner = new ImageScanner();
19+
zbarScanner->set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);
1820
qrCodeRecognizer = new QRCodeRecognizer();
1921
stopProcessing.store(false);
2022
isProcessing.store(false);
@@ -24,6 +26,7 @@ ImageScheduler::~ImageScheduler() {
2426
DELETE(env);
2527
DELETE(reader);
2628
DELETE(javaCallHelper);
29+
DELETE(zbarScanner);
2730
DELETE(qrCodeRecognizer);
2831
frameQueue.clear();
2932
delete &isProcessing;
@@ -209,8 +212,8 @@ void ImageScheduler::decodeAdaptivePixels(const Mat &gray) {
209212
if (result.isValid()) {
210213
javaCallHelper->onResult(result);
211214
} else {
212-
// decodeZBar(gray);
213-
recognizerQrCode(gray);
215+
decodeZBar(gray);
216+
// recognizerQrCode(gray);
214217
}
215218
}
216219

@@ -219,32 +222,25 @@ void ImageScheduler::decodeZBar(const Mat &gray) {
219222
auto height = static_cast<unsigned int>(gray.rows);
220223

221224
const void *raw = gray.data;
222-
ImageScanner zbarScanner;
223-
zbarScanner.set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);
224-
225225
Image image(width, height, "Y800", raw, width * height);
226-
int n = zbarScanner.scan(image);
226+
int n = zbarScanner->scan(image);
227227

228228
// extract results
229-
if (image.symbol_begin() == image.symbol_end()) {
230-
image.set_data(nullptr, 0);
231-
recognizerQrCode(gray);
232-
return;
233-
}
234-
235-
Image::SymbolIterator symbol = image.symbol_begin();
236-
for (; symbol != image.symbol_end(); ++symbol) {
237-
LOGE("zbar Code Type = %s , Data = %s", symbol->get_type_name().c_str(),
238-
symbol->get_data().c_str());
229+
if (n > 0) {
230+
Image::SymbolIterator symbol = image.symbol_begin();
231+
LOGE("zbar Code Data = %s", symbol->get_data().c_str());
239232

240-
if (symbol->get_type() == zbar_symbol_type_e::ZBAR_QRCODE){
233+
if (symbol->get_type() == zbar_symbol_type_e::ZBAR_QRCODE) {
241234
Result result(DecodeStatus::NoError);
242235
result.setFormat(BarcodeFormat::QR_CODE);
243236
result.setText(ANSIToUnicode(symbol->get_data()));
244237
javaCallHelper->onResult(result);
238+
image.set_data(nullptr, 0);
245239
}
240+
} else {
241+
image.set_data(nullptr, 0);
242+
recognizerQrCode(gray);
246243
}
247-
image.set_data(nullptr, 0);
248244
}
249245

250246
void ImageScheduler::recognizerQrCode(const Mat &mat) {
@@ -274,7 +270,7 @@ void ImageScheduler::recognizerQrCode(const Mat &mat) {
274270

275271
}
276272

277-
Result ImageScheduler::decodePixels(const Mat& mat) {
273+
Result ImageScheduler::decodePixels(const Mat &mat) {
278274
try {
279275
// int width = mat.cols;
280276
// int height = mat.rows;

czxing/src/main/cpp/ImageScheduler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class ImageScheduler {
6767
std::atomic<bool> isProcessing{};
6868
std::atomic<bool> stopProcessing{};
6969
double cameraLight{};
70+
ImageScanner *zbarScanner;
7071
QRCodeRecognizer *qrCodeRecognizer;
7172
SafeQueue<FrameData> frameQueue;
7273

0 commit comments

Comments
 (0)