@@ -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
250246void 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;
0 commit comments