Commit Graph

304 Commits

Author SHA1 Message Date
Nikolaos Ftylitakis d2cf8dc3f9 Merge pull request #24 from neutrino2/master
fixed type mistake in ReedSolomonEncoder::encode
2017-04-05 20:28:59 +03:00
Milian Wolff e77dcccd5f Take captureRect into account when converting YUV420P
This allows us to only copy the actually required data from the source
frame into the greyscale target image. Without this patch, my desktop
machine with a camera providing YUV420 frames takes about ~25ms to
decode a single frame 1920x1080 frame using a 25% capture rect.

With the patch applied, the performance goes up drastically, and we
now only take about 17ms to decode a single frame.

The same should be done for NV12 frames, but I didn't have a device
at hand to test the code there yet.
2017-03-30 18:24:28 +02:00
Nikolaos Ftylitakis 6d945cce4f Update README.md
fixed Readme file styling
2017-03-20 18:17:39 +02:00
favoritas37 6a40ab118d Merge branch 'master' of https://github.com/ftylitak/qzxing 2017-03-20 17:24:53 +02:00
favoritas37 2207c3c248 Removed qzxing_qml tag from the defaults
Automatically add qzxing_qml if qzxing_multimedia tag is used
Refactorings to wrap QML dependant code in QZXING_QML scopes
update README.md to reflect the above changes
changes triggered from #26
2017-03-20 17:23:52 +02:00
favoritas37 51346e19d6 Fixed processing of RGB32 images. Fix inverted y directly at the construction of the image. Fixes issue #27. 2017-03-20 15:11:40 +02:00
favoritas37 f581e879de fixed compilation of QZXingLive for platforms other than Android 2017-03-16 16:26:48 +02:00
favoritas37 a69cd45ac6 added higher resolution icons in QZXingLive 2017-03-03 19:02:49 +02:00
Neutrino 7dd3489290 fixed type mistake in ReedSolomonEncoder::encode 2017-02-16 14:13:03 +08:00
favoritas37 3ee00d8cff Merge branch 'oKcerG-register-types-qzxingcpp' 2017-01-30 09:11:25 +02:00
favoritas37 cd9fc3b029 resolving merge conflicts 2017-01-30 09:07:52 +02:00
favoritas37 29860c538c Added example with proper handling of Android application permissions for QZXingLive triggered by #22 2017-01-29 17:54:16 +02:00
favoritas37 5ef72fa114 added license reference to the headers of the project 2017-01-27 13:50:46 +02:00
Nikolaos Ftylitakis 452054720d Merge pull request #20 from nickdiego/fix-captureRect
QZXingFilter: More fixes to captureRect stuff
2017-01-23 20:18:31 +02:00
favoritas37 88012f5aa2 Updated BarcodeEncoder project. Previous implementation caused compilation error when compiled with MSVC. Also this implementation is more compact 2017-01-23 19:45:47 +02:00
favoritas37 3397ee4a2b fixed linker error for QZXingTests when compiled with MSVC. Minor styling edits in TestCase.cpp 2017-01-23 18:05:57 +02:00
Nick Diego Yamane 815dec7252 QZXingFilter: More fixes to captureRect stuff 2017-01-22 23:43:39 -04:00
favoritas37 fe26b2112e align file name casing to camel case for qzxing.cpp and imagehandler 2017-01-22 18:42:03 +02:00
Nikolaos Ftylitakis 154451e968 Merge pull request #18 from nickdiego/upstream-fixes
Fix some critical bugs in QZXingFilter
2017-01-22 17:58:23 +02:00
Nick Diego Yamane 557a52b17d QZXingFilter: Enforce captureRect validation
captureRect is accessible and modifyable via QML, so that
it can take arbitrary values, what can make QZXingFilter to crash
the application.

This issue was experienced when running code similar to QZXingLive
example on an android device, where captureRect is bound based on
VideoOutput's contentRect and sourceRect, when QML Engine is
calculating layout for the pages it sets temp values to width/height
of elements (including VideoOutput) what causes captureRect to be
set to invalid values for the QZXingFilter's perspective, such
as negative values for x and y.

Signed-off-by: Nick Diego Yamane <nick.diego@gmail.com>
2017-01-19 03:22:33 -04:00
Nick Diego Yamane 2083f7a805 QZXingFilter: Fix crash when destructing QZXingFilter
QZXingFilterRunnable runs QFuture to perform
decoder::decodeImage() and stores it in a
class var of its owner (QZXingFilter), but
when QZXingFilter is destructed it was not canceling
that QFuture, making possible to the QFuture to try to
access filter->decoder->decodeImage() after filter's
are already destructed (dangling pointer).

Issue detected when using QZXingFilter QML Element in
an Page pushed in a StackView. When the page containing the
QZXingFilter is poped from the StackView, (by default) the
filter is unloaded/destructed, what makes the app crash
without this patch.

Signed-off-by: Nick Diego Yamane <nick.diego@gmail.com>
2017-01-19 03:22:33 -04:00
oKcerG b3d0c8209b Define static function to registers types in qzxing.cpp, not in qzxing.h
This simplifies the code for QZXingFilter (revert it to what it was before)
Also added a global include file, to include all QZXing user classes.

Reverts 5627d2fbb5, eb6bdb41e9, 1bae498386 & 213c4d684b
2017-01-18 16:01:18 +01:00
favoritas37 5627d2fbb5 deallocate instance of QZXing on QZXingFilter destruction. update the initialization list to match the declaration order 2017-01-17 16:35:26 +02:00
favoritas37 eb6bdb41e9 revert propert decoder of QZXingFilter that was mistakenly renamed. Allocate an instance of QZXing at the creation of QZXingFilter 2017-01-17 16:13:42 +02:00
favoritas37 54a7fc9d72 added missing includes for QDebug and QFuture. 2017-01-17 13:40:33 +02:00
favoritas37 1bae498386 properly fix compile issue by forward declaring QZXing in QZXingFilter. Had to make decoder variable as pointer in order to avoid the compiler requirement to known the exact size of the class...that had to be forward declared. Properly addresses issue #16 2017-01-17 13:37:20 +02:00
favoritas37 213c4d684b fixes #16. compilation error due to a forgotten include in QZXing.h 2017-01-17 13:16:36 +02:00
Nikolaos Ftylitakis cbaef5e90f Delete gradle.properties
removed unnecessary file
2017-01-16 20:04:22 +02:00
favoritas37 c48d31f523 removed unecessary file 2017-01-16 20:02:13 +02:00
favoritas37 703d79174d Update main readme file to include the latest changes with the dependency control. Added more info for a quick introduction to the library 2017-01-16 19:58:34 +02:00
favoritas37 75eb47e8c5 fine tune the use of QZXing::registerQMLTypes to include the QZXingFilter. Update QZXingLive with the latest changes 2017-01-16 19:57:25 +02:00
favoritas37 905ee3359a make QZXingLive aware of the Android configuration 2017-01-16 19:54:20 +02:00
favoritas37 ac2d636532 Added initial Android files 2017-01-16 19:52:44 +02:00
favoritas37 a3e71ec1e7 created qzxing_qml and qzxing_multimedia qmake CONFIG tags for QZXing.pri to allow the control of dependencies based on the needs. qzxing_qml enables QML specific parts of the library. qzxing_multimedia enables QZXingFilter which requires Qt's multimedia. 2017-01-15 20:36:41 +02:00
Nikolaos Ftylitakis b1eaeb1960 Merge pull request #13 from KDAB/improved_qzxingfilter
great improvements of QZXing and QZXingLive performance provided by @milianw from KDAB!
QZXingFilter becomes integral part of QZXing library source code.

closes #5
2017-01-14 17:15:31 +02:00
Milian Wolff 594b178501 Make QZXingFilter "official" by moving it out of the example folder
The filter is much more performant than using the QZXing API in an
imparative way for the use-case of live-analyzing video frames in QML.
2017-01-10 13:24:55 +01:00
Milian Wolff 61508f461a Optimize: Return the matrix reference directly instead of copying it.
This removes another copy of frame data, thereby improving the FPS
of the QZXingFilter example noticeably.
2017-01-10 13:17:54 +01:00
Milian Wolff 449a808972 Crop to capture rect directly when converting RGB to grayscale
This improves the performance since we only need to convert the
actually interesting part of the frame, instead of the full frame.
2017-01-10 13:17:54 +01:00
Milian Wolff c882465649 Improve performance of rgb(a) reading, convert directly to greyscale
This again leads to a noticeable performance improvement of the
QZXingFilter example, as we get rid of one full copy of the image
data by converting directly into greyscale, instead of first
converting to RGB and then converting to greyscale.
2017-01-10 13:17:54 +01:00
Milian Wolff 9d378fa2e4 use __builtin_ctz instead of reinventing it in a slower way 2017-01-10 13:17:54 +01:00
Milian Wolff b5e4f06e9f Fix linking on recent Qt for iOS
The qtmn hack is not required anymore.
2017-01-10 13:17:54 +01:00
Milian Wolff 0e10d8aeca Add simple FPS counter to QZXingLive example 2017-01-10 13:17:54 +01:00
Milian Wolff 69e05c1ff1 Add support for NV12 video frames
This was encountered on a recent Android device.
2017-01-10 13:17:54 +01:00
Milian Wolff 75b1a0d355 Further optimize QZXingFilterRunnable::processVideoFrameProbed
Do not call detaching QByteArray::data, use constData instead.
Also hoist some constants out of the inner conversion loops and make
more variables const.
2017-01-10 13:17:54 +01:00
Milian Wolff 3eb5b0b869 Cleanup debug code, save at most 100 images. 2017-01-10 13:17:54 +01:00
Milian Wolff bc2badb5b5 Optimize: reduce memory allocations, convert directly to grayscale
This dramatically improves the performance of the QZXingFilter.
2017-01-10 13:17:54 +01:00
Milian Wolff d112bf4186 Don't try harder by default in the QZXingLive example 2017-01-10 13:17:54 +01:00
Milian Wolff 7937cb84b5 Only try to mirror images when tryHarder is set to true
Additionally, this is only done until a match is found, instead of
always applying mirroring for the 2nd, 3rd and 4th frames.
2017-01-10 13:17:54 +01:00
Milian Wolff cafad4a9c0 Add captureRect functionality
This allows one to only detect within a certain unscaled region
of the input frame. The reduction of pixels scanned leads to
a significant performance win, and the removal of the scaling
improves the quality of the checked image, thereby leading to
higher detection rates.
2017-01-10 13:17:54 +01:00
Milian Wolff a7103d5cac Expand QZXingFilter example code
- allow autofocus and manual focus
- count number of tags matched
- allow configuring the barcode scanner from QML
2017-01-10 13:17:54 +01:00