Compare commits

...

4992 Commits

Author SHA1 Message Date
Alexander Alekhin
3b15f3e3b9 avoid calling of setNumThreads() to respect user settings 2018-03-29 13:48:37 +03:00
Maksim Shabunin
265f335dae Add install component for 3rdparty libraries licenses 2018-03-06 16:55:08 +03:00
Maksim Shabunin
e283a75a19 Minor refactoring in several C++ samples:
- bgfg_segm
- peopledetect
- opencv_version
- dnn/colorization
- tapi/opencl_custom_kernel
- tapi/dense_optical_flow (renamed tvl1_optical_flow)
2018-03-06 16:51:03 +03:00
Alexander Alekhin
ed96279920 ocl: update getOpenCLErrorString() code 2018-03-01 14:01:44 +03:00
Alexander Alekhin
e79be78ef4 dnn(workaround): switch to CPU target if compiled without OpenCL 2018-03-01 12:18:40 +03:00
Alexander Alekhin
4a6d582f2e dnn: make OpenCL DNN code optional 2018-03-01 12:18:39 +03:00
Alexander Alekhin
e969f184e1 3rdparty: fix protobuf version in README file 2018-03-01 12:18:32 +03:00
Alexander Alekhin
ca9af20179 OpenCV version '-cvsdk' 2018-02-26 13:27:49 +03:00
Maksim Shabunin
0f1e193193 Fixed two issues found by static analysis 2018-02-26 13:27:49 +03:00
Alexander Alekhin
6ffc48769a OpenCV version++
OpenCV 3.4.1
2018-02-23 11:38:33 +03:00
Alexander Alekhin
4a74408eee experimental version++ 2018-02-23 11:38:33 +03:00
Alexander Alekhin
c729fbd652 Merge pull request #10925 from pengli:dnn 2018-02-23 08:38:03 +00:00
Li Peng
608968aa83 Deconvolution ocl fix
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-23 18:31:30 +08:00
Li, Peng
5caf6244a3 Merge pull request #10922 from pengli:dnn
* ave pooling ocl fix

support the padded area control in ave pooling

Signed-off-by: Li Peng <peng.li@intel.com>

* warning fix: ununitialized field
2018-02-22 21:01:12 +03:00
Maksim Shabunin
eaaba6462e Merge pull request #10919 from mshabunin:fix-static-9 2018-02-22 15:05:25 +00:00
Maksim Shabunin
92e9d4ec3a Fixed several issues detected by static analysis 2018-02-22 17:11:33 +03:00
Maksim Shabunin
fbb2cabe77 Use fixed size types in AVIContainer structs 2018-02-22 17:11:25 +03:00
Maksim Shabunin
3fd2384b81 Fixed mingw compilation on Windows 2018-02-22 17:11:18 +03:00
Alexander Alekhin
e851a41d78 Merge pull request #10909 from alalek:ffmpeg_update 2018-02-22 14:05:37 +00:00
Vadim Pisarevsky
5e0f95b948 Merge pull request #9708 from dkurt:tf_face_detector 2018-02-22 12:04:26 +00:00
Alexander Alekhin
f7aa2e0d44 ffmpeg: update wrapper
FFmpeg: 3.3.4 -> 3.4.2
LibVPX: 1.6.1 -> 1.7.0
OpenH264: 1.6.0 -> 1.7.0
2018-02-22 15:04:06 +03:00
Vadim Pisarevsky
a11b7a8293 Merge pull request #10916 from alalek:videoio_sample_aspect_ratio 2018-02-22 12:03:39 +00:00
Alexander Alekhin
e6062532fa Merge pull request #10918 from pengli:dnn 2018-02-22 10:30:00 +00:00
Li Peng
e7d35d51fa Fix for opencv face detector ocl test
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-22 23:37:54 +08:00
Li Peng
c524f669c7 Fallback for "SAME" padMode in ocl convolution and pooling
It fixes tensorflow ocl testcase of MobileNetSSD and Inception_v2_SSD

Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-22 21:17:59 +08:00
Alexander Alekhin
203ac0f818 Merge pull request #10914 from alalek:issue_10815 2018-02-21 18:26:15 +00:00
Dmitry Kurtaev
eab556e1e0 OpenCV face detection network in TensorFlow 2018-02-21 19:58:24 +03:00
Alexander Alekhin
9819ebc095 videoio: add missing CAP_PROP_SAR_NUM/DEN propepties into .hpp file
reuse av_guess_sample_aspect_ratio() if available in ffmpeg
2018-02-21 19:14:04 +03:00
Alexander Alekhin
fb6db3dcfc Merge pull request #10915 from alalek:issue_10910 2018-02-21 15:55:03 +00:00
Alexander Alekhin
7601c21612 Merge pull request #10912 from alalek:fix_imgcodecs_hang 2018-02-21 13:39:35 +00:00
Alexander Alekhin
cb9b08eca1 createsamples: fix ROI in icvGetBackgroundImage() 2018-02-21 14:40:35 +03:00
Alexander Alekhin
48b8aa51cd core: eliminate redundant cv::format() declarations
Existed includes sequence:
- utility.hpp -> core.hpp -> operations.hpp
2018-02-21 14:22:16 +03:00
Alexander Alekhin
6e8241b78d imgcodecs: fix RBaseStream hang on truncated inputs 2018-02-21 13:17:18 +03:00
Vadim Pisarevsky
f61076a5d8 Merge pull request #10367 from savuor:multiwrite_tiff_renew 2018-02-20 23:13:55 +00:00
Alexander Alekhin
5f5fcef962 Merge pull request #10907 from alalek:cmake_ninja_fix 2018-02-20 18:54:43 +00:00
Namgoo Lee
12ce6b5c15 Merge pull request #10906 from nglee:dev_cudaFastMultiStreamSafety
cuda_fast : multi stream safety (#10906)

* CUDA_Features2D/FAST Asynchronous test

* cuda_fast : multi stream safety

* Use parallel_for instead of OpenMP
2018-02-20 20:55:57 +03:00
Rostislav Vasilikhin
27b1f8f446 imwrite for multipage images implemented 2018-02-20 19:08:45 +03:00
Vadim Pisarevsky
c6e1e3acdc Merge pull request #10892 from alalek:android_sdk_build_gradle 2018-02-20 14:59:32 +00:00
Vadim Pisarevsky
53661d55ae Merge pull request #10406 from seiko2plus:coreUnvintrinCopy 2018-02-20 14:50:17 +00:00
Vadim Pisarevsky
120b7a61c3 Merge pull request #10745 from terfendail:tiff_fix 2018-02-20 14:47:13 +00:00
PalkoNazar
470d34ddbb make tmpRow proper size before copyTo to avoid reallocated tmpCol (#10860)
* make tmpRow proper size before copyTo to avoid reallocated tmpCol

* do the transposition without creating temporary array; replace TAB with spaces.

* revert the previous commit
2018-02-20 16:55:25 +03:00
Vadim Pisarevsky
a0c2718adb Merge pull request #10902 from alalek:port_10695 2018-02-20 13:26:59 +00:00
Vadim Pisarevsky
a836892edb Merge pull request #10903 from alalek:ml_ann_test 2018-02-20 13:25:58 +00:00
Vadim Pisarevsky
25518a12f1 Merge pull request #10908 from alalek:fix_ffmpeg_uchar 2018-02-20 12:22:09 +00:00
Alexander Alekhin
2aa15ab3ff ffmpeg: fix 'uchar' error
> cap_ffmpeg_impl.hpp:1710:11: error: 'uchar' does not name a type
2018-02-20 13:15:41 +03:00
Alexander Alekhin
807ec00b85 cmake: fix Ninja warning
about BYPRODUCTS bin/opencv-340.jar
2018-02-20 13:13:31 +03:00
Alexander Alekhin
53305d4a7e Merge pull request #10891 from pengli:dnn 2018-02-20 08:59:07 +00:00
Li Peng
2863f950d6 ReLU6 layer ocl support
include relu6 ocl kernel and layer fusion support

Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-20 15:11:09 +08:00
Alexander Alekhin
12d2bd4adb ml: refactor ML_ANN test 2018-02-19 21:35:48 +03:00
Vitaly Tuzov
24ee7b5080 Fix for vertically flipped tiff files reading 2018-02-19 18:49:19 +03:00
mworchel
aab390c51d Add mask support to SimpleBlobDetector 2018-02-19 17:54:27 +03:00
Dmitry Kurtaev
8b4871a28d Use only absolute prior boxes explicit sizes. Remove scales attributes. (#10874)
* Use only absolute prior boxes explicit sizes. Remove scales attributes.

* Simplified PriorBox layer forward pass
2018-02-19 17:25:18 +03:00
Alexander Alekhin
cf31243c74 android: add build.grade into Android SDK
For using 'OpenCV for Android SDK' with Android Studio projects.
2018-02-19 17:19:26 +03:00
Vadim Pisarevsky
88b689bcf1 Merge pull request #10876 from alalek:android_static_libs 2018-02-19 14:16:06 +00:00
Vadim Pisarevsky
f589237e23 Merge pull request #10880 from StevenPuttemans:fix_10594 2018-02-19 14:13:43 +00:00
Vadim Pisarevsky
7da6e9086c Merge pull request #10893 from alalek:fix_cpu_disable_flags 2018-02-19 14:11:11 +00:00
Vadim Pisarevsky
68043f4de9 Merge pull request #10896 from dkurt:tensorflow_tests_generator 2018-02-19 14:08:58 +00:00
Alexander Alekhin
c0eaff3608 Merge pull request #10900 from tomoaki0705:fixPerfVideoioGstreamer 2018-02-19 13:59:20 +00:00
Tomoaki Teshima
bcce25900b read in gray scale mode when writing a gray scale video 2018-02-19 18:33:05 +09:00
Dmitry Kurtaev
34ba32ff27 Fix DNN flatten test 2018-02-18 12:45:43 +03:00
Alexander Alekhin
857007372d Merge pull request #10895 from tomoaki0705:fixBuildVS2013sprintf 2018-02-18 07:45:01 +00:00
Tomoaki Teshima
6a661e1e28 fix test error on VS2013 2018-02-18 09:29:38 +09:00
Alexander Alekhin
cc5a6f3b86 core: remove '-' from separators list of disabled CPU flags
To allow runtime disabling of AVX512-SKX via 'OPENCV_CPU_DISABLE' parameter
2018-02-18 00:03:04 +00:00
Maksim Shabunin
aa7a964139 Merge pull request #10868 from mshabunin:sample-bgsegm
* Samples: reworked bgfg_bgsegm

* fixup! Samples: reworked bgfg_bgsegm
2018-02-17 15:04:14 +03:00
Alexander Alekhin
73a8369631 Merge pull request #10890 from Reputeless:patch-1 2018-02-17 12:02:48 +00:00
Florian Echtler
6a8f57e5d7 Merge pull request #10081 from floe:java-camera2-view
* add (untested) JavaCamera2View class

* initial fixes

* minor cleanup

* exclude JavaCamera2View from build for older SDK version

* fix method name typo

* add asserts + sanity checks

* fix preview format checks

* fix the memory leak

* export cvtTwoPlaneYUVtoBGR for Java usage

* add handling for two-plane YUV frames (C wrapper still missing)

* add two-plane cvtColor helper function

* fix warnings

* actually use the new cvtColorTwoPlane helper func

* fix wrong output matrix size

* fix wrong conversion type

* simplify method signature, add error condition

* minor fixes to Mat types

* remove leftover semaphore from camera api 1

* android: JavaCamera2View minor refactoring

- re-apply Java code style
- imports cleanup
- dump exceptions information

* android: JavaCamera2View: pause/resume fixes

* android: JavaCamera2View: fix mScale
2018-02-17 15:01:24 +03:00
Alexander Alekhin
eb94dfb442 Merge pull request #10885 from alalek:issue_10881 2018-02-17 11:58:51 +00:00
Patrik Huber
7be0c78533 Merge pull request #10589 from patrikhuber:patch-1
* Make <array> #ifdef true for MSVC

I think MSVC had `std::array` for quite a while (possibly going back as far as VS 2012, but it's definitely there in 2015 and 2017. So I think `_MSC_VER` `1900` is a safe bet. Probably `1800` and maybe even `1700` could work as well but I can't test that locally.

* fix test
2018-02-17 14:53:30 +03:00
Ryo Suzuki
97d9ea00fe Fix typo in core/base.hpp 2018-02-17 19:35:25 +09:00
Alexander Alekhin
491502a349 core: fix parallel_for data race 2018-02-16 21:13:48 +03:00
Alexander Alekhin
0e4eed0ba1 Merge pull request #10867 from dkurt:dnn_fix_ave_pooling_area 2018-02-16 11:17:32 +00:00
Alexander Alekhin
8ffcc76011 Merge pull request #10883 from alalek:portable_stdint 2018-02-16 10:29:39 +00:00
Alexander Alekhin
c020a7bb67 build: portable integer types 2018-02-15 23:43:02 +03:00
Alexander Alekhin
e268fdc0ed Merge pull request #10793 from denmatfoton:master 2018-02-15 15:52:52 +00:00
Alexander Alekhin
bb925fe488 Merge pull request #10879 from StevenPuttemans:fix_10650 2018-02-15 15:48:12 +00:00
Alexander Alekhin
1dbdb1cfc9 Merge pull request #10727 from alalek:cmake_hook_system 2018-02-15 15:46:12 +00:00
Alexander Alekhin
30b33a4413 Merge pull request #10145 from allnes:vedeoio_avi_container 2018-02-15 15:14:03 +00:00
Steven
945ad277ea add missing DNN header to opencv2/opencv.hpp 2018-02-15 15:59:14 +01:00
Steven
6f4e35cc0e fix tutorial on real time pose estimation 2018-02-15 15:48:52 +01:00
Alexander Nesterov
df8f61877e Added avi-container with tests 2018-02-15 17:34:49 +03:00
Alexander Alekhin
ddb482b14a android: move .a files into 'staticlibs' directory
to reduce overhead of gradle builds
2018-02-15 16:31:49 +03:00
Alexander Alekhin
f378f1d585 calib3d: add regression test for stereoCalibrate 2018-02-15 15:24:09 +03:00
Alexander Alekhin
36f11a54e1 cmake: customize OpenCV build via CMake script hooks 2018-02-15 14:03:38 +03:00
Dmitry Kurtaev
f8d0d6365e Add a flag to manage average pooling with padding 2018-02-14 16:56:31 +03:00
Alexander Alekhin
cff79609c8 Merge pull request #10854 from pengli:dnn 2018-02-14 12:49:53 +00:00
Alexander Alekhin
c434198ee5 Merge pull request #10864 from alalek:cmake_update_debug_info 2018-02-14 12:47:43 +00:00
Vadim Pisarevsky
ef70b0baa4 Merge pull request #10865 from dkurt:dnn_inf_engine_getInputsInfo 2018-02-14 12:25:18 +00:00
Vadim Pisarevsky
b4ddf3d8c5 Merge pull request #10678 from terfendail:OutputArray_recreate 2018-02-14 11:36:51 +00:00
Vadim Pisarevsky
42b25d747b Merge pull request #10856 from tomoaki0705:fixVisualStudioFixedWidthInt 2018-02-14 11:33:15 +00:00
Dmitry Kurtaev
a66b5e2c13 Add const getInputsInfo 2018-02-14 14:17:44 +03:00
Vadim Pisarevsky
8f0b72be9e Merge pull request #10861 from nglee:dev_cudaDftAlgorithmTest 2018-02-14 10:50:05 +00:00
Vadim Pisarevsky
15dc6f70dc Merge pull request #10863 from mshabunin:fix-viz-samples-build 2018-02-14 10:49:05 +00:00
Alexander Alekhin
95014f311d cmake: debug info 2018-02-14 13:44:10 +03:00
Vadim Pisarevsky
6dfd7e3da2 Merge pull request #10850 from dkurt:dnn_tf_deconv_tests 2018-02-14 10:35:14 +00:00
Alexander Alekhin
cfe84b953c Merge pull request #10859 from luzpaz:misc-modules-typos-cont-2 2018-02-14 09:56:11 +00:00
Maksim Shabunin
f78b9468dd Samples: fixed samples build in case the viz module is disabled 2018-02-14 12:45:10 +03:00
Namgoo Lee
034dc3b0dd Fix for CUDA_Arithm/Dft.Algorithm/0 test 2018-02-14 09:54:13 +09:00
Li Peng
80d1f2ddfa re-enable tensor flow mobilenet ssd ocl test
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-14 01:04:58 +08:00
luz.paz
d05714995c Misc. modules/ cont. pt2
Found via `codespell`
2018-02-13 11:28:11 -05:00
Alexander Alekhin
252e871a8b Merge pull request #10846 from luzpaz:misc-modules-typos-cont 2018-02-13 16:12:28 +00:00
Alexander Alekhin
59b91d6c31 Merge pull request #10821 from dkurt:dnn_layers_fusion 2018-02-13 16:08:48 +00:00
Li Peng
5992c46606 add fallback case for ocl convolution
The ocl convolution doesn't support tensorflow padMode well.
Add fallback check if we meet this situation, it could fix the
tensorflow MobileNet SSD failure.

Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-14 00:04:38 +08:00
Li Peng
00d2f34888 ocl fix for detection_output and prior_box layer
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-13 23:09:14 +08:00
Alexander Alekhin
a91a11e533 Merge pull request #10818 from mshabunin:install-samples-src 2018-02-13 14:37:38 +00:00
Alexander Alekhin
2423cddb00 Merge pull request #10852 from alalek:fix_cpuid 2018-02-13 13:56:22 +00:00
Alexander Alekhin
eb54e5c55c core: generalize and fix x86 'cpuid' calls 2018-02-13 15:35:04 +03:00
Dmitry Kurtaev
514e6df460 Refactored deep learning layers fusion 2018-02-13 14:35:58 +03:00
Tomoaki Teshima
94253e8b83 fix build error on Visual Studio 2013 and earlier 2018-02-13 18:30:02 +09:00
Dmitry Kurtaev
a6baedd02c Fix deconvolution layer. Add batch norm layer with mean-variance normalization from TensorFlow. 2018-02-13 11:00:27 +03:00
Maksim Shabunin
c63092781a Samples: fixed viz tutorials building with enabled opencv_world 2018-02-12 18:42:36 +03:00
Maksim Shabunin
2d1350a9d6 Added group targets for samples (opencv_samples, opencv_samples_<group>), install samples/data inseparate component 'samples_data' 2018-02-12 18:42:36 +03:00
Maksim Shabunin
2200e13c71 cmake: refactored scripts with samples building:
- allow installing samples sources on all platforms
  even if BUILD_EXAMPLES is disabled,  fixed minor
  issues in sources installation process
- use 'example_<group>_<name>' scheme for target and binary file naming
- use single function for sample executable creation
2018-02-12 18:42:36 +03:00
Maksim Shabunin
633b0e56a5 Fixed compilation warnings in samples:
- use per-module includes instead of "opencv.hpp"
- unused function warnings
- undefined macro warning
2018-02-12 18:42:36 +03:00
Maksim Shabunin
8393d755f6 Fixed OpenGL-specific compilation warning (unused function) 2018-02-12 18:42:36 +03:00
Alexander Alekhin
7474ad81d9 Merge pull request #10845 from alalek:cpu_dispatch_fix_file_generation 2018-02-12 15:39:24 +00:00
luz.paz
e805a55a5b Misc. modules/ typos (cont.)
Found via `codespell`
2018-02-12 10:15:36 -05:00
Alexander Alekhin
14032c6653 cmake: reset __content variable if file doesn't exist
Resolves CMake error after relaunch with updated source code:
Cannot find source file:
    modules/dnn/layers/layers_common.avx512_skx.cpp
2018-02-12 17:30:53 +03:00
Alexander Alekhin
17233c687e Merge pull request #10797 from mshabunin:split-convert 2018-02-12 13:49:53 +00:00
Alexander Alekhin
57cbde3393 Merge pull request #10798 from mshabunin:split-stat 2018-02-12 13:49:41 +00:00
Alexander Alekhin
579781e35e Merge pull request #10822 from alalek:ocl_fix_imgproc_amd 2018-02-12 13:48:06 +00:00
Alexander Alekhin
66f3c1ae79 Merge pull request #10843 from luzpaz:misc-modules-typos 2018-02-12 13:47:12 +00:00
Sui Libin
1ad814a191 fix faster_rcnn sample crashed at PoolingInvoker on Windows7(x64). (#10724)
* fix faster_rcnn sample crashed at PoolingInvoker operator() of pooling_layer.

* find_odj onmouse bug about find matched point status.

* reverted AutoBuffer back to std::vector
2018-02-12 16:07:56 +03:00
Maksim Shabunin
221342fb25 Split convert.cpp into smaller pieces 2018-02-12 15:17:19 +03:00
luz.paz
5718d09e39 Misc. modules/ typos
Found via `codespell`
2018-02-12 07:09:43 -05:00
Rémi Ratajczak
b67523550f dnn : Added an imagesFromBlob method to the dnn module (#10607)
* Added the imagesFromBlob method to the dnn module.

* Rewritten imagesFromBlob based on first dkurt comments

* Updated code with getPlane()

* Modify comment of imagesFromBlob() in dnn module

* modified comments, removed useless assertions & added OutputArrayOfArray

* replaced tabs with whitespaces & put vectorOfChannels instantiation outside the loop

* Changed pre-commit.sample to pre-commit in .git/hooks/

* Added a test for imagesFromBlob in test_misc.cpp (dnn)

* Changed nbOfImages, robustified test with cv::randu, modified assertion
2018-02-12 14:51:07 +03:00
Alexander Alekhin
5a791e6e06 cmake: update reporting of excluded dispatching files (#10711)
* cmake: add ocv_get_smart_file_name() macro

* cmake: avoid adding files for unavailable dispatch modes
2018-02-12 14:48:20 +03:00
Namgoo Lee
61e76e767d Update BufferReader documentation with some example code (#10803)
* Update BufferReader documentation with some example code

* Add warning to BufferPool doc regarding deallocation of StackAllocator

* Added a sample code that satisfies LIFO rule for StackAllocator
2018-02-12 14:41:23 +03:00
Vadim Pisarevsky
51b5fdba25 Merge pull request #10805 from dkurt:dnn_inf_engine_tf_ssd 2018-02-12 11:40:00 +00:00
yuki takehara
379ea15d16 Add new Mat constructor (#10808)
* Add new Mat constructor

* Fix build error

* Fix build error

* Fixed the code about 4 comments

* Fixed three comments

* delete previous local declaration

* fix build error
2018-02-12 14:36:54 +03:00
Maksim Shabunin
4437e0c3b9 Split stat.cpp into smaller pieces 2018-02-12 14:14:08 +03:00
Alexander Alekhin
fad3a6bf15 ocl: disable Laplacian5 and sepFilter2D_SinglePass kernels for AMD OpenCL 2018-02-12 14:06:57 +03:00
Alexander Alekhin
ab0f0f26a1 Merge pull request #10839 from csukuangfj:fix-9486 2018-02-12 09:24:29 +00:00
Alexander Alekhin
b7ad95beaa Merge pull request #10836 from csukuangfj:fix-10826 2018-02-12 09:23:55 +00:00
Alexander Alekhin
2c8da29f3a Merge pull request #10835 from csukuangfj:fix-10827 2018-02-12 09:19:52 +00:00
Alexander Alekhin
efd3fafa25 Merge pull request #10834 from csukuangfj:fix-issue-9387 2018-02-12 09:19:25 +00:00
Alexander Alekhin
d61528b2d5 Merge pull request #10833 from csukuangfj:improve-viz3d 2018-02-12 09:12:39 +00:00
Fangjun Kuang
e8b2c5682e fix issue #9387 and #9575. 2018-02-11 21:04:20 +08:00
Fangjun Kuang
ce2a65db85 fix issue #9486. 2018-02-11 20:08:53 +08:00
Fangjun Kuang
2f3d4df2f2 improve the doc for the viz module. 2018-02-11 16:14:09 +08:00
Fangjun Kuang
6205981235 Fix issue 10826. 2018-02-11 16:01:21 +08:00
Fangjun Kuang
28a78003f0 Fix issue 10827. 2018-02-11 15:54:36 +08:00
Alexander Alekhin
e2a99d24ec Merge pull request #10813 from alalek:cmake_cxx_flags 2018-02-10 12:27:00 +00:00
Alexander Alekhin
601e3aaf98 Merge pull request #10820 from alalek:python_isystem 2018-02-09 15:32:50 +00:00
Alexander Alekhin
dd2fd39c05 Merge pull request #10819 from alalek:ocl_fix_dgpu_locks 2018-02-09 15:24:33 +00:00
Alexander Alekhin
84887d3011 cmake: use -isystem for Python/numpy include directories 2018-02-09 17:10:02 +03:00
Alexander Alekhin
9e298ea1bb build: eliminate c++17 Python build warning 2018-02-09 17:09:36 +03:00
Alexander Alekhin
65ba2e0adf cmake: update adding of extra compiler flags
Read flags from 'cache' instead of resetting them
2018-02-09 17:09:35 +03:00
Alexander Alekhin
42e1fe301c ocl: allow recursive UMatData lock() calls with the same objects
OpenCLAllocator::copy() may call upload()/download() methods
2018-02-09 14:19:10 +03:00
Dmitry Kurtaev
7fe97376c2 MobileNet-SSD from TensorFlow 1.3 and Inception-V2-SSD using Inference Engine backend 2018-02-09 13:45:45 +03:00
take1014
03407a9da0 Merge pull request #10646 from take1014:master
* Add a new interface for hough transform

* Fixed warning code

* Fix HoughLinesUsingSetOfPoints based on HoughLinesStandard

* Delete memset

* Rename HoughLinesUsingSetOfPoints and add common function

* Fix test error

* Change static function name

* Change using CV_Assert instead of if-block and add integer test case

* I solve the conflict and delete 'std :: tr1' and changed it to use 'tuple'

* I deleted std::tr1::get and changed int to use 'get'

* Fixed sample code

* revert test_main.cpp

* Delete sample code in comment and add snippets

* Change file name

* Delete static function

* Fixed build error
2018-02-08 22:54:43 +03:00
Alexander Alekhin
d56b2b56fb Merge pull request #10814 from luzpaz:opencv-misc-apps-docs-platforms-typos 2018-02-08 19:14:30 +00:00
luz.paz
d47b1f3b70 Misc. ./apps ./doc ./platoforms typos
Found via `codespell -q 3 --skip="./3rdparty" -I ../opencv-whitelist.txt`
2018-02-08 13:04:34 -05:00
Alexander Alekhin
090ee46f4a Merge pull request #10812 from luzpaz:opencv-misc-samples-dir-typos 2018-02-08 12:07:14 +00:00
luz.paz
dbb57cd0ae Misc. ./samples typos
Found via `codespell -q 3 --skip="./3rdparty" -I ../opencv-whitelist.txt`
2018-02-08 05:52:08 -05:00
Vadim Pisarevsky
0c07836fba Merge pull request #10807 from luzpaz:misc-typos 2018-02-07 13:43:10 +00:00
Vadim Pisarevsky
835acd3f31 Merge pull request #10799 from dkurt:dnn_inference_engine_face_detection 2018-02-07 13:42:08 +00:00
Vadim Pisarevsky
f8b03d4a4b Merge pull request #10806 from alalek:build_cxx17 2018-02-07 13:28:22 +00:00
luz.paz
413fba14ab Some mist. typo fixes
Found via `codespell -i 3 -w --skip="./3rdparty" -I ../opencv-whitelist.txt`
2018-02-07 06:59:15 -05:00
Alexander Alekhin
44d7435a48 build: eliminate calls of removed functionality from C++17
Most part is deprecated since C++11
2018-02-07 12:00:33 +03:00
Alexander Alekhin
f77f2876ff Merge pull request #10800 from alalek:parallel_for_update 2018-02-06 17:56:33 +00:00
Alexander Alekhin
914f57f28d core(parallel_for): fix data race 2018-02-06 18:19:50 +03:00
Dmitry Kurtaev
ed94136548 OpenCV face detection network using Inference Engine backend 2018-02-06 17:53:24 +03:00
Alexander Alekhin
c973aaabc5 Merge pull request #10787 from dkurt:dnn_tutorial_face_detection 2018-02-06 14:37:09 +00:00
Vitaly Tuzov
3267fb90c6 Updated check on OutputArray to allow recreation of fixed_size for 1-d sizes array 2018-02-06 17:07:36 +03:00
Alexander Alekhin
b10fedde56 core(parallel_for): cleanup
remove 'dont_wait' (can be replaced with has_wake_signal)
2018-02-06 16:10:41 +03:00
Dmitry Kurtaev
8817907647 Test for FP16 version of OpenCV face detection network 2018-02-06 13:16:07 +03:00
Alexander Alekhin
398ebbac98 Merge pull request #10795 from pengli:dnn 2018-02-06 10:04:29 +00:00
Li Peng
c43498c6ad check vector emptiness before access it
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-06 22:59:51 +08:00
Li Peng
389fa5d38e slice layer ocl update
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-06 22:59:47 +08:00
Alexander Alekhin
2a1f46c42d Merge pull request #9770 from alalek:refactor_test_files 2018-02-06 09:33:58 +00:00
Maksim Shabunin
e225850cc6 Split persistence.cpp into smaller pieces (#10788)
* Extracted base64 persistence functionality

* Extracted YML persistence functionality

* Extracted JSON persistence functionality

* Extracted XML persistence functionality

* Extracted public C and C++ interfaces implementation in persistence

* Persistence: cleanup and fixes

* fixup! Persistence: cleanup and fixes
2018-02-06 11:59:32 +03:00
Dmitry Kurtaev
10e1de74d2 Intel Inference Engine deep learning backend (#10608)
* Intel Inference Engine deep learning backend.

* OpenFace network using Inference Engine backend
2018-02-06 11:57:35 +03:00
Vadim Pisarevsky
292dfc2d72 Merge pull request #10789 from mshabunin:split-matrix 2018-02-06 08:54:16 +00:00
denmatfoton
b085158d59 Fix unstable work of stereoRectify function. Issue description: https://github.com/opencv/opencv/issues/10791 2018-02-05 15:30:26 -05:00
Maksim Shabunin
904640c9ae Split matrix.cpp into smaller pieces 2018-02-05 19:16:33 +03:00
Alexander Alekhin
06455fc0cd Merge pull request #10764 from sturkmen72:update_cmake 2018-02-05 14:07:40 +00:00
Suleyman TURKMEN
3b191bf2dd update CMakeList.txt 2018-02-05 16:23:52 +03:00
berak
56bcdfd7d9 Merge pull request #10777 from berak:dnn_colorize_cpp
* dnn: add colorization.cpp

* Update arguments of dnn/colorization.py
2018-02-05 15:07:40 +03:00
Vadim Pisarevsky
14089b1e7c Merge pull request #10782 from csukuangfj:patch-1 2018-02-05 10:10:16 +00:00
Dmitry Kurtaev
5f6077bc62 Tool to generate text graphs for SSD models from TensorFlow (#10723)
* Added tool to generate text graph for SSD models from TensorFlow

* Update tf_text_graph_ssd.py
2018-02-05 13:00:43 +03:00
Alexander Alekhin
19a914be16 Merge pull request #10759 from mshabunin:fix-msvc-lto-debug 2018-02-05 09:33:03 +00:00
csukuangfj
f1c91a8d34 Fix issue #10781
Fix issue #10781.
2018-02-05 11:26:25 +08:00
Alexander Alekhin
5a71f4a0ca Merge pull request #10775 from alalek:update_valgrind_suppression 2018-02-04 13:52:09 +00:00
Alexander Alekhin
a449731a57 valgrind: update suppression rules 2018-02-03 22:59:45 +00:00
Alexander Alekhin
e801e336ed Merge pull request #10769 from mshabunin:add-tbb-cmake-support 2018-02-03 19:48:19 +00:00
Alexander Alekhin
0d01b97b75 cuda: don't use std::numeric_limits
CUDA code uses own implementation in cuda/limits.hpp
2018-02-03 19:43:05 +00:00
Alexander Alekhin
7fedfa0380 cudev(test): avoid namespace check 2018-02-03 19:39:47 +00:00
Alexander Alekhin
4a297a2443 ts: refactor OpenCV tests
- removed tr1 usage (dropped in C++17)
- moved includes of vector/map/iostream/limits into ts.hpp
- require opencv_test + anonymous namespace (added compile check)
- fixed norm() usage (must be from cvtest::norm for checks) and other conflict functions
- added missing license headers
2018-02-03 19:39:47 +00:00
Maksim Shabunin
108d07c655 TBB: added workaround for linking issue with conflicting system and custom libraries 2018-02-03 14:27:46 +03:00
Maksim Shabunin
34a9ce6eb3 cmake: support searching for TBB via cmake package mechanism 2018-02-03 13:51:54 +03:00
Alexander Alekhin
f1e50ecab3 ts: fix missing std::tr1 (C++17) 2018-02-02 20:02:45 +00:00
Alexander Alekhin
a0ce12f8ba Merge pull request #10767 from alalek:fix_cmake 2018-02-02 19:26:49 +00:00
Alexander Alekhin
3d6659112f cmake: fix includes processing 2018-02-02 21:52:54 +03:00
Rostislav Vasilikhin
1055f9d208 Merge pull request #10757 from savuor:test_hist_renew
* old types removed

* QueryHist tests: new types

* ThreshHist tests: new types

* CalcHist tests: new types

* CalcBackProject tests: new types

* CalcBackProjectPatch tests: new types

* const ref added
2018-02-02 21:35:44 +03:00
Alexander Alekhin
403c3c3d03 Merge pull request #10766 from mshabunin:fix-world-interface-include 2018-02-02 16:25:17 +00:00
Alexander Alekhin
877b175565 Merge pull request #10758 from mshabunin:allow-many-contrib 2018-02-02 16:07:48 +00:00
Alexander Alekhin
82f889d9b8 Merge pull request #10765 from BelBES:sb/findContours_fix 2018-02-02 16:03:15 +00:00
Maksim Shabunin
7eb37bd1dd Fixed components INTERFACE_INCLUDE_DIRECTORY property in "world" builds 2018-02-02 18:14:25 +03:00
Harshal Nishar
384fa95680 Fix in Canny when Sobel apertureSize is 7 (#10743)
* Fixing a bug in Canny implemetation when Sobel aperture size is 7.

* Fixing the bug in Canny accross variants and in test_canny.cpp

* Replacing a tab with white space
2018-02-02 17:00:11 +03:00
sergeybe
2266a8c85f fix FindContours default offset for CV_LINK_RUNS method 2018-02-02 16:46:05 +03:00
Vadim Pisarevsky
83761d5f8e Merge pull request #10761 from seiko2plus:issue10753 2018-02-02 11:27:26 +00:00
Alexander Alekhin
ecbd5b0574 Merge pull request #10751 from nglee:dev 2018-02-02 10:48:50 +00:00
Ya-Chiu Wu
c8d8b1fbcd Merge pull request #10553 from GlueCrow:bgfg_knn_opencl
Add ocl version BackgroundSubtractorKNN (#10553)

* Add ocl version bgfg_knn

* Add ocl KNN perf test

* ocl KNN: Avoid unnecessary initializing when non-UMat parameters are used

* video: turn off OpenCL for color KNN on Intel devices

due performance degradation

* video: turn off KNN OpenCL on Apple devices with Intel iGPU

due process freeze during clBuildProgram() call
2018-02-02 13:20:46 +03:00
Alexander Alekhin
92fb3fb33f Merge pull request #10763 from alalek:issue_10760 2018-02-02 12:34:59 +03:00
Alexander Alekhin
02bc17be6f js: filterout OpenCL headers 2018-02-02 12:26:22 +03:00
Sayed Adel
534dcbe017 core:ppc Fix compile issue with Eigen 2018-02-02 03:31:25 +00:00
Alexander Alekhin
12cd3b55ec Merge pull request #10756 from terfendail:orb_firstlevel 2018-02-01 18:34:57 +00:00
Alexander Alekhin
bbfa239036 Merge pull request #10706 from alalek:exception_opencv_version 2018-02-01 18:32:13 +00:00
Alexander Alekhin
c96630c9f0 Merge pull request #10705 from alalek:opencv_version_update 2018-02-01 18:31:52 +00:00
Maksim Shabunin
60f1c9dcdf Do not enable LTO flags for MSVC debug configuration 2018-02-01 19:22:48 +03:00
Maksim Shabunin
82aff110b7 cmake: allow providing list of extra modules paths 2018-02-01 19:02:02 +03:00
Vitaly Tuzov
26321795f7 Fixed assertion in ORB::setFirstLevel() 2018-02-01 16:58:35 +03:00
Vadim Pisarevsky
f780ee12a0 Merge pull request #10690 from terfendail:orb_firstlevel 2018-02-01 13:41:29 +00:00
Maksim Shabunin
e56d6054aa Do not build protobuf without dnn (#10689)
* Do not build protobuf if dnn is disabled

* Added BUILD_LIST cmake option to the cache

* Moved protobuf to the top level

* Fixed static build

* Fixed world build

* fixup! Fixed world build
2018-02-01 16:30:23 +03:00
Vadim Pisarevsky
36222c9eed Merge pull request #10730 from dkurt:dnn_faster_rcnn_rfcn_tests 2018-02-01 13:28:10 +00:00
Vadim Pisarevsky
8436dac090 Merge pull request #10742 from alalek:fix_winrt_fs_build 2018-02-01 13:23:49 +00:00
Vadim Pisarevsky
713ec7be45 Merge pull request #10746 from dkurt:dnn_batch_norm_from_nvidia_caffe 2018-02-01 13:22:09 +00:00
Alexander Alekhin
42569cfd61 Merge pull request #10748 from dkurt:fix_dnn_slice_layer 2018-02-01 13:21:17 +00:00
Alexander Alekhin
7c8a3da0ac Merge pull request #10709 from alalek:cleanup_2018 2018-02-01 13:08:36 +00:00
Alexander Alekhin
9d25bd583f Merge pull request #10754 from dkurt:dnn_ocl_gemv_min_globalsize 2018-02-01 12:39:27 +00:00
Vadim Pisarevsky
85af8735ab Merge pull request #10749 from alalek:issue_10736 2018-02-01 12:26:50 +00:00
Aditya Rohan
ccea0a831a Merge pull request #10732 from Riyuzakii:10598
* Introduces error throw for line drawn with THICKNESS=0
2018-02-01 15:21:00 +03:00
Dmitry Kurtaev
65a6674c6e ocl4dnnGEMV in case of row_size < 4 2018-02-01 14:06:47 +03:00
Alexander Alekhin
9698b93d10 Merge pull request #10717 from pengli:dnn 2018-02-01 10:49:54 +00:00
Alexander Alekhin
78ce5b815d Merge pull request #10733 from alalek:issue_10654 2018-02-01 10:31:48 +00:00
Li Peng
6aec71d7ee mvn layer ocl update
it fuse ocl kernels to reduce kernel enqueue

Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-01 17:48:12 +08:00
Li Peng
83b16ab7b7 fix extra spaces in build option
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-01 17:46:11 +08:00
Li Peng
54c81cbde4 eltwise layer SUM op update
Signed-off-by: Li Peng <peng.li@intel.com>
2018-02-01 17:46:06 +08:00
Namgoo Lee
3cf535926a cuda_stream: do not allocate GPU memory by default (fixes #8725) 2018-02-01 03:55:52 +09:00
Alexander Alekhin
35738bcadd samples: remove orphan documentation snippet: SBM_Sample.cpp 2018-01-31 18:54:08 +00:00
Dmitry Kurtaev
184862582c Fix slice layer from TensorFlow 2018-01-31 19:12:37 +03:00
Alexander Alekhin
c4f9ff0285 cmake: avoid using of pkg-config in cross-compilation mode unconditionally
- specify PKG_CONFIG_LIBDIR environment variable to new target SYSROOT
2018-01-31 16:56:24 +03:00
Arjan van de Ven
a75840d19c Merge pull request #10468 from fenrus75:avx512-2
* Add a 512 bit codepath to the AVX512 fastConv function

this patch adds a 512 wide codepath to the fastConv() function for
AVX512 use.
The basic idea is to process the first N * 16 elements of the vector
with avx512, and then run the rest of the vector using the traditional
AVX2 codepath.

* dnn: use unaligned AVX512 load (OpenCV aligns data on 32-byte boundary)

* dnn: change "vecsize" condition for AVX512

* dnn: fix indentation
2018-01-31 16:34:12 +03:00
Alexander Alekhin
f06c44f1f1 Merge pull request #10701 from dkurt:tf_ave_pooling 2018-01-31 13:28:09 +00:00
Dmitry Kurtaev
844f1d0281 Fix Batch Normalization layer imported from NVIDIA Caffe. 2018-01-31 16:25:45 +03:00
Dmitry Kurtaev
a2e9bfbaf4 Fix padding for average pooling from TensorFlow 2018-01-31 15:54:30 +03:00
Alexander Alekhin
2e45095e8d winrt: fix build 2018-01-31 15:00:45 +03:00
Alexander Alekhin
027da35c33 Merge pull request #10738 from tomoaki0705:fixBuildVisualStudio 2018-01-31 09:57:29 +00:00
Alexander Alekhin
2c1161a6f9 Merge pull request #10735 from seiko2plus:coreYieldPPC 2018-01-31 09:41:37 +00:00
Tomoaki Teshima
5f4b48da34 fix build error on Visual Studio 2013 and earlier 2018-01-31 18:22:09 +09:00
Sayed Adel
4e1d396ce1 core:ppc Add yield support 2018-01-31 04:03:35 +00:00
Alexander Alekhin
98bd0a06dc cmake: fix gnu.toolchain
- CMAKE_FIND_ROOT_PATH_MODE_PROGRAM: ONLY => NEVER
- update handling of CMAKE_FIND_ROOT_PATH_MODE_* variables
2018-01-30 18:29:18 +00:00
Alexander Alekhin
f57630d92b Merge pull request #10691 from alalek:parallel_for_2018 2018-01-30 14:13:29 +00:00
Dmitry Kurtaev
ae2e4af4a1 Faster-RCNN and RFCN tests
https://github.com/rbgirshick/py-faster-rcnn
https://github.com/YuwenXiong/py-R-FCN
2018-01-30 13:17:35 +03:00
Vadim Pisarevsky
cb66f82c1d Merge pull request #10707 from alalek:update_reports 2018-01-30 09:22:46 +00:00
Vadim Pisarevsky
1389fd67ab Merge pull request #10721 from alalek:ocl_force_clBuildProgram 2018-01-30 09:20:58 +00:00
Li Peng
7a4c5e9421 slice layer ocl support
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-29 22:34:32 +08:00
Alexander Alekhin
cf1ba0c4e1 Merge pull request #10719 from alisentas:master
Fix cv::CommandLineParser::check() documentation
2018-01-29 16:24:59 +03:00
Alexander Alekhin
ebdb0eb0c1 ocl: force clBuildProgram() call after clCreateProgramWithBinary() 2018-01-29 15:51:07 +03:00
Ali Sentas
4d80419f29 Fix cv::CommandLineParser::check() documentation 2018-01-29 15:14:21 +03:00
Alexander Alekhin
32d71cf85f Merge pull request #10713 from alalek:issue_10710 2018-01-29 09:03:36 +00:00
Alexander Alekhin
2876670de3 dnn(ocl): fix build options for Apple OpenCL 2018-01-28 01:54:25 +00:00
Alexander Alekhin
36d4c29b11 cleanup unused/outdated files/scripts/links 2018-01-27 23:22:44 +00:00
Alexander Alekhin
c8930cc279 opencv_version: dump detected HW features 2018-01-27 17:08:29 +00:00
Alexander Alekhin
01f4a173ab opencv_version: dump OpenCL information via opencv_version
fix missing "opencv2/core/opencl" headers from core module (updated install list)
2018-01-27 17:08:28 +00:00
Alexander Alekhin
daf3368d2e perf reports: remove units from table cells
- moved to table title
- can be restored via '--show_units' option
- fix microseconds: mks -> us
2018-01-27 14:38:40 +00:00
Alexander Alekhin
f6fd3abd31 core: add OpenCV version information into Exception messages 2018-01-27 13:51:16 +00:00
Woody Chow
f1c52e426b Merge pull request #10697 from woodychow:tbb_task_arena
* Use Intel TBB's task arena if possible
2018-01-27 08:46:54 +03:00
Pavel Rojtberg
203dc3bb48 Merge pull request #10667 from paroj:stereo_calib_ex
calib3d: add stereoCalibrateExtended (#10667)

* cvCalibrateCamera2Internal: simplify per view error computation

* calib3d: add stereoCalibrateExtended

- allow CALIB_USE_EXTRINSIC_GUESS
- returns per view errors

* calib3d: add stereoCalibrateExtended test
2018-01-26 22:05:13 +03:00
Alexander Alekhin
7b8ab4e5c6 Merge pull request #10688 from LaurentBerger:calcback 2018-01-26 19:01:48 +00:00
Alexander Alekhin
73891d619a Merge pull request #10700 from alalek:cpu_dispatch_axv512
* cmake: enable CPU dispatching for AVX512 (SKX)

* cmake: update handling of unsupported flags/modes
2018-01-26 21:59:47 +03:00
Alexander Alekhin
fe4fbc2c3b Merge pull request #10693 from travbid:IntrinsicParams_fix 2018-01-26 16:22:38 +00:00
LaurentBerger
2ebf4e084a solve issue #10687 2018-01-26 17:01:02 +01:00
Alexander Alekhin
df22bafe6d Merge pull request #10681 from hmaarrfk:python_stitching_scans 2018-01-26 10:04:41 +00:00
Alexander Alekhin
c49d5d5252 core: fix pthreads performance
OpenCV pthreads-based implementation changes:
- rework worker threads pool, allow to execute job by the main thread too
- rework synchronization scheme (wait for job completion, threads 'pong' answer is not required)
- allow "active wait" (spin) by worker threads and by the main thread
- use _mm_pause() during active wait (support for Hyper-Threading technology)
- use sched_yield() to avoid preemption of still working other workers
- don't use getTickCount()
- optional builtin thread pool profiler (disabled by compilation flag)
2018-01-26 04:09:11 +00:00
Alexander Alekhin
104502c5be Merge pull request #10676 from dkurt:dnn_for_newer_mobilenet_ssd 2018-01-26 04:02:21 +00:00
Travers
7d6cf66303 IntrinsicParams operator+ fix 2018-01-26 14:04:45 +13:00
Maksim Shabunin
d1b08486ae Merge pull request #10619 from mshabunin:fix-run-py-without-java 2018-01-25 13:47:47 +00:00
Vitaly Tuzov
205022ceee Fixed issue in ORB detection if firstLevel property is set above 0 2018-01-25 16:14:16 +03:00
Alexander Alekhin
47998c03f8 perf: update message 2018-01-25 13:18:47 +03:00
Alexander Alekhin
27cddfb8e9 Merge pull request #10661 from alalek:parallel_kmeans 2018-01-25 10:18:37 +00:00
Maksim Shabunin
3f116468c6 Merge pull request #10679 from mshabunin:vs-defense-flags 2018-01-25 09:57:43 +00:00
Alexander Alekhin
8c2563be41 Merge pull request #10672 from pengli:dnn 2018-01-25 07:18:25 +00:00
Li Peng
2493083935 mvn, batch_norm and relu layer fusion
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-25 18:57:05 +08:00
Li Peng
e15928b49e convolution and tanh layer fusion
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-25 17:45:33 +08:00
Mark Harfouche
df434298b8 Exported a high level stitcher the DLL
allows Stitcher to be used for scans from within python.
I had to use very strange notation because I couldn't export the `enum`
`Mode` making the Cpython generated code unable to compile.

```c++
class Stitcher {
public:
enum Mode
    {
        PANORAMA = 0,
        SCANS = 1,
    };
...
```

Also removed duplicate code from the `createStitcher` function making
use of the `Stitcher::create` function
2018-01-24 12:43:00 -08:00
Alexander Alekhin
c401168bea Merge pull request #10675 from LaurentBerger:tutopy_arithm 2018-01-24 17:49:20 +00:00
Alexander Alekhin
0b1f626efd Merge pull request #10677 from alalek:issue_10668 2018-01-24 17:48:11 +00:00
Maksim Shabunin
74367093c8 VS with hardening: added guard flag, moved dynamicbase and safeseh to linker flags 2018-01-24 17:59:10 +03:00
Jozef Mlich
7a472d85ef Merge pull request #10663 from jmlich:master
* hogsvm compatibility with python3
2018-01-24 17:03:23 +03:00
Alexander Alekhin
81c5fae56f core(lapack): fix build issues related to 'extern "C"' 2018-01-24 14:53:04 +03:00
Dmitry Kurtaev
9e9926a2f0 PriorBox layer with explicit normalized sizes 2018-01-24 14:01:42 +03:00
LaurentBerger
6e5da9dbe3 bad image file 2018-01-24 09:09:49 +01:00
Elena Gvozdeva
b97b650ab3 add HAL for FAST (#10362)
* add HAL for FAST

* add new interface
2018-01-24 01:48:06 +03:00
Vadim Pisarevsky
a1d2258ac3 Merge pull request #10635 from csukuangfj:doc-checkVector 2018-01-23 10:42:05 +00:00
Vadim Pisarevsky
8f04c8b16c Merge pull request #10644 from csukuangfj:doc-fundamental-matrix 2018-01-23 10:38:14 +00:00
Pavel Rojtberg
2d674fc151 persistence: replace arbitrary limit of cn to 4 by CV_CN_MAX (#10636)
* persistence: replace arbitrary limit of cn to 4 by CV_CN_MAX

* python: added persistence test, remove temp files

* fixup! python: added persistence test, remove temp files

* fixup! python: added persistence test, remove temp files
2018-01-23 13:36:30 +03:00
Alexander Alekhin
479179638e Merge pull request #10655 from dkurt:dnn_tests 2018-01-23 10:16:55 +00:00
Dmitry Kurtaev
a3d74704e5 OpenCV face detection network test 2018-01-23 09:27:58 +03:00
Alexander Alekhin
90aac764dd core: kmeans refactoring
- reduce scope of i,k,j variables
- use cv::AutoBuffer
- template<bool onlyDistance> class KMeansDistanceComputer
- eliminate manual unrolling: CV_ENABLE_UNROLLED
2018-01-22 14:26:41 +03:00
Alexander Alekhin
46470d92a0 core: fix kmeans multi-threaded performance 2018-01-22 14:26:41 +03:00
Alexander Alekhin
a5cd62f7bf core(perf): refactor kmeans test
- don't use RNG for "task size" parameters (N, K, dims)
- add "good" kmeans test data (without singularities: K > unique points)
2018-01-22 14:25:29 +03:00
Vitaly Tuzov
12ea8477a3 bitexact gaussianblur implementation (#10345)
* Bit-exact implementation of GaussianBlur smoothing

* Added universal intrinsics based implementation for bit-exact CV_8U GaussianBlur smoothing.

* Added parallel_for to evaluation of bit-exact GaussianBlur

* Added custom implementations for 3x3 and 5x5 bit-exact GaussianBlur
2018-01-22 13:26:32 +03:00
Alexander Alekhin
87db636c61 Merge pull request #10657 from GlueCrow:mog2_init_fix 2018-01-21 17:25:37 +00:00
Glue Crow
c5c620bab0 ocl: Avoid unnecessary initializing when non-UMat parameters are used 2018-01-21 23:02:05 +08:00
Gregory Morse
d84c7e5143 Merge pull request #10649 from GregoryMorse:patch-3
* Fix for QT image window rectangle

* Update window_QT.h

* Update window_QT.cpp

* trailing whitespace

* highgui: fix QT getWindowImageRect()
2018-01-21 09:26:48 +03:00
Maksim Shabunin
8ba88892d7 run.py: simplified scripts, fixed most of PEP8 warnings 2018-01-19 17:05:40 +03:00
Fangjun Kuang
eb2901bd69 Improve the doc for fundamental matrix. 2018-01-19 13:41:47 +01:00
Vadim Pisarevsky
c89ae6e537 Merge pull request #10629 from GlueCrow:ocl_mog2_test_fix 2018-01-19 11:12:19 +00:00
Namgoo Lee
25c36fb05f cv::cuda::cvtColor bug fix (#10640)
* cuda::cvtColor bug fix

Fixed bug in conversion formula between RGB space and LUV space.
Testing with opencv_test_cudaimgproc.exe, this commit reduces the number
of failed tests from 191 to 95. (96 more tests pass)

* Rename variables
2018-01-19 14:06:05 +03:00
Vadim Pisarevsky
71ba54b2f4 Merge pull request #10637 from catree:fix_perf_build_cuda_9 2018-01-19 11:02:14 +00:00
Alexander Alekhin
18ce529256 Merge pull request #10633 from csukuangfj:doc-estimateAffine 2018-01-19 10:11:56 +00:00
Alexander Alekhin
26e0f408f0 Merge pull request #10639 from pengli:dnn 2018-01-19 10:01:41 +00:00
Li Peng
fe494297e4 more update on MVN layer ocl implementation
cut one ocl kernel if normVariance is disabled,
also use native_powr for performance reason.

Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-19 22:54:04 +08:00
Alexander Alekhin
c3569211d5 Merge pull request #10591 from drkoller:master 2018-01-19 09:44:21 +00:00
catree
dcc5a2cb22 Fix perf build with CUDA 9. 2018-01-19 00:23:02 +01:00
Fangjun Kuang
67842df9e2 Improve the documentation for affine transform estimation. 2018-01-18 19:54:18 +01:00
Alexander Alekhin
8226bd25c4 Merge pull request #10625 from pengli:dnn 2018-01-18 18:26:30 +00:00
Fangjun Kuang
8efe7bafaa Improve the doc for cv::Mat::checkVector. 2018-01-18 16:48:59 +01:00
Li Peng
2124361ff7 ocl support for Deconvolution layer
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-18 23:40:22 +08:00
Vadim Pisarevsky
42459cad02 Merge pull request #10634 from sturkmen72:update_samples 2018-01-18 13:46:27 +00:00
Alexander Alekhin
0def2dbb73 Merge pull request #10605 from alalek:ocl_fix_deadlock 2018-01-18 13:39:36 +00:00
Maksim Shabunin
1b0ff57562 Merge pull request #10621 from mshabunin:disable-docs
Documentation generation refactoring (#10621)

* Documentation build updates:

- disable documentation by default, do not add to ALL target
- combine Doxygen and Javadoc
- optimize Doxygen html

* javadoc: fix path in build directory

* cmake: fix "Documentation" status line
2018-01-18 16:37:19 +03:00
Glue Crow
95ce21d407 Fix #10525 2018-01-18 18:49:29 +08:00
Gregory Morse
ec353dbdda Merge pull request #10412 from GregoryMorse:patch-2
Update to add window position and size retrieval to HighGUI (#10412)

* Update highgui.hpp

Add read only property retrieval for enhanced rendering capabilities and more sophisticated research tools

* Update window.cpp

* Update window_w32.cpp

* Update window_QT.cpp

* Update window_QT.h

* Update window_QT.h

* Update window_gtk.cpp

* Update precomp.hpp

* Update highgui_c.h

* Update highgui_c.h

* Update window_w32.cpp

* Update precomp.hpp

* Update window_QT.cpp

* Update window_QT.h

* Update window_gtk.cpp

* Update window_gtk.cpp

* Update window_w32.cpp

* Update window_QT.cpp

* Update window_carbon.cpp

* Update window_cocoa.mm

* Update precomp.hpp

* Update window_cocoa.mm

* Update window_w32.cpp

* Update window_gtk.cpp

* Update window_QT.cpp

* Update window_gtk.cpp

* Update window_QT.cpp

* Update window_cocoa.mm

* Update window_carbon.cpp

* Update window_w32.cpp

* Update window_cocoa.mm

* Update window_gtk.cpp

* Update window_cocoa.mm

* Update window_gtk.cpp

* Update window_cocoa.mm

* Update window_cocoa.mm

* Update window.cpp

* Update test_gui.cpp

* Update test_gui.cpp

* Update test_gui.cpp

* Update highgui_c.h

* Update highgui.hpp

* Update window.cpp

* Update highgui_c.h

* Update test_gui.cpp

* Update highgui.hpp

* Update window.cpp

* Update window.cpp

* Update window.cpp

* Update window.cpp

* Update window.cpp
2018-01-18 07:49:47 +03:00
Alexander Alekhin
f056e713c3 Merge pull request #10512 from sturkmen72:update_documentation 2018-01-18 04:44:59 +00:00
Suleyman TURKMEN
4046d9f850 Update samples 2018-01-18 07:04:42 +03:00
Alexander Alekhin
aa55cdb735 Merge pull request #10622 from alalek:fix_build_js
Re-apply protobuf fix for JavaScript builds
2018-01-17 23:52:26 +03:00
Dmitry Kurtaev
ec8d39d059 Re-apply protobuf fix for JavaScript builds
original commit: f503515082
JavaScript bindings for dnn module
2018-01-17 20:20:00 +00:00
David Koller
d1a3b530be Make DNN Crop layer match Caffe default offset behavior
and add parametric unit test for crop layer.
2018-01-17 10:52:36 -05:00
Alexander Alekhin
a55aed5f42 Merge pull request #10593 from alalek:android_build_sdk_configuration 2018-01-17 11:34:03 +00:00
Alexander Alekhin
b067e0ca5d Merge pull request #10613 from csukuangfj:fix-10612 2018-01-17 09:58:34 +00:00
Alexander Alekhin
85e133a051 Merge pull request #10604 from aimotive:master 2018-01-17 09:40:42 +00:00
Alexander Alekhin
4a086cf517 Merge pull request #10609 from csukuangfj:patch-1 2018-01-17 09:02:50 +00:00
razerhell
fb22028be3 Merge pull request #10574 from razerhell:patch-1
* Newton's method can be more efficient

when we get the result of function distortPoint with a point (0, 0) and then undistortPoint with  the result, we get the point not (0, 0). and then we discovered that the old method is not convergence sometimes. finally we have gotten the right values by Newton's method.

* modify by advice  Newton's method...#10574

* calib3d(fisheye): fix codestyle, update theta before exit EPS check
2018-01-17 12:05:13 +03:00
Alexander Alekhin
6728b40ad3 Merge pull request #10602 from pengli:dnn 2018-01-17 08:58:25 +00:00
Li Peng
e77af4ae33 MVN layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-17 17:11:32 +08:00
Li Peng
7bc017601f Power, Tanh and Channels ReLU layer ocl support
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-17 17:11:27 +08:00
csukuangfj
decf6cab5e Improve the documentation for cv::completeSymm and cv::RANSACUpdateNumIters. 2018-01-17 08:05:39 +01:00
Fangjun Kuang
2b635edce6 fix issue #10612. 2018-01-16 23:47:15 +01:00
Csaba Keszegh
2aa18ca3e9 fix: use CXX_STANDARD when extracting compiler flags for PCH with GNUCXX
When compiling with cmake using -DCMAKE_CXX_STANDARD=11 use `-std=gnu++11`
for PCH compiler flags, otherwise it triggers an error:

   opencv_core_Release.gch: not used because `__cplusplus' defined as ` 201103L' not ` 199711L' [-Winvalid-pch]

Use CXX_EXTENSIONS property to select `gnu++11` or `c++11`.
Trying to mimic cmake logic here: https://gitlab.kitware.com/cmake/cmake/blob/master/Source/cmLocalGenerator.cxx#L1527-1557
2018-01-16 20:32:21 +01:00
Alexander Alekhin
4dc788ff84 Merge pull request #10606 from alalek:update_copyright_2018 2018-01-16 17:47:30 +00:00
Alexander Alekhin
cec700525c core(ocl): fix deadlock in UMatDataAutoLock
UMatData locks are not mapped on real locks (they are mapped to some "pre-initialized" pool).

Concurrent execution of these statements may lead to deadlock:
- a.copyTo(b) from thread 1
- c.copyTo(d) from thread 2
where:
- 'a' and 'd' are mapped to single lock "A".
- 'b' and 'c' are mapped to single lock "B".

Workaround is to process locks with strict order.
2018-01-16 17:33:06 +03:00
Woody Chow
20b3261204 Propagate calculated Gaussian kernel size(ref). Otherwise, ipp_GaussianBlur will fail if user doesn't specify a kernel size. (#10579) 2018-01-16 17:15:23 +03:00
Alexander Alekhin
ab8cf31ae9 Merge pull request #10581 from mshabunin:minor-issues-fixes 2018-01-16 13:19:32 +00:00
Maksim Shabunin
c0ae812aa2 Add ThinLTO support for clang 2018-01-16 15:26:28 +03:00
Maksim Shabunin
8b87c4b96a Fixed several warnings produced by clang 6 and static analyzers 2018-01-16 15:26:28 +03:00
Alexander Alekhin
cbb21f3cf2 Merge pull request #10595 from oqtvs:updateProtobuf 2018-01-16 12:18:18 +00:00
Li Peng
4189214d04 batch_norm layer ocl update
use a batch_norm ocl kernel to do the work

Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-16 19:01:58 +08:00
Alexander Alekhin
e6ed853905 copyright: 2018 2018-01-16 13:55:42 +03:00
Vadim Pisarevsky
59915a3fc9 Merge pull request #10575 from ioxp:getFontScale 2018-01-16 10:51:04 +00:00
Alexander Alekhin
22816a4c43 protobuf: drop unused files 2018-01-15 21:15:23 +00:00
Alexander Alekhin
4d84999452 dnn: protobuf build warnings 2018-01-15 21:15:23 +00:00
oqtvs
6d4b778303 dnn: Updated protobuf files (3.5.1) 2018-01-15 15:51:38 +00:00
oqtvs
df0b83332d Updated protobuf version to 3.5.1 2018-01-15 13:51:37 -02:00
Alexander Alekhin
be1207e5e4 Merge pull request #10580 from woodychow:parallel_initUndistortRectifyMap 2018-01-15 15:05:32 +00:00
Alexander Alekhin
1255bd8d4b Merge pull request #10585 from dkurt:dnn_weightless_scale 2018-01-15 06:07:50 +00:00
woody.chow
f5d9a2a9c1 Parallelize initUndistortRectifyMap 2018-01-15 09:20:35 +09:00
Alexander Alekhin
edcbbee979 android: update build_sdk.py
- configuration files for ABIs configuration
- use builtin Android NDK's toolchain by default (force flag to use OpenCV's toolchain)
- default values for 'work_dir' and 'opencv_dir'
2018-01-14 16:05:48 +00:00
Alexander Alekhin
70ff4af4fa Merge pull request #10588 from dkurt:dnn_blobFromImage_ext 2018-01-14 08:12:29 +00:00
Dmitry Kurtaev
6a395d88ff dnn::blobFromImage with OutputArray 2018-01-13 18:20:24 +03:00
Dmitry Kurtaev
1f4fdfd599 Untrainable version of Scale layer from Caffe 2018-01-13 10:35:29 +03:00
Alexander Alekhin
0c00652f6b Merge pull request #10495 from alalek:cmake_java 2018-01-13 04:31:10 +00:00
Alexander Alekhin
91e10a3105 cmake: ocv_target_include_directories() handle SYSTEM directories 2018-01-13 02:12:39 +00:00
Alexander Alekhin
08086178bd android: fix SDK build
- fix Javadoc:
  - generate Javadoc after gather step to process all Java files (including Android 21)
  - generate into 'OpenCV-android-sdk' directly without additional copy step
- use smart copy/move utility functions ('shutil' doesn't well with existed destination)
- by default move files to reduce pressure on storage I/O (> 800Mb)
2018-01-13 02:12:39 +00:00
Alexander Alekhin
839cffdefe java: fix MacOS Java problem 2018-01-13 02:12:39 +00:00
Alexander Alekhin
a362fd80df java: fix bindings generator
- fix imports override.
  Problem is observed with BoostDesc.

- add Ptr<> handling (constructor is protected from other packages).
  Observed in ximgproc:
      Ptr<StereoMatcher> createRightMatcher(Ptr<StereoMatcher> matcher_left)"
  where, "StereoMather" is from another package (calib3d)
2018-01-13 02:12:39 +00:00
Alexander Alekhin
1237faef80 java: disable highgui wrapped code 2018-01-13 02:12:39 +00:00
Alexander Alekhin
a0d9d6db5b fixes for old CMake (2.8.12.2) 2018-01-13 02:12:39 +00:00
Alexander Alekhin
8533b45ce9 cmake: Java/Android SDK refactoring 2018-01-13 02:12:39 +00:00
Suleyman TURKMEN
dcd4f8f5db Update documentation 2018-01-12 22:21:14 +03:00
Alexander Alekhin
0cad2d2a83 java: files rename
intermediate commit (to simplify code review)
2018-01-12 19:14:00 +00:00
Alexander Alekhin
73316e10a0 java(test): fix test names 2018-01-12 19:14:00 +00:00
Alexander Alekhin
69cd9cc1a6 Merge pull request #10582 from mshabunin:fix-ocl-concurrent-cache-name 2018-01-12 18:43:08 +00:00
Maksim Shabunin
594a93316c Fixed concurrent OpenCL cache folder name generation 2018-01-12 19:03:16 +03:00
SarenT
c6d9ce8fd3 Merge pull request #10489 from SarenT:offset-mat_put
Adding capability to parse subsections of a byte array in Java bindings (#10489)

* Adding capability to parse subsections of a byte array in Java bindings. (Because Java lacks pointers. Therefore, reading images within a subsection of a byte array is impossible by Java's nature and limitations. Because of this, many IO functions in Java require additional parameters offset and length to define, which section of an array to be read.)

* Corrected according to the review. Previous interfaces were restored, instead internal interfaces were modified to provide subsampling of java byte arrays.

* Adding tests and test related files.

* Adding missing files for the test.

* Simplified the test

* Check was corrected according to discussion. An OutOfRangeException will be thrown instead of returning.

* java: update MatOfByte implementation checks / tests
2018-01-12 18:00:58 +03:00
Alexander Alekhin
9deaddcdff Merge pull request #10490 from alalek:cmake_android_refactor_copy_project_files 2018-01-12 12:23:37 +00:00
Alexander Alekhin
98b6e1d5fe Merge pull request #10515 from alalek:android_ndk16 2018-01-12 12:22:40 +00:00
Alexander Alekhin
57dc28fe99 Merge pull request #10504 from opentrack:fork 2018-01-11 18:47:27 +00:00
Stanislaw Halik
c8794c89c7 modules/videoio: fix PS3Eye camera property window
v2: fix stray trailing whitespace

v3: only allow for up to one property window at the time

Opening multiple windows in the same process will just confuse
the camera filter or outright crash.

Suggested-by: @alalek

Also return whether a dialog was opened at the time.
2018-01-11 16:37:02 +01:00
Alexander Alekhin
18edd917e3 Merge pull request #10391 from ElenaGvozdeva:HAL_minMaxIdx 2018-01-11 14:15:40 +00:00
Philipp Hasper
6032d86e23 Added getFontScaleFromHeight() 2018-01-11 14:00:27 +01:00
Dmitry Kurtaev
64a9e92390 Merge pull request #10466 from dkurt:reduce_umat_try_2
* UMat blobs are wrapped

* Replace getUMat and getMat at OpenCLBackendWrapper
2018-01-10 21:50:54 +03:00
Alexander Alekhin
b6075e11b8 Merge pull request #10549 from Sahloul:bug_fix/FLANN 2018-01-10 11:39:47 +00:00
Alexander Alekhin
c19764e557 Merge pull request #10568 from alalek:fix_10565 2018-01-10 11:35:25 +00:00
Alexander Alekhin
71768de939 Merge pull request #10567 from terfendail:createsample_fix 2018-01-10 10:22:19 +00:00
Alexander Alekhin
f943261847 Merge pull request #10566 from alalek:jasper_checks 2018-01-10 10:15:41 +00:00
Alexander Alekhin
7763b58a60 Merge pull request #10563 from alalek:issue_10540 2018-01-10 10:15:10 +00:00
Aaron Bray
6f8be3f693 Merge pull request #10497 from aaron-bray:msvc2017-findcuda
* Update to properly find the compiler tools for MSVC 2017

* FindCUDA: Fix the MSVC 2017 compiler tool locations
2018-01-10 12:32:34 +03:00
Alexander Alekhin
6113dc1b99 core: fix unresolved symbols from utils::fs 2018-01-09 19:29:50 +00:00
Alexander Alekhin
4d4f291553 Merge pull request #10513 from pengli:dnn 2018-01-09 19:24:28 +00:00
Vitaly Tuzov
29faf164b9 Fixed exception when ROI for generated sample is evaluated out of image borders 2018-01-09 20:30:39 +03:00
Alexander Alekhin
435a3e337b imgcodecs: add more Jasper checks for supported and tested cases 2018-01-09 19:06:03 +03:00
Alexander Alekhin
f92e880d3d Merge pull request #10544 from alalek:issue_10535 2018-01-09 15:32:42 +00:00
Alexander Alekhin
8a76fadaa3 imgcodecs: add overflow checks 2018-01-09 18:05:24 +03:00
Alexander Alekhin
be5247921d imgcodecs: remove assert() usage 2018-01-09 17:49:38 +03:00
Li Peng
e3b42bf93b batch_norm and blank layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-09 21:58:46 +08:00
tobycollins
f34a0a874a Merge pull request #10522 from tobycollins:issue10519 2018-01-09 15:54:36 +03:00
Alessandro de Oliveira Faria (A.K.A.CABELO)
c71dc78cd4 Merge pull request #10502 from cabelo/save-dnn-yolo
Save video file (#10502)
2018-01-08 22:30:28 +03:00
Alexander Alekhin
f3dde79ed6 cmake: allow BUILD_FAT_JAVA_LIB for non-Android targets too 2018-01-08 19:24:39 +00:00
Alexander Alekhin
da0904df2d Merge pull request #10550 from dkurt:replace_psroi_pooling_tag 2018-01-08 19:19:00 +00:00
Alexander Alekhin
c08a0edea1 Merge pull request #10545 from alalek:dnn_blob_manager_runtime_option 2018-01-08 13:22:44 +00:00
Dmitry Kurtaev
27b55ea761 Replace Caffe's psroi_pooling_param tag from 10001 to 10002 2018-01-08 13:29:20 +03:00
Hamdi Sahloul
8943441115 resolves #10548 - FLANN::knnSearch garbage bug (when kNN is larger than the dataset size) 2018-01-08 18:58:55 +09:00
Alexander Alekhin
6674a024fc dnn: add OPENCV_DNN_DISABLE_MEMORY_OPTIMIZATIONS runtime option
replaces REUSE_DNN_MEMORY compile-time option
2018-01-07 18:38:14 +00:00
Alexander Alekhin
ee35263e48 Merge pull request #10537 from pnemonic78:master_false 2018-01-07 12:53:22 +00:00
Moshe
84596bff09 Bitwise "and false"
Bitwise "and false" is always false.
2018-01-07 10:12:53 +02:00
Alexander Alekhin
e3a6d74945 Merge pull request #10536 from Sahloul:bug_fix/BLOB 2018-01-07 06:50:49 +00:00
Alexander Alekhin
dd3c1d3b8c Merge pull request #10534 from ericrwx:videoio-psnr-typo-fix 2018-01-07 06:48:05 +00:00
Alexander Alekhin
3a5cd12dee Merge pull request #10527 from csukuangfj:local 2018-01-07 06:46:45 +00:00
Hamdi Sahloul
2d2499f610 BLOB - Support RGBA 2018-01-07 14:30:40 +09:00
Eric Wang
c11895f529 Fix typo in video_input_psnr_ssim 2018-01-06 16:15:43 -08:00
LaurentBerger
004a1cd64a Merge pull request #10529 from LaurentBerger:ExampleGoogleNet
* Add a parameter labels to command line

* default value

* samples: caffe_googlenet.cpp minor refactoring
2018-01-06 23:44:47 +03:00
Alexander Alekhin
d0b2e60edc Merge pull request #10514 from alalek:build_warnings 2018-01-05 20:54:01 +00:00
Alexander Alekhin
8e1f31f543 Merge pull request #10521 from DabatoIsCool:master 2018-01-05 23:56:07 +03:00
Fangjun Kuang
a2869109f0 Improve the documentation for cv::Affine3. 2018-01-05 19:35:38 +01:00
Alexander Alekhin
431b3b4323 cmake(android): refactor copying of Android samples project files 2018-01-05 17:32:27 +00:00
Alexander Alekhin
9966903ae1 cmake(android): fix non-idempotent INSTALL scripts 2018-01-05 17:19:37 +00:00
Arthur Williams
8a67858068 Fixed missing #include "../precomp.hpp" 2018-01-05 15:10:39 +00:00
Alexander Alekhin
f5862dacb6 Merge pull request #10432 from GlueCrow:bgfg_knn_fix 2018-01-05 14:16:17 +00:00
Li Peng
67f9406cbe add normalize_bbox layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-05 19:38:36 +08:00
Li Peng
f99a135eda add eltwise layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-05 19:38:30 +08:00
Alexander Alekhin
e1ec45c948 Merge pull request #10517 from alalek:perf_video_bgfg 2018-01-05 10:27:24 +00:00
Alexander Alekhin
8acd05f12a Merge pull request #10421 from cezheng:patch-1 2018-01-05 09:24:33 +00:00
Alexander Alekhin
be01ea734d video(perf): add Mog2/KNN tests, fixed bug in prepareData()
prepareData() bug feeds the same image (the latest)
OCL perf test doesn't pass accuracy(!) check now, so this check is disabled.
2018-01-05 08:50:38 +00:00
Alexander Alekhin
d01a2038ae cmake(android): update CMAKE_FIND_ROOT_PATH_MODE_* handling
Avoids this error message with CMake 3.10:
CMake Error: CMake was unable to find a build program corresponding to "Ninja".
CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.

Related changes is that pkg-config tool is found (/usr/bin/pkg-config).
2018-01-05 05:59:08 +00:00
Alexander Alekhin
0e6dd32858 cmake(android): update zlib alias condition
To use 'z' in Android.mk instead of absolute path from the build machine.
2018-01-05 04:52:17 +00:00
Alexander Alekhin
bc7923e382 cmake(android): fix ccache detection (native Android toolchain with NDK_CCACHE)
To prevent this result:
    /usr/bin/ccache ccache <android-ndk-r16.1>/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc ...
with:
    ccache: error: Recursive invocation (the name of the ccache binary must be "ccache")
2018-01-05 04:52:17 +00:00
Alexander Alekhin
c608c232a2 3rdparty(libtiff): fix build with Android NDK 16
Compiler message:
tif_unix.c:170:12: error: call to 'mmap' declared with attribute error:
mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21.
Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang.
2018-01-05 04:52:17 +00:00
Alexander Alekhin
5f9bb6249e android: IPPICV static libraries workarounds for NDK 16 2018-01-05 04:52:17 +00:00
Alexander Alekhin
b76a691bcf 3rdparty(protobuf): fix build with Android NDK 16 2018-01-05 04:52:17 +00:00
Alexander Alekhin
bc6a355370 android(toolchain): fix find_path() behavior (zlib search problem) 2018-01-05 04:52:17 +00:00
Erik Man
37911e60d8 Allow compilation with unified include directory
This makes it possible to compile OpenCV with for instance ndk-r16
2018-01-05 04:52:17 +00:00
Alexander Alekhin
c92aa95726 android(toolchain): detailed error message 2018-01-05 04:52:17 +00:00
Alexander Alekhin
59c6661db0 cmake: eliminate ninja generator warning (CMake 3.10), refactor code 2018-01-05 04:42:24 +00:00
Alexander Alekhin
f0453bd853 build: eliminate warning
warning: 'layout.channel_layout::gchan' may be used uninitialized in this function [-Wmaybe-uninitialized]
2018-01-05 04:33:30 +00:00
Alexander Alekhin
116c8d0ddf build: eliminate warnings
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
2018-01-05 04:30:08 +00:00
Coralie RACHEX
16821b877c Merge pull request #10493 from RachexCoralie:tiff32FC1Codec
* Load and save tiff images in CV_32FC1 format (1 channel of floats).

* Add test

* Fix error handling and resources leak. Improve test.
2018-01-04 15:51:58 +03:00
Alexander Alekhin
45c5f0a549 Merge pull request #10488 from alalek:cmake_simplify_configure_macro 2018-01-04 08:22:27 +00:00
Alexander Alekhin
f46eff4eb0 Merge pull request #10492 from pengli:dnn 2018-01-04 04:40:02 +00:00
Li Peng
1073175c77 add opencl option for resnet_ssd_face sample
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-04 18:40:56 +08:00
Li Peng
34bfd7ef51 add ocl implementation of proposal layer
Signed-off-by: Li Peng <peng.li@intel.com>
2018-01-04 18:40:51 +08:00
Alexander Alekhin
94b236872c cmake: avoid unnecessary files creation in ocv_cmake_configure() 2018-01-02 19:16:51 +00:00
Alessandro de Oliveira Faria (A.K.A.CABELO)
7abaae39ec Merge pull request #10446 from cabelo:style-dnn-yolo
* add style draw in yolo

* fix sintaxe whitespace

* fix conversion from float to int

* sample refactoring

- minor code style fixes
- avoid confusing "bottom" names
- use cv::format
- always draw object detection/roi
2018-01-02 17:26:29 +03:00
Alexander Alekhin
940a90130d Merge pull request #10477 from berak:fix_bg_sub_tutorial 2018-01-02 03:21:16 +00:00
Alexander Alekhin
a42ca2eeb3 Merge pull request #10483 from dkurt:fix_dnn_ssd_cpp_sample 2018-01-02 03:18:39 +00:00
Alexander Alekhin
bf80c94125 Merge pull request #10481 from alalek:fix_10474 2018-01-02 03:17:59 +00:00
Dmitry Kurtaev
d0580df339 Update C++ MobileNet-SSD object detection sample 2018-01-01 23:01:23 +03:00
Alexander Alekhin
ea5a3e557f python: filter modules headers (from <module>/include directory) 2018-01-01 15:56:14 +00:00
Alexander Alekhin
22576f4dfe Merge pull request #10480 from alalek:fix_10479 2018-01-01 15:40:12 +00:00
Alexander Alekhin
4ca89db22d imgproc(hdr): fix bounds check in HdrDecoder::checkSignature() 2018-01-01 13:12:21 +00:00
berak
dc88a2bcf2 video: clean up bg subtraction tutorial 2017-12-31 12:23:02 +01:00
Alexander Alekhin
71f4281080 Merge pull request #10473 from alalek:cmake_version_string_timestamp 2017-12-31 10:47:33 +00:00
Alexander Alekhin
4bd1e3dcbd cmake: avoid timestamp change of version_string.inc file 2017-12-30 20:26:15 +00:00
Alexander Alekhin
30373d2566 Merge pull request #10470 from victor-ludorum:caliper 2017-12-30 18:19:39 +00:00
victor-ludorum
914d9662d3 Merge pull request #10469 from victor-ludorum:stichingbranch
Updating stiching.cpp to resolve new line issue #10461 (#10469)
2017-12-30 21:22:02 +03:00
victor-ludorum
ad23c10600 Updating rotcalipers.cpp to resolve issue #10096
Updating the documentation of the rotcalipers.cpp to resolve issue #10096
2017-12-30 10:21:46 +05:30
Alexander Alekhin
a50a355e63 Merge pull request #10463 from alalek:avx512skx 2017-12-29 15:57:57 +00:00
Alexander Alekhin
7d67d60fb1 cmake(opt): AVX512_SKX 2017-12-29 07:18:11 +00:00
Alexander Alekhin
fc1d85bf59 Merge pull request #10329 from jasjuang:master 2017-12-28 16:45:16 +00:00
Alexander Alekhin
125f9f0be1 Merge pull request #10410 from GlueCrow:master 2017-12-28 16:43:17 +00:00
Alexander Alekhin
8e7af7f089 Merge pull request #10456 from dkurt:dnn_allocate_mem_for_optimized_concat 2017-12-28 16:04:51 +00:00
Alexander Alekhin
a65b5df5da Merge pull request #10416 from fenrus75:avx512 2017-12-28 15:56:56 +00:00
Alexander Alekhin
2370c8a058 Merge pull request #10429 from wxzs5:fix-documentation 2017-12-28 18:30:43 +03:00
Alexander Alekhin
2b3c140f04 Merge pull request #10436 from alalek:test_threads 2017-12-28 18:29:30 +03:00
Alexander Alekhin
ec32022bdf Merge pull request #10444 from alalek:fix_asan_imgcodecs 2017-12-28 18:28:29 +03:00
Alexander Alekhin
898ca38257 cmake: AVX512 -> AVX_512F 2017-12-28 15:20:27 +00:00
Vinay Sharma
5aac909046 Merge pull request #10352 from vinay0410:write_pbm
* added write as pbm

* add tests for pbm

* imgcodecs: PBM support

- drop additional PBM parameters
- write: fix P1/P4 mode (no maxval 255 value after width/height)
- write: invert values for P1/P4
- write: P1: compact ASCII mode (no spaces)
- simplify pbm test
- drop .pxm extension (http://netpbm.sourceforge.net/doc/ doesn't know such extension)
2017-12-28 17:28:34 +03:00
Tom Becker
592f8d8c1b Merge pull request #10232 from TomBecker-BD:hough-many-circles
Hough many circles (#10232)

* Add Hui's optimization. Merge with latest changes in OpenCV.

* Use conditional compilation instead of a runtime flag.

* Whitespace.

* Create the sequence for the nonzero edge pixels only if using that approach.

* Improve performance for finding very large numbers of circles

* Return the circles with the larger accumulator values first, as per API documentation.
Use a separate step to check distance between circles. Allows circles to be sorted by strength first. Avoids locking in EstimateRadius which was slowing it down.
Return centers only if maxRadius == 0 as per API documentation.

* Sort the circles so results are deterministic. Otherwise the order of circles with the same strength depends on parallel processing completion order.

* Add test for HoughCircles.

* Add beads test.

* Wrap the non-zero points structure in a common interface so the code can use either a vector or a matrix.

* Remove the special case for skipping the radius search if maxRadius==0.

* Add performance tests.

* Use NULL instead of nullptr.
OpenCV should compile with C++98 compiler.

* Put test suite name first.
Use different test suite names for each test to avoid an error from the test runner.

* Address build bot errors and warnings.

* Skip radius search if maxRadius < 0.

* Dynamically switch to NZPointList when it will be faster than NZPointSet.

* Fix compile error: missing 'typename' prior to dependent type name.

* Fix compile error: missing 'typename' prior to dependent type name.
This time fix it the non C++ 11 way.

* Fix compile error: no type named 'const_reference' in 'class cv::NZPointList'

* Disable ManySmallCircles tests. Failing on Mac.

* Change beads image to JPEG for smaller file size.
Try enabling the ManySmallCircles tests again.

* Remove ManySmallCircles tests. They are failing on the Mac build.

* Fix expectations to check all circles.

* Changing case on a case-insensitive file system
Step 1: remove the old file names

* Changing case on a case-insensitive file system
Step 2: add them back with the new names

* Fix cmpAccum function to be strictly weak ordered.

* Add tests for many small circles.

* imgproc(perf): fix HoughCircles tests

* imgproc(houghCircles): refactor code

- simplify NZPointList
- drop broken (de-synchronization of 'current'/'mi' fields) NZPointSet iterator
- NZPointSet iterator is replaced to direct area scan
- use SIMD intrinsics
- avoid std exceptions (build for embedded systems)
2017-12-28 17:23:11 +03:00
Dmitry Kurtaev
a9807d8f54 Allocate new memory for optimized concat to prevent collisions.
Add a flag to disable memory reusing in dnn module.
2017-12-28 16:45:53 +03:00
Alexander Alekhin
d9c0231475 Merge pull request #10452 from mshabunin:mediasdk-device 2017-12-28 12:48:26 +00:00
Maksim Shabunin
f0b606ff77 Changed VA device in MediaSDK session initialization 2017-12-28 14:10:36 +03:00
Alexander Alekhin
3542c98d45 Merge pull request #10445 from pengli:dnn 2017-12-28 04:43:41 +00:00
Li Peng
00f03c5739 Add ocl version FasterRCNN accuracy test
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-28 19:15:15 +08:00
Alexander Alekhin
4f6c493b87 imgcodecs(png): resolve ASAN issue with vars scope and setjmp() call 2017-12-28 02:43:07 +00:00
Alexander Alekhin
73c2a12449 Merge pull request #10435 from DabatoIsCool:master 2017-12-28 05:30:59 +03:00
Alexander Alekhin
99a9c10b57 Merge pull request #10424 from dkurt:fix_concat_optim 2017-12-28 01:26:14 +00:00
Alexander Alekhin
9b131b5f7e dnn(test): avoid calling of cv::setNumThreads() in tests directly
It is not necessary by default.
Also it breaks test system command-line parameters: --perf_threads / --test_threads
2017-12-27 15:16:41 +00:00
Alexander Alekhin
5232ea1ee6 ts(feature): add "--test_threads=<N>" command-line option 2017-12-27 15:16:41 +00:00
Arthur Williams
d8d4ea857a Fixed #10433 2017-12-27 14:09:25 +00:00
Alexander Alekhin
f3880c60a6 Merge pull request #10428 from pengli:dnn 2017-12-27 13:18:10 +00:00
Glue Crow
6045608330 Parallelization of BackgroundSubtractorKNN 2017-12-27 19:28:09 +08:00
wxzs5
0a4b1b8d68 Use class' method to set attribute value 2017-12-27 11:57:58 +08:00
wxzs5
25c17b107e Fix functions‘ class attribution error 2017-12-27 11:57:17 +08:00
Arjan van de Ven
2938860b3f Provide a few AVX512 optimized functions for the DNN module
This patch adds AVX512 optimized fastConv as well as the hookups
needed to get these called in the convolution_layer.

AVX512 fastConv is code-identical on a C level to the AVX2 one,
but is measurably faster due to AVX512 having more registers available
to cache results in.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
2017-12-26 16:00:17 +00:00
Alexander Alekhin
2e33844f0d Merge pull request #10419 from shortcipher3:master 2017-12-26 17:26:58 +03:00
Alexander Alekhin
1e4395a8e1 Merge pull request #10418 from mypopydev:master 2017-12-26 14:21:59 +00:00
Dmitry Kurtaev
70c605a03d Limit Concat layer optimization 2017-12-26 16:49:33 +03:00
Li Peng
84e2fa79a0 dnn(ocl4dnn): update pre-tuned kernel config
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-26 20:14:41 +08:00
Alexander Alekhin
a8844de7b5 Merge pull request #10404 from alalek:build_fix_msvs2010 2017-12-26 05:51:16 +00:00
Jun Zhao
0369431ebd opencl/cvtclr_dx: fix not compile-time constants issue.
fix the "initializing global variables with values that are not
compile-time constants" issue in Intel SDK for OpenCL. The root cause
is when initializing global variables with value, the variable need is
compile-time constants.

Thanks Zheng, Yang <yang.zheng@intel.com>,
Chodor, Jaroslaw <jaroslaw.chodor@intel.com> give a help.

Signed-off-by: Liu,Kaixuan <kaixuan.liu@intel.com>
Signed-off-by: Jun Zhao <jun.zhao@intel.com>
2017-12-26 13:44:37 +08:00
Chris Hall
50e8f91064 JS examples - FFT didn't work for non-square images because rows/cols were switched, Histogram example misspelled point 2017-12-25 22:01:48 -07:00
Sayed Adel
fd0ac962fb core: replace raw intrinsics with universal intrinsics in copy.cpp
- use universal intrinsic instead of raw intrinsic
- add performance check for Mat::copyTo/setTo with mask
2017-12-26 05:30:32 +02:00
Arjan van de Ven
fc8e848a54 Add basic plumbing for AVX512 support
The opencv infrastructure mostly has the basics for supporting avx512 math functions,
but it wasn't hooked up (likely due to lack of users)

In order to compile the DNN functions for AVX512, a few things need to be hooked up
and this patch does that

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
2017-12-25 21:06:52 +00:00
GlueCrow
26d288bd11 Optimize OpenCL BackgroundSubstractionMOG2 2017-12-23 21:57:17 +08:00
Alexander Alekhin
adf43e7d2a build: fix MSVS2010 build error 2017-12-23 00:06:34 +00:00
Alexander Alekhin
047764f476 Merge tag '3.4.0' 2017-12-22 23:22:50 +00:00
Alexander Alekhin
6d4f66472e OpenCV version++
3.4.0
2017-12-22 19:46:21 +00:00
Alexander Alekhin
eba176c299 Merge pull request #10398 from alalek:ml_simplify_simulated_annealing 2017-12-22 22:43:59 +03:00
Alexander Alekhin
00e43a9022 ml(ANN_MLP): ensure that train() call is always successful 2017-12-22 18:50:04 +00:00
Alexander Alekhin
9148a37624 Merge pull request #10401 from terfendail:resize_linear_revert 2017-12-22 16:18:50 +00:00
Alexander Alekhin
019b7c5a66 Merge pull request #10402 from dkurt:dnn_tf_quantized 2017-12-22 15:58:56 +00:00
Alexander Alekhin
59e825ee02 Merge pull request #10385 from pengli:dnn 2017-12-22 15:48:40 +00:00
Dmitry Kurtaev
bcc669f3f7 TensorFlow weights dequantization 2017-12-22 17:25:10 +03:00
Vitaly Tuzov
e5313246a7 Reverted calls to linear resize back to generic version for floating point matrices 2017-12-22 17:10:03 +03:00
Alexander Alekhin
97af608030 Merge pull request #10397 from mshabunin:fix-incorrect-assert 2017-12-22 14:07:02 +00:00
Li Peng
181b448c4d add one more convolution kernel tuning candidate
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-22 21:37:00 +08:00
Alexander Alekhin
289a8da39e ml: simplify interfaces of SimulatedAnnealingSolver 2017-12-22 16:35:48 +03:00
Vadim Pisarevsky
b85c77283b Merge pull request #10396 from berak:fix_superres_sample 2017-12-22 13:35:36 +00:00
Vadim Pisarevsky
0742e12f0b Merge pull request #10265 from dkurt:nms_for_region_layer 2017-12-22 13:29:37 +00:00
Vadim Pisarevsky
9b659736da Merge pull request #10394 from alalek:cmake_fix_pch_pic_pie 2017-12-22 13:26:32 +00:00
Vadim Pisarevsky
69a6765bf7 Merge pull request #10387 from terfendail:resize23_perftest 2017-12-22 13:26:05 +00:00
Vadim Pisarevsky
3f68d6d8a7 Merge pull request #10392 from terfendail:bitexact_fallback 2017-12-22 13:23:55 +00:00
Alexander Alekhin
83b8cd0152 Merge pull request #10375 from tomoaki0705:buildWarningMSVC 2017-12-22 13:17:12 +00:00
Alexander Alekhin
4e542a65a3 Merge pull request #10390 from alalek:ocl_option_buffer_rect 2017-12-22 12:52:56 +00:00
Maksim Shabunin
aa46e31c6d Replaced incorrect CV_Assert calls with CV_Error 2017-12-22 15:20:13 +03:00
berak
ddbd074678 samples: check for valid input in gpu/super_resolution.cpp 2017-12-22 12:34:25 +01:00
Vitaly Tuzov
5fdb42a7c9 Added fallback to generic linear resize in case bit-exact resize of provided matrix isn't supported 2017-12-22 14:29:50 +03:00
Alexander Alekhin
6c252d8cdc cmake: fix -fPIC/-fPIE handling in precompiled headers (PCH) 2017-12-22 13:57:06 +03:00
Vadim Pisarevsky
636b7ec0c4 Merge pull request #10386 from terfendail:resizeexact_c3 2017-12-22 10:54:49 +00:00
Alexander Alekhin
534645a12f ocl: workaround option to disable usage of buffer "Rect" operations 2017-12-22 13:05:03 +03:00
Alexander Alekhin
09c84a0164 Merge pull request #10389 from wxzs5:yangli 2017-12-22 10:04:05 +00:00
elenagvo
cd1c8693d8 HAL for minMaxIdx 2017-12-22 12:56:52 +03:00
Vadim Pisarevsky
325cbd7c84 Merge pull request #10364 from dkurt:dnn_smooth_tf_data_layout 2017-12-22 09:56:45 +00:00
wxzs5
b19cd93738 Remove redundant return variable 2017-12-22 17:13:57 +08:00
Ce Zheng
602b08d9c7 Update resize inline comments
Reading through the implementation, I feel this line of comment is not consistent with the actually code, so this is for correcting it.
2017-12-22 16:03:12 +08:00
Vitaly Tuzov
019162486c Disabled universal intrinsic based implementation for bit-exact resize of 3-channel images 2017-12-22 10:08:30 +03:00
Tomoaki Teshima
fe7b3f1228 clean up the code
* disable the warning in CMake, not int the code using pragma
2017-12-22 08:42:21 +09:00
Alexander Alekhin
1bc1f3d311 Merge pull request #10374 from tomoaki0705:removeGstreamerTest 2017-12-21 19:02:13 +00:00
Vadim Pisarevsky
a8a51db42b Merge pull request #10316 from terfendail:bitexact_c234 2017-12-21 18:56:54 +00:00
Vadim Pisarevsky
70d49446e9 Merge pull request #10369 from alalek:issue_10351 2017-12-21 18:48:38 +00:00
Alexander Alekhin
a2620f72c7 Merge pull request #10370 from pengli:dnn 2017-12-21 15:36:23 +00:00
Tomoaki Teshima
50d44e06e3 avoid the test which is too strict
* confirmed test failure on Jetson TX1 and TX2
  * show the performance but not bit exact result
2017-12-22 00:14:10 +09:00
Li Peng
c5fc8e03ff cleanup unnecessary macros in convolution ocl kernel
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-21 20:32:36 +08:00
Li Peng
0aa5e43a14 refactor candidate generation of convolution auto-tuning
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-21 23:05:54 +08:00
jasjuang
235889ddbb handle legacy VTK functions 2017-12-21 01:33:25 -08:00
Dmitry Kurtaev
c67e75b68f Refactor NMS procedure at RegionLayer 2017-12-21 12:21:45 +03:00
Vadim Pisarevsky
047ad4ff71 Merge pull request #10366 from alalek:ocl_fix_cvtcolor_read 2017-12-21 08:33:59 +00:00
Vadim Pisarevsky
ae8bb718cd Merge pull request #10340 from alalek:log_level_option 2017-12-21 08:33:18 +00:00
Alexander Alekhin
7bbe1a53cf imgcodecs(pxm): fix memcpy size 2017-12-21 01:10:24 +00:00
Vitaly Tuzov
b6fe4cc807 Added performance tests for linear resize of 2 and 3-channel images 2017-12-20 18:11:21 +03:00
Vadim Pisarevsky
eecb64a973 Merge pull request #10331 from arrybn:python_dnn_net 2017-12-20 14:30:27 +00:00
Vadim Pisarevsky
e72a053cca Merge pull request #10354 from catree:add_python_sample_show_extrinsics 2017-12-20 14:23:01 +00:00
LaurentBerger
e43997dbb5 Calcerror uses now weighted samples (#10346)
* Calcerror uses now sample weights

* catree comment in #10319
2017-12-20 17:24:46 +03:00
Alexander Alekhin
813ff37967 imgproc(ocl): fix RGB2RGBA kernel out of range access 2017-12-20 14:19:46 +00:00
Vadim Pisarevsky
b8a24b36ce Merge pull request #10356 from dkurt:dnn_rfcn 2017-12-20 14:19:46 +00:00
Vadim Pisarevsky
d2f13a8259 Merge pull request #10360 from sturkmen72:update_links 2017-12-20 14:19:17 +00:00
Vadim Pisarevsky
94d84c5fad Merge pull request #10358 from catree:add_tutorial_homography_panorama_stitching 2017-12-20 14:18:41 +00:00
Vitaly Tuzov
1eb2fa9efb Added universal intrinsics based implementations for CV_8UC2, CV_8UC3, CV_8UC4 bit-exact resizes. 2017-12-20 17:17:10 +03:00
Dmitry Kurtaev
7e48fa58eb Manage TensorFlow's NHWC data layout is smoother 2017-12-20 14:13:40 +03:00
catree
59ec224009 Update left_intrinsics.yml file with chessboard square_size=0.025 and with extrinsic parameters. Add camera_calibration_show_extrinsics.py, a Python sample that allows to display the extrinsics saved during the camera calibration process (cpp-example-calibration). 2017-12-20 12:06:08 +01:00
Dmitry Kurtaev
0ed2cbc931 R-FCN models support 2017-12-20 10:43:22 +03:00
Suleyman TURKMEN
1ff33e6e4d Update links 2017-12-20 02:55:29 +03:00
Alexander Alekhin
b450811e4b core(logger): add log level configuration option 2017-12-19 22:57:07 +00:00
catree
87160cb297 Add Demo 5: Basic panorama stitching from a rotating camera in the homography tutorial. 2017-12-19 22:45:35 +01:00
Alexander Alekhin
dcdd6af5a8 Merge pull request #10341 from pengli:dnn 2017-12-19 14:04:55 +00:00
Alexander Alekhin
badc3bd312 Merge pull request #10348 from ElenaGvozdeva:Canny_HAL 2017-12-19 13:07:59 +00:00
Vadim Pisarevsky
b1ed8bc0d1 Merge pull request #10347 from dkurt:dnn_remove_deprecated_importer 2017-12-19 11:03:06 +00:00
Li Peng
3b84acfc48 add ocl accuracy test for tf mobilenet ssd
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-19 18:38:55 +08:00
Li Peng
436d7e4eaf add depthwise convolution kernel
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-19 17:59:13 +08:00
Li Peng
910d7dab1f prior box layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-19 17:44:10 +08:00
elenagvo
b0e9d76ced HAL for canny 2017-12-19 11:03:10 +03:00
Alexander Alekhin
05b259fe2e Merge pull request #10344 from tomoaki0705:fixBuildLibtiff 2017-12-18 17:00:45 +00:00
Dmitry Kurtaev
6aabd6cc7a Remove cv::dnn::Importer 2017-12-18 18:08:28 +03:00
Alexander Rybnikov
19c914db51 Changed wrapping mode for cv::dnn::Net::forward 2017-12-18 15:56:09 +03:00
Tomoaki Teshima
c057d29192 fix compilation error on Visual Studio 2013 and earlier
- fix compilation error about "inline"
  - fix linker error about "_TIFF_snprintf_f"
2017-12-18 21:51:33 +09:00
Vadim Pisarevsky
e29de5dd2b Merge pull request #10343 from tomoaki0705:suppressWarningEncoding 2017-12-18 10:53:24 +00:00
Suleyman TURKMEN
1654dfe3a9 Update samples (#10333)
* Update samples

* Update calib3d.hpp

* Update calib3d.hpp

* Update calib3d.hpp

* Update calib3d.hpp
2017-12-18 13:44:11 +03:00
Vadim Pisarevsky
d3a124c820 Merge pull request #10339 from catree:add_doc_solvepnp_figure_desc 2017-12-18 09:13:06 +00:00
Vadim Pisarevsky
86cc4f3aa4 Merge pull request #10337 from dkurt:fix_pooling_layer 2017-12-18 09:11:54 +00:00
Alexander Alekhin
9de87d96cc Merge pull request #10338 from hrnr:fix-build 2017-12-18 06:52:08 +00:00
Tomoaki Teshima
65f502bc99 suppress warning on Visual Studio
* remove non ASCII character from the comment
2017-12-18 15:32:06 +09:00
catree
fcb537bacd Add a figure and some formulas to illustrate the PnP pose estimation principle. 2017-12-17 21:38:22 +01:00
Jiri Horner
3dbf392d48 fix build with intrinsics enabled
* since #10231 opencv with instrumentation does not build
2017-12-17 20:23:15 +01:00
Dmitry Kurtaev
2b43d4f477 Fix default pooling layer type 2017-12-17 16:46:40 +03:00
Alexander Alekhin
cac4a7e5b5 OpenCV version++
OpenCV 3.4.0-rc
2017-12-16 01:30:43 +03:00
Alexander Alekhin
3fddce67c6 experimental version++ 2017-12-16 01:30:36 +03:00
Alexander Alekhin
a5c04baec1 Merge pull request #10326 from alalek:cmake_fixes 2017-12-15 22:26:00 +00:00
Alexander Alekhin
361bb1197f cmake: fix opencv_world build with contrib 2017-12-15 21:36:22 +00:00
Alexander Alekhin
0b33eb0929 cmake: fix ocv_target_compile_definitions() for world builds
fixes CUDA build
2017-12-15 23:30:53 +03:00
Alexander Alekhin
8ed1a274e1 cmake: fix missed include in libtiff 2017-12-15 23:28:09 +03:00
Alexander Alekhin
70e1b4ddf0 Merge pull request #10319 from catree:move_SimulatedAnnealingSolver_Impl_cpp
Move SimulatedAnnealingSolver::Impl in cpp file
2017-12-15 23:06:48 +03:00
Rostislav Vasilikhin
bab86d65cb Merge pull request #10258 from savuor:fix/kmeans_channels
* kmeans: number of channels in _centers fixed

* fixedType() is checked now
2017-12-15 21:48:48 +03:00
Alexander Alekhin
aef3019152 ml: fix SimulatedAnnealingSolver interface 2017-12-15 21:44:32 +03:00
Alexander Alekhin
28b19d6e3e Merge pull request #10313 from alalek:rename_fix
Fix file names
2017-12-15 21:40:22 +03:00
Alexander Alekhin
e728ffd5bf Merge pull request #10320 from mshabunin:static-analysis-1 2017-12-15 16:53:34 +00:00
Alexander Alekhin
4b1455579f Merge pull request #10317 from alalek:cmake_pic_configure 2017-12-15 16:12:13 +00:00
Maksim Shabunin
1033f2b1bd Fixed 3 issues found by static analysis 2017-12-15 17:29:26 +03:00
catree
0a439570a0 Move SimulatedAnnealingSolver::Impl in cpp file. Fix some typos. 2017-12-15 14:09:59 +01:00
Alexander Alekhin
50365b7741 cmake: update CMAKE_POSITION_INDEPENDENT_CODE 2017-12-15 15:56:19 +03:00
Vadim Pisarevsky
62359f70ff Merge pull request #10306 from dkurt:faster_rcnn 2017-12-15 12:23:53 +00:00
Suleyman TURKMEN
c5ed507737 Merge pull request #10287 from sturkmen72:update_createsamples_cpp
* update createsamples

adds command-line option -rngseed
replaces rand() -> theRNG()

* Update utility.cpp

* apps(createsamples): fix warpPerspective pixels access bug
2017-12-15 15:05:18 +03:00
Alexander Alekhin
7d4a67f2a8 Merge pull request #10315 from alalek:issue_10147_debug
dnn: more debug information
2017-12-15 15:01:12 +03:00
Alexander Alekhin
d5f152494b fix file names 2017-12-15 14:59:35 +03:00
Sayed Adel
1b8acd662f core:ppc Fix several issues for VSX (#10303)
- fix conversion intrinsics compatibility with xlc
- implement odd-elements 2 to 4 conversion intrinsics
- improve implementation of universal intrinsic v_popcount
- rename FORCE_INLINE to VSX_FINLINE in vsx_utils.hpp
2017-12-15 14:03:46 +03:00
LaurentBerger
7ad308ea47 Simulated Annealing for ANN_MLP training method (#10213)
* Simulated Annealing for ANN_MLP training method

* EXPECT_LT

* just to test new data

* manage RNG

* Try again

* Just run buildbot with new data

* try to understand

* Test layer

* New data- new test

* Force RNG in backprop

* Use Impl to avoid virtual method

* reset all weights

* try to solve ABI

* retry

* ABI solved?

* till problem with dynamic_cast

* Something is wrong

* Solved?

* disable backprop test

* remove ANN_MLP_ANNEALImpl

* Disable weight in varmap

* Add example for SimulatedAnnealing
2017-12-15 13:57:39 +03:00
zhijackchen
6df8ac0342 Merge pull request #10283 from zhijackchen:exr_export
* Fix issue #10114
Convert table change
From:
CV_8U -> HALF
CV_8S -> HALF
CV_16U -> UINT
CV_16S -> UINT
CV_32S -> UINT
CV_32F -> FLOAT
To:
CV_8U -> HALF
CV_8S -> HALF
CV_16U -> UINT
CV_16S -> FLOAT
CV_32S -> FLOAT loss precision
CV_32F -> FLOAT
Signed integer can't be presented well with UINT. Even adjust bias, CV16S and CV32S will be confused when load from exr file.
Also fix CV_8S negative value incorrect bug

* EXR import and export
imread() from EXR returns CV_32F only
imwrite() accepts CV_32 cv::Mat only and stores FLOAT images by default. Add imwrite() flag to store in HALF format.

* fix compiling error

* clean up

* fix EXR import issues
2017-12-15 12:23:44 +03:00
Dmitry Kurtaev
08112f3821 Faster-RCNN models support 2017-12-15 12:16:21 +03:00
Alexander Alekhin
18ff806d5b Merge pull request #10304 from catree:add_tutorial_homography 2017-12-15 08:53:35 +00:00
Alexander Alekhin
d0684ac139 Merge pull request #10309 from seiko2plus:issue10308 2017-12-15 08:43:10 +00:00
Sayed Adel
a8ae9cab08 3rdparty:libpng[1.6.34] Add missing support for PowerPC/VSX 2017-12-15 03:00:07 +00:00
Vadim Pisarevsky
84535a60f2 Merge pull request #10307 from savuor:fix/expect_softfloat 2017-12-14 21:00:46 +00:00
Tomoaki Teshima
ca1a0a1108 core: remove raw SSE2/NEON implementation from convert.cpp (#9831)
* remove raw SSE2/NEON implementation from convert.cpp
  * remove raw implementation from Cvt_SIMD
  * remove raw implementation from cvtScale_SIMD
  * remove raw implementation from cvtScaleAbs_SIMD
  * remove duplicated implementation cvt_<float, short>
  * remove duplicated implementation cvtScale_<short, short, float>
  * add "from double" version of Cvt_SIMD
  * modify the condition of test ConvertScaleAbs

* Update convert.cpp

fixed crash in cvtScaleAbs(8s=>8u)

* fixed compile error on Win32

* fixed several test failures because of accuracy loss in cvtScale(int=>int)

* fixed NEON implementation of v_cvt_f64(int=>double) intrinsic

* another attempt to fix test failures

* keep trying to fix the test failures and just introduced compile warnings

* fixed one remaining test (subtractScalar)
2017-12-15 00:00:35 +03:00
Rostislav Vasilikhin
7d18f49a49 SoftFloat tests: assert => expect 2017-12-14 21:03:25 +03:00
Alexander Alekhin
0da947e6b3 dnn: more debug information 2017-12-14 19:21:17 +03:00
Alexander Alekhin
6cedc82799 Merge pull request #10274 from alalek:update_3rdparty 2017-12-14 15:10:32 +00:00
catree
b417fb0939 Add tutorial and codes for the homography tutorial. 2017-12-14 15:40:10 +01:00
Alexander Alekhin
cd4176104d 3rdparty: update libwebp 0.6.1 2017-12-14 14:49:31 +03:00
Alexander Alekhin
5c709f4aaa 3rdparty: update libtiff 4.0.9 2017-12-14 14:49:31 +03:00
Alexander Alekhin
ae5e1f8ece 3rdparty: eliminate jasper build warning 2017-12-14 14:49:31 +03:00
Alexander Alekhin
a9de6900e5 cmake(3rdparty): BUILD_ options before WITH_ options 2017-12-14 14:49:31 +03:00
Suleyman TURKMEN
83b5b86f7d 3rdparty: update libjpeg 9b 2017-12-14 14:49:31 +03:00
Alexander Alekhin
ca46171246 3rdparty: libpng patch 2017-12-14 14:49:31 +03:00
Suleyman TURKMEN
d4e2e6279c 3rdparty: update libpng 1.6.34 2017-12-14 14:49:30 +03:00
Suleyman TURKMEN
197078e331 3rdparty: update zlib 1.2.11 2017-12-14 14:49:30 +03:00
Vadim Pisarevsky
d0d2faf551 Merge pull request #10294 from alalek:fix_copyToMask_dst_initialization 2017-12-14 11:05:09 +00:00
Vadim Pisarevsky
a4b5eabccf Merge pull request #10299 from alalek:cmake_imported_configuration_remap 2017-12-14 11:01:02 +00:00
Vadim Pisarevsky
7b701fee60 Merge pull request #10302 from alalek:issue_10254 2017-12-13 17:31:40 +00:00
Vadim Pisarevsky
99183e98d3 Merge pull request #10293 from alalek:fix_persistence_with_deprecated_traits 2017-12-13 17:30:23 +00:00
Alexander Alekhin
c231472ad6 Merge pull request #10290 from tomoaki0705:fixVS2012Round 2017-12-13 15:30:21 +00:00
Alexander Alekhin
9930076dc5 core(test): avoid filename duplicates in tests 2017-12-13 18:21:55 +03:00
Tomoaki Teshima
ecb6bcf2e0 fix build error on Visual Studio 2012
* round doesn't exists in standard library of Visual Studio 2012
  * apply the correct computation of ROI
2017-12-13 17:40:07 +03:00
Alexander Alekhin
74f1295756 Merge pull request #10295 from alalek:cmake_workaround_download_log_issue 2017-12-13 13:52:31 +00:00
Alexander Alekhin
3966595f9a Merge pull request #10300 from alalek:cmake_timestamp_update 2017-12-13 13:51:09 +00:00
Alexander Alekhin
0fcc6f5d60 Merge pull request #10282 from alalek:cmake_tbb_version 2017-12-13 13:50:24 +00:00
Alexander Alekhin
3e45795232 cmake: update timestamp status
- avoid unnecessary rebuilding of OpenCV libraries
- use timestamp of the first launch of CMake
- to return to previous behavior use `-UOPENCV_TIMESTAMP` CMake option
2017-12-13 15:31:36 +03:00
Vitaly Tuzov
51cb56ef2c Implementation of bit-exact resize. Internal calls to linear resize updated to use bit-exact version. (#9468) 2017-12-13 15:00:38 +03:00
Alexander Alekhin
f39ee9c6a1 cmake: rework MAP_IMPORTED_CONFIG to prevent unintended build failures
Introduce CMake variable OPENCV_MAP_IMPORTED_CONFIG which controls this behaviour
Added defaults for MSVS targets
2017-12-13 14:30:27 +03:00
Vadim Pisarevsky
84ee4d701a Merge pull request #10297 from tomoaki0705:suppressOclWarning 2017-12-13 07:56:35 +00:00
Tomoaki Teshima
267c5a747b suppress warnings on OpenCL build
* stop re-enabling the warning C4127
  * disabling is done in CMakeLists.txt
2017-12-13 15:07:51 +09:00
Alexander Alekhin
edadcfa7d9 cmake: add option to workaround issue observed with old CMake
CMake message contains this: "Invalid escape sequence \"
2017-12-12 19:00:42 +03:00
Alexander Alekhin
62ed6cdc74 core: fix copyTo(with mask) dst initialization 2017-12-12 18:40:13 +03:00
Alexander Alekhin
ce20efb8e7 Merge pull request #9804 from woodychow:optimize_cveigen 2017-12-12 14:58:04 +00:00
Alexander Alekhin
825b14278e core: fix persistence with deprecated traits 2017-12-12 17:07:36 +03:00
Alexander Alekhin
8d4777c81d cmake: generate tbb version file 2017-12-12 16:12:32 +03:00
Alexander Alekhin
c0b6061a5e core(test): Core_Eigen.vector_32 use relative norm 2017-12-12 15:07:31 +03:00
Alexander Alekhin
2324674dfb core(test): update eps in testEigen<float>: 1e-6 => 1e-4 2017-12-12 15:07:31 +03:00
Alexander Alekhin
53b5afbba9 core(test): refactor Java Eigenvalues/PCA tests 2017-12-12 15:07:31 +03:00
Alexander Alekhin
d48d2d7fe2 core(test): refactor PCA test
- CV_L2 -> relative NORM_L2
- eigenEps: 1e-6 ==> 1e-4
- evalEps: 1e-6 ==> 1e-5
- evecEps: 1e-3 ==> 5e-3
- RNG seed: 12345
- drop non-informative legacy test code (ts->printf, etc)
2017-12-12 15:07:27 +03:00
Alexander Alekhin
b0bce60c16 Merge pull request #10284 from alalek:dnn_debug_error 2017-12-12 09:33:50 +00:00
Alexander Alekhin
eff42f6387 dnn: more debug info 2017-12-12 12:04:10 +03:00
Alexander Alekhin
5404930112 Merge pull request #9260 from Cartucho:add_python_signatures 2017-12-12 08:58:14 +00:00
Alexander Alekhin
e49febb70f Merge pull request #10269 from terfendail:softdouble_round 2017-12-11 12:48:03 +00:00
Vadim Pisarevsky
7e680bd9ff Merge pull request #10215 from dkurt:dnn_js 2017-12-11 12:47:52 +00:00
Vadim Pisarevsky
766a0c0f25 Merge pull request #10277 from pengli:dnn 2017-12-11 12:44:21 +00:00
Vadim Pisarevsky
9fa505027a Merge pull request #10263 from mshabunin:embedded-build 2017-12-11 12:42:45 +00:00
Vadim Pisarevsky
61c2f094b9 Merge pull request #10280 from alalek:python_cv2_to_cv 2017-12-11 12:39:00 +00:00
Vadim Pisarevsky
558b17dede Merge pull request #10231 from alalek:ocl_refactor_program_api 2017-12-11 12:34:22 +00:00
Vitaly Tuzov
86b128dbb3 Added implementation of softdouble rounding to int64_t 2017-12-11 14:29:32 +03:00
Alexander Alekhin
5560db73bf python: 'cv2.' -> 'cv.' via 'import cv2 as cv' 2017-12-11 13:46:55 +03:00
Maksim Shabunin
7349b8f5ce Build for embedded systems 2017-12-11 13:27:37 +03:00
Li Peng
88507fa051 add command parser to caffe googlenet sample
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-11 17:54:50 +08:00
Alexander Alekhin
9665dde678 Merge pull request #10112 from haritha1313:bugfix_doc1 2017-12-10 20:54:29 +00:00
Alexander Alekhin
768f4cb7bc python: 'sub-module' for binding sources and documentation meta information 2017-12-09 21:01:46 +00:00
Alexander Alekhin
b15bc194ef doc: finalize Python signatures injection 2017-12-09 21:01:46 +00:00
Haritha
be4fa03fac crop parameter usage in blobFromImage() calls 2017-12-09 17:13:35 +05:30
tribta
164a77e7ad add methods 2017-12-09 02:56:19 +00:00
tribta
6174f62710 Sample for functions 2017-12-09 02:56:19 +00:00
Alexander Alekhin
d715badbde doc: update Python signatures generation
- drop dependency on 'import cv2', use pyopencv_signatures.json instead
- try to make generator idempotent
2017-12-09 02:56:19 +00:00
tribta
912de363f4 Using __doc__ to add Python signatures to the docs. 2017-12-09 02:56:19 +00:00
Alexander Alekhin
66e09bc9a4 Merge pull request #10260 from native-api:ffmpeg_load_from_package 2017-12-08 20:58:17 +00:00
Vadim Pisarevsky
cd7526c973 Merge pull request #10266 from ChristofKaufmann:warp_documentation 2017-12-08 18:48:48 +00:00
Vadim Pisarevsky
c24f10d647 Merge pull request #10268 from dkurt:fix_scale_layer 2017-12-08 18:46:50 +00:00
Ivan Pozdeev
4bee238cf8 GetModuleFileName() doesn't reset last error on success 2017-12-08 21:11:41 +03:00
Dmitry Kurtaev
f503515082 JavaScript bindings for dnn module 2017-12-08 18:33:48 +03:00
Dmitry Kurtaev
e307065c8e Scale layer in case of 2D inputs 2017-12-08 17:34:59 +03:00
Elena Gvozdeva
6185f7209e Merge pull request #10172 from ElenaGvozdeva:eg/HAL_sobel
* add HAL for SobelFilter
* add HAL for pyrDown
* add HAL for Scharr
2017-12-08 16:36:24 +03:00
Alexander Alekhin
a2811d93dd Merge pull request #10253 from alalek:cmake_disable_optimization 2017-12-08 11:35:11 +00:00
Christof Kaufmann
9c5b231b2d doc: Add type restriction note for geometric transformations
This is added according to #7862.
2017-12-08 12:33:51 +01:00
Alexander Alekhin
f2070c9f5d Merge pull request #10255 from dkurt:dnn_roi_pooling 2017-12-08 11:20:07 +00:00
Alexander Alekhin
34e414dc31 Merge pull request #10264 from terfendail:createsamples 2017-12-08 11:02:49 +00:00
Vitaly Tuzov
92d23fb1a8 updated createsamples app utility functions to new c++ API from old c 2017-12-08 12:23:44 +03:00
Alexander Alekhin
f8b14a1612 Merge pull request #10262 from Riyuzakii:10209 2017-12-08 08:49:10 +00:00
Riyuzakii
8f1345091e Remove typo/repeated code block 2017-12-08 12:10:00 +05:30
Dmitry Kurtaev
17dcf0e82d ROIPooling layer 2017-12-07 19:04:38 +03:00
Alexander Alekhin
d329674f68 Merge pull request #8198 from mshabunin:cmakeex 2017-12-07 15:02:41 +00:00
Alexander Alekhin
cadd1a0074 cmake: CV_DISABLE_OPTIMIZATION disables IPP, OpenCL, Eigen and LAPACK too 2017-12-07 17:54:37 +03:00
Alexander Alekhin
1625ffa2cf ocl: opencl_custom_kernel.cpp example 2017-12-07 16:50:07 +03:00
Alexander Alekhin
72de03d749 Merge pull request #10243 from berak:dnn_fix_mobilenet_sample 2017-12-07 09:54:18 +00:00
Alexander Alekhin
0be1bf551b Merge pull request #10244 from dkurt:issue_10239 2017-12-07 09:43:16 +00:00
Dmitry Kurtaev
ef0650179b Fix conv/deconv/fc layers FLOPS computation 2017-12-07 11:42:04 +03:00
Maksim Shabunin
38c62f6461 Added option to disable gc-sections flag 2017-12-07 10:28:58 +03:00
Pavel Rojtberg
6fb9d42c3f Hid symbols in static builds, added LTO flags, removed exports from ts 2017-12-07 10:26:48 +03:00
Alexander Alekhin
ef04ca9e0f Merge pull request #10241 from alalek:ios_fix_build_warnings 2017-12-06 16:26:51 +00:00
Alexander Alekhin
6074f92d48 Merge pull request #10228 from pengli:dnn_new 2017-12-06 15:50:12 +00:00
Alexander Alekhin
0b688cd23f Merge pull request #10240 from alalek:dnn_perf_ssd 2017-12-06 15:41:18 +00:00
Li Peng
59cbaca4d3 detection_output layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-06 22:35:59 +08:00
Li Peng
66feea6cac region layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-07 02:26:46 +08:00
Li Peng
7707c9bfba reorg layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-07 02:26:46 +08:00
Li Peng
85b1c4060c support axis in concat layer ocl path
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-07 02:26:46 +08:00
Li Peng
07bec6bdcd reshape layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-07 02:26:40 +08:00
berak
159ea22b6b dnn: add a check for webcam properties in ssd_mobilenet sample 2017-12-06 14:55:37 +01:00
Alexander Alekhin
682bd2eedf Merge pull request #10236 from alalek:ocl_skip_unstable_tests 2017-12-06 13:48:51 +00:00
Alexander Alekhin
d8a737b4b0 dnn: SSD performance test 2017-12-06 15:55:18 +03:00
Alexander Alekhin
af1ea1f7ac build: fix iOS warnings with armv7s, switch precommit armv7 -> armv7s 2017-12-06 15:49:45 +03:00
Alexander Alekhin
3a8a73ef6c ocl: skip unstable tests
during pre-commit testing
2017-12-06 12:58:35 +03:00
Vadim Pisarevsky
4781f0a337 Merge pull request #10024 from iago-suarez:bugfix-lsd-multiple-imgs-issue#10023 2017-12-06 09:01:37 +00:00
Vadim Pisarevsky
4b8275061e Merge pull request #10058 from ElenaGvozdeva:eg/HAL 2017-12-05 20:56:24 +00:00
Vadim Pisarevsky
7933fff0dd Merge pull request #10226 from vermashresth:bugfix 2017-12-05 20:53:53 +00:00
Vadim Pisarevsky
2c4d3d92c7 Merge pull request #10221 from dkurt:non_spatial_torch_layers 2017-12-05 20:52:00 +00:00
Alexander Alekhin
15b909e80b ocl: add SPIR Program loading test
SPIR kernels are located in opencv_extra
2017-12-05 22:25:14 +03:00
Alexander Alekhin
a82d2363f4 ocl: refactor Program API
- don't store ProgramSource in compiled Programs (resolved problem with "source" buffers lifetime)
- completelly remove Program::read/write methods implementation:
  - replaced with method to query RAW OpenCL binary without any "custom" data
- deprecate Program::getPrefix() methods
2017-12-05 22:25:14 +03:00
Alexander Alekhin
13c4a02157 ocl: low-level API to support OpenCL binary programs 2017-12-05 22:25:14 +03:00
Alexander Alekhin
0042bacd88 Merge pull request #10207 from cabelo:cabelo-opencv
Repair: incorrect display of class in DNN
2017-12-05 21:23:23 +03:00
Shresth Verma
ffe49bdebe fixed createsamples info message 2017-12-05 23:24:22 +05:30
Alexander Alekhin
4d721e368a Merge pull request #10218 from catree:fix_cuda_integral 2017-12-05 15:10:00 +00:00
Li Peng
7b7033ac60 permute layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
2017-12-05 22:10:05 +08:00
Alexander Alekhin
552c3ba869 Merge pull request #10230 from vpisarev:macos_detect_lapack 2017-12-05 13:48:23 +00:00
Juha Reunanen
5b41599911 Fix pointPolygonTest for large coordinate values (#10222)
* Add test that fails

* Fix integer pointPolygonTest for large coordinate values

* Review fixes:
- change type from long long to int64
- move test code to test_contours.cpp, and make it C++98 compliant

* Hopefully fix compiler error by using push_back instead of emplace_back
2017-12-05 15:49:44 +03:00
Vadim Pisarevsky
b833d512ec fixed native Lapack detection script on Mac/iOS (where native Lapack is a part of Accelerate framework) 2017-12-05 15:45:37 +03:00
Vadim Pisarevsky
5ce38e516e Merge pull request #10223 from vpisarev:ocl_mac_fixes
* fixed OpenCL functions on Mac, so that the tests pass

* fixed compile warnings; temporarily disabled OCL branch of TV L1 optical flow on mac

* fixed other few warnings on macos
2017-12-05 13:32:28 +03:00
woody.chow
611cf8d86f Use Eigen::SelfAdjointEigenSolver in cv::eigen 2017-12-05 02:40:55 +03:00
alessandro faria
df5ec54fb8 Repair: incorrect display of class name 2017-12-04 22:00:54 +03:00
Alexander Alekhin
a3ec2ac3c5 Merge pull request #10176 from sturkmen72:update_train_hog 2017-12-04 16:24:42 +00:00
Vadim Pisarevsky
69830b1851 Merge pull request #10216 from dkurt:dnn_face_detector_extra_paddings 2017-12-04 13:14:51 +00:00
Dmitry Kurtaev
bbbec300a6 nn.BatchNormalization and nn.Dropout layers from Torch 2017-12-04 12:57:21 +03:00
catree
6d06fcb414 Fix CUDA integral. 2017-12-04 02:22:52 +01:00
Suleyman TURKMEN
2aa380752c Update train_HOG.cpp 2017-12-03 23:47:54 +03:00
Dmitry Kurtaev
03850008b9 Extra paddings for face detector layers 2017-12-03 17:04:53 +03:00
Alexander Alekhin
fc9e031454 Merge pull request #10212 from alalek:ocl_cache_with_address_bits 2017-12-01 15:42:28 +00:00
Alexander Alekhin
74d321d901 Merge pull request #10199 from alalek:fix_calib3d_fisheye_rectify_test 2017-12-01 15:26:50 +00:00
elenagvo
7bfb38055c remove matrix release 2017-12-01 14:38:00 +03:00
elenagvo
81519537ae fix the parameters order 2017-12-01 14:38:00 +03:00
elenagvo
0f12351a41 fix accelerators order 2017-12-01 14:38:00 +03:00
elenagvo
7aadbc9607 remove complex data structs 2017-12-01 14:38:00 +03:00
elenagvo
ce65975625 call HAL for GaussianBlur is fixed 2017-12-01 14:38:00 +03:00
elenagvo
a25c443d1f add perf test for boxFilter CV8U to CV16U 2017-12-01 14:38:00 +03:00
elenagvo
c2c7333107 add hal for GaussianBlur 2017-12-01 14:38:00 +03:00
elenagvo
cb9e110adb add HAL for BoxFilter 2017-12-01 14:38:00 +03:00
Alexander Alekhin
0595ab3eef ocl: fix usage of invalid OpenCL cache on mixed 64/32-bit platforms
Observed during launch of 32/64-bit applications on Windows.
Added '32-bit' prefix for 32-bit OpenCL devices. No prefix on 64-bit configurations.
2017-12-01 14:20:18 +03:00
Maksim Shabunin
800294ad4b Merge pull request #10060 from allnes:videoio_tests_backend 2017-12-01 09:38:19 +00:00
Alexander Alekhin
ac58405a71 calib3d: fix fisheye stereoRectify test
- don't write into testdata directory
- check matrices instead of result images
2017-11-30 15:50:29 +03:00
Alexander Alekhin
9bf6ec6fe1 Revert "Adapted estimateNewCameraMatrix to make it work with pincushion-like distortion."
This reverts commit 5384a2205a.
2017-11-30 15:47:48 +03:00
Vadim Pisarevsky
7ae19467b5 Merge pull request #10171 from ElenaGvozdeva:Threshold 2017-11-30 10:02:47 +00:00
Vadim Pisarevsky
fe95d5a720 Merge pull request #10200 from alalek:cmake_fix_dependencies 2017-11-30 10:00:51 +00:00
Alexander Alekhin
0105518422 Merge pull request #10190 from seiko2plus:issue10189 2017-11-30 07:16:12 +00:00
Alexander Alekhin
22c0bb7dc9 cmake: fix WITH_VTK usage
'WITH_' variables is intended to enable CMake scripts with some autodetection logic.
'WITH_' can be off, but components is really enabled via command-line options
with proper variables setup (including 'HAVE_').
2017-11-29 21:43:09 +03:00
Alexander Alekhin
b19f81b35b cmake: update BUILD_DOCS / ENABLE_PYLINT options, add BUILD_JAVA 2017-11-29 21:43:09 +03:00
Alexander Alekhin
28717d0437 cmake: don't try to detect Python libraries for iOS builds
Python executable is not used to generate code for iOS builds
2017-11-29 21:43:09 +03:00
Alexander Alekhin
5ea50d1e8d cmake: don't use Eigen auto-detection in cross-compiling modes
Sometimes it tries to use host '/usr/include' directory and garbages
compiler flags with invalid '-I /usr/include'
2017-11-29 21:43:09 +03:00
Alexander Alekhin
e703c3090a Merge pull request #10184 from catree:solvePnP_iterative_guess_3_pts 2017-11-29 18:24:04 +00:00
Alexander Alekhin
a79d0e19ad Merge pull request #10194 from mshabunin:fix-gcc7-warnings 2017-11-29 18:22:40 +00:00
Alexander Alekhin
872500c4a5 Merge pull request #10193 from alalek:fix_ios_cmake_3.10 2017-11-29 16:32:31 +00:00
Maksim Shabunin
7eb1065944 Fixed/disabled warnings produced by GCC 7 2017-11-29 17:21:22 +03:00
Alexander Alekhin
cdc2aca2cc cmake: fix iOS build with CMake 3.10 2017-11-29 15:57:32 +03:00
Alexander Alekhin
cc2ee923e4 Merge pull request #10164 from pengli:dnn 2017-11-29 12:05:10 +00:00
Vadim Pisarevsky
f5dba12762 Merge pull request #10180 from alalek:ocl_avoid_unnecessary_initialization 2017-11-29 11:42:22 +00:00
Vadim Pisarevsky
86ff4a1ccf Merge pull request #10182 from romanc:fix/divByZeroSimdDouble 2017-11-29 10:01:58 +00:00
Vadim Pisarevsky
614e254331 Merge pull request #10170 from LaurentBerger:Issue10166 2017-11-29 09:51:20 +00:00
Sayed Adel
6fe6436162 core:ppc Fixed compilation with xlc, clang.
- Use EXPECT_TRUE instead of EXPECT_EQ for comparing NULL in xlc
- Added support for int64 to vec_promote in xlc, clang
- Fixed v_rotate_right in xlc
2017-11-29 07:48:26 +00:00
Alexander Alekhin
29e4a4940d Merge pull request #10185 from alalek:fix_build_xcode_9.1 2017-11-28 18:42:18 +00:00
Alexander Alekhin
f7913e2c84 build: eliminate Xcode 9.1 warnings
- 3rdparty/libjasper/jas_getopt.c:129:25: warning: this function declaration is not a prototype [-Wstrict-prototypes]
- clang: warning: optimization flag '-fomit-frame-pointer' is not supported for target 'armv7' [-Wignored-optimization-argument]
2017-11-28 17:48:40 +03:00
elenagvo
73ac5321f5 fix threshold HAL 2017-11-28 17:42:29 +03:00
catree
2e56a47f8c Allow to use 3 points in SolvePnP if SOLVEPNP_ITERATIVE and useExtrinsicGuess==true. Add bibtex citations for P3P. Update SolvPnP tests. 2017-11-28 15:04:59 +01:00
Vadim Pisarevsky
666fc0ba69 Merge pull request #9986 from terfendail:drawcontours_docfix 2017-11-28 13:19:06 +00:00
Vadim Pisarevsky
cfd845ac07 Merge pull request #10141 from LaurentBerger:MLP_ReLU 2017-11-28 13:17:43 +00:00
Vadim Pisarevsky
2a8344f75b Merge pull request #10149 from mshabunin:fix-saturate-intrin 2017-11-28 13:17:10 +00:00
elenagvo
762138e77e define adaptiveMethod and thresholdType for HAL 2017-11-28 16:02:06 +03:00
Roman Cattaneo
d381e499ea Fixes Issue #10181
This PR fixes incorrect division by zero handling in template
specialization of `Div_SIMD` for type `double`.
2017-11-28 13:48:40 +01:00
Alexander Alekhin
0ed3209b00 ocl: avoid unnecessary loading/initializing OpenCL subsystem
If there are no OpenCL/UMat methods calls from application.

OpenCL subsystem is initialized:
- haveOpenCL() is called from application
- useOpenCL() is called from application
- access to OpenCL allocator: UMat is created (empty UMat is ignored) or UMat <-> Mat conversions are called

Don't call OpenCL functions if OPENCV_OPENCL_RUNTIME=disabled
(independent from OpenCL linkage type)
2017-11-28 14:02:42 +03:00
Vadim Pisarevsky
bc547c4290 Merge pull request #10124 from zhongwuzw:master 2017-11-28 10:53:00 +00:00
Vadim Pisarevsky
9e4a8a31e1 Merge pull request #10173 from dkurt:update_priorbox_layer 2017-11-28 10:51:06 +00:00
Vadim Pisarevsky
b900496c40 Merge pull request #10152 from alalek:py_fix_isalgorithm 2017-11-28 10:46:41 +00:00
Alexander Alekhin
abad8977b6 Merge pull request #9247 from paroj:wrap_alog_rw 2017-11-28 10:35:33 +00:00
Maksim Shabunin
6c135261b2 Universal Intrinsics: aligned v_pack behavior on different platforms, fixed 64-bit register on ARM, added more saturate_cast variants 2017-11-28 13:31:56 +03:00
LaurentBerger
a44573c43b Add ReLU and LeakyReLU activation function in ml module 2017-11-28 11:02:05 +01:00
Alexander Alekhin
cd689c640d Merge pull request #10177 from alalek:cmake_update_optimization_filter 2017-11-28 09:17:42 +00:00
Alexander Alekhin
378e05c16b Merge pull request #10178 from alalek:ts_message 2017-11-28 05:39:29 +00:00
Alexander Alekhin
486cfd1040 ts: detailed message 2017-11-27 19:22:39 +03:00
Pavel Rojtberg
3c795a0dab add test_algorithm_rw using AKAZE 2017-11-27 17:04:56 +01:00
Pavel Rojtberg
6fbf0758bc Python: wrap Algorithm::read and Algorithm::write 2017-11-27 17:04:56 +01:00
Alexander Alekhin
89d855c0b7 cmake: update optimization filter 2017-11-27 18:18:19 +03:00
Wu Zhiwen
1f465a0ef9 dnn(ocl4dnn): fuseLayer() use umat_input/outputBlobs for OpenCL target
Also, fix bug when use OPENCL target but no OpenCL runtime

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-11-27 22:25:53 +08:00
Li Peng
a47fbd2610 Add ocl accuracy test for a few dnn nets
They are alexnet, mobilenet-ssd, resnet50, squeezeNet_v1_1,
yolo and fast_neural_style.

Signed-off-by: Li Peng <peng.li@intel.com>
2017-11-27 23:33:21 +08:00
Dmitry Kurtaev
99ed085752 Update PriorBox layer 2017-11-27 16:47:20 +03:00
elenagvo
c95bc0c7fd add HAL for threshold 2017-11-27 15:35:02 +03:00
elenagvo
11ddb9332c add HAL for adaptiveThreshold 2017-11-27 15:35:02 +03:00
LaurentBerger
606a5fd537 Try to solve issue 10166 2017-11-27 13:13:05 +01:00
Alexander Alekhin
c4b158ff91 Merge pull request #10167 from alalek:ocl_fix_issue_contrib1467 2017-11-27 11:05:07 +00:00
Vadim Pisarevsky
ec076bfba3 Update imgproc.hpp
rewrote the added note in perhaps a cleaner way
2017-11-27 13:42:10 +03:00
Vadim Pisarevsky
92be112388 Merge pull request #10107 from ElenaGvozdeva:medianBlur_HAL 2017-11-27 10:12:16 +00:00
Vadim Pisarevsky
a83c12c3d5 Merge pull request #10154 from alalek:ocl_cleanup_obsolete_cache 2017-11-27 10:04:04 +00:00
Vadim Pisarevsky
7f554f3cc4 Merge pull request #10155 from alalek:ocl_update_loader 2017-11-27 10:03:31 +00:00
Alexander Alekhin
92b35e6758 ocl: fix null pointer access crash 2017-11-27 12:43:29 +03:00
Alexander Alekhin
91c1d7697f Merge pull request #10156 from dkurt:refresh_torch_enet_sample 2017-11-27 09:24:50 +00:00
Alexander Alekhin
5b27fb506a Merge pull request #10163 from windhw:patch-1 2017-11-27 07:56:06 +00:00
Wei Hao
f2b3e5f517 Update houghlines.py
Fix a code indent bug:   cv2.imshow("detected lines", cdst)
2017-11-27 14:36:51 +08:00
Alexander Alekhin
807f5e33ad Merge pull request #10055 from mabdullahrafique:patch-1 2017-11-26 12:00:16 +00:00
Alexander Alekhin
11330b9253 Merge pull request #10095 from alalek:fix_canny_intrinsics 2017-11-25 12:31:47 +00:00
Dmitry Kurtaev
2af6f68452 Update Torch ENet sample 2017-11-24 21:20:18 +03:00
Alexander Alekhin
c38620e966 ocl: update OpenCL runtime loader
- fix compilation on Apple (undefined 'oclpath')
- don't warn on OPENCV_OPENCL_RUNTIME=disabled
2017-11-24 19:18:22 +03:00
Alexander Alekhin
8254169cf5 Merge pull request #10153 from dkurt:specify_mobilenet_version 2017-11-24 16:17:28 +00:00
Alexander Alekhin
b6abf0d3f9 ocl: drop obsolete cache directories after upgrade of OpenCL driver
Entries with the same platform name, the same device name and with different driver versions
are assumed obsolete.
2017-11-24 17:02:28 +03:00
Vadim Pisarevsky
bd6a6690f2 Merge pull request #10150 from alalek:dnn_ocl_refactor_pooling 2017-11-24 11:51:03 +00:00
Dmitry Kurtaev
cdbbccbef8 Specific version of MobileNet-SSD from TensorFlow 2017-11-24 13:40:35 +03:00
Alexander Alekhin
cbf2b51e40 bindings(py): fix handling of 'isalgorithm' 2017-11-24 09:54:44 +03:00
Alexander Alekhin
13f374660f dnn(ocl4dnn): drop unused batch_size_ in pooling 2017-11-23 20:46:56 +00:00
Alexander Alekhin
e34b64c979 dnn(ocl4dnn): refactor pooling OpenCL calls 2017-11-23 20:46:44 +00:00
Muhammad Abdullah
c180047bc1 update digits_video.py
Following were the errors in the digits_video.py
     1 ) The code was not working because data type of x was float however in "cv2.rectangle" we require integer .
     2 ) After pressing the "esc" button the image windows did not destroy
So I amended following things:
     1 ) ~converted data type of x to int.~ Used Python integer division (//)
     2 ) used cv2.destroyAllWindows() to close all windows after the press of "esc" by user.
2017-11-23 19:20:37 +00:00
Alexander Alekhin
f071a48ec7 Merge pull request #10143 from pengli:ocl4dnn 2017-11-23 18:47:14 +00:00
Maksim Shabunin
a1479cc2c1 Merge pull request #10148 from alalek:fix_ffmpeg_sws_scale_crash 2017-11-23 18:35:00 +00:00
Arthur Pastel
2feb0c2f61 Merge pull request #9895 from art049:parrallel_calibration_py
* Adding threading in calibrate.py

* samples: update calibrate.py
2017-11-23 21:27:11 +03:00
Alexander Alekhin
107582c767 Merge pull request #9996 from dkurt:dnn_multiple_inputs 2017-11-23 18:22:37 +00:00
Li Peng
636d6368ee use OutputArrayOfArrays in net forward interface
It allows umat buffers used in net forward interface

Signed-off-by: Li Peng <peng.li@intel.com>
2017-11-24 02:19:10 +08:00
Wu, Zhiwen
04edc8fe3a cleanup ocl4dnn spatial convolution kernels
remove unused macros and half definition macros,
also remove unused ocl::Queue

Signed-off-by: Li Peng <peng.li@intel.com>
2017-11-24 02:19:10 +08:00
Alexander Alekhin
559235ac74 videoio(ffmpeg): more workarounds for sws_scale() crash
Prevents access data after the end of input buffer near 4K page boundaries
2017-11-23 18:56:19 +03:00
Alexander Alekhin
5d369afe27 Merge pull request #9893 from mshabunin:add-modules-whitelist 2017-11-23 15:09:35 +00:00
Alexander Alekhin
49a5280198 Merge pull request #10139 from alalek:dnn_rename_caffe_proto_package 2017-11-23 14:10:42 +00:00
Alexander Alekhin
e5d1790b7b Merge pull request #10018 from alalek:ocl_binary_cache 2017-11-23 13:37:32 +00:00
Maksim Shabunin
5b17410f7c Added BUILD_LIST feature 2017-11-23 16:06:21 +03:00
Vadim Pisarevsky
fed2a277e0 Merge pull request #10142 from alalek:pytests_update 2017-11-23 12:51:55 +00:00
Vadim Pisarevsky
d59472bf40 Merge pull request #10144 from mshabunin:fix-videocapture-open-order 2017-11-23 12:50:25 +00:00
Maksim Shabunin
6f48dc2482 Fixed GStreamer pipeline building on Ubuntu 17 2017-11-23 15:03:20 +03:00
Alexander Nesterov
8082011546 Update videoio tests 2017-11-23 14:57:38 +03:00
Maksim Shabunin
7628c143f4 videoio: fixed capture open order, added apiPrefernce to FFMPEG tests 2017-11-23 13:33:48 +03:00
elenagvo
5d0a8d2aaf fix the parameters order 2017-11-23 13:30:00 +03:00
Alexander Alekhin
019de554a0 python(test): don't write bytecode
Tests are usually lauched from source directory, so additional unnecessary
files should be eliminated.

Alternative ways (command line):
- python -B ...
- PYTHONDONTWRITEBYTECODE=1 python ...
2017-11-23 13:13:11 +03:00
Alexander Alekhin
3ee8079f35 python(test): add tests filter
Usage example (bash):
$ OPENCV_PYTEST_FILTER=test_digits python test.py -v
2017-11-23 12:16:59 +03:00
Alexander Alekhin
e4aa2ccd66 Merge pull request #10136 from alalek:issue_10134 2017-11-22 18:39:47 +00:00
Alexander Alekhin
f37f4cf3b4 Merge pull request #9994 from r2d3:dnn_memory_load 2017-11-22 18:15:00 +00:00
Alexander Alekhin
e7d62d6ef3 Merge pull request #10126 from alalek:dnn_issue_10125 2017-11-22 18:03:51 +00:00
Alexander Alekhin
b29893b938 dnn: autogenerated files 2017-11-22 18:34:07 +03:00
Alexander Alekhin
1c88a566e0 dnn: rename caffe protobuf package 2017-11-22 18:34:07 +03:00
Alexander Alekhin
3f37be5a30 core: fix compilation of intrinsic code 2017-11-22 17:28:50 +03:00
Alexander Alekhin
9db5cbf9a4 dnn: sync output/internals blobs back 2017-11-22 14:00:58 +03:00
Alexander Alekhin
8e6280fc8e ocl: binary program cache 2017-11-22 12:56:38 +03:00
Vadim Pisarevsky
f8ad289311 Merge pull request #10092 from alalek:dnn_rename_caffe_proto 2017-11-22 08:16:20 +00:00
Vadim Pisarevsky
a9b5233f67 Merge pull request #9931 from mshabunin:bss-cleanup 2017-11-22 08:13:35 +00:00
Maksim Shabunin
e57f22a386 Fixed allocSingleton 2017-11-21 18:07:30 +03:00
Maksim Shabunin
12662e064b align singleton malloc 2017-11-21 17:55:23 +03:00
Maksim Shabunin
1c46034166 Other buffers 2017-11-21 17:55:23 +03:00
Maksim Shabunin
2178c5e95e init ABtoXZ 2017-11-21 17:55:23 +03:00
Maksim Shabunin
b3018ba89e LUV tables 2017-11-21 17:55:23 +03:00
Maksim Shabunin
e75056a084 static init 2017-11-21 17:55:23 +03:00
Maksim Shabunin
51fc891a5c cvtColor: fixed tables init, moved some tables to heap 2017-11-21 17:55:23 +03:00
Alexander Alekhin
0f34628af7 dnn: drop OpenCL code path for DetectionOutputLayer
getUMat()/getMat() calls are scope based. Results of these calls can't be
stored somewhere for future usage.
2017-11-21 17:28:42 +03:00
Vadim Pisarevsky
c3cced0f89 Merge pull request #10121 from alalek:ocl_syntax_fix 2017-11-21 12:40:19 +00:00
Rostislav Vasilikhin
397b57dd72 Merge pull request #10041 from savuor:RevHoughWorks
HoughCircles rewritten (PR #7434 updated) (#10041)

* initial version of renewed HoughCircles done

* fixed compilation

* fixed SIMD ability & compilation warning

* fixed accumulator nonmax comparison

* common Mutex for all invokers

* nzLocal is std::vector

* nz is std::vector

* SSE2 -> SIMD128

* centers is now std::vector

* circles is std::vector

* estimateRadius updated

* accum calculation w/o mutex

* less deprecated code

* several bugs fixed

* back to mutex, TLS gathering doesn't work

* extra code removed

* little refactoring

* docs note updated

* a little speedup

* warning fixed
2017-11-21 14:18:47 +03:00
zhongwuzw
01b581048d Fix customPreviewLayer layout issue when rotateVideo is NO in iOS 2017-11-21 12:56:23 +08:00
Alexander Alekhin
438e456ce9 Merge pull request #10113 from wzw-intel:fusion 2017-11-20 18:13:33 +00:00
Alexander Alekhin
b389c1cfe7 core(ocl): syntax fix 2017-11-20 19:19:35 +03:00
Alexander Alekhin
f19f2bbcde dnn: autogenerated files
rename caffe.proto => opencv-caffe.proto
2017-11-20 19:04:02 +03:00
Alexander Alekhin
f6d927ef3b dnn: avoid conflicts with original caffe.proto
rename caffe.proto => opencv-caffe.proto
2017-11-20 19:04:00 +03:00
Alexander Alekhin
75b980ac64 Merge pull request #10120 from dkurt:remove_caffe_header_from_layer 2017-11-20 15:59:56 +00:00
David Geldreich
f723cede2e add loading TensorFlow/Caffe net from memory buffer
add a corresponding test
2017-11-20 16:28:22 +01:00
Dmitry Kurtaev
6c5dd5cf6d Replace caffe::NormalizedBBox to local structure 2017-11-20 18:03:31 +03:00
elenagvo
3a09da71d8 add HAL for medianBlur 2017-11-20 17:09:22 +03:00
Tomoaki Teshima
3cbe60cca2 Merge pull request #9753 from tomoaki0705:universalMatmul
* add accuracy test and performance check for matmul
  * add performance tests for transform and dotProduct
  * add test Core_TransformLargeTest for 8u version of transform

* remove raw SSE2/NEON implementation from matmul.cpp
  * use universal intrinsic instead of raw intrinsic
  * remove unused templated function
  * add v_matmuladd which multiply 3x3 matrix and add 3x1 vector
  * add v_rotate_left/right in universal intrinsic
  * suppress intrinsic on some function and platform
  * add pure SW implementation of new universal intrinsics
  * add test for new universal intrinsics

* core: prevent memory access after the end of buffer

* fix perf tests
2017-11-20 15:56:53 +03:00
gdkessler
2674c6b5e0 Merge pull request #10093 from gdkessler/gdal_image_read_fix_10089
Fix GDAL image decoding color problems identified by issue #10089, by: (#10093)

* Fix GDAL image decoding color problems identified by issue #10089, by:

Fixing CV_8UC1 symbol, which should be CV_8UC3 for RGB GDAL color table images.

Fixing image.ptr<VecX>(row,col)[] to be (*image.ptr<VecX>(row,col))[] to correctly access VecX array elements, as ptr<VecX>() returns a pointer to the VecX, not the first element of VecX. This fixes the color problem with color table gif images, and avoids out-of-bounds memory access.

Respecting the color identification of raster bands provided by the GDAL image driver, and produce BGR or BGRA images. Note that color bands of images using the HSL, CMY, CMYK, or YCbCr color space are ignored, rather than converting them to BGR.

* When reading image files using the GDAL decoder, exit with an error if a color band is encountered that isn't used (eg. from CMYK or YCbCbr), rather than silently ignoring the band's data.
2017-11-20 15:07:24 +03:00
Wu Zhiwen
45d11dde57 dnn(ocl4dnn): add fusion support for Power activation and eltwise add
Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-11-20 14:58:53 +08:00
Alexander Alekhin
c7f1843584 Merge pull request #10087 from mshabunin:small-cmake-fixes 2017-11-18 18:07:14 +00:00
Jonathan Viney
b1d208891b Merge pull request #10011 from jviney:master
Fix build with FFmpeg master. Some deprecated APIs have been removed. (#10011)

* Fix build with FFmpeg master.

* ffmpeg: update AVFMT_RAWPICTURE support removal
2017-11-18 21:08:41 +03:00
Alexander Alekhin
017a38a54e Merge pull request #10108 from mshabunin:fix-eigen-stride 2017-11-17 20:09:08 +00:00
Alexander Alekhin
b45403ed75 Merge pull request #10102 from seiko2plus:coreVsxPacksFix 2017-11-17 19:01:38 +00:00
Maksim Shabunin
f50ec229de Eigen: fix Mat construction stride 2017-11-17 18:27:09 +03:00
Alexander Alekhin
3e33820ee5 Merge pull request #10104 from wzw-intel:fusion_debug 2017-11-17 13:57:36 +00:00
Maksim Shabunin
73d4f12c14 Merge pull request #9997 from ElenaGvozdeva:GaussianBlur_bug 2017-11-17 13:37:28 +00:00
elenagvo
20c08eab73 change border type for medianBlur to BORDER_ISOLATED 2017-11-17 15:13:04 +03:00
Maksim Shabunin
eb136ebba6 Do not reset step for single-row Mat created on user data 2017-11-17 13:15:15 +03:00
elenagvo
1a9d8e9447 test for GaussianBlur with border 2017-11-17 13:15:15 +03:00
Alexander Alekhin
0eb1bfa874 Merge pull request #10099 from alalek:fix_js_tests 2017-11-17 09:16:34 +00:00
Maksim Shabunin
5ebb234746 cmake: simplified configuration output 2017-11-17 11:57:49 +03:00
Wu Zhiwen
394101d6ed dnn(ocl4dnn): Fix relu fusion bug
Incorrect type of negative_slope result in this bug.

Also and OCL test for darknet to validate this patch.

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-11-17 16:21:56 +08:00
Alexander Alekhin
3c6983a2bd Merge pull request #10008 from Smorodov:master 2017-11-17 05:41:18 +00:00
Sayed Adel
56bda8917d core:vsx Fix vec_packs in gcc-5 2017-11-16 21:54:56 +00:00
Alexander Alekhin
6936ec7dbd Merge pull request #10094 from amroamroamro:mingw-pkgconfig-fix 2017-11-16 19:39:33 +00:00
Maksim Shabunin
e730048f69 Merge pull request #10078 from justdoitqd:master 2017-11-16 15:20:44 +00:00
Maksim Shabunin
751cee8e67 Merge pull request #9907 from seiko2plus:vsxFixesImproves 2017-11-16 15:20:16 +00:00
Jcrist99
0608227e10 Merge pull request #9698 from abratchik:parse.doxygen
Support @deprecated tag in java wrappers (#9698)
2017-11-16 16:48:12 +03:00
Alexander Alekhin
2210ed4fdd js: fix tests (qunit -> node-qunit) 2017-11-16 15:00:33 +03:00
Alexander Alekhin
65061948af Merge pull request #10091 from alalek:build_python_reduce_global_symbols 2017-11-16 10:17:39 +00:00
Alexander Alekhin
55dabd2858 Merge pull request #10097 from wzw-intel:tuning_time 2017-11-16 09:34:42 +00:00
Wu Zhiwen
88e6daa315 dnn(ocl4dnn): Fix wrong measurement for tuning time
convolution kernel use default queue to run, so that ocl::Timer
, to measure the kernel run time, should use the default queue too.
Also remove useless parameter for convolve()

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-11-16 13:09:57 +08:00
Alexander Alekhin
baff521b63 imgproc(Canny): eliminate unnecessary operations
drop manual loop unrolling:
- don't block compiler optimizations
- no effect on i5
2017-11-15 19:29:59 +00:00
Amro
bbba9ac121 fix pkg-config generation for mingw 2017-11-15 18:54:46 +02:00
Alexander Alekhin
1fbdca83f5 Merge pull request #10083 from alalek:core_intrinsics_load_low 2017-11-15 16:08:56 +00:00
Alexander Alekhin
3a0039d204 core(intrinsics): v_load_low 2017-11-15 16:04:18 +03:00
Alexander Alekhin
aa70199ce1 build: avoid exporting of unnecessary symbols from Python bindings 2017-11-15 13:21:35 +03:00
Akhilesh Kumar
fcdd833059 Merge pull request #10056 from akhilesh-k:master
Added Python setup docs for Ubuntu Machines (#10056)
2017-11-14 13:44:01 +03:00
Alexander Alekhin
ba940dec38 Merge pull request #10073 from alalek:cmake_fix_overiding_compile_options 2017-11-13 11:26:13 +00:00
Alexander Alekhin
42f449880c Merge pull request #10068 from paroj:fs_doc 2017-11-13 09:18:42 +00:00
Simon Guo
2610a47c89 core:ppc Fix 2 interleave logic errors in vsx_utils.hpp
When elements are 64 bits, the vec_st_interleave()/vec_ld_deinterleave()
doesn't interleave 4 elements correctly.

For vec_st_interleave(), following is saved into mem:
	a0 b0 a1 b1 c0 d0 c1 d1
     -> we expected:
	a0 b0 c0 d0 a1 b1 c1 d1

for vec_ld_deinterleave(), following is loaded into a b c d for memory
string { 1 2 3 4 5 6 7 8 }:
	a: 1 3
	b: 2 4
	c: 5 7
	d: 6 8
   -> we expected:
   	a: 1 5
	b: 2 6
	c: 3 7
	d: 4 8

This patch corrects this behavior.

Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
2017-11-13 12:47:10 +08:00
Li Peng
55260a8d3c reshape mat before doing computation in fc layer
Signed-off-by: Li Peng <peng.li@intel.com>
2017-11-13 09:29:50 +08:00
Alexander Alekhin
43e4e1b624 cmake: drop amending of compilation options
Allow to specify optimization level via CMake.
2017-11-12 11:12:27 +03:00
Alexander Alekhin
e89501a3ad Merge pull request #10072 from sturkmen72:upd_lsd_cpp 2017-11-12 07:11:34 +00:00
Suleyman TURKMEN
992a81dcaa Update lsd.cpp 2017-11-11 22:26:44 +03:00
Florian Echtler
2e772510ea Merge pull request #10050 from floe/android-studio-3.3.1
Add Android Mat constructor with support for native buffer (#10050)
2017-11-10 19:35:32 +00:00
Alexander Alekhin
c6fb99357c Merge pull request #10057 from LaurentBerger:ParaCalcError 2017-11-10 19:04:36 +00:00
Pavel Rojtberg
7190028b23 FileStorage: use copydoc to add base64 info to constructor 2017-11-10 13:06:36 +01:00
Alexander Alekhin
bafdc44d37 Merge pull request #10061 from Sahloul:dnn_torch_fix 2017-11-10 05:05:52 +00:00
Alexander Alekhin
1af16afb89 Merge pull request #10062 from alalek:gtest_show_params 2017-11-10 05:04:55 +00:00
LaurentBerger
b9cf65e905 Parallel version of calcError in statmodel 2017-11-09 21:29:06 +01:00
Alexander Alekhin
8a3a75cc16 Merge pull request #9882 from pengli:ocl4dnn 2017-11-09 18:54:43 +00:00
Alexander Alekhin
fbe18e80f6 ts: dump test parameters value 2017-11-09 19:11:49 +03:00
Hamdi Sahloul
06bda58a2c DNN Torch - workaround when torch importer is disabled 2017-11-10 00:44:06 +09:00
Alexander Alekhin
e89ae986fa Merge pull request #10053 from terfendail:intersectconvex_fix 2017-11-09 11:05:56 +00:00
Li Peng
8f99083726 Add new layer forward interface
Add layer forward interface with InputArrayOfArrays and
OutputArrayOfArrays parameters, it allows UMat buffer to be
processed and transferred in the layers.

Signed-off-by: Li Peng <peng.li@intel.com>
2017-11-09 15:59:39 +08:00
Alexander Alekhin
51cef2651e Merge pull request #10048 from alalek:fix_macos_pkg_config 2017-11-08 19:01:06 +00:00
Vitaly Tuzov
0205238dca Fix for intersectConvexConvex nested contours check 2017-11-08 20:27:07 +03:00
Fakabbir Amin
a0c658b012 Merge pull request #9979 from fakabbir:ImproveDoc
* Improve Documentation
Fixes Spelling Mistakes.
2017-11-08 16:55:48 +00:00
Alexander Alekhin
22dfc1daf1 Merge pull request #10051 from sturkmen72:upd_grfmt_gdal_cpp 2017-11-08 16:48:04 +00:00
Suleyman TURKMEN
e51a8e047c update grfmt_gdal.cpp 2017-11-08 17:47:43 +03:00
Alexander Alekhin
0a7c60b439 Merge pull request #10047 from meganetaaan:master
Fix sample code in js_tutorials
2017-11-08 14:13:23 +00:00
Alexander Alekhin
a0e1def83b cmake: fix pkg-config generation for MacOSX 2017-11-08 16:06:48 +03:00
Shinya Ishikawa
2fc1edfc96 Fix sample code in js_tutorials 2017-11-08 21:57:00 +09:00
Alexander Alekhin
3921fab285 Merge pull request #10037 from alalek:update_gitignore
git: .gitignore update
2017-11-07 19:59:53 +00:00
Alexander Alekhin
48ed769b18 Merge pull request #10036 from alalek:fix_ocl4dnn_invalid_kernel 2017-11-07 19:17:21 +00:00
Alexander Alekhin
bffe254a81 Merge pull request #10003 from sturkmen72:documentation_updates 2017-11-07 16:52:15 +00:00
Suleyman TURKMEN
63fb79b519 updates documentation and samples 2017-11-07 19:21:21 +03:00
Alexander Alekhin
c51567ae45 git: .gitignore update
ignore all "dot" files/directories by default.
'ignored' files can be added via 'git add -f' command if necessary.
2017-11-07 17:24:48 +03:00
Alexander Alekhin
97181a90ba dnn(ocl4dnn/conv): bailout on missing kernel configuration 2017-11-07 17:02:17 +03:00
Alexander Alekhin
981009ac1f Merge pull request #9999 from mshabunin:fix-gcc72-warnings 2017-11-07 13:37:25 +00:00
Alexander Alekhin
96aebbe7f9 Merge pull request #9970 from mshabunin:media-sdk-convert 2017-11-07 13:37:07 +00:00
Alexander Alekhin
ed71f62181 Merge pull request #10002 from alalek:cmake_ios_disable_ipp 2017-11-07 13:35:16 +00:00
Alexander Alekhin
888d0cda40 Merge pull request #10001 from alalek:cmake_exclude_java_from_cpp_modules 2017-11-07 13:35:00 +00:00
Alexander Alekhin
4085bbf758 Merge pull request #10025 from Mixaill:msvs-2017u5 2017-11-07 13:26:04 +00:00
Alexander Alekhin
49f214b275 Merge pull request #10031 from meganetaaan:doc-typo-js
Fix typo in js_tutorials
2017-11-07 11:00:47 +00:00
Alexander Alekhin
8e21f808be cmake: allow custom OpenCV_ARCH / OpenCV_RUNTIME values 2017-11-07 13:55:13 +03:00
Alexander Alekhin
ac22d3c817 cmake: MSVC_VERSION use pattern matching 2017-11-07 13:52:06 +03:00
Shinya Ishikawa
afa633b7bc Fix typo in js_tutorials 2017-11-06 21:30:33 +09:00
Mikhail Paulyshka
62737c777c cmake: add support for MSVS 2017 update 5 2017-11-04 23:52:37 +03:00
Iago Suárez
42d942e19c Clearing data into the detect method of the class cv::LineSegmentDetectorImpl 2017-11-04 17:12:20 +01:00
Cartucho
7267e94be7 Merge pull request #9736 from Cartucho/const_and_class_to_json
* Adding constants to json file

* adding sub-module to constants name

* adding namespace to functions

* adding namespace to classes

* remove namespace from methods

* static methods

* python signatures generation

* python: more fixes for signatures generation

Python names existence can be checked via command:

    python -c "import cv2 as cv; print(repr(<py_name>))"
2017-11-04 06:38:18 +03:00
Maksim Shabunin
184daa155f Fixed minor issues reported by GCC 7.2 2017-11-03 18:06:39 +03:00
Alexander Alekhin
d7a1d2230f Merge pull request #9988 from alalek:ocl_verbose_api_errors 2017-11-03 15:05:46 +00:00
Alexander Alekhin
9c4f0a984f ocl: drop CV_OclDbgAssert 2017-11-03 13:31:37 +03:00
Alexander Alekhin
8fb48c09f7 ocl: improve debug information 2017-11-03 13:31:37 +03:00
Alexander Alekhin
6e4f9433d0 Merge pull request #9998 from alalek:ocl_fix_dnn_softmax_9991 2017-11-03 09:16:39 +00:00
Alexander Alekhin
c624967049 Merge pull request #10007 from alalek:videoio_gst_mjpeg_fix 2017-11-02 18:27:00 +00:00
Dmitry Kurtaev
20a2dc6ac5 Fix multiple inputs models from Caffe.
Fixed Concat optimization.
2017-11-02 18:55:08 +03:00
Alexander Alekhin
b1b2528e50 videoio: improve condition for MJPEG gstreamer sink 2017-11-02 18:27:30 +03:00
Alexander Alekhin
1bd865120c cmake: disable IPP on iOS
IPP is used on iPhoneSimulator only.
2017-11-02 17:36:53 +03:00
Alexander Alekhin
bacc96f4e8 dnn(ocl): fix softmax global/local size consistency 2017-11-02 17:08:40 +03:00
Alexander Alekhin
cc3f9323bb cmake: exclude opencv_java (JNI) from OpenCV C++ modules list
for non-ANDROID platforms
2017-11-02 17:06:12 +03:00
Andrey Smorodov
c964aa3333 Matrices in colorizeSegmentation were not initialized. 2017-11-02 15:47:45 +03:00
Alexander Alekhin
f9ac1665b6 Merge pull request #9983 from dkurt:fix_halide_copy_to_device 2017-11-02 12:01:39 +00:00
Alexander Alekhin
942672ad91 Merge pull request #9995 from alalek:ocl_fix_moments_9990 2017-11-02 11:45:09 +00:00
Alexander Alekhin
9cceccd645 Merge pull request #9993 from alalek:ocl_fix_gemm_9989 2017-11-02 11:44:41 +00:00
Alexander Alekhin
47ae5197a9 test: extract OpenCL Moments tests, drop 'coi' parameter 2017-11-02 13:37:58 +03:00
Alexander Alekhin
c9c759f700 ocl: fix moments global_size (should be >= local_size) 2017-11-02 13:37:57 +03:00
Alexander Alekhin
7db612a545 core(ocl): fix parameters for 'intelblas_gemm_buffer_NT' kernel 2017-11-02 12:50:32 +03:00
Alexander Alekhin
18a4ced07a Merge tag '3.3.1-cvsdk' 2017-11-01 16:06:00 +03:00
Vitaly Tuzov
b9b553b8bc Add more details to drawContour description 2017-11-01 16:01:12 +03:00
Maksim Shabunin
0c79f4a00f MediaSDK: fixed Linux build, improved BGR<->NV12 conversions 2017-11-01 14:14:45 +03:00
Vadim Pisarevsky
cc626a3b5a Merge pull request #9627 from dtmoodie:pyrlk_bugfix 2017-11-01 11:03:09 +00:00
Dmitry Kurtaev
14af2a0c0c Fixed Halide's copy_to_device invocation 2017-11-01 14:01:54 +03:00
Vadim Pisarevsky
bc348eb8ab Merge pull request #9963 from dkurt:fix_caffe_shrinker 2017-10-31 12:27:19 +00:00
Alexander Alekhin
6e4dacc0b3 Merge pull request #9971 from csukuangfj:fix-doc 2017-10-31 10:03:54 +00:00
Dmitry Kurtaev
e1ebc4e991 Specify layer types for Caffe FP32->FP16 weights converter 2017-10-31 12:31:40 +03:00
KUANG Fangjun
67acfc6e25 improve doc. 2017-10-31 10:30:01 +01:00
Vadim Pisarevsky
87984f2c6a Merge pull request #9854 from opalmirror:test_stereo_min_disparity_master 2017-10-31 09:28:54 +00:00
Vadim Pisarevsky
15df161b22 Merge pull request #9959 from dkurt:reset_detection_outputs 2017-10-31 09:26:42 +00:00
Vadim Pisarevsky
988a5626f6 Merge pull request #9969 from mshabunin:dispatch-vs-folders 2017-10-31 09:20:52 +00:00
Alexander Alekhin
22496742b4 Merge pull request #9864 from mapreri:multiarch 2017-10-30 15:43:42 +00:00
Alexander Alekhin
bc9c9abab0 Merge pull request #9877 from mapreri:non-linux 2017-10-30 15:41:36 +00:00
Alexander Alekhin
c6fc7ccb5e Merge pull request #9968 from alalek:fix_9960 2017-10-30 15:33:46 +00:00
Maksim Shabunin
93813fec6e VisualStudio: Added solution folders for dispatched optimization targets 2017-10-30 18:30:20 +03:00
Alexander Alekhin
7809c4156f core(ocl): workaround CL_OUT_OF_RESOURCES error
Flush deallocation queue before calling map/unmap
2017-10-30 17:54:56 +03:00
Alexander Alekhin
37d99201ca Merge pull request #9961 from pushkalkatara:patch-1 2017-10-30 14:15:19 +00:00
Pushkal Katara
5feb1c94a7 Documentation Update
Resolves - https://github.com/opencv/opencv/issues/9928
2017-10-30 17:55:40 +05:30
Vadim Pisarevsky
fd1eb63fee Merge pull request #9703 from Ajacmac:patch1 2017-10-30 10:03:03 +00:00
Fakabbir Amin
cd428fb798 Error in the documentation for cv::getRectSubPix. #9788 (#9871)
* Error in the documentation for cv::getRectSubPix. #9788
The function name is corrected to GetRectSubPix since, it uses the notation
of src, dst and center. Also added the number of channel assertion criteria.

* Error in the documentation for cv::getRectSubPix. #9788
Replace dst with patch in the formula, reverted function name to
getRectSubPix, removed BorderTypes comment line due to no explicit call
to the function found.

* Error in the documentation for cv::getRectSubPix. #9788
Replace dst with patch in the formula, reverted function name to
getRectSubPix, removed BorderTypes comment line due to no explicit call
to the function found.
2017-10-30 13:04:20 +03:00
Vadim Pisarevsky
476c513447 Merge pull request #9955 from alalek:cmake_openblas_support 2017-10-30 09:59:12 +00:00
Vadim Pisarevsky
639b800787 Merge pull request #9941 from catree:improve_dnn_samples 2017-10-30 09:58:18 +00:00
Vadim Pisarevsky
712689e81a Merge pull request #9865 from ryanfox:patch-4 2017-10-30 09:54:48 +00:00
Dmitry Kurtaev
03cefa7bfe Set zero confidences in case of no detections 2017-10-30 10:17:57 +03:00
Sayed Adel
2dc76d5009 cmake: Added Power toolchain 2017-10-28 17:50:43 +00:00
Sayed Adel
def444d99f core: Several improvements to Power/VSX
- changed behavior of vec_ctf, vec_ctu, vec_cts
  in gcc and clang to make them compatible with XLC
- implemented most of missing conversion intrinsics in gcc and clang
- implemented conversions intrinsics of odd-numbered elements
- ignored gcc bug warning that caused by -Wunused-but-set-variable in rare cases
- replaced right shift with algebraic right shift for signed vectors
  to shift in the sign bit.
- added new universal intrinsics v_matmuladd, v_rotate_left/right
- avoid using floating multiply-add in RNG
2017-10-28 17:46:12 +00:00
Alexander Alekhin
5f80e42dac cmake: update OpenBLAS support
- reorder path HINTS to avoid conflicts with other LAPACK libraries
- add extern "C" { } to avoid generation of C++ symbols
2017-10-28 10:17:37 +03:00
Alexander Alekhin
7b0d2d189f Merge pull request #9951 from alalek:fix_bilateral_f32_simd 2017-10-27 16:43:20 +00:00
Vadim Pisarevsky
e0e40405ed Merge pull request #9847 from wzw-intel:ocl4dnn_fusion 2017-10-27 13:59:46 +00:00
Vadim Pisarevsky
ff037ebe5f Merge pull request #9845 from dkurt:fast_neural_style_models 2017-10-27 13:59:02 +00:00
Alexander Alekhin
91c0b13743 Merge pull request #9922 from alalek:ts_markdown_table
ts(misc): support tables exporting in markdown format
2017-10-27 17:01:18 +03:00
Vadim Pisarevsky
eb9fcf4f08 Update windows_visual_studio_Opencv.markdown 2017-10-27 16:26:42 +03:00
Vadim Pisarevsky
1f214d232d Merge pull request #9952 from catree:add_resnet_ssd_face.cpp 2017-10-27 13:19:41 +00:00
Vadim Pisarevsky
ede39b85f6 Merge pull request #9947 from sovrasov:floodfill_docs 2017-10-27 13:06:11 +00:00
Vadim Pisarevsky
ff190b1ef4 Merge pull request #9802 from Nickolays:Fix#9797 2017-10-27 13:00:34 +00:00
Vadim Pisarevsky
1a495a5817 Merge pull request #9875 from terfendail:fast_avx 2017-10-27 12:53:59 +00:00
Vadim Pisarevsky
09d283a39d Merge pull request #9897 from Bhanudutta:bugfix_1 2017-10-27 12:50:44 +00:00
Vadim Pisarevsky
8b1b126e3e Merge pull request #9892 from terfendail:v4l_custom 2017-10-27 11:57:18 +00:00
Vadim Pisarevsky
5384d2f090 Merge pull request #9880 from dkurt:caffe_ceil_mode 2017-10-27 11:51:46 +00:00
catree
b4813e6bdf Add C++ DNN face detection sample: resnet_ssd_face.cpp 2017-10-27 13:30:01 +02:00
Dmitry Kurtaev
4b52b8df34 Layers for fast-neural-style models: https://github.com/jcjohnson/fast-neural-style 2017-10-27 14:26:45 +03:00
Alexander Alekhin
60cbc46da1 Merge pull request #9886 from mshabunin:remove-cmake-submodules 2017-10-27 11:23:19 +00:00
Vadim Pisarevsky
9e6ef99422 Merge pull request #9850 from klchang:master 2017-10-27 11:22:28 +00:00
Vadim Pisarevsky
58a83e99c0 Merge pull request #9839 from terfendail:features/python_wrapper/surface_matching_cleanup 2017-10-27 11:22:10 +00:00
Alexander Alekhin
cc9ab7e582 imgproc: fix bilateral filter SIMD 32f optimization 2017-10-27 14:20:13 +03:00
Vadim Pisarevsky
bc93775385 Merge pull request #9862 from sovrasov:dnn_nms 2017-10-27 11:19:57 +00:00
Vadim Pisarevsky
b4367c92f3 Merge pull request #9889 from IgWod:add-const-getviewerpose 2017-10-27 11:16:19 +00:00
Vadim Pisarevsky
825c0ffdb4 Merge pull request #9874 from dkurt:fix_identity_permute_layer 2017-10-27 11:11:48 +00:00
Vadim Pisarevsky
69f2590359 Merge pull request #9921 from dkurt:fix_prelu_after_fully_connected 2017-10-27 11:10:59 +00:00
Vadim Pisarevsky
7060ee4d00 Merge pull request #9923 from savuor:fitellipse_enable_tests 2017-10-27 11:09:41 +00:00
Vadim Pisarevsky
390be6d5b5 Merge pull request #9936 from ryanfox:patch-5 2017-10-27 11:08:44 +00:00
Vladislav Sovrasov
a385fff3bf imgproc: clarify usage of the mask in floodfill 2017-10-27 14:06:24 +03:00
Vadim Pisarevsky
7b8fb64f21 Merge pull request #9939 from alalek:fix_dnn_getUMat_crash 2017-10-27 11:06:22 +00:00
Vadim Pisarevsky
0c291c7768 Merge pull request #9940 from catree:fix_issue_9925 2017-10-27 11:05:07 +00:00
Vladislav Sovrasov
5bf39ceb5d dnn: handle 4-channel images in blobFromImage (#9944) 2017-10-27 14:06:53 +03:00
catree
48e07437f0 Add camera/video/image input for C++ DNN object detection samples. Add nice display and computation time. 2017-10-27 11:57:06 +02:00
Alexander Alekhin
e5766513a4 Merge pull request #9946 from alalek:fix_stitching_suft_test 2017-10-26 15:37:53 +00:00
Alexander Alekhin
9cdeb6dfbf ocl: increase SURF stitching test tolerance
OpenCL SURF implementation is unstable
2017-10-26 13:03:44 +03:00
catree
f9aa411c92 Fix double definitions, correct comment. 2017-10-25 18:11:31 +02:00
Alexander Alekhin
436a1f72a5 dnn: fix sporadic crashes in getUMat()
Incorrect "total" buffer size calculated in StdMatAllocator::allocate() due wrong step values.
2017-10-25 18:07:05 +03:00
Vladislav Sovrasov
7e3e9144de dnn: add an accuracy test for NMS 2017-10-25 13:40:56 +03:00
Vladislav Sovrasov
c704942b8a dnn: add a documentation for NMS, fix missing experimantal namespace 2017-10-25 13:35:49 +03:00
Vladislav Sovrasov
acedb4a579 dnn: make NMS function public 2017-10-25 13:35:49 +03:00
Ryan Fox
db0a159229 copyediting on python object detection tutorial
clarify some passages, fix grammar errors
2017-10-24 21:17:39 -05:00
Vitaly Tuzov
2eb61a4a99 AVX2 optimized implementation of FAST corner tracking migrated to separate file 2017-10-24 20:00:48 +03:00
Vitaly Tuzov
868ad16041 Python wrappers for Vec and Matx 2017-10-23 18:50:49 +03:00
Alexander Alekhin
21c8e6d02d Merge tag '3.3.1' 2017-10-23 18:42:41 +03:00
Alexander Alekhin
a871f9e4f7 Merge branch 'update_version' into release 2017-10-23 18:41:12 +03:00
Rostislav Vasilikhin
fb5cd42c6b enabled tests for fitEllipse since the issue is fixed 2017-10-23 16:28:49 +03:00
Dmitry Kurtaev
a36ebaecdc PReLU layer for multidimensional input 2017-10-23 16:13:03 +03:00
Maksim Shabunin
bf418ba342 Merge pull request #9917 from alalek:ocl_cache_program_failures 2017-10-23 12:25:25 +00:00
Maksim Shabunin
be9767e014 Merge pull request #9919 from alalek:ocl_fix_macosx_invalid_options 2017-10-23 12:24:42 +00:00
Maksim Shabunin
ab5e09e428 Merge pull request #9913 from alalek:fix_fvisibility_regression 2017-10-23 12:22:16 +00:00
Maksim Shabunin
607231641f Merge pull request #9914 from alalek:fix_cmake_xcode 2017-10-23 12:21:35 +00:00
Maksim Shabunin
91323549f4 Merge pull request #9906 from sturkmen72:fix_grfmt_gdal 2017-10-23 12:20:08 +00:00
Alexander Alekhin
9e9881aacc ts(misc): support tables exporting in markdown format
basic support only (no symbol escapes/sanitizing)
2017-10-23 14:57:45 +03:00
Alexander Alekhin
734ea77c9a ocl(macosx): fix CL_INVALID_BUILD_OPTIONS for gemm programs
MacOSX OpenCL compiler is very strict to whitespace issues
2017-10-23 13:56:11 +03:00
Alexander Alekhin
d96cac1341 ocl: cache program build failures
To prevent unnecessary compiler invocations
2017-10-23 13:46:56 +03:00
Alexander Alekhin
0622146a93 cmake: disable generation of pkg-config file during Xcode build 2017-10-23 12:31:20 +03:00
Alexander Alekhin
db980b0eca cmake: fix '-fvisibility' options regression
CMAKE_COMPILER_ID => CMAKE_CXX_COMPILER_ID
2017-10-23 12:18:52 +03:00
Suleyman TURKMEN
d1c5e79ec3 Update grfmt_gdal.cpp 2017-10-22 19:01:34 +03:00
Alexander Alekhin
cca99bf824 Merge pull request #9903 from blendin:oob_write_1 2017-10-22 07:27:15 +00:00
Bhanudutta
dcaad315e7 Edit spelling mistake in my previous pull request 2017-10-22 12:37:19 +05:30
blendin
08a5fe3661 Fix out of bounds write 2017-10-21 12:12:53 -07:00
Bhanudutta
c95f3eff6e Added a couple of comments to the interface of traincascade.cpp in order to tell user about the usage of traincascade.cpp file and to learn how Github submitting works 2017-10-21 10:19:38 +05:30
Alexander Alekhin
9ae86a922c Merge pull request #9887 from mshabunin:upgrade-tbb 2017-10-20 11:44:00 +00:00
Alexander Alekhin
276459e57e Merge pull request #9890 from dkurt:fix_torch_test 2017-10-20 11:43:16 +00:00
Maksim Shabunin
223830a5ee Updated TBB package to 2018.1 2017-10-20 12:16:06 +03:00
Dmitry Kurtaev
410d44d67d Binary data for batch normalization test from Torch 2017-10-20 12:01:42 +03:00
Igor Wodiany
d7cbe6e947 Add const to getViewerPose()
getViewerPose() doesn't modify an object of the class so it can be
made const. It also makes this method consistent with other getters
in the class as they are defined as const.
2017-10-19 22:05:49 +01:00
Vitaly Tuzov
ad051cdd99 Fixed CAP_PROP_FORMAT evaluation in case CvCaptureCAM_V4L returns CV_16U image 2017-10-19 20:51:00 +03:00
Maksim Shabunin
b1fe298764 Removed cmake submodules and contrib_world references 2017-10-19 17:34:59 +03:00
Maksim Shabunin
a6c02af099 Merge pull request #9878 from alalek:doc_cleanup 2017-10-18 14:50:12 +00:00
Maksim Shabunin
c97c1a2454 Merge pull request #9879 from alalek:fix_build 2017-10-18 14:49:44 +00:00
Maksim Shabunin
9b1b281c7b Merge pull request #9881 from alalek:ocl_timer_simplify 2017-10-18 14:49:21 +00:00
Alexander Alekhin
185faf99bd ocl: simplify ocl::Timer interface 2017-10-18 16:01:21 +03:00
Dmitry Kurtaev
b903ff8992 Ceil mode from experimental version of Caffe, https://github.com/BVLC/caffe/pull/3057 2017-10-18 14:04:53 +03:00
Alexander Alekhin
face2ea612 3rdparty: suppress warnings 2017-10-18 13:08:01 +03:00
Alexander Alekhin
3fd03964a3 fix code style 2017-10-18 13:08:01 +03:00
Alexander Alekhin
ccea108806 doc: filter out OpenCL auto-generated runtime headers 2017-10-18 09:38:22 +03:00
Vitaly Tuzov
8d5a5d5ceb AVX2 optimizations for FAST corner tracking provided by Victoria Zhislina 2017-10-17 18:53:15 +03:00
Dmitry Kurtaev
a3a446c197 Output blobs shapes initialization in case of identity permutation (NCHW->NCHW) 2017-10-17 17:15:25 +03:00
Alexander Alekhin
c63b4433f4 Merge pull request #9872 from alalek:fix_documentation 2017-10-17 13:25:42 +00:00
Alexander Alekhin
505c90e104 Merge pull request #9866 from mapreri:support-dynamic-mathjax 2017-10-17 13:23:40 +00:00
Mattia Rizzolo
97b8a089c7 doc: Make MATHJAX_RELPATH configurable through cmake
Signed-off-by: Mattia Rizzolo <mattia@mapreri.org>
2017-10-17 13:08:49 +02:00
Alexander Alekhin
69e5ac6f02 doc: fix youtube videos handling 2017-10-17 13:50:56 +03:00
Ryan Fox
3da9598add fix and clarify several grammar issues 2017-10-16 19:07:17 -05:00
Mattia Rizzolo
437da0a3d9 Use CMake's ${CMAKE_INSTALL_LIBDIR} variable to decide where to place the built libraries
The typical situation where the usual, plain 'lib' is not wanted is in a
multiarch system, that allows installation of the same library built for
multiple architectures.
Use the standard ${CMAKE_INSTALL_LIBDIR} variable (coming from the
GNUInstallDirs module) to figure where to put the built libraries.

Signed-off-by: Mattia Rizzolo <mattia@mapreri.org>
2017-10-17 00:55:08 +02:00
Mattia Rizzolo
d026d7dcfb Fix build for non-linux architectures but still glibc-based
Exampls of these are gnu/kfreebsd and gnu/hurd, both available as
unofficial Debian ports.

They don't define __linux__ (as they are non-linux…) but still define
__GLIBC__, so check on that.

Signed-off-by: Mattia Rizzolo <mattia@mapreri.org>
2017-10-17 00:45:27 +02:00
Alexander Alekhin
110af09bf9 Merge pull request #9853 from catree:fix_dnn_samples_python3 2017-10-16 16:18:22 +00:00
Alexander Alekhin
73af899b7c Merge pull request #9860 from mshabunin:fix-static-9 2017-10-16 14:39:08 +00:00
Wu Zhiwen
2d8f2c2aea dnn(ocl4dnn): add fusion support
ocl4dnn supports following fusion styles:
Conv + [BN] + [Scale] + [ReLU/PReLU]

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-10-16 19:18:36 +08:00
Maksim Shabunin
b066dd36ff Fixed uninitialized class fields 2017-10-16 13:47:43 +03:00
Vadim Pisarevsky
1563300197 Merge pull request #9833 from tomoaki0705:universalMathFuncs 2017-10-16 10:46:56 +00:00
Vadim Pisarevsky
2914443685 Merge pull request #9848 from jet47:features2d-optional-flann-dep 2017-10-16 10:45:16 +00:00
Vadim Pisarevsky
fef1f9b0a7 Merge pull request #9859 from ryanfox:patch-3 2017-10-16 10:44:07 +00:00
Vadim Pisarevsky
2808bea7fa Merge pull request #9857 from americast:mat_fix 2017-10-16 10:43:37 +00:00
Gregory Morse
d30a0c6f03 Merge pull request #9856 from GregoryMorse:patch-1
* Update OpenCVCompilerOptimizations.cmake

Neon not supported on MSVC ARM breaking build fix

* Update OpenCVCompilerOptimizations.cmake

Whitespace

* Update intrin.hpp

Many problems in MSVC ARM builds (at least on VS2017) being fixed in this PR now.

C:\Users\Gregory\DOCUME~1\MYLIBR~1\OPENCV~3\opencv\sources\modules\core\include\opencv2/core/hal/intrin.hpp(444): error C3861: '_tzcnt_u32': identifier not found

* Update hal_replacement.hpp

Passing variadic expansion in a macro to another macro does not work properly in MSVC and a famous known workaround is hereby applied.  Discussion of it: https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly
Only needed the fix for ARM builds: TEGRA_ macros are used for cv_hal_ functions in the carotene library.

C:\Users\Gregory\Documents\My Libraries\opencv330\opencv\sources\modules\core\src\arithm.cpp(2378): warning C4003: not enough actual parameters for macro 'TEGRA_ADD'
C:\Users\Gregory\Documents\My Libraries\opencv330\opencv\sources\modules\core\src\arithm.cpp(2378): error C2143: syntax error: missing ')' before ','
C:\Users\Gregory\Documents\My Libraries\opencv330\opencv\sources\modules\core\src\arithm.cpp(2378): error C2059: syntax error: ')'

* Update hal_replacement.hpp

All hal_replacement's using carotene\hal\tegra_hal.hpp TEGRA_ functions as macros preprocessed by variadic macros should be changed, identical as was done in core.
C:\Users\Gregory\Documents\My Libraries\opencv330\opencv\sources\modules\imgproc\src\color.cpp(9604): warning C4003: not enough actual parameters for macro 'TEGRA_CVTBGRTOBGR'
C:\Users\Gregory\Documents\My Libraries\opencv330\opencv\sources\modules\imgproc\src\color.cpp(9604): error C2059: syntax error: '=='

* Update OpenCVCompilerOptimizations.cmake

* Update hal_replacement.hpp

* Update hal_replacement.hpp
2017-10-16 12:12:35 +03:00
Ryan Fox
0246cffc34 Fix up grammatical errors in python tutorial 2017-10-15 22:59:48 -05:00
catree
22dece8146 Fix DNN samples for compatibility with Python 3.
Add PyInt_Check in pyopencv_dnn.hpp.
2017-10-15 20:24:56 +02:00
dtmoodie
4566105578 fixed non c++11 warnings. 2017-10-15 12:12:00 -04:00
Alexander Alekhin
fee2049642 Merge pull request #9855 from IgWod:extract-vector-typedefs 2017-10-15 14:29:21 +00:00
Igor Wodiany
e2499e5b2f Move vector_size_t and vector_vector_Mat
These two typdefs are not compiled when BUILD_opencv_dnn is set to
false, however there are other modules that uses these typedef so
it may cause build errors. Moving typedef to the python module
ensures they are always defined.
2017-10-14 19:06:15 +01:00
Sayan Sinha
60bcb16ca8 Fix typo in mat.hpp 2017-10-14 21:46:11 +05:30
Tomoaki Teshima
2a781bb616 remove raw SSE2/NEON implementation from mathfuncs.cpp
* replace the implementation by universal intrinsic
  * make sure no degradation happens on ARM platform
2017-10-15 00:24:31 +09:00
James Perkins
4eb9f175a4 test_stereomatching.cpp: validate min disparity affect on valid ROI 2017-10-13 13:36:33 -07:00
Nickola
b2b56b6896 Fix Issue #9797 minEnclosingCircle from three points
and add test for only 3 pts
2017-10-13 19:26:54 +03:00
Alexander Alekhin
5ed354221c Merge pull request #9851 from alalek:cmake_fix_lapack_mkl_detection 2017-10-13 15:33:36 +00:00
Alexander Alekhin
827c7515c9 Merge pull request #9842 from alalek:fix_dnn_experimental 2017-10-13 15:25:07 +00:00
Alexander Alekhin
23f26fb4a8 cmake: fix LAPACK/MKL detection 2017-10-13 15:40:37 +03:00
klchang
d4ef5bc16a fix the possible bug for key mapping in Linux GTK library 2017-10-13 20:05:55 +08:00
Vladislav Vinogradov
26fe8bd4f2 made flann dependency for features2d optional
it will allow to build features2d even if flann module is not available
2017-10-13 14:59:39 +03:00
Alexander Alekhin
4857cae6ed dnn: don't use "experimental_dnn_v1" namespace directly 2017-10-12 18:16:53 +03:00
Maksim Shabunin
1ba29cc95d Merge pull request #9834 from mshabunin:mediasdk-win-support 2017-10-12 12:08:54 +00:00
Alexander Alekhin
df5b2224d7 Merge pull request #9829 from pengli:ocl4dnn 2017-10-12 11:26:20 +00:00
Alexander Alekhin
f1fe873375 Merge pull request #9841 from alalek:naming_issue 2017-10-12 11:22:54 +00:00
Alexander Alekhin
b0c6bd0a5b build: resolve naming issue 2017-10-12 13:28:30 +03:00
Alexander Alekhin
4ae30ecdd9 Merge pull request #9838 from alalek:fix_ocl_world_build 2017-10-12 09:40:32 +00:00
Li Peng
937b8e4277 dnn(ocl4dnn): support log softmax in ocl4dnn
Signed-off-by: Li Peng <peng.li@intel.com>
2017-10-12 09:51:13 +08:00
Vadim Pisarevsky
e356ca2369 Merge pull request #9835 from sovrasov:blob_from_img_crop_opt 2017-10-11 17:18:40 +00:00
Vadim Pisarevsky
e955bcb872 Merge pull request #9824 from sturkmen72:upd_minEnclosingTriangle 2017-10-11 17:11:15 +00:00
Alexander Alekhin
88225eb65e ocl: fix world compilation on Windows 2017-10-11 19:04:42 +03:00
Alexander Alekhin
ec24091578 Merge pull request #9836 from lupustr3:pvlasov/external_ipp-iw_fix 2017-10-11 15:21:05 +00:00
Alexander Alekhin
024be9b8c9 Merge pull request #9818 from tz70s:issue#9570 2017-10-11 15:19:17 +00:00
Suleyman TURKMEN
af9c8377eb Update minarea.cpp 2017-10-11 17:52:23 +03:00
Suleyman TURKMEN
29c186a022 Update min_enclosing_triangle.cpp 2017-10-11 17:48:19 +03:00
Suleyman TURKMEN
baf9e32af3 Update imgproc.hpp 2017-10-11 17:37:38 +03:00
Vadim Pisarevsky
8b168175ec Merge pull request #9636 from dkurt:duplicate_lp_norm_layer 2017-10-11 13:36:14 +00:00
Maksim Shabunin
83655ba9be MediaSDK video backend: Windows support 2017-10-11 16:33:37 +03:00
Vadim Pisarevsky
0873ebb9b0 Merge pull request #9820 from sovrasov:text_detector_dnn 2017-10-11 13:31:46 +00:00
Vadim Pisarevsky
5e82c98a9f Merge pull request #9828 from berak:fix_c++17_9572 2017-10-11 13:31:18 +00:00
Vadim Pisarevsky
babd21c764 Merge pull request #9823 from alalek:dnn_halide_bypass_tbb_threads 2017-10-11 13:28:38 +00:00
Vladislav Sovrasov
47e1133e71 dnn: add crop flag to blobFromImage 2017-10-11 15:46:20 +03:00
Pavel Vlasov
a972f0d4ea Standalone IPP with IW fix; 2017-10-11 15:30:01 +03:00
Vladislav Sovrasov
f7175f5050 dnn: fix additional text boxes handling after the latest adaptations for TF 2017-10-11 14:04:48 +03:00
Alexander Alekhin
1ea1ff197d Merge pull request #9827 from ryanfox:patch-2 2017-10-11 10:58:05 +00:00
Alexander Alekhin
5ea8ea440b Merge pull request #9826 from p0wdrdotcom:master 2017-10-11 08:55:15 +00:00
Vladislav Sovrasov
050916fd6b dnn: modify priorBox layer 2017-10-11 11:43:50 +03:00
berak
ada753a54c fix c++17 namsespace issues 2017-10-11 09:50:22 +02:00
Ryan Fox
a96c5b5d90 fix some grammatical errors 2017-10-10 21:37:26 -05:00
Geoff McIver
b2d8e8c508 This statement was keeping HAAR cascades from leveraging opencl on nvidia devices. "localSize" on the featureEvaluator remains Size(0, 0) which sets the bool "use_ocl" to false. Adding this allows NVidia GPUs to leverage opencl HAAR Cascades 2017-10-11 09:32:38 +13:00
Suleyman TURKMEN
b2673a19cf Updates min_enclosing_triangle.cpp 2017-10-10 23:23:36 +03:00
Dmitry Kurtaev
905a9dada2 Removed LPNormalize layer. 2017-10-10 20:38:55 +03:00
Alexander Alekhin
3935e13603 dnn(halide): don't compile Halide via parallel_for_()
To avoid problem with reduced stack size of inner threads.
2017-10-10 18:06:03 +03:00
Vadim Pisarevsky
af8ed9d09f Merge pull request #9816 from opalmirror:fix_stereobm_mindisp_truncation_1 2017-10-10 14:23:02 +00:00
Vadim Pisarevsky
638a91f92f Merge pull request #9822 from alalek:fix_tbb_search 2017-10-10 14:22:00 +00:00
Vadim Pisarevsky
3562a05d90 Merge pull request #8940 from 678098:nonblocking_haar_detector_parallel_for 2017-10-10 13:51:40 +00:00
tz70s
6c1247b38c fix#9570: implement mat ptr for generic types
The original template based mat ptr for indexing is not implemented,
add the similar implementation as uchar type, but cast to
user-defined type from the uchar pointer.
2017-10-10 21:46:49 +08:00
Vadim Pisarevsky
b7ff9ddcdd Merge pull request #9705 from AlexeyAB:dnn_darknet_yolo_v2 2017-10-10 12:02:03 +00:00
Alexander Alekhin
25161fc56f tbb: don't search library in ENV{LD_LIBRARY_PATH}
ENV{LIBRARY_PATH} is enough
2017-10-10 14:18:28 +03:00
Vadim Pisarevsky
0739f28e56 Merge pull request #9786 from LaurentBerger:Histo3d 2017-10-10 10:58:34 +00:00
Vadim Pisarevsky
046045239c Merge pull request #9750 from dkurt:feature_dnn_tf_text_graph 2017-10-10 10:06:24 +00:00
Vadim Pisarevsky
7d55c09a9f Merge pull request #9763 from seiko2plus:addVsxCore 2017-10-10 10:00:31 +00:00
Vadim Pisarevsky
0be1f4a573 Merge pull request #9811 from dkurt:prelu_with_shared_channels 2017-10-10 09:57:51 +00:00
Alexander Alekhin
af4d6f34d8 OpenCV version '-cvsdk' 2017-10-10 12:29:57 +03:00
Alexander Alekhin
bd6fb497bc OpenCV version++
OpenCV 3.3.1
2017-10-10 12:29:57 +03:00
Alexander Alekhin
949ec486c5 experimental version++ 2017-10-10 12:29:57 +03:00
Maksim Shabunin
556768ead1 Merge pull request #9805 from alalek:ffmpeg_update 2017-10-10 09:02:02 +00:00
James Perkins
2cfe29276e fix StereoBM disparity map right margin truncation when minDisparities > 0 2017-10-09 14:51:36 -07:00
LaurentBerger
752f232335 It's done 2017-10-09 22:25:57 +02:00
Alexander Alekhin
92a0808379 Merge pull request #9815 from alalek:issue_9813 2017-10-09 20:08:00 +00:00
Alexander Alekhin
3ae7515955 qt: fix non-world builds 2017-10-09 22:23:05 +03:00
AlexeyAB
ecc34dc521 Added DNN Darknet Yolo v2 for object detection 2017-10-09 21:08:44 +03:00
Dmitry Kurtaev
eabf728682 PReLU layer from Caffe 2017-10-09 20:30:37 +03:00
Alexander Alekhin
29b0ef44aa Merge pull request #9810 from alalek:fix_js_build 2017-10-09 16:19:09 +00:00
Alexander Alekhin
3010cc5971 js: skip 'utils' headers 2017-10-09 16:14:01 +03:00
Vadim Pisarevsky
bfb12acde6 Merge pull request #9792 from alalek:port_9776 2017-10-09 12:46:06 +00:00
Vadim Pisarevsky
44699c59b3 Merge pull request #9799 from alalek:ocl_program 2017-10-09 12:43:46 +00:00
Vadim Pisarevsky
fee87ea3f7 Merge pull request #9800 from alalek:fix_build_msvs2010 2017-10-09 12:33:08 +00:00
Vadim Pisarevsky
6a80834ed4 Merge pull request #9803 from wzw-intel:ocl_timer 2017-10-09 12:11:22 +00:00
Vadim Pisarevsky
593329401a Merge pull request #9806 from mshabunin:fix-static-7 2017-10-09 12:09:55 +00:00
Maksim Shabunin
ef332dc550 Fixed and suppressed warnings produced by GCC 6.3.0 2017-10-09 13:52:07 +03:00
Alexander Alekhin
746d5f5021 Merge pull request #9790 from mevatron:patch-1 2017-10-09 10:46:50 +00:00
Alexander Alekhin
cb5bc1832b ffmpeg: update 3.3.4 2017-10-09 13:42:09 +03:00
Maksim Shabunin
5a22d81fe5 Fixed warnings produced by static analyzer 2017-10-09 13:37:18 +03:00
LaurentBerger
0a19b07055 Use @snippet 2017-10-09 10:59:30 +02:00
Wu Zhiwen
dbe9ee0924 ocl: simplify ocl::Timer
Use clFinish to gurantee commands completed, instead of waiting for events.

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
2017-10-09 13:48:38 +08:00
Sayed Adel
4b968d1fe2 Added universal intrinsic for VSX 2017-10-09 00:32:41 +00:00
Sayed Adel
d077778074 Added support for VSX 2017-10-09 00:32:29 +00:00
Alexander Alekhin
e615fafe2d build: fix MSVS2010 2017-10-08 23:32:22 +03:00
Dmitry Kurtaev
e4aa39f9e5 Text TensorFlow graphs parsing. MobileNet-SSD for 90 classes. 2017-10-08 22:25:29 +03:00
Alexander Alekhin
8ac2c5d620 Merge pull request #9796 from lzx1413:patch-1 2017-10-08 17:32:49 +00:00
Alexander Alekhin
6be25727ec ocl: refactor program compilation 2017-10-08 19:55:01 +03:00
Alexander Alekhin
04b4495493 ocl: define ProgramSource before program
no changes in code
2017-10-08 19:55:01 +03:00
Alexander Alekhin
9661d60f74 dnn(samples): fix python syntax (false -> False) 2017-10-08 19:17:40 +03:00
lzx1413
8a05c195f7 in python, false should be False 2017-10-08 21:10:25 +08:00
Alexander Alekhin
2c1b4f5711 Merge pull request #9795 from IgWod:refactor-scalar-to-raw-data 2017-10-08 09:48:46 +00:00
Igor Wodiany
ffb9554787 Extract code from scalarToRawData
The same code was repeated several time for different data types, so
it was extracted as a templated function to improve maintability and
make a code more clear.
2017-10-07 19:46:45 +01:00
Igor Wodiany
b638aa74d7 Fix a memory leak in the Mat copying constructor
Exception may be rasied inside the body of a copying constructor after
refcount has been increased, and beacause in the case of the exception
destrcutor is never called what causes memory leak. This commit adds a
workaround that calls the release() function before the exception is
thrown outside the contructor.
2017-10-07 10:50:17 +03:00
mevatron
fdc4344acb Small fix for using Qt 5.x with opencv_world 2017-10-06 16:03:39 -05:00
LaurentBerger
421c5dee12 3D histogram 2017-10-06 18:10:38 +02:00
Vadim Pisarevsky
d25ee8a273 Merge pull request #9761 from Jazmann:ellipseFitAMS&Direct 2017-10-06 14:35:42 +00:00
Vadim Pisarevsky
6c6900a6cd Merge pull request #9424 from Cartucho:update_imgproc_tutorials 2017-10-06 14:02:58 +00:00
Vadim Pisarevsky
21bd834a59 Merge pull request #9772 from dkurt:fix_caffe_eltwise_and_fc_layers 2017-10-06 13:47:54 +00:00
Vadim Pisarevsky
b969d86415 Merge pull request #9787 from dkurt:feature_dnn_resize_nearest_neighbor 2017-10-06 13:46:50 +00:00
Vadim Pisarevsky
fe58b58937 Merge pull request #9778 from dkurt:dnn_colorization 2017-10-06 11:48:05 +00:00
Vadim Pisarevsky
87595a6b3a Merge pull request #9779 from Lightricks:feature/assetslibrary-remove-link 2017-10-06 11:45:36 +00:00
Dmitry Kurtaev
b9f94c9315 Nearest neighbor resize layer 2017-10-06 14:33:26 +03:00
Maksim Shabunin
56fe2dc1ed Merge pull request #9773 from shoeffner:feature/doxygen-tag-file 2017-10-06 10:44:58 +00:00
Dmitry Kurtaev
e268606e26 Grayscale colorization model (https://github.com/richzhang/colorization) test. 2017-10-06 09:33:41 +03:00
Yaron Inger
0d979a741b videoio: remove AssetsLibrary dependency.
The entire AssetsLibrary framework is deprecated since iOS 8.0. The code
used in the camera example code can use UIKit to save videos to the
camera instead, which allows to avoid linking with PhotoKit instead to
prevent increasing the iOS deployment target.
2017-10-05 20:22:56 +03:00
tribta
9a2317e063 Tutorial Hough Lines 2017-10-05 14:17:38 +03:00
tribta
d99ced6ec8 Tutorial Hough Circles 2017-10-05 14:17:38 +03:00
tribta
9ff33dacfc Tutorial Make Border 2017-10-05 14:17:38 +03:00
tribta
a6f5e1f0ca Tutorial Filter2D 2017-10-05 14:17:38 +03:00
tribta
08515281b9 Tutorial Image Pyramids 2017-10-05 14:17:38 +03:00
tribta
f7d85bfed8 Tutorial Sobel Derivatives 2017-10-05 14:17:36 +03:00
tribta
3250f11f0c Tutorial Laplace Operator 2017-10-05 14:14:04 +03:00
tribta
d068e27420 Tutorial Morph Lines Detection 2017-10-05 14:14:04 +03:00
tribta
18bc4db75c Tutorial Hit-or-Miss 2017-10-05 14:14:04 +03:00
tribta
bc18fb481f Tutorial Smoothing Images 2017-10-05 14:14:03 +03:00
Vadim Pisarevsky
5f6ce6f4b0 Merge pull request #9762 from dkurt:fix_tensorflow_split_layer 2017-10-05 10:51:49 +00:00
Vadim Pisarevsky
558e4d9c2d Merge pull request #9771 from Bisaloo:patch-1 2017-10-05 10:48:20 +00:00
Sebastian Höffner
440e8d4efa Configuring Doxygen to generate a tag file.
Additionally adds a tutorial on how to use the tag file in other
projects to link back to the OpenCV documentation.

The tutorial is also the only place which links to the tag file as of
now.

For more information on tag files and external documentation, check
https://www.stack.nl/~dimitri/doxygen/manual/external.html
2017-10-04 15:52:12 +02:00
Alexander Alekhin
bc7f649d68 Merge pull request #9769 from pstieber:FixPrivateIncludeInSaturateCast 2017-10-04 12:49:45 +00:00
Dmitry Kurtaev
ad8bbaf008 Multidimensional eltwise layer.
Fixed fully-connected layer axis.
2017-10-04 14:01:44 +03:00
Bisaloo
ed397cfbea Fix 404 url in canny edge detection tutorial 2017-10-04 11:16:06 +02:00
Peter J. Stieber
5669ee815b Replace private.cuda.hpp with conditional include of cuda_fp16.h. 2017-10-03 17:47:52 -07:00
Dmitry Kurtaev
2a21c10837 Fix TensorFlow split layer 2017-10-02 22:44:42 +03:00
Jasper Shemilt
800da724a3 Fix Transposed eigenvals and vecs. Didn't notice at first 2017-10-02 17:56:08 +01:00
Jasper Shemilt
0136711cf4 Adds fitEllipseAMS to imgproc: The Approximate Mean Square (AMS) proposed by Taubin 1991.
Adds fitEllipseDirect to imgproc: The Direct least square (Direct) method by Fitzgibbon1999.

New Tests are included for the methods.
fitEllipseAMS Tests
fitEllipseDirect Tests

Comparative examples are added to fitEllipse.cpp in Samples.
2017-10-02 16:38:41 +01:00
Alexander Alekhin
2a2537725a Merge pull request #9754 from sturkmen72:patch-1 2017-10-02 15:26:37 +00:00
Vadim Pisarevsky
49afb28738 Merge pull request #9744 from sturkmen72:Update_HOGDescriptor_Documentation 2017-10-02 14:50:46 +00:00
Alexander Alekhin
ab748188b1 Merge pull request #9596 from paroj:circle_board_params 2017-10-02 14:47:21 +00:00
pengli
e340ff9c3a Merge pull request #9114 from pengli:dnn_rebase
add libdnn acceleration to dnn module  (#9114)

* import libdnn code

Signed-off-by: Li Peng <peng.li@intel.com>

* add convolution layer ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* add pooling layer ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* add softmax layer ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* add lrn layer ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* add innerproduct layer ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* add HAVE_OPENCL macro

Signed-off-by: Li Peng <peng.li@intel.com>

* fix for convolution ocl

Signed-off-by: Li Peng <peng.li@intel.com>

* enable getUMat() for multi-dimension Mat

Signed-off-by: Li Peng <peng.li@intel.com>

* use getUMat for ocl acceleration

Signed-off-by: Li Peng <peng.li@intel.com>

* use CV_OCL_RUN macro

Signed-off-by: Li Peng <peng.li@intel.com>

* set OPENCL target when it is available

and disable fuseLayer for OCL target for the time being

Signed-off-by: Li Peng <peng.li@intel.com>

* fix innerproduct accuracy test

Signed-off-by: Li Peng <peng.li@intel.com>

* remove trailing space

Signed-off-by: Li Peng <peng.li@intel.com>

* Fixed tensorflow demo bug.

Root cause is that tensorflow has different algorithm with libdnn
to calculate convolution output dimension.

libdnn don't calculate output dimension anymore and just use one
passed in by config.

* split gemm ocl file

split it into gemm_buffer.cl and gemm_image.cl

Signed-off-by: Li Peng <peng.li@intel.com>

* Fix compile failure

Signed-off-by: Li Peng <peng.li@intel.com>

* check env flag for auto tuning

Signed-off-by: Li Peng <peng.li@intel.com>

* switch to new ocl kernels for softmax layer

Signed-off-by: Li Peng <peng.li@intel.com>

* update softmax layer

on some platform subgroup extension may not work well,
fallback to non subgroup ocl acceleration.

Signed-off-by: Li Peng <peng.li@intel.com>

* fallback to cpu path for fc layer with multi output

Signed-off-by: Li Peng <peng.li@intel.com>

* update output message

Signed-off-by: Li Peng <peng.li@intel.com>

* update fully connected layer

fallback to gemm API if libdnn return false

Signed-off-by: Li Peng <peng.li@intel.com>

* Add ReLU OCL implementation

* disable layer fusion for now

Signed-off-by: Li Peng <peng.li@intel.com>

* Add OCL implementation for concat layer

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>

* libdnn: update license and copyrights

Also refine libdnn coding style

Signed-off-by: Wu Zhiwen <zhiwen.wu@intel.com>
Signed-off-by: Li Peng <peng.li@intel.com>

* DNN: Don't link OpenCL library explicitly

* DNN: Make default preferableTarget to DNN_TARGET_CPU

User should set it to DNN_TARGET_OPENCL explicitly if want to
use OpenCL acceleration.

Also don't fusion when using DNN_TARGET_OPENCL

* DNN: refine coding style

* Add getOpenCLErrorString

* DNN: Use int32_t/uint32_t instread of alias

* Use namespace ocl4dnn to include libdnn things

* remove extra copyTo in softmax ocl path

Signed-off-by: Li Peng <peng.li@intel.com>

* update ReLU layer ocl path

Signed-off-by: Li Peng <peng.li@intel.com>

* Add prefer target property for layer class

It is used to indicate the target for layer forwarding,
either the default CPU target or OCL target.

Signed-off-by: Li Peng <peng.li@intel.com>

* Add cl_event based timer for cv::ocl

* Rename libdnn to ocl4dnn

Signed-off-by: Li Peng <peng.li@intel.com>
Signed-off-by: wzw <zhiwen.wu@intel.com>

* use UMat for ocl4dnn internal buffer

Remove allocateMemory which use clCreateBuffer directly

Signed-off-by: Li Peng <peng.li@intel.com>
Signed-off-by: wzw <zhiwen.wu@intel.com>

* enable buffer gemm in ocl4dnn innerproduct

Signed-off-by: Li Peng <peng.li@intel.com>

* replace int_tp globally for ocl4dnn kernels.

Signed-off-by: wzw <zhiwen.wu@intel.com>
Signed-off-by: Li Peng <peng.li@intel.com>

* create UMat for layer params

Signed-off-by: Li Peng <peng.li@intel.com>

* update sign ocl kernel

Signed-off-by: Li Peng <peng.li@intel.com>

* update image based gemm of inner product layer

Signed-off-by: Li Peng <peng.li@intel.com>

* remove buffer gemm of inner product layer

call cv::gemm API instead

Signed-off-by: Li Peng <peng.li@intel.com>

* change ocl4dnn forward parameter to UMat

Signed-off-by: Li Peng <peng.li@intel.com>

* Refine auto-tuning mechanism.

- Use OPENCV_OCL4DNN_KERNEL_CONFIG_PATH to set cache directory
  for fine-tuned kernel configuration.
  e.g. export OPENCV_OCL4DNN_KERNEL_CONFIG_PATH=/home/tmp,
  the cache directory will be /home/tmp/spatialkernels/ on Linux.

- Define environment OPENCV_OCL4DNN_ENABLE_AUTO_TUNING to enable
  auto-tuning.

- OPENCV_OPENCL_ENABLE_PROFILING is only used to enable profiling
  for OpenCL command queue. This fix basic kernel get wrong running
  time, i.e. 0ms.

- If creating cache directory failed, disable auto-tuning.

* Detect and create cache dir on windows

Signed-off-by: Li Peng <peng.li@intel.com>

* Refine gemm like convolution kernel.

Signed-off-by: Li Peng <peng.li@intel.com>

* Fix redundant swizzleWeights calling when use cached kernel config.

* Fix "out of resource" bug when auto-tuning too many kernels.

* replace cl_mem with UMat in ocl4dnnConvSpatial class

* OCL4DNN: reduce the tuning kernel candidate.

This patch could reduce 75% of the tuning candidates with less
than 2% performance impact for the final result.

Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>

* replace cl_mem with umat in ocl4dnn convolution

Signed-off-by: Li Peng <peng.li@intel.com>

* remove weight_image_ of ocl4dnn inner product

Actually it is unused in the computation

Signed-off-by: Li Peng <peng.li@intel.com>

* Various fixes for ocl4dnn

1. OCL_PERFORMANCE_CHECK(ocl::Device::getDefault().isIntel())
2. Ptr<OCL4DNNInnerProduct<float> > innerProductOp
3. Code comments cleanup
4. ignore check on OCL cpu device

Signed-off-by: Li Peng <peng.li@intel.com>

* add build option for log softmax

Signed-off-by: Li Peng <peng.li@intel.com>

* remove unused ocl kernels in ocl4dnn

Signed-off-by: Li Peng <peng.li@intel.com>

* replace ocl4dnnSet with opencv setTo

Signed-off-by: Li Peng <peng.li@intel.com>

* replace ALIGN with cv::alignSize

Signed-off-by: Li Peng <peng.li@intel.com>

* check kernel build options

Signed-off-by: Li Peng <peng.li@intel.com>

* Handle program compilation fail properly.

* Use std::numeric_limits<float>::infinity() for large float number

* check ocl4dnn kernel compilation result

Signed-off-by: Li Peng <peng.li@intel.com>

* remove unused ctx_id

Signed-off-by: Li Peng <peng.li@intel.com>

* change clEnqueueNDRangeKernel to kernel.run()

Signed-off-by: Li Peng <peng.li@intel.com>

* change cl_mem to UMat in image based gemm

Signed-off-by: Li Peng <peng.li@intel.com>

* check intel subgroup support for lrn and pooling layer

Signed-off-by: Li Peng <peng.li@intel.com>

* Fix convolution bug if group is greater than 1

Signed-off-by: Li Peng <peng.li@intel.com>

* Set default layer preferableTarget to be DNN_TARGET_CPU

Signed-off-by: Li Peng <peng.li@intel.com>

* Add ocl perf test for convolution

Signed-off-by: Li Peng <peng.li@intel.com>

* Add more ocl accuracy test

Signed-off-by: Li Peng <peng.li@intel.com>

* replace cl_image with ocl::Image2D

Signed-off-by: Li Peng <peng.li@intel.com>

* Fix build failure in elementwise layer

Signed-off-by: Li Peng <peng.li@intel.com>

* use getUMat() to get blob data

Signed-off-by: Li Peng <peng.li@intel.com>

* replace cl_mem handle with ocl::KernelArg

Signed-off-by: Li Peng <peng.li@intel.com>

* dnn(build): don't use C++11, OPENCL_LIBRARIES fix

* dnn(ocl4dnn): remove unused OpenCL kernels

* dnn(ocl4dnn): extract OpenCL code into .cl files

* dnn(ocl4dnn): refine auto-tuning

Defaultly disable auto-tuning, set OPENCV_OCL4DNN_ENABLE_AUTO_TUNING
environment variable to enable it.

Use a set of pre-tuned configs as default config if auto-tuning is disabled.
These configs are tuned for Intel GPU with 48/72 EUs, and for googlenet,
AlexNet, ResNet-50

If default config is not suitable, use the first available kernel config
from the candidates. Candidate priority from high to low is gemm like kernel,
IDLF kernel, basick kernel.

* dnn(ocl4dnn): pooling doesn't use OpenCL subgroups

* dnn(ocl4dnn): fix perf test

OpenCV has default 3sec time limit for each performance test.
Warmup OpenCL backend outside of perf measurement loop.

* use ocl::KernelArg as much as possible

Signed-off-by: Li Peng <peng.li@intel.com>

* dnn(ocl4dnn): fix bias bug for gemm like kernel

* dnn(ocl4dnn): wrap cl_mem into UMat

Signed-off-by: Li Peng <peng.li@intel.com>

* dnn(ocl4dnn): Refine signature of kernel config

- Use more readable string as signture of kernel config
- Don't count device name and vendor in signature string
- Default kernel configurations are tuned for Intel GPU with
  24/48/72 EUs, and for googlenet, AlexNet, ResNet-50 net model.

* dnn(ocl4dnn): swap width/height in configuration

* dnn(ocl4dnn): enable configs for Intel OpenCL runtime only

* core: make configuration helper functions accessible from non-core modules

* dnn(ocl4dnn): update kernel auto-tuning behavior

Avoid unwanted creation of directories

* dnn(ocl4dnn): simplify kernel to workaround OpenCL compiler crash

* dnn(ocl4dnn): remove redundant code

* dnn(ocl4dnn): Add more clear message for simd size dismatch.

* dnn(ocl4dnn): add const to const argument

Signed-off-by: Li Peng <peng.li@intel.com>

* dnn(ocl4dnn): force compiler use a specific SIMD size for IDLF kernel

* dnn(ocl4dnn): drop unused tuneLocalSize()

* dnn(ocl4dnn): specify OpenCL queue for Timer and convolve() method

* dnn(ocl4dnn): sanitize file names used for cache

* dnn(perf): enable Network tests with OpenCL

* dnn(ocl4dnn/conv): drop computeGlobalSize()

* dnn(ocl4dnn/conv): drop unused fields

* dnn(ocl4dnn/conv): simplify ctor

* dnn(ocl4dnn/conv): refactor kernelConfig localSize=NULL

* dnn(ocl4dnn/conv): drop unsupported double / untested half types

* dnn(ocl4dnn/conv): drop unused variable

* dnn(ocl4dnn/conv): alignSize/divUp

* dnn(ocl4dnn/conv): use enum values

* dnn(ocl4dnn): drop unused innerproduct variable

Signed-off-by: Li Peng <peng.li@intel.com>

* dnn(ocl4dnn): add an generic function to check cl option support

* dnn(ocl4dnn): run softmax subgroup version kernel first

Signed-off-by: Li Peng <peng.li@intel.com>
2017-10-02 15:38:00 +03:00
Pavel Rojtberg
629a06d9b6 calib3d: export parameters of CALIB_CB_CLUSTERING 2017-10-02 14:27:32 +02:00
Vadim Pisarevsky
f646f61dad Merge pull request #9752 from alalek:eigenNonSymmetric 2017-10-02 11:51:13 +00:00
Alexander Alekhin
ca9a3af704 Merge pull request #9756 from pranitbauva1997:doc-typo-faster
doc: fix typo in py_tutorials
2017-10-02 14:26:07 +03:00
Vadim Pisarevsky
eca5906a75 Merge pull request #9746 from alalek:fix_msvs2017_warning 2017-10-02 11:15:48 +00:00
Alexander Alekhin
b872d14376 Merge pull request #9757 from berak:imgcodecs_4chan_bmp 2017-10-02 10:27:59 +00:00
Pranit Bauva
d3e3d0996c doc: fix typo in py_tutorials 2017-10-02 15:54:00 +05:30
Suleyman TURKMEN
20c11d3b7b Update HOGDescriptor documentation 2017-10-02 07:14:35 +03:00
berak
089aac61f3 imgcodecs: fix 4 reading channel bmp images 2017-10-01 15:32:55 +02:00
Alexander Alekhin
1f18282f04 build: fix MSVS2017 warning 2017-10-01 10:48:35 +00:00
Alexander Alekhin
529632f8d0 core: cv::eigenNonSymmetric() via EigenvalueDecomposition 2017-10-01 07:45:32 +00:00
Suleyman TURKMEN
a13cbced2e Update OpenCVFindLibsGrfmt.cmake 2017-09-30 21:39:50 +03:00
Alexander Alekhin
a9effeeb35 Merge pull request #9743 from DensityCo:tbb-debug 2017-09-29 14:17:55 +00:00
Alexander Alekhin
69103a9fab Merge pull request #9740 from tomoaki0705:universalArithm 2017-09-29 14:17:01 +00:00
Alexander Alekhin
a729f985fd Merge pull request #9726 from blendin:fix_oob 2017-09-29 14:16:40 +00:00
Alexander Alekhin
d43087cafe Merge pull request #9741 from alalek:stitching_test_update 2017-09-29 13:10:53 +00:00
Alexander Alekhin
0bf823e1eb stitching(perf): update condition threshold 2017-09-29 14:33:13 +03:00
Alexander Alekhin
39ee07b8f6 test: clarify fail messages 2017-09-29 14:33:00 +03:00
Tomoaki Teshima
e187219699 use universal intrinsic in arithm.cpp
* remove raw NEON/SSE2 implementation as much as possible
  * replace them to universal intrinsic in InRange/Compare/AddWeighted
2017-09-29 08:33:15 +09:00
bradford barr
a56d7592f0 TBB Debug Release
OpenCV fails to detect tbb on a debug build if the platform has only installed
debug libraries.  This PR adds an additional check to the tbb detect logic for
systems that only install tbb debug and not both tbb debug and release.
2017-09-28 17:31:41 -04:00
Vadim Pisarevsky
5e93c82023 Merge pull request #9491 from dkurt:tf_lstm 2017-09-28 21:04:06 +00:00
Vadim Pisarevsky
a6d634b5b8 Merge pull request #9683 from terfendail:grects_weights 2017-09-28 14:02:12 +00:00
Vadim Pisarevsky
af8fc3e209 Merge pull request #9604 from alalek:ocl_kernel_profiling 2017-09-28 13:48:34 +00:00
Vadim Pisarevsky
22467599c4 Merge pull request #9692 from alalek:dnn_perf_net 2017-09-28 13:44:24 +00:00
Vadim Pisarevsky
68cc2e292d Merge pull request #9734 from dkurt:fix_deconv_layer_kernel_layout 2017-09-28 11:42:57 +00:00
Vadim Pisarevsky
45365e4df1 Merge pull request #9691 from dkurt:padding_layer_refactoring 2017-09-28 11:34:28 +00:00
Tomoaki Teshima
139b32734e Merge pull request #9714 from tomoaki0705:universalBilateral
imgproc: use universal intrinsic as much as possible (#9714)

* use universal intrinsic as much as possible
  * make SSE3 part as common as possible with universal intrinsic implementation
  * put the reducing part out of the main loop

* follow the comment
  * fix the typo
  * use v_reduce_sum4

* follow the comment again
  * remove all CV_SSE3 part from smooth.cpp
2017-09-28 12:30:22 +03:00
Alexander Alekhin
488d4df520 Merge pull request #9710 from savuor:ovx_harris_build_fix 2017-09-28 09:27:09 +00:00
Alexander Alekhin
5f6fb16fda Merge pull request #9737 from huningxin:fix_9729 2017-09-28 08:57:19 +00:00
Ningxin Hu
06d22af2bf Use horizontal input/output images layout in OpenCV.js tutorials 2017-09-28 09:49:34 +08:00
Dmitry Kurtaev
6e593cd1f0 Swap dimensions of deconvolution kernel 2017-09-27 22:38:34 +03:00
Alexander Alekhin
386f402e0c Merge pull request #9735 from alalek:fix_docs
doc: fix documentation generation with JavaScript bindings
2017-09-27 22:11:38 +03:00
Alexander Alekhin
9efb24943e doc: fix documentation generation with JavaScript bindings 2017-09-27 19:24:24 +03:00
Alexander Alekhin
55b7073aae Merge pull request #9730 from yanlend:patch-1 2017-09-27 16:02:09 +00:00
Alexander Alekhin
bf6548dc1a Merge pull request #9716 from alalek:fix_ipp_build 2017-09-27 16:00:28 +00:00
Alexander Alekhin
0f0f5652fb Merge pull request #9717 from alalek:fix_fma 2017-09-27 13:48:09 +00:00
Alexander Alekhin
d4c905bf77 Merge pull request #9728 from huningxin:fix_9727 2017-09-27 12:05:55 +00:00
Alexander Alekhin
7ff294dbe6 Merge pull request #9725 from dericcrago:fixed_boundary_spelling_in_comments 2017-09-27 12:04:23 +00:00
Peter Fischer
332588fcee Fix bug: non-maximum suppression for hough circle
The non-maximum suppression in the Hough accumulator incorrectly ignores maxima that extend over more than one cell, i.e. two neighboring cells both have the same accumulator value. This maximum is dropped completely instead of picking at least one of the entries. This frequently results in obvious circles being missed.

The behavior is now changed to be the same as for hough_lines.

See also https://github.com/opencv/opencv/issues/4440
2017-09-27 11:47:30 +02:00
Ningxin Hu
2fd0229493 Check files uploaded by user 2017-09-27 16:48:18 +08:00
Ningxin Hu
18c1e32047 Fix image uploading failure for OpenCV.js tutorials 2017-09-27 14:46:21 +08:00
Ningxin Hu
315dac4878 Only accept images to upload for OpenCV.js tutorials 2017-09-27 14:45:33 +08:00
blendin
c58152d94b Fix out of bounds write 2017-09-26 23:04:01 -07:00
Deric Crago
a0d7cf89f2 Fixed 'boundary' spelling 2017-09-26 23:42:48 -04:00
Alexander Alekhin
7475d23fec Merge pull request #9707 from woodychow:fix_undistortrectifymap_avx2 2017-09-26 16:42:47 +00:00
Alexander Alekhin
3dee92ec50 fix usage of CV_FMA3 macro 2017-09-26 17:23:54 +03:00
Alexander Alekhin
587df6d942 cmake: fix typo 2017-09-26 17:19:27 +03:00
Alexander Alekhin
513c2b92a4 Merge pull request #9709 from savuor:softfloat_r3d 2017-09-26 11:16:42 +00:00
Dmitry Kurtaev
84cec17913 LSTM layer for TensorFlow importer 2017-09-26 12:59:36 +03:00
Alexander Alekhin
e8ee284710 Merge pull request #9713 from huningxin:fix_9712 2017-09-26 09:03:34 +00:00
Ningxin Hu
ea2c13c91e Improve cascade file loading and error handling for js tutorials 2017-09-26 13:01:45 +08:00
Ningxin Hu
f57106b00a Add haar cascade files as js_assets 2017-09-26 13:00:36 +08:00
woody.chow
ef8c919e3f Minor optimization of initUndistortRectifyMapLine_AVX 2017-09-26 09:12:22 +09:00
Alexander Alekhin
d9107601c3 Merge pull request #9690 from tomoaki0705:universalSmooth 2017-09-25 19:42:06 +00:00
Alexander Alekhin
a08044d6f2 Merge pull request #8833 from terfendail:resizenn_perftest 2017-09-25 16:42:07 +00:00
Alexander Alekhin
aea25e7f90 Merge pull request #9676 from jrobble:fix_caffe_swaprb 2017-09-25 16:05:11 +00:00
Congxiang Pan
89b6e68e1e Merge pull request #9466 from huningxin:js
GSoC 2017: Improve and Extend the JavaScript Bindings for OpenCV (#9466)

* Initial support for build with emscripten

mkdir build_js
cd build_js
cmake -D CMAKE_TOOLCHAIN_FILE=/path/to/emsdk/emsdk-portable/emscripten/master/cmake/Modules/Platform/Emscripten.cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

* Add js module

The output is build/bin/opencv_js.js

* Fix opencv2/calib3d.hpp not found issue

* Add module name

Usage:
var cv = cv();

* Add total memory as 128MB and allow growth

* Add compilation flags for emscripten

* Use EMSCRIPTEN build target

* Disable js module for non emscripten build

* Bind the preload file path to root

Usage:
face_cascade.load('haarcascade_frontalface_default.xml');

* add test folder

* fix test files

* Copy js module test to bin

* Support to run tests on Node.js

Fix tests to import cv Module when runtime is node.
Add tests.js to use qunit to auto run tests.
Modify umd wrapper to support Module is not defined.

Usage:
node tests.js

* Support UMD and file system

Wrap the opencv_js.js to opencv.js by UMD wrapper

Use emscripten file system API to load files instead of generating data file or
embedding them. It supports both browser and node.js usages.

* Fix incorrect module name in tests

* Add package.json to add dependence of qunit

* Add js_tutorials folder and a intro page of opencv.js

Enable BUILD_DOCS in CMakeLists.txt.
Add new folder of js_tutorials in folder opencv/doc.
Imitate the tutorials of OpenCV-Python to create a intro page of opencv.js and a setup guide

* Import and use binding gen from opencvjs project

* Modify the embindgen.py to pass the build and test

* Add classes and functions white list

* Consolidate hdr_parser.py (#31)

Use hdr_parser.py of python module

Add js flag to support js binding generator.

* Use emscripten::vecFromJSArray for input vector param

Fix part of #23

* Fix test cases after #34

Fix #39

* Expose groupRectangles and CascadeClassifier.empty

* Add js highgui tutorials

add tutorials of imread&imshow and createTrackbar in doc/js_tutorials/js_gui folder
add interactive tutorial webpage for imread&imshow and createTrackbar in doc/js_tutorials/js_interactive_tutorials folder, and some images needed.
change doc/CMakeLists.txt to copy the interactive tutorial webpage and opencv.js to the tutorials' destination folder

* rm useless annotation in doc/CMakeLists.txt

* fix some nonstandard indentation and space

* add check if canvas is valid

* Expose BackgroundSubtractorMOG2

Fix #43

* Fix build of js doc

Limit copy_js_interactive_tutorials for doxygen build
Add dep to opencv.js

Fix #53

* Implement cv.imread & cv.imshow and insert interactive pages in tutorials (#55)

* add helper.js

* delete ALL in add target copy_js_interactive_tutorials to avoid dependence error

* Insert interactive pages in tutorials

insert the old interactive pages in markdown by using \htmlonly and \endhtmlonly command.
delete the useless interactive page
rename js_interactive_tutorials to js_assets to put some images needed in

* fix the depends of the target doxygen

add opencv.js to depends and delete the useless target of copy_js_assets

* change filename helper.js to helpers.js

* disable button or trankbar before opencv.js is ready

* Expose CV_64F

Fix #65

* improve cv.imshow to display different types as native imshow

* add utils.js to reuse functions and update tutorials

* Make doxygen depend on bin/opencv.js

* Fix memory issue of matFromArray

Fix #37

* Merge pull request from ganwenyao/tutorial_18

* Add notes for ganwenyao/tutorial_18

* Modifying for ganwenyao/tutorial_18

* Change Mat constructor with data to 5 parameters

* Mat supports constructor with Scalar

Fix #60

* update cv.imread cause the memory issue of matFromArray has been fixed

* fix canvas name and default input image

* Expose cv::Moments

Fix #85

* Add -Wno-missing-prototypes for emscripten build

* fix canvas name

* add tutorial of video input and output

* Expose enums as emscripten consts

Fix #72

* update the tutorial to use Mat constructor with Scalar and change lena.jpg

* Exclude cv::Mat for vecFromJSArray

Fix #82

* Add unit tests for cv.moments

* Fix the unit tests.

* add checkbox and stop button

* add adapter.js to make sure compatibility fo video tutorials

* Support default parameters with function overloading

* modify enums to constants

* Use https URL for MathJax.js

Fix #109

* Comment out the debug print in embindgen.py

* Expose RotatedRect

Fix #96

* replace enum with constants and improve onload function

* delete some useless paras cause #105 fixed this

* Modify const name

* Modify Contour Properties

* tutorials for imgprc2 and objdec

* Expose more functions for img proc tutorials

Fix #76

* Expose polylines for video analysis tutorial

Fix #121

* Expose constants for default parameters of img proc tutorials

Fix #122

* Fix wrong parameter types of Mat.copyTo

Fix #87

* Support default parameters of mat.convertTo

Fix #123

* Support default parameters for external constructors

Fix #131

* Revert "Expose polylines for video analysis tutorial"

This reverts commit 3ce7615652e510d30e3c0014706ac38c98883189.

Fix #121

* Support cv.minMaxLoc

Fix #127

* Expose cv.minEnclosingCircle

Fix #126

* Add video analysis tutorials

add three video tutorials, Meanshift and Camshift, Optical Flow Background Subtraction
add cup.mp4 and box.mp4 for demo in tutorials

* improve image processing tutorials

* repalce console.warn with throw to throw exception

* add try-catch to throw exception in code demo

* Change mat.size() return value to JS Array object

Fix #140

* add a note about different channels order between canvas and native opencv

* add a note about how to capture video from video files

* Binding cv.Scalar to JS array

Fix #147

* Add JS cv.Scalar object into helpers.js

* Update Install OpenCV-JavaScript tutorial page

Fix #44

* Update the OpenCV-JavaScript introduction page

Fix #44

* add cv.VideoCapture and read() function

* set the size of the hidden canvas same as the video

* Add Using OpenCV-JavaScript tutorial page

Fix #44

* fix some bad code style

* Update tutorials after 8/2 sync meeting

Changes include:
- Use OpenCV.js name instead of OpenCV-JavaScript
- Put using OpenCV.js ahead of build OpenCV.js
- Refine usage and introduction page
- Muted the video in tutorials

* Fix a typo in introduction page

* use cv.VideoCapture and its read() function to read video

* replace OpenCV-JavaScript with OpenCV.js

* Use onload of async script in js_usage tutorial

* add more info about mat.data

* Change Size to value_object

* Integrate Moh and Sajjad's editing into introduction page

* Change Point to value_object

* Change Rect to value_object with helper object

* Add helper objects for Point and Size

* Change RotatedRect to value_object with helpers

* Change MinMaxLoc and Circle to value_object

* Change TermCriteria to value_object

* Fix core_bindings.cpp for MinMaxLoc and Circle

* Remove unused types

* Change meanShift and CamShift to return Rect

* Change methods of RotatedRect to static

* Change mat.data from methods to property

Fix #75 and #77

* support img id and element in cv.imread

* Change mat.size to property and add mat.step

Fix #163

* Add matFromArray and matFromImageData as JS helpers

Fix #79, #78

* Lower camel case for Mat element getters

Fix #81

* Mat.getRoiRect and tests

Fix #86

* Support type for Mat.ptr

Fix #83

* Name changing of Mat element getters

'getUcharAt` -> 'ucharAt'

* fix code style and args names

* Fix helpers.js due to cv.Mat API update

* Fix opencv.js usage tutorial

* Fix a typo of js_setup

* Change Moments to value_object

* Add Range as value_object

Fix #171

* Support Mat.diag and Mat.isContinous

Fix #84 and #89

* Support Mat.setTo

Fix #88

* Apply edits to js_intro

* Apply edits to js_usage

* Apply edits to js_setup

* update tutorials to apply data type change

* Modify tutorials

* add core tutorials

* delete MatVector elements and delete useless set operation

* add tutorials_objdec_camera

* Add instructions for WebAssembly

* apply tech writer's feedbacks into tutorials

* Organize white list by modules

* Change size to method and bind to MatExpr.size()

Fix #177

* improve tutorials

* Modify core tutorials

* add params list and explanations for OpenCV.js functions

* remove face_profile from Face Detection in Video Capture

* Add demos link

* Change Gui to GUI

* Update js_intro based on Moh and Sajjad's edits

* Fixup for 3.3.0 rebase

* Update js_intro per Moh's suggestion

* Update contributors list per Moh's idea

* add adapter.js in video_display tutorial

* Change Mat.getRoiRect to Mat.roi

Fix #194

* Remove unnecessary files for test

Fix #192

* Licenses updated to UC BSD 3-Clause

* Apply OpenCV coding style for C++ files

* Add OpenCV license for python and js files

* Fix coding style issue in helpers.js

* Remove unused test_commons.js

* Fix coding style of test_imgproc.js

* Fix coding style of test_mat.js

* Fix space before semicolon

* Fix coding style of test_objdetect.js

* Fix coding style of tests.js

* Fix coding style of test_utils.js

* Fix coding style of test_video.js

* Fix failures of node.js tests

* Add eslint rule config and fix eslint errors

* Add eslint config for js/src and fix eslint errors

* Clean up the opencv.js dependencies

Fix #186

* Fix build issue for python generator

* Fix doxygen buildbot failure

* delete trailing whitespace, blank line at EOF and replace tab with space

* Fix tutorial_js_root reference issue for non opencv.js build

* replace the file with small size

* Initial commit of build_js.py

* Move the js build configurations to build script

* Add wasm build support

* Update OpenCV.js build tutorial by using script

* Fix global var issue in tests

* Add a README.md for build_js.py

* Copy the haar cascade files from data dir for tutorials

* Not use memory init file

* Disable debug print for modules/js/CMakeLists.txt

* Check files when build done

* Fix image name in js_gradients tutorial

* Fix image load issue in js_trackbar tutorial

* Find the opencv source directory via relative path by default

* Make the cmake args based on build_doc option

* Fix a typo in js_setup.markdown

* Fix make failure issue on config generated by build_js.py

* Eliminate js branch of hdr_parser.py

* Extract examples from js_basic_ops tutorial

* Fix coding style of utils.js

* Improve examples error handling

Handle:
1. opencv.js loading errors
2. script errors (Error)
3. cv::Exception

Fix #217

* Add enable_exception option into build_js.py

* Support print exception for exception catching disabled build

* Extract example from js_usage tutorial

* Avoid copying .eslintrc.json when building doc

Fix #223

* Revert to use onload as opencv.js ready event

* Use 4 spaces indention for js examples

* embed html in tutorials with iframe tag

* Revert to use onload as opencv.js ready event

* Extract examples from js_video_display tutorial

* Implement Utils object

* modify core imgprc and face_detection tutorials

* Fix examples of js_gui tutorials

* Fix coding style of utils.js

* Modify tutorials

* Extract example from js_face_detection_camera tutorial

* Disable new-cap check in eslint

* Extract examples from js_meanshift tutorial

* Extract examples from video tutorials

* Remove new-cap declaration and update grammer in comments

* Change textarea width to 100 to align with eslint config

* Fix printError issue when opencv.js loading fails

* Remove BUILD_opencv_js dependency for doc build

Fix #213

* Expose cv::getBuildInformation

* Dump opencv build info when opencv.js loaded for live examples

* Make the button to stand out in js live examples

Fix #235

* Style for disabled button

* Add js_imgproc_camera.html example

* Fix coding style of imgproc_camera example

* Add js_imgproc_camera tutorial

* Remove link to opencv.js demos

* doc: copy opencv.js on build, use absolute paths for assets

* doc: reuse existed file box.mp4
2017-09-25 16:52:07 +03:00
Rostislav Vasilikhin
62c4cf3ac6 fixed build of OpenVX Harris 2017-09-25 15:58:09 +03:00
Rostislav Vasilikhin
945706a8e8 softfloat f64_sqrt bug fix 2017-09-25 15:52:56 +03:00
Alexander Alekhin
78788e1efb dnn(perf): update perf tests 2017-09-25 15:32:37 +03:00
Alexander Alekhin
b143f7100a Merge pull request #9505 from cbalint13:cuda
Enable CUDA_NVCC_FLAGS at arch detect step.
2017-09-25 14:05:41 +03:00
Vadim Pisarevsky
5a9461056b Merge pull request #9706 from alalek:imgcodecs_tiff_drop_legacy_code 2017-09-25 10:18:37 +00:00
Alexander Alekhin
08b5dc64af imgcodecs(tiff): drop legacy code
Drop code under *undefined* HAVE_TIFF
(violates several policies, like a way to turn off tiff support)
2017-09-24 22:36:17 +00:00
Jacob MacRitchie
8f05af8d05 Fixed my additions. For real this time. I think.
Oops. Hopefully it works this time.
2017-09-24 05:58:22 -03:00
Tomoaki Teshima
e932160a8d replace raw SSE2/NEON implementation with universal intrinsic 2017-09-22 23:43:05 +09:00
vipinanand4
39e742765a Merge pull request #9618 from vipinanand4:goodFeaturesToTrack_added_gradiantSize
Added gradiantSize param into goodFeaturesToTrack API (#9618)

* Added gradiantSize param into goodFeaturesToTrack API

Removed hardcode value 3 in goodFeaturesToTrack API, and
added new param 'gradinatSize' in this API so that user can
pass any gradiant size as 3, 5 or 7.

Signed-off-by: Vipin Anand <anand.vipin@gmail.com>
Signed-off-by: Nilaykumar Patel<nilay.nilpat@gmail.com>
Signed-off-by: Prashanth Voora <prashanthx85@gmail.com>

* fixed compilation error for java test

Signed-off-by: Vipin Anand <anand.vipin@gmail.com>

* Modifying code for previous binary compatibility and fixing other warnings

fixed ABI break issue

resolved merged conflict

compilation error fix

Signed-off-by: Vipin Anand <anand.vipin@gmail.com>
Signed-off-by: Patel, Nilaykumar K <nilay.nilpat@gmail.com>
2017-09-22 14:04:43 +00:00
Suleyman TURKMEN
50aa4f8887 Merge pull request #9686 from sturkmen72:patch-1
Update planar_tracking.cpp (#9686)
2017-09-22 14:02:12 +00:00
jrobble
c67ad49378 Set swapRB to false in Caffe tests and examples. 2017-09-22 09:58:48 -04:00
Alexander Alekhin
b8af7c5f86 ts: update perf test
- use GTest tuple definitions instead of std::tr1
- use "const static" for cv::Size contants to reduce generated binary code
- PERF_TEST_P() violates TEST_P() original semantic. Added PERF_TEST_P_() macro
2017-09-22 14:43:27 +03:00
Vadim Pisarevsky
3f794cd951 Merge pull request #9147 from sovrasov:phase_corr_fix 2017-09-22 10:32:16 +00:00
Dmitry Kurtaev
222149b9c6 Refactored Padding layer 2017-09-22 12:39:00 +03:00
Vitaly Tuzov
22fcbaed64 Added performance test for nearest neighbor resize 2017-09-22 12:34:58 +03:00
Vadim Pisarevsky
a0d3d11470 Merge pull request #9649 from dkurt:dnn_reshape_transpose 2017-09-21 19:25:58 +00:00
Vadim Pisarevsky
f1695bdc38 Merge pull request #9678 from tomoaki0705:universalFastScore 2017-09-21 19:12:30 +00:00
Alexander Alekhin
c39b4b8be1 Merge pull request #9681 from jodrescher:master
Update OpenCVDownload.cmake unpack option
2017-09-21 15:58:48 +00:00
Alexander Alekhin
242cf538b4 Merge pull request #9684 from RaymondKirk:patch-1
Fix 'directory does not exist' in windows tutorial
2017-09-21 15:57:44 +00:00
Raymond Kirk
4059f8b3a3 Fix 'directory does not exist' in windows tutorial 2017-09-21 16:46:58 +01:00
Vitaly Tuzov
9a70fd0123 Disabling reset of 'weights' array for reject level mode of groupRectangles function. 2017-09-21 18:21:50 +03:00
Dmitry Kurtaev
17a85b16fc Remove reorder_dims attribute of Reshape layer 2017-09-21 16:42:03 +03:00
jodrescher
50b651655d Update OpenCVDownload.cmake unpack
Added new "f" flag to the tar unpack, because without it doesn't complete, an compile fails
2017-09-21 14:00:43 +02:00
Rostislav Vasilikhin
cc547e8260 Bit-exact version of Luv2RGB_b (#9470)
* lab_tetra squashed

* initial version is almost written

* unfinished work

* compilation fixed, to be debugged

* Lab test removed

* more fixes

* Luv2RGBinteger: channels order fixed

* Lab structs removed

* good trilinear interpolation added

* several fixes

* removed Luv2RGB interpolations, XYZ tables; 8-cell LUT added

* no_interpolate made 8-cell

* interpolations rewritten to 8-cell, minor fixes

* packed interpolation added for RGB2Luv

* tetra implemented

* removing unnecessary code

* LUT building merged

* changes ported to color.cpp

* minor fixes; try to suppress warnings

* fixed v range of Luv

* fixed incorrect src channel number

* minor fixes

* preliminary version of Luv2RGBinteger is done

* Luv2RGB_b is in progress

* XYZ color constants converted to softfloat

* Luv test: precision fixed

* Luv bit-exactness test added

* warnings fixed

* compilation fixed, error message fixed

* Luv check is limited to [0-2,0-2,0-2] by XYZ

* L->Y generation moved to LUT

* LUTs added for up and vp of Luv2RGB_b

* still works

* fixed-point is done, works at maxerr 2

* vectorized code is done, 2x slower than original

* perf improved by 10%

* extra comments removed

* code moved to color.cpp

* test_lab.cpp updated

* minor refactoring

* test added for Luv2RGB

* OCL Luv2RGB_b: XYZ are limited to [0, 2]; docs updated

* Luv2RGB_b rewritten to universal intrinsics

* test_lab.cpp moved to luv_tetra branch
2017-09-21 14:20:45 +03:00
Vadim Pisarevsky
bb679f978d Merge pull request #9653 from dkurt:thresh_16u 2017-09-21 10:57:46 +00:00
Vadim Pisarevsky
2ad27f5757 Merge pull request #9673 from dkurt:feature_dnn_tensorflow_defun 2017-09-21 10:55:25 +00:00
Vadim Pisarevsky
8a31a37434 Merge pull request #9674 from alalek:cmake_cl2cpp_fix 2017-09-21 10:54:40 +00:00
Tomoaki Teshima
bf718b0865 use universal intrinsic in FAST 2017-09-21 18:28:15 +09:00
Alexander Alekhin
2d813910de Merge pull request #9669 from kraj:master 2017-09-20 19:06:49 +00:00
Alexander Alekhin
3b993431be cmake: fix build process of OpenCL kernels 2017-09-20 18:10:31 +03:00
Alexander Alekhin
c57aef75de Merge pull request #9647 from alalek:cmake_ipp_absolute_path 2017-09-20 12:56:33 +00:00
Vadim Pisarevsky
e70b75b51a Merge pull request #8820 from woodychow:multithread_sift_findScaleSpaceExtrema 2017-09-20 12:03:25 +00:00
Alexander Alekhin
8755a19e02 Merge pull request #9668 from Erotemic:msvc_version_warning 2017-09-20 11:35:25 +00:00
Dmitry Kurtaev
bdd8cc697a Import wrapped Dropout subgraphs from TensorFlow 2017-09-20 13:30:25 +03:00
Khem Raj
2c7a123ed8 Do not enable asm with clang
clang pretends to be gcc 4.2.0 which means we will
use inline asm for no reason, instead of builtins
on clang when possible.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2017-09-19 18:09:30 -07:00
joncrall
a936ec325b Added warning when MSVC_VERSION is not recognized 2017-09-19 18:00:25 -04:00
Alexander Alekhin
e5890fc92a ocl: fix build 2017-09-19 15:34:36 +03:00
Alexander Alekhin
1283d62e49 ocl: Kernel::runProfiling() 2017-09-19 15:34:35 +03:00
Alexander Alekhin
d9ab31490c ocl: profiling queue 2017-09-19 15:32:15 +03:00
Alexander Alekhin
6a5298a532 Merge pull request #9664 from tomoaki0705:fixBuildVS2013 2017-09-19 12:25:18 +00:00
Alexander Alekhin
8129f5378f Merge pull request #9656 from bblanchon:RelWithDebInfo 2017-09-19 11:12:58 +00:00
Adam Rankin
fb8143d55d Using environment variable to store capture options (#9292)
* Using environment variable to store options parsed by av_dict_parse_string(ENV{OPENCV_FFMPEG_CAPTURE_OPTIONS}, ";", "|")

* Adding missing mandatory flags parameter

* Guarding against missing function via LIBAVUTIL version

* Code review fixes

Copy/paste error due to coder mistake reverted
Proper version checking for LIBAVUTIL_BUILD
2017-09-19 13:29:43 +03:00
Vadim Pisarevsky
fd20529686 Merge pull request #9657 from alalek:ocl_global_size_adjustment 2017-09-19 10:19:45 +00:00
Vadim Pisarevsky
92deccbf41 Merge pull request #9654 from savuor:seamlessclone 2017-09-19 10:16:37 +00:00
Tomoaki Teshima
48c4bea57c fix build on Visual Studio 2013 and earlier 2017-09-19 19:08:23 +09:00
Alexander Alekhin
2e68f89225 ocl: update kernel global size adjustment
Prevents 10000x1 => 10000x8 transformation after getContinuousSize() call
2017-09-18 19:04:46 +03:00
Benoit Blanchon
2d0611bc01 cmake: map RelWithDebInfo and MinSizeRel configuration to Release 2017-09-18 17:47:49 +02:00
Dmitry Kurtaev
fa109b94d9 Update 16UC thresholding 2017-09-18 18:34:45 +03:00
Arvid Piehl Lauritsen Böttiger
ca245e995a Added support for thresholding CV_16U images. 2017-09-18 15:34:37 +03:00
Vadim Pisarevsky
0624411875 Merge pull request #9624 from nilaykumarpatel:Feature2d_getDefaultName 2017-09-18 10:34:35 +00:00
Vadim Pisarevsky
63584bc4d0 Merge pull request #9444 from hrnr:akaze_tutorial 2017-09-18 10:27:07 +00:00
Vadim Pisarevsky
f7df5dd32c Merge pull request #9305 from dkurt:public_dnn_importer_is_deprecated 2017-09-18 09:35:35 +00:00
Vadim Pisarevsky
70c5d69640 Merge pull request #9310 from r2d3:svm_parallel 2017-09-18 09:32:41 +00:00
Vadim Pisarevsky
e012ccda4a Merge pull request #9517 from dkurt:tf_mobilenet 2017-09-18 09:31:19 +00:00
Vadim Pisarevsky
f4136679ea Merge pull request #9551 from ChristofKaufmann:MultiChannelMask 2017-09-18 09:28:34 +00:00
Vadim Pisarevsky
3358b8910b Merge pull request #9591 from dkurt:feature_dnn_caffe_importer_fp16 2017-09-18 09:26:23 +00:00
Vadim Pisarevsky
73298ea875 Merge pull request #9642 from saskatchewancatch:psnr-checks 2017-09-18 09:24:03 +00:00
Dmitry Kurtaev
bd8e6b7e14 Make external cv::dnn::Importer usage is deprecated 2017-09-18 08:52:36 +03:00
Alexander Alekhin
6757101f55 cmake/IPP: use absolute path 2017-09-17 23:12:59 +03:00
Nishant Arora
37ba1d6f2d Merge pull request #9599 from whizzzkid:master
Incorrect Naming (#9599)

* Resolved #9544

* This is a better fix

* This should be good.
2017-09-17 19:24:43 +00:00
Christof Kaufmann
7ec59fc097 Revert changes of mean and meanStdDev 2017-09-17 21:00:28 +02:00
RAJ NATARAJAN
0e44ad5543 Removed unnecessary assertion 2017-09-16 19:55:45 -07:00
Vadim Pisarevsky
4196543cd5 Merge pull request #9313 from dkurt:dnn_perf_test 2017-09-16 19:39:23 +00:00
RAJ NATARAJAN
6da62f56fa Add some useful input assertions to PSNR function
Input arrays must be depth CV_8U and of identical size.
2017-09-15 23:36:58 -06:00
Alexander Alekhin
99fae8146f Merge pull request #9626 from T0ny0:fisheye_fix_ 2017-09-15 20:29:39 +00:00
Tony0
2f0036c918 remove assignments in expressions 2017-09-15 22:45:17 +03:00
Alexander Alekhin
9dea296241 Merge pull request #9458 from csukuangfj:fix-doc 2017-09-15 19:35:01 +00:00
Alexander Alekhin
2566ef3515 Merge pull request #9526 from sturkmen72:update_documentation 2017-09-15 18:47:06 +00:00
Dmitry Kurtaev
d891e9b1d8 Layers for MobileNet from TensorFlow 2017-09-15 20:17:30 +03:00
Dmitry Kurtaev
8646d5fb84 FP16 Caffe models import and export 2017-09-15 18:06:34 +03:00
stalin18
d343a58580 removed unnecessary line 2017-09-15 17:09:21 +03:00
stalin18
ed3d2cd122 fixed unnecessary reconstruction in seamlessclone
fixed unnecessary reconstruction in seamlessclone by using only the
required rectangular area in input images
2017-09-15 17:09:21 +03:00
Vadim Pisarevsky
6bf8fe815d Merge pull request #9384 from dkurt:torch_split 2017-09-15 13:05:05 +00:00
Vadim Pisarevsky
a391871cce Merge pull request #9301 from dkurt:dnn_npy 2017-09-15 12:42:02 +00:00
Vadim Pisarevsky
41b23fde9f Merge pull request #9524 from dkurt:dnn_torch_openface 2017-09-15 12:38:12 +00:00
Vadim Pisarevsky
48cc1b351d Merge pull request #9560 from sovrasov:undistort_stop_criteria 2017-09-15 12:34:16 +00:00
Vadim Pisarevsky
5707304777 Merge pull request #9633 from saskatchewancatch:psnr-doc 2017-09-15 12:26:34 +00:00
Vadim Pisarevsky
cb0d695984 Merge pull request #9616 from dkurt:feature_dnn_tf_importer_atrous_conv 2017-09-15 10:24:05 +00:00
Vadim Pisarevsky
d60de63fa0 Merge pull request #9623 from dkurt:hotfix_disable_ssd_cpu_halide_test 2017-09-15 10:21:44 +00:00
saskatchewancatch
a90a93b454 i9629 - Added actual documentation for cv::PSNR function 2017-09-14 18:20:00 -06:00
Patel, Nilaykumar K
6857870412 Overloading getDefaultName method for Feature2D and its child classes
Signed-off-by: Vipin Anand <anand.vipin@gmail.com>
Signed-off-by: Prashanth Voora <prashanthx85@gmail.com>
Signed-off-by: Patel, Nilaykumar K <nilay.nilpat@gmail.com>
2017-09-14 23:22:18 +05:30
dtmoodie
3c229aa2eb async bugfix
upload winsize and iters as members to prevent async out of scope issues
2017-09-14 14:48:49 +00:00
Tony0
62df5e8c8b fisheye: fix initUndistortRectifyMap() 2017-09-14 14:57:21 +03:00
Rostislav Vasilikhin
4435ec5f26 Bit-exact version of RGB2Luv_b (#9226)
* Imgproc_ColorLab_Full.accuracy test fixed

* Lab and Luv tests: rewritten, constants explained

* CV_ColorCvtBaseTest: added methods for 8u implementations

* Lab2RGB_b: bit-exactness enabled for all modes; non-vectorized code fixed to comply with vectorized

* srgb support added

* XYZ constants made softdouble

* bit-exact tests written for Lab

* ColorLab_full test fixed

* reverted: no 8u convertors for CV_ColorCvtBaseTest

* added checksum-based test for Lab bit-exactness

* extra declarations removed

* Lab test fix: stop at first mismatch

* test info output improved

* error message fixed

* lab_tetra squashed

* initial version is almost written

* unfinished work

* compilation fixed, to be debugged

* Lab test removed

* more fixes

* Luv2RGBinteger: channels order fixed

* Lab structs removed

* good trilinear interpolation added

* several fixes

* removed Luv2RGB interpolations, XYZ tables; 8-cell LUT added

* no_interpolate made 8-cell

* interpolations rewritten to 8-cell, minor fixes

* packed interpolation added for RGB2Luv

* tetra implemented

* removing unnecessary code

* LUT building merged

* changes ported to color.cpp

* minor fixes; try to suppress warnings

* fixed v range of Luv

* fixed incorrect src channel number

* minor fixes

* preliminary version of Luv2RGBinteger is done

* Luv2RGB_b is in progress

* XYZ color constants converted to softfloat

* Luv test: precision fixed

* Luv bit-exactness test added

* warnings fixed

* compilation fixed, error message fixed

* test_lab.cpp removed
2017-09-14 14:51:27 +03:00
Vladislav Sovrasov
b421ebef86 imgproc: slightly change the signature of undistortPoints overload 2017-09-14 12:19:40 +03:00
Vladislav Sovrasov
701c7e5685 imgproc: add stop criteria tuning in undistortPoints 2017-09-14 11:43:54 +03:00
Dmitry Kurtaev
0ce7c33bc8 Torch's Concat and ConcatTable doesn't use Split layer 2017-09-14 09:26:57 +03:00
Dmitry Kurtaev
7dc6b1d7d4 Layers for OpenFace face recognition network 2017-09-14 09:11:31 +03:00
Dmitry Kurtaev
58b890b9f7 Dilated convolution import from TensorFlow 2017-09-13 18:44:14 +03:00
Dmitry Kurtaev
6639348c5e Disable SSD on CPU Halide test 2017-09-13 18:19:54 +03:00
Vadim Pisarevsky
9640bbe76d Merge pull request #9592 from alalek:issue_9589 2017-09-13 14:57:49 +00:00
Faheel Ahmad
7d168d3d6f Improve README (#9243) 2017-09-13 17:58:34 +03:00
Vadim Pisarevsky
32bb71d686 Merge pull request #9603 from alalek:ocl_device_extensions 2017-09-13 14:43:36 +00:00
Vadim Pisarevsky
822d33d64b Merge pull request #9374 from savuor:test_lab_bit_exact 2017-09-13 14:39:04 +00:00
Suleyman TURKMEN
d547c6b1a2 documentation improvement 2017-09-13 17:24:59 +03:00
Kerry Billingham
31348f8c30 Removed hard-coded version from integration test. (#9335)
Documented how to change the version of Maven to match OpenCV core and modified bash scripts accordingly.

Extracted integration test module and placed into own profile.

Configured CMake Maven plugin to use native CMake by default.

Updated documentation.
2017-09-13 17:19:16 +03:00
Vadim Pisarevsky
bc09d1ba3b Merge pull request #9406 from Cartucho:update_core_tutorials 2017-09-13 14:09:39 +00:00
Vadim Pisarevsky
f1aa180a40 Merge pull request #9574 from saskatchewancatch:i9482 2017-09-13 13:59:43 +00:00
Vadim Pisarevsky
8c7f19850f Merge pull request #9576 from dkurt:feature_dnn_tf_importer_fp16 2017-09-13 13:57:38 +00:00
Vadim Pisarevsky
da257f3397 Merge pull request #9541 from sturkmen72:patch-15 2017-09-13 13:47:27 +00:00
Vadim Pisarevsky
622318aeae Merge pull request #9561 from dkurt:fix_8693 2017-09-13 13:34:49 +00:00
Vadim Pisarevsky
b8b5d83ad0 Merge pull request #9566 from alalek:python_signatures 2017-09-13 13:32:05 +00:00
Vadim Pisarevsky
93c3f20deb Merge pull request #9569 from dkurt:test_dnn_ssd_halide 2017-09-13 13:29:50 +00:00
Vadim Pisarevsky
258b13f2e0 Merge pull request #9600 from StevenPuttemans:fix_9583 2017-09-13 13:27:04 +00:00
Vadim Pisarevsky
42cd061af0 Merge pull request #9581 from sovrasov:rtree_disable_cv 2017-09-13 13:20:52 +00:00
Suleyman TURKMEN
f6daaccccf Update train_HOG.cpp 2017-09-12 20:07:37 +03:00
Rostislav Vasilikhin
18ca3d1e62 error message fixed 2017-09-12 20:05:58 +03:00
Rostislav Vasilikhin
2457bfc1e3 test info output improved 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
f6a165d10f Lab test fix: stop at first mismatch 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
92093a6e6c extra declarations removed 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
f1e8aa70a0 added checksum-based test for Lab bit-exactness 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
d25344c257 reverted: no 8u convertors for CV_ColorCvtBaseTest 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
62ee92e3e2 ColorLab_full test fixed 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
375ec5ed7e bit-exact tests written for Lab 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
758f914249 XYZ constants made softdouble 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
121fa04906 srgb support added 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
5ea1c72291 Lab2RGB_b: bit-exactness enabled for all modes; non-vectorized code fixed to comply with vectorized 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
f5dff87242 CV_ColorCvtBaseTest: added methods for 8u implementations 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
f0ef7bd149 Lab and Luv tests: rewritten, constants explained 2017-09-12 17:16:30 +03:00
Rostislav Vasilikhin
0e6c335077 Imgproc_ColorLab_Full.accuracy test fixed 2017-09-12 17:16:30 +03:00
Dmitry Kurtaev
ce41a15437 Import and convert FP16 weights from TensorFlow 2017-09-12 09:50:55 +03:00
Alexander Alekhin
d9e364f31f Merge pull request #9606 from sovrasov:fix_gcc7_warnings 2017-09-11 18:45:31 +00:00
Vladislav Sovrasov
32bf712102 cmake: disable implicit-fallthrough by default 2017-09-11 16:04:00 +03:00
Steven Puttemans
98e0d13f99 fixing issue 9583 - issue in cascadeclassifier code clipObjects 2017-09-11 09:15:04 +02:00
saskatchewancatch
c9d3c0f206 More whitespace fixes 2017-09-10 19:03:56 -06:00
Alexander Alekhin
9e381d0782 ts: dump OpenCL device extensions 2017-09-10 20:32:30 +00:00
Alexander Alekhin
169add5aa6 ocl: added cv::ocl::Device::isExtensionSupported() method 2017-09-10 20:32:30 +00:00
Alexander Alekhin
597b3f4456 Merge pull request #9580 from mshabunin:fix-static-6 2017-09-09 19:31:21 +00:00
Alexander Alekhin
26ad229bd6 Merge pull request #9590 from alalek:ocl_runtime_fix 2017-09-09 19:30:07 +00:00
tribta
45afd29b72 Tutorial Mask Operations on Matrices 2017-09-09 15:20:21 +01:00
tribta
954e2f9b9c Tutorial Discrete Fourier Transform 2017-09-09 15:10:18 +01:00
tribta
13317bdfda Tutorial Basic Geometric Drawing 2017-09-09 15:02:51 +01:00
tribta
c4c1e94088 Tutorial Adding Images 2017-09-09 15:02:51 +01:00
saskatchewancatch
30ff197f78 Fix whitespace issues 2017-09-08 20:27:03 -06:00
saskatchewancatch
8877e3aedb Adjustmenbts 2017-09-08 19:55:19 -06:00
Alexander Alekhin
9c973144d8 Merge pull request #9595 from paroj:imreadmulti_py 2017-09-08 14:03:03 +00:00
Alexander Alekhin
576a85368d Merge pull request #9582 from sovrasov:fix_gcc7_macro_warning 2017-09-08 13:31:27 +00:00
Pavel Rojtberg
2d34443834 python: imreadmulti - add CV_OUT so it is correctly wrapped 2017-09-08 15:09:25 +02:00
Alexander Alekhin
f8598e173b Merge pull request #9588 from lupustr3:pvlasov/ipp_compatibility 2017-09-08 11:23:41 +00:00
Alexander Alekhin
d63f698cbe cudafilters: don't modify "const" data 2017-09-08 14:19:09 +03:00
Alexander Alekhin
44b75eb116 core: fix OpenCL runtime compilation with HAVE_OPENCL_STATIC 2017-09-08 12:43:33 +03:00
Maksim Shabunin
248e2c7d47 Fixed some issues found by static analysis 2017-09-08 12:22:12 +03:00
Pavel Vlasov
37ab318657 Compatibility improvement with old IPP versions (tested on 9.0.1);
Manual IPP dispatcher simplification;
2017-09-08 11:08:24 +03:00
Dmitry Kurtaev
cad7c4d51d MobileNet-SSD and VGG-SSD topologies in Halide 2017-09-08 09:55:53 +03:00
saskatchewancatch
fda1e76776 Feedback.
Still need to remove the descriptions of these flags from cv::norm
2017-09-07 22:43:55 -06:00
Vladislav Sovrasov
eeba5c3603 core: fix gcc7 warning about empty VA_ARGS in Assert macro 2017-09-07 16:20:38 +03:00
Vladislav Sovrasov
3eb9a655c7 ml: disable not implemented k-fold validation in RTrees 2017-09-07 15:49:46 +03:00
Vadim Pisarevsky
d25cbaaba8 Merge pull request #9293 from sovrasov:assert_improvement 2017-09-07 11:17:42 +00:00
Vadim Pisarevsky
4970a56341 Merge pull request #9577 from mshabunin:const-foreach 2017-09-07 11:12:45 +00:00
Vadim Pisarevsky
f080d9390a Merge pull request #9578 from sovrasov:objdet_build_fix 2017-09-07 11:11:30 +00:00
Vadim Pisarevsky
f4265d251a Merge pull request #9579 from alalek:ocl_float_calc 2017-09-07 11:10:20 +00:00
Vladislav Sovrasov
f2105419fa objdetect: fix wrong cxx11 features check 2017-09-07 12:49:49 +03:00
Alexander Alekhin
89bb028bfc imgproc(ocl): don't use doubles to process float data 2017-09-07 12:42:20 +03:00
Maksim Shabunin
c92c99ed0b Enabled forEach for const Mats 2017-09-07 11:35:14 +03:00
saskatchewancatch
570083fb9f i9482:
Removing description for cv::NormTypes that's already in cv::norm

Masking out NORM_TYPE_MASK from docs since it's not intended to be exposed to user
2017-09-06 22:42:01 -06:00
saskatchewancatch
b32685c714 i9482: Improve documentation concerning norm functionality.
Added forkfour Latex command to math js support.

Split cv::norm documentation between the cv::norm and its overload, to make things clearer

Corrected some typos and cleaned up grammar.

Result is clearer documentation for the norms.

Work pending...
2017-09-06 22:35:39 -06:00
Maksim Shabunin
2ac57a2b1f Merge pull request #9457 from alalek:type_traits_issue_7599 2017-09-06 13:34:29 +00:00
Alexander Alekhin
b05789ff0b Merge pull request #9564 from saskatchewancatch:i9550 2017-09-06 08:29:16 +00:00
Alexander Alekhin
572a7bf6ce python: add special targets gen_opencv_python2(3) 2017-09-06 08:23:04 +03:00
Alexander Alekhin
200c8a0d3a python: generate pyopencv_signatures.json file 2017-09-06 08:23:04 +03:00
saskatchewancatch
4832c24ef7 Allow TIFF min=white PHOTOMETRIC interpretation images to be read unchanged 2017-09-05 21:43:33 -06:00
Dmitry Kurtaev
8b094755fa Fix https://github.com/opencv/opencv/issues/8693 2017-09-05 23:33:18 +03:00
Lewis B
1caca2112b Merge pull request #8934 from lewisjb:python-classes
* Refactor Python Classes
2017-09-05 05:38:17 +00:00
Alexander Alekhin
42fbbfecc6 Merge pull request #9522 from terfendail:resize_move 2017-09-05 05:33:07 +00:00
Christof Kaufmann
46a668c565 Add multi-channel mask support to mean, meanStdDev and setTo
This adds the possibility to use multi-channel masks for the functions
cv::mean, cv::meanStdDev and the method Mat::setTo. The tests have now a
probability to use multi-channel masks for operations that support them.
This also includes Mat::copyTo, which supported multi-channel masks
before, but there was no test confirming this.
2017-09-04 19:40:27 +02:00
Alexander Alekhin
164a41b399 fix CUDA build
CUDA implementation wants to convert std::vector<KeyPoint> <-> GpuMat.
There is no direct mapping from KeyPoint (mix of int/float fields)
into cv::Mat element type, so this conversion must be avoided.

Legacy mode is turned back for CUDA builds.
2017-09-04 14:41:29 +03:00
Maksim Shabunin
791a11f949 Merge pull request #9548 from alalek:python_tests 2017-09-04 10:14:13 +00:00
Maksim Shabunin
334241d82e Merge pull request #9546 from sturkmen72:GrammaTech 2017-09-04 09:51:22 +00:00
Alexander Alekhin
7791839f22 python(test): tests filtering 2017-09-03 18:26:24 +00:00
Alexander Alekhin
2f94637899 python(test): refactor test.py, move test code outside from test.py 2017-09-03 18:26:09 +00:00
Alexander Alekhin
936234d5b1 python(test): enable pylint checks for tests 2017-09-03 18:19:17 +00:00
Alexander Alekhin
e1b102e9a6 Merge pull request #9476 from dkurt:tutorial_dnn_android 2017-09-03 10:34:25 +00:00
Dmitry Kurtaev
72001dc13c Android sample for DNN module 2017-09-03 12:58:10 +03:00
Alexander Alekhin
3df41b3263 Merge pull request #9426 from borisfom:dispatch 2017-09-03 09:24:59 +00:00
Alexander Alekhin
7b4f323b8b Merge pull request #9498 from saskatchewancatch:i9403 2017-09-03 09:15:15 +00:00
Suleyman TURKMEN
ee6aacee9c Update window_gtk.cpp
Update miniflann.cpp

Update test_stereomatching.cpp
2017-09-03 04:06:45 +03:00
Alexander Alekhin
62c6656130 Merge pull request #9533 from alalek:regression_test_9507 2017-09-02 06:44:47 +00:00
Alexander Alekhin
4acdcfd008 Merge pull request #9527 from mshabunin:mediasdk-fix 2017-09-01 19:25:12 +00:00
Alexander Alekhin
273add5d5d Merge pull request #9534 from alalek:cmake_cl2cpp_dependency_fix 2017-09-01 18:11:15 +00:00
Alexander Alekhin
f7a273cfb3 core(test): regression test for 9507 2017-09-01 21:08:58 +03:00
Alexander Alekhin
d57321f7c1 Merge pull request #9528 from berak:fix_bfmatcher_hamming2 2017-09-01 18:07:57 +00:00
Alexander Alekhin
146be78390 cmake: cl2cpp change main OUTPUT to .hpp file
To reduce number of unnecessary rebuilds on updates of OpenCL kernels
2017-09-01 08:24:59 +03:00
saskatchewancatch
cc17400849 i9403: Removing checks from trackbar min/max set functions.
Removing unnecessary range checks for QT backend support's setTrackbarMin and setTrackbarMax fucntions

Fixes
2017-08-31 17:52:29 -06:00
Alexander Alekhin
1114cbf671 Merge pull request #9514 from LaurentBerger:docInsWin 2017-08-31 19:19:39 +00:00
LaurentBerger
82ad0749af add pushd popd 2017-08-31 19:25:53 +02:00
Alexander Alekhin
0451629e22 core(persistence): resolve DMatch/KeyPoint problem 2017-08-31 19:35:48 +03:00
Alexander Alekhin
86b55b3923 core: eliminate CV_ELEM_SIZE() 2017-08-31 19:35:48 +03:00
Alexander Alekhin
01519313d7 dnn: invalid bindings 2017-08-31 19:35:48 +03:00
Alexander Alekhin
7e12c879c2 core: extend traits::Type / traits::Depth for compatible types
DMatch and Keypoint are not compatible types (mixed float/int fields)
2017-08-31 19:35:48 +03:00
Alexander Alekhin
d0f902053f Merge pull request #9510 from sturkmen72:update_samples 2017-08-31 15:57:45 +00:00
berak
da208216ee features2d: fix BFMatcher.radiusMatch with HAMMING2 2017-08-31 17:24:02 +02:00
Maksim Shabunin
235b00b6ee Fixed MediaSDK tests and build warnings 2017-08-31 16:50:42 +03:00
Vitaly Tuzov
e8caa9b5c0 removed unused interpolateLinear 2017-08-31 15:34:27 +03:00
Alexander Alekhin
05b99a4dde Merge pull request #9523 from vivekwisdom:master
Corrected Typo in Additional Resources Section
2017-08-31 12:17:29 +00:00
Vivek Wisdom
e6ee800fde Corrected Typo in Additional Resources Section
Corrected the Typo 'Hasing' to 'Hashing' in second item in Additional Resources section. Also added Wikipedia link for the LSH.
2017-08-31 17:37:24 +05:30
Alexander Alekhin
72f789bf34 core: fix type traits 2017-08-31 15:05:46 +03:00
Alexander Alekhin
f6265500fb Merge pull request #9516 from arrybn:ssd_face_detector 2017-08-31 11:43:04 +00:00
Vitaly Tuzov
b1f46b6d69 Move resize implementation to separate file 2017-08-31 14:36:19 +03:00
Aleksandr Rybnikov
d991054202 Added files for face detector sample 2017-08-31 13:46:17 +03:00
Balint Cristian
0c4e294504 Enable CUDA_NVCC_FLAGS at arch detect step. 2017-08-31 12:57:43 +03:00
Alexander Alekhin
5c572ffa1f Merge pull request #9509 from borisfom:cuda9-shfl 2017-08-31 09:20:12 +00:00
Alexander Alekhin
cae467cda0 Merge pull request #9521 from saskatchewancatch:i9489 2017-08-31 09:19:28 +00:00
LaurentBerger
3e9a659f4c Another way to build opencv
update

add anchor
2017-08-31 08:45:18 +02:00
saskatchewancatch
33ba7867f6 Don't truncate label for tracknbar name (Qt)
Setting truncate option for QString leftJustified method to false fixes 10 character truncation issue noted in issue 9489
2017-08-31 00:40:51 -06:00
Alexander Alekhin
80519a0278 Merge pull request #9326 from sovrasov:video_cap_new_check 2017-08-30 14:29:48 +00:00
Vadim Pisarevsky
d743a4c969 Merge pull request #9506 from alalek:ocl_fix_canny_ub_9496 2017-08-30 13:37:44 +00:00
Alexander Alekhin
02d98d3242 Merge pull request #9518 from alalek:fix_flann_unsupported_type 2017-08-30 12:48:02 +00:00
Suleyman TURKMEN
efa0e75eac Update stitching.cpp 2017-08-30 15:09:33 +03:00
Alexander Alekhin
e1ab227b6d Merge pull request #9515 from berak:fix_directx_samples 2017-08-30 10:33:17 +00:00
Alexander Alekhin
7067c1597d flann: std::vector<size_t> can't be converted into cv::Mat properly
size_t is not supported cv::Mat type
2017-08-30 13:16:00 +03:00
berak
a0e26817e2 fix missing std:: in d3dsample 2017-08-30 11:00:18 +02:00
Boris Fomitchev
dde04d5d3e Addressing CUDA9 shfl deprecation 2017-08-29 13:27:21 -07:00
Alexander Alekhin
91ef0b9537 Merge pull request #9507 from delftrobotics-forks:restrict-initializer-list-constructor 2017-08-29 18:09:11 +00:00
Alexander Alekhin
964dda2ef2 Merge pull request #9503 from sovrasov:convex_hull_disable_inplace 2017-08-29 16:41:55 +00:00
Alexander Alekhin
e3b12bdb59 imgproc(ocl): eliminate div by zero in Canny 2017-08-29 19:29:53 +03:00
Maarten de Vries
3571e8f263 Restrict std::initializer_list constructors to arithmetic types. 2017-08-29 16:37:20 +02:00
Vladislav Sovrasov
91e56abcf1 imgproc: disable buggy inplace processing in convexHull 2017-08-29 15:28:34 +03:00
Alexander Alekhin
4ee3034496 Merge pull request #9504 from alalek:regression_9376 2017-08-29 12:13:18 +00:00
Alexander Alekhin
034aaa7a70 Merge pull request #9465 from tomoaki0705:fixJetsonTK1Build 2017-08-29 11:46:10 +00:00
Alexander Alekhin
8f05126619 imgcodecs: fix regression 9376 2017-08-29 13:31:26 +03:00
Tomoaki Teshima
6531fd142c fix build error on Jetson TK1
* guard correctly in header file
  * guard correctly in cmake file
2017-08-29 19:05:13 +09:00
Vadim Pisarevsky
518c6ae8c6 Merge pull request #9327 from sovrasov:fs_free_on_error_fix 2017-08-28 20:25:34 +00:00
Vadim Pisarevsky
048feeb3f0 Merge pull request #9416 from eruffaldi:f_9411_mingw_videoio 2017-08-28 20:22:56 +00:00
Vadim Pisarevsky
b00dff83de Merge pull request #9456 from adishavit:issue_8840/CorrectlyRestoreWindowPosOnMultipleMonitors 2017-08-28 20:15:12 +00:00
Vadim Pisarevsky
4a81492b68 Merge pull request #9474 from miqlas:haiku_support 2017-08-28 20:11:59 +00:00
Vadim Pisarevsky
d861c03366 Merge pull request #9479 from alalek:issue_9477 2017-08-28 20:10:32 +00:00
Alexander Alekhin
52a60526f1 Merge pull request #9492 from paroj:ximea_serial 2017-08-28 19:33:54 +00:00
Alexander Alekhin
ee26889205 Merge pull request #9495 from alalek:fix_pylint_version 2017-08-28 18:37:50 +00:00
Alexander Alekhin
537ab13842 cmake: fix Pylint version detection 2017-08-28 19:03:44 +03:00
Pavel Rojtberg
01acb08c7b videoio: ximea - allow opening capture by serial number 2017-08-28 16:58:22 +02:00
KUANG Fangjun
11fa0094ff Improve the documentation.
Add demo code for cv::reduce, cv::merge and cv::split.
2017-08-28 12:36:23 +02:00
Dmitry Kurtaev
5c43a394c5 Added performance test for Caffe framework 2017-08-27 19:40:58 +03:00
Adi Shavit
183081ccd3 Changes window position only if BOTH top corners are outside ALL monitors. 2017-08-27 13:47:20 +03:00
Alexander Alekhin
897b071b97 videoio(v4l): move MJPEG/JPEG to the end of probe list 2017-08-27 10:26:05 +03:00
Zoltán Mizsei
6258ff36bc Haiku build fix 2017-08-26 11:37:59 +02:00
Zoltán Mizsei
c7516b840a Haiku got no -lrt and -ld 2017-08-26 11:35:13 +02:00
Alexander Alekhin
8ffa29473f Merge pull request #9467 from sovrasov:stereo_calib_fix_td 2017-08-25 14:32:57 +00:00
Vladislav Sovrasov
e0ff5106d3 calib3d: fix warning from gcc7 2017-08-25 16:29:59 +03:00
Alexander Alekhin
603fa03ac6 Merge pull request #9441 from wzw-intel:delete_program 2017-08-25 12:03:27 +00:00
Adi Shavit
8a094a5f54 Merge pull request #9445 from adishavit:master
* Adds cv::resizeWindow() overload taking a single cv::Size argument.

* Replaces copied documentaion with Doxygen @overload command.
2017-08-25 11:37:50 +00:00
Vladislav Sovrasov
ef7833a271 calib3d: add CALIB_FIX_TANGENT_DIST flag to stereoCalibrate 2017-08-25 13:05:16 +03:00
Wu Zhiwen
da3da84a20 ocl: Add a function to unload a run-time cached program
This function is the counterpart of "Context::getProg".
With this function, users have chance to unload a program
from global run-time cached programs, and save resource.
2017-08-25 08:42:11 +08:00
Alexander Alekhin
b18983a005 test(hal): properly dispatch FP16 test 2017-08-24 20:54:17 +00:00
Alexander Alekhin
bee5cb504b Merge pull request #9140 from Cartucho:linter_python 2017-08-24 19:49:12 +00:00
Alexander Alekhin
717b2f496f Merge pull request #9139 from Cartucho:improve_match_template_py
GSoC - Improving code match_template.py
2017-08-24 19:51:09 +00:00
Alexander Alekhin
a2f7132648 Merge pull request #9460 from Cartucho:pylint_samples_py 2017-08-24 19:46:54 +00:00
tribta
7555ab194f Samples Python:
* Unused variables
* Bad identation
2017-08-24 17:45:14 +01:00
Alexander Alekhin
91f680aff6 Merge pull request #9448 from alalek:issue_9443 2017-08-24 16:05:08 +00:00
Alexander Alekhin
3202bbe17c Merge pull request #9349 from dkurt:tf_deconv 2017-08-24 15:58:38 +00:00
Alexander Alekhin
bc3280d64d Merge pull request #9414 from gadcam:HOGDescriptor-winSigma 2017-08-24 15:57:18 +00:00
Alexander Alekhin
8e7e24ac80 Merge pull request #9394 from dkurt:fix_halide_wrapper 2017-08-24 15:56:54 +00:00
Alexander Alekhin
cc5da83474 Merge pull request #9252 from jbms:fix/tiff-in-memory 2017-08-24 15:33:48 +00:00
Alexander Alekhin
c515e878ab build: eliminate Win32 warnings 2017-08-24 16:07:12 +03:00
Alexander Alekhin
d195f2775a cmake: change Pylint integration 2017-08-24 14:59:33 +03:00
tribta
b7fa6d84bc Using Pylint Tool to Test the python tutorial codes
* Adding CMake script to check if pylint is installed
* Adding Pylint config file (to choose the tests that are enabled)
* Adding CMake script to samples/python/tutorial_code

Testing: bad-indentation, mixed-indentation, unnecessary-semicolon, unused-variable
2017-08-24 14:58:48 +03:00
Alexander Alekhin
9c14a2f0aa Merge pull request #9395 from lupustr3:pvlasov/icv2017u3_update 2017-08-24 11:48:53 +00:00
Alexander Alekhin
e80766abf0 Merge pull request #9419 from sturkmen72:patch-1 2017-08-24 09:49:03 +00:00
Alexander Alekhin
25a4559565 Merge pull request #9294 from arrybn:layers_perf 2017-08-24 09:37:49 +00:00
Alexander Alekhin
dcfc1fe17e Merge pull request #9333 from dkurt:update_mobilenet_sample 2017-08-24 09:37:08 +00:00
Alexander Alekhin
63cd581d75 Merge pull request #9451 from alalek:fix_warning_self_assign 2017-08-24 08:46:40 +00:00
Boris Fomitchev
c48807c383 Merge pull request #9418 from borisfom:cuda9
CUDA9 build fixed, added detection (#9418)

* CUDA9 build fixed, added detection

* Replacing deprecated __shfl_xxx with __shfl_sync, fixing bogus CUDA9 warnings
2017-08-24 07:11:44 +00:00
Alexander Alekhin
d0509f6702 Merge pull request #9449 from ribalda:ocv 2017-08-23 19:40:36 +00:00
Alexander Alekhin
1fc9425bb1 Merge pull request #9450 from alalek:issue_9440 2017-08-23 19:40:15 +00:00
Alexander Alekhin
8285924cf3 ts: eliminate build warning '-Wself-assign' 2017-08-23 19:08:55 +03:00
Alexander Alekhin
97aaaf50b8 carotene: removed unnecessary 'register' specifier 2017-08-23 18:57:00 +03:00
Alexander Alekhin
c5f2170ce8 carotene: don't use __asm__ with aarch64 2017-08-23 18:56:53 +03:00
Ricardo Ribalda Delgado
6fc5697950 ocl: Fix OpenCL library detection in Linux
OpenCL runtime does not require OpenCL development file (libOpenCL.so),
just the "run" library (so.1).

This patch searches for the run library (so.1) if the dev library (.so)
is not found.

Web search shows that this error has been present since at least 2015
http://answers.opencv.org/question/80532/haveopencl-return-false/

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
2017-08-23 16:38:06 +02:00
Alexander Alekhin
aacae20657 imgcodesc: fix code problems with integer overflow / address arithmetic / UB 2017-08-23 17:27:27 +03:00
Alexander Alekhin
c9fe702671 Merge pull request #9447 from dkurt:qt_windows 2017-08-23 14:19:45 +00:00
Dmitry Kurtaev
7123d9c376 Added 1ms delay to let system decorate Qt windows 2017-08-23 15:48:52 +03:00
Alexander Alekhin
a893b147dc Merge pull request #9428 from csukuangfj:fix-commandline-parser 2017-08-23 12:48:28 +00:00
Pavel Vlasov
a57718e1ac ICV2017u3 package update;
- Optimizations set change. Now IPP integrations will provide code for SSE42, AVX2 and AVX512 (SKX) CPUs only. For HW below SSE42 IPP code is disabled.
- Performance regressions fixes for IPP code paths;
- cv::boxFilter integration improvement;
- cv::filter2D integration improvement;
2017-08-23 14:24:43 +03:00
Aleksandr Rybnikov
8b1146deb2 Added function to get timings for layers 2017-08-23 13:40:05 +03:00
KUANG Fangjun
97ec91ad67 fix cv::CommandLineParser.
It should handle bool value not only of "true" but also of "TRUE" and "True".
2017-08-23 11:38:58 +02:00
Jiri Horner
f6deaf5f2a tracking tutorial: add fps to stats 2017-08-23 10:40:17 +02:00
Dmitry Kurtaev
1e3052d3cd Update MobileNet object detection sample 2017-08-23 09:29:01 +03:00
Alexander Alekhin
b67c64e2c8 Merge pull request #9439 from eruffaldi:macos_build_opengl_qt5_interop2 2017-08-23 04:13:50 +00:00
Emanuele Ruffaldi
301ab43897 apple exclusion 2017-08-22 23:32:01 +02:00
Alexander Alekhin
a710317aa0 Merge pull request #9421 from csukuangfj:fix-doc 2017-08-22 20:51:49 +00:00
Alexander Alekhin
8f301151e4 Merge pull request #9438 from lpea:master 2017-08-22 19:25:09 +00:00
Guillaume Jacob
688fcf14f3 CMakeLists.txt: fix a typo in a message 2017-08-22 20:48:35 +02:00
Alexander Alekhin
f0fb665407 Merge pull request #9376 from alalek:imgcodecs_refactoring 2017-08-22 16:32:47 +00:00
Dmitry Kurtaev
e74c475162 Removed 3rdparty serialized NumPy arrays parser 2017-08-22 18:14:32 +03:00
Alexander Alekhin
cc5b99c236 Merge pull request #9436 from alalek:cmake_drop_install_name_dir 2017-08-22 14:10:18 +00:00
Alexander Alekhin
af09cb2834 Merge pull request #9347 from kschwan:fix-docs
Fix doxygen comment in BFMatcher
2017-08-22 13:55:03 +00:00
Alexander Alekhin
5adc0bf3a7 Merge pull request #9434 from alalek:fix_numpy_warning 2017-08-22 13:44:47 +00:00
Alexander Alekhin
58dc58aa51 cmake: drop INSTALL_NAME_DIR 2017-08-22 15:26:20 +03:00
Alexander Alekhin
2eb3c02059 Merge pull request #9431 from alalek:cmake_compiler_version 2017-08-22 12:22:45 +00:00
Alexander Alekhin
179ef0a975 Merge pull request #9429 from StevenPuttemans:fix_9404 2017-08-22 09:25:29 +00:00
Alexander Alekhin
ea6fe71a50 python: eliminate -Wundef warning about NPY_INTERNAL_BUILD
numpy 1.13.0+
2017-08-22 11:56:55 +03:00
Boris Fomitchev
76f7fb5231 Extending CPU dispatch to the tests; fixing a typo 2017-08-21 20:58:12 -07:00
Dmitry Kurtaev
54f0616a13 Deconvolution layer from TensorFlow 2017-08-21 21:38:07 +03:00
Alexander Alekhin
f694192878 cmake: use CMAKE_CXX_COMPILER_VERSION (CMake 2.8.8+)
- '-fvisibility' flag was updated
- PVAPI library detection was changed
2017-08-21 18:06:40 +03:00
Suleyman TURKMEN
ea4bcadb38 Update faq.markdown 2017-08-21 17:27:21 +03:00
Steven Puttemans
9b173e2db1 fix description of setTrackbarMin 2017-08-21 12:47:04 +02:00
Alexander Alekhin
89172c08a2 Merge pull request #9049 from Cartucho:improve_mask_tutorial_codes 2017-08-21 07:14:46 +00:00
KUANG Fangjun
336996152a Improve the documentation. 2017-08-20 17:21:39 +02:00
Emanuele Ruffaldi
588ca5d126 videoio for mingw32: added STRSAFE_NO_DEPRECATE and realpath 2017-08-19 23:51:02 +02:00
Alexander Alekhin
a2120263de Merge pull request #9415 from alalek:cmake_deprecated_policies 2017-08-19 18:19:31 +00:00
Alexander Alekhin
8c84763ed3 vtk: eliminate 'override' build warning 2017-08-19 16:05:52 +00:00
Alexander Alekhin
87a98e4562 cmake: CMP0026 NEW 2017-08-19 15:15:05 +00:00
Alexander Alekhin
e63d3dd25f cmake: CMP0046 NEW 2017-08-19 15:15:05 +00:00
Alexander Alekhin
b6949c5088 cmake: CMP0022 NEW 2017-08-19 15:15:05 +00:00
Alexander Alekhin
870d9502bb cmake: CMP0020 NEW 2017-08-19 15:15:05 +00:00
Camille Barneaud
d5e64f4eb2 Avoid HOGDescriptor with sigma = 0
Solve #9307.
2017-08-19 15:03:16 +02:00
Alexander Alekhin
3b38eeaccf Merge pull request #9400 from sovrasov:videoio_fix_warn 2017-08-18 16:03:50 +00:00
Vladislav Sovrasov
2b8f888ea4 videoio: remove throw lists since they are deprecated in cxx11 (and gcc7 produces a warning) 2017-08-18 12:07:24 +03:00
Alexander Alekhin
316fb26f5b Merge pull request #9397 from alalek:memcpy_null_guard 2017-08-18 08:47:17 +00:00
Alexander Alekhin
a835517049 Merge pull request #9369 from alalek:cpp_refactor_gtk 2017-08-17 20:05:56 +00:00
Alexander Alekhin
5c325466e0 Merge pull request #8847 from Cartucho:java_highgui 2017-08-17 20:04:33 +00:00
Nishant Arora
98db804541 Merge pull request #9210 from whizzzkid/fixing-cuda
Fixing explicitly call download method for cuda::GpuMat object
2017-08-17 16:32:53 +00:00
Alexander Alekhin
71e1889825 core: fix memcpy with zero size 2017-08-17 18:30:31 +03:00
Dmitry Kurtaev
4e28c00e7b Fix Halide buffer behavior in case of OpenCL device memory allocation 2017-08-17 13:27:54 +03:00
Jiri Horner
a5b5684670 Merge pull request #9330 from hrnr:akaze_ocl
[GSOC] Enable OCL for AKAZE (#9330)

* revert e0489cb - reenable OCL for AKAZE

* deal with conversion internally in AKAZE

* pass InputArray directly to AKAZE to allow distiguishing input Mat/UMat. deal with conversion there
* ensure that keypoints orientations are always computed. prevents misuse of internal AKAZE class.

* covert internal AKAZE functions to use InputArray/OutputArray

* make internal functions private in AKAZE

* split OCL and CPU paths in AKAZE

* create 2 separate pyramids, 1 for OCL and 1 for CPU
* template functions that use temporaries to always store them as correct type (UMat/Mat)

* remove variable used only in OCL path

causes unused variable warning

* update AKAZE documentation

* run ocl version only when ocl is enabled

* add tests for OCL path in AKAZE

* relax condition for keypoints angle
2017-08-16 16:46:11 +00:00
Alexander Alekhin
78a310630f imgproc(test): add checks for remove() call 2017-08-16 18:56:42 +03:00
Alexander Alekhin
999f41fb4f imgcodecs: refactoring, improve code quality 2017-08-16 18:56:41 +03:00
Alexander Alekhin
3a8dbebd37 Merge pull request #9382 from StevenPuttemans:fix_9121 2017-08-16 13:56:33 +00:00
Alexander Alekhin
0d854db361 build: workaround GCC 7.1.1 compilation issue with sanitize flags
Version: gcc (GCC) 7.1.1 20170622 (Red Hat 7.1.1-3)
Flags: -fsanitize=address,undefined
2017-08-16 14:06:30 +03:00
Alexander Alekhin
fdb3d4ff60 Merge pull request #9379 from berak:imgproc_hanning 2017-08-16 10:28:19 +00:00
Steven Puttemans
9e5c9dad55 fix_9121 2017-08-16 11:34:55 +02:00
berak
e7b9cfa8f2 imgproc:fix winSize in createHanningWindow() 2017-08-16 08:53:45 +02:00
Alexander Alekhin
1d4a29f149 Merge pull request #9366 from martinsey:brisk-detection-parameter-extension 2017-08-15 10:48:11 +00:00
Martin Seyferth
e5f129424c brisk add detection threshold for custom sampling pattern 2017-08-15 11:41:04 +02:00
Rostislav Vasilikhin
66b0651607 Merge pull request #9329 from savuor:softfloat_sincos
SoftFloat: added sin, cos and docs (#9329)

* softfloat: comparison operators made inline, min() max() eps() isSubnormal() added

* softfloat: get/set sign/exp

* softfloat: get/set frac

* softfloat: tests rewritten with new tools

* softfloat: added pi(), sin(), cos()

* softfloat: more comments

* softfloat: updated sincos arg reduction

* softfloat: initial tests for sincos added

* softfloat: test works, code cleanup is pending

* softfloat: sincos argreduce rewritten

* softfloat: sincos refactored and simplified

* softfloat sincos: epsilons calibrated

* softfloat: junk code removed from tests

* softfloat: docs added

* inline comparisons undone; warning fixed
2017-08-15 09:23:26 +00:00
Alexander Alekhin
803274e207 Merge pull request #9358 from azatsman:master 2017-08-15 09:16:45 +00:00
Alexander Alekhin
b7ff13b603 Merge pull request #9368 from alalek:fix_9361 2017-08-15 09:14:40 +00:00
Alexander Alekhin
9e239c7a1e highgui: refactor GTK backend
- eliminate legacy C code, used fields
- fix mutex synchronization issues
- set trackbar min/max without unnecessary truncation; allow negative values
2017-08-14 19:33:00 +00:00
Alexander Alekhin
19270103ec Merge pull request #9367 from StevenPuttemans:fix_doc_9359 2017-08-14 15:16:07 +00:00
Alexander Alekhin
7f1114d935 cmake: disable HAVE_POSIX_SEMAPHORES on Apple platform 2017-08-14 17:19:51 +03:00
Steven Puttemans
bdcb81e81e fix issue 9359 2017-08-14 16:16:04 +02:00
Alexander Alekhin
d1e7a7e06b Merge pull request #9364 from alalek:update_pthread 2017-08-14 14:15:23 +00:00
Alexander Alekhin
6b2510d312 Merge pull request #9317 from sturkmen72:warpPerspective_demo 2017-08-14 13:15:48 +00:00
Alexander Alekhin
a048cb9f0d Merge pull request #9338 from dkurt:fix_ocl 2017-08-14 12:56:07 +00:00
Alexander Alekhin
87598c8749 Merge pull request #9365 from alalek:build_fix_parallel 2017-08-14 10:28:53 +00:00
Alexander Alekhin
ca9a88785e core(build): fix compilation of parallel.cpp (OpenMP configuration) 2017-08-14 11:42:49 +03:00
Alexander Alekhin
2072168a1c Merge pull request #9360 from tomoaki0705:suppressCalib3dWarning 2017-08-14 08:10:58 +00:00
Alexander Alekhin
6ff9fc67bb build: HAVE_LIBPTHREAD, HAVE_PTHREAD(S) => HAVE_PTHREAD 2017-08-14 10:59:38 +03:00
Tomoaki Teshima
800f656402 suppress warning message 2017-08-14 08:26:06 +09:00
Alex Zatsman
e2bfd1a036 Changed NORM_RELATIVE_INF, NORM_RELATIVE_L1 and NORM_RELATIVE_L2 to
NORM_RELATIVE | NORM_INF, NORM_RELATIVE | NORM_L1 and NORM_RELATIVE | NORM_L2
respectively in the documentation for cv::norm and cv::NormTypes
2017-08-13 11:55:35 -04:00
Kim Lindberg Schwaner
7f9fe6f1f2 Fix doxy comment for BFMatcher::create()
A missing asterisk caused doxygen to not generate documentation for the
BFMatcher::create() method.
2017-08-11 14:18:53 +02:00
Alexander Alekhin
ef2b73043d Merge pull request #9342 from alalek:fix_parallel_for 2017-08-10 20:22:44 +00:00
Alexander Alekhin
7a10369f4b Merge pull request #9331 from tomoaki0705:suppressWarningVS 2017-08-10 20:22:25 +00:00
Tomoaki Teshima
14b76a5bca suppress warnings on Visual Studio 2013 and earlier 2017-08-10 23:03:27 +09:00
Suleyman TURKMEN
8bb3863f52 New example - warpPerspective_demo.cpp
An example program shows using cv::findHomography and cv::warpPerspective for image warping
2017-08-10 15:08:13 +03:00
Alexander Alekhin
fa288af58b Merge pull request #9343 from PhilLab:patch-4 2017-08-10 10:25:36 +00:00
Alexander Alekhin
0e7edca7e3 Merge pull request #9340 from paroj:stereocalib_cpp 2017-08-10 10:24:29 +00:00
Alexander Alekhin
9e5a8ba9f5 Merge pull request #9339 from johnhany:Fix-SyntaxError-check-tests-py 2017-08-10 10:20:05 +00:00
Alexander Alekhin
c9fb1434c0 Merge pull request #9332 from csukuangfj:improve-documentation 2017-08-10 10:00:12 +00:00
Alexander Alekhin
a5ea5888b8 Merge pull request #9328 from taketwo:example-superres-fix 2017-08-10 09:59:51 +00:00
Philipp Hasper
2c7a15b195 Clarified documentation cv::RotatedRect::points 2017-08-10 11:06:40 +02:00
Alexander Alekhin
0ebabe17df core: fix flag processing for nested regions in cv::parallel_for_() 2017-08-10 08:37:47 +00:00
Pavel Rojtberg
5ada462773 calib3d: use cpp functions in cvStereoCalibrate to make it more readable 2017-08-09 17:21:14 +02:00
John Hany
69e19b88c2 Fix SyntaxError with print 2017-08-09 21:25:16 +08:00
Dmitry Kurtaev
41519d3ac0 Fixed some OpenCL interface bugs 2017-08-09 11:54:55 +03:00
Vladislav Sovrasov
9a10bdbae5 core: use new assert in matmul.cpp 2017-08-08 23:00:11 +03:00
KUANG, Fangjun
4bbe67451d fix some typos in the documentation. 2017-08-08 17:32:04 +02:00
Vladislav Sovrasov
651a1d2869 videoio: don't pass zero fps to 3rd-party codecs 2017-08-08 15:17:42 +03:00
David Geldreich
7c334f45c6 trainAuto: uses parallel_for_ to dispatch all parameters combination to test 2017-08-08 13:27:02 +02:00
Sergey Alexandrov
0f8faa3441 Minor update for example-gpu-super_resolution
* Remove "simple" flow estimation from help (because it was disabled by 653bca8b)
* Add `flush` after printing iteration number for better UX
2017-08-07 21:39:51 +02:00
Vladislav Sovrasov
5e68b28ad3 core: fix file not closed when exception in FS 2017-08-07 21:03:59 +03:00
Vladislav Sovrasov
aa54acd54d core: add a test to reproduce #9312 2017-08-07 16:16:14 +03:00
Alexander Alekhin
87c27a074d Merge tag '3.3.0'
OpenCV 3.3.0
2017-08-04 00:00:18 +00:00
Alexander Alekhin
4af3ca4e4d OpenCV version++
OpenCV 3.3.0
2017-08-03 23:58:23 +00:00
Alexander Alekhin
953160ddd6 Merge tag '3.3.0-cvsdk'
OpenCV 3.3.0 for Intel Computer Vision SDK
2017-08-03 23:04:38 +00:00
Alexander Alekhin
5c961169cc Merge pull request #9308 from alalek:akaze_fixes 2017-08-03 22:59:22 +00:00
Alexander Alekhin
94dbc35d92 features2d(test): more AKAZE tests 2017-08-03 22:54:45 +00:00
Alexander Alekhin
ad2e864a9a akaze: more fixes
- boundary checks
- div by zero guard
- fixed bilinear interpolation (another case)
- reduce memory allocation
2017-08-03 21:45:35 +00:00
Alexander Alekhin
e0489cb4a6 akaze: fix T-API interfaces, disable OpenCL code
- OpenCL kernels don't handle matrices properly. Assumptions are not checked.
- OpenCL/T-API integration is not correct.
2017-08-03 20:35:06 +00:00
Alexander Alekhin
922ac1a1ec Merge pull request #9303 from alalek:akaze_update 2017-08-03 17:17:03 +00:00
Alexander Alekhin
c95a97389d Merge pull request #9235 from sturkmen72:patch-3 2017-08-03 17:04:28 +00:00
Alexander Alekhin
2a8322ddbb akaze: uninitialized field 2017-08-03 20:04:21 +03:00
Alexander Alekhin
cfb964834c stitching(perf): increase test check tolerance 2017-08-03 19:51:46 +03:00
Alexander Alekhin
73c3d14a66 akaze: fRound -> cvRound, fix bilinear interpolation 2017-08-03 19:51:46 +03:00
Alexander Alekhin
f6ceeaa2e5 akaze: getAngle() -> fastAtan2() 2017-08-03 19:51:46 +03:00
Alexander Alekhin
6847cc9f1c akaze: remove usage of int8_t / uint8_t 2017-08-03 19:51:46 +03:00
Alexander Alekhin
411d36ff13 features2d(test): update descriptor regression test 2017-08-03 19:51:46 +03:00
Alexander Alekhin
63ae5f00b1 features2d(test): enable debug messages 2017-08-03 19:51:46 +03:00
Alexander Alekhin
43e0912516 akaze: resolve issue with using of uninitialized memory 2017-08-03 19:51:45 +03:00
Alexander Alekhin
64533009b3 akaze: optimize allocations 2017-08-03 19:51:45 +03:00
Alexander Alekhin
8aca8d90d6 akaze: replace ceil()
- integer division => divUp()
- cast to 'int' => cvCeil()
2017-08-03 19:51:45 +03:00
Alexander Alekhin
9ca39821c8 core: divUp function 2017-08-03 19:51:45 +03:00
Alexander Alekhin
2e608b1c97 Merge pull request #9306 from alalek:cmake_fix_macro
cmake: fix __STDC macros for opencv_world build
2017-08-03 16:32:13 +00:00
Alexander Alekhin
dcc63d7408 Merge pull request #9248 from alalek:alloc_refactoring 2017-08-03 16:25:29 +00:00
Alexander Alekhin
5e32de8173 cmake: fix __STDC macros for opencv_world build 2017-08-03 18:40:05 +03:00
Vladislav Sovrasov
5375a77f84 core: add multi-argument CV_Assert 2017-08-03 15:31:05 +03:00
Alexander Alekhin
2f4a3e40eb Merge pull request #9287 from dkurt:tensorflow_unit_tests 2017-08-03 12:21:23 +00:00
Alexander Alekhin
15aa0df23c Merge pull request #9297 from alalek:akaze_remove_rand 2017-08-03 09:21:22 +00:00
Jiri Horner
3166d0c667 Merge pull request #9249 from hrnr:akaze_part3
[GSOC] Speeding-up AKAZE, part #3 (#9249)

* use finding of scale extremas from fast_akaze

* incorporade finding of extremas and subpixel refinement from Hideaki Suzuki's fast_akaze (https://github.com/h2suzuki/fast_akaze)
* use opencv parallel framework
* do not search for keypoints near the border, where we can't compute sensible descriptors (bugs fixed in ffd9ad99f4, 2c5389594b), but the descriptors were not 100% correct. this is a better solution

this version produces less keypoints with the same treshold. It is more effective in pruning similar keypoints (which do not bring any new information), so we have less keypoints, but with high quality. Accuracy is about the same.

* incorporate bugfix from upstream

* fix bug in subpixel refinement
* see commit db3dc22981e856ca8111f2f7fe57d9c2e0286efc in Pablo's repo

* rework finding of scale space extremas

* store just keypoints positions
* store positions in uchar mask for effective spatial search for neighbours
* construct keypoints structs at the very end

* lower inlier threshold in test

* win32 has lower accuracy
2017-08-03 08:35:07 +00:00
dkurt
339793143c Unit tests for TensorFlow importer 2017-08-03 11:29:48 +03:00
Alexander Alekhin
8be1ba708e features2d: don't use rand(), because it is not thread-safe
Results are not stable with srand()
2017-08-02 23:48:54 +03:00
Alexander Alekhin
0bd357e7ec Merge pull request #9296 from dkurt:halide_device_interface 2017-08-02 20:26:30 +00:00
Alexander Alekhin
cfe849bd43 Merge pull request #9246 from bragboy:patch-1 2017-08-02 20:22:11 +00:00
Alexander Alekhin
d8c70e2e73 Merge pull request #9286 from alalek:rect_size_empty 2017-08-02 20:20:16 +00:00
Alexander Alekhin
03bf0a89b5 Merge pull request #9280 from alalek:fix_repo_url 2017-08-02 20:19:51 +00:00
Alexander Alekhin
1ce9ffcc7f Merge pull request #9285 from arrybn:issue_9223 2017-08-02 17:51:46 +00:00
dkurt
b1ef44b1ac Replace halide_opencl_device_interface 2017-08-02 20:38:30 +03:00
Alexander Alekhin
da0a36c323 Merge pull request #9288 from sensics:honor-fix-principal-point-fisheye 2017-08-02 10:05:18 +00:00
Aleksandr Rybnikov
8d6b8b45b6 Added ELU and test for it 2017-08-02 11:13:59 +03:00
Ryan Pavlik
5d699e9ba5 Honor fixing principal point in camera calib tutorial. 2017-08-01 10:35:18 -05:00
Alexander Alekhin
321c0ec533 core: empty() for Rect/Size templates
Check for empty objects via .area() is not a good practice due overflows
2017-08-01 17:19:18 +03:00
Alexander Alekhin
4ad45af53f Merge pull request #9253 from jbms:fix/image-decoding-tempfile 2017-08-01 13:47:15 +00:00
Alexander Alekhin
37a7e08b38 Merge pull request #9097 from piotr-semenov:fix/cv_rect_monoid_identity 2017-08-01 13:06:37 +00:00
Alexander Alekhin
bab4bc0968 Merge pull request #9284 from ipuustin:dnn-opencl-fixes 2017-08-01 13:06:01 +00:00
Alexander Alekhin
f6c4901b8f Merge pull request #9279 from alalek:ocl_fix_program_cache 2017-08-01 13:05:43 +00:00
Jiri Horner
bb6496d9e5 Merge pull request #8951 from hrnr:akaze_part2
[GSOC] Speeding-up AKAZE, part #2 (#8951)

* feature2d: instrument more functions used in AKAZE

* rework Compute_Determinant_Hessian_Response

* this takes 84% of time of Feature_Detection
* run everything in parallel
* compute Scharr kernels just once
* compute sigma more efficiently
* allocate all matrices in evolution without zeroing

* features2d: add one bigger image to tests

* now test have images: 600x768, 900x600 and 1385x700 to cover different resolutions

* explicitly zero Lx and Ly

* add Lflow and Lstep to evolution as in original AKAZE code

* reworked computing keypoints orientation

integrated faster function from https://github.com/h2suzuki/fast_akaze

* use standard fastAtan2 instead of getAngle

* compute keypoints orientation in parallel

* fix visual studio warnings

* replace some wrapped functions with direct calls to OpenCV functions

* improved readability for people familiar with opencv
* do not same image twice in base level

* rework diffusity stencil

* use one pass stencil for diffusity from https://github.com/h2suzuki/fast_akaze
* improve locality in Create_Scale_Space

* always compute determinat od hessian and spacial derivatives

* this needs to be computed always as we need derivatives while computing descriptors
* fixed tests of AKAZE with KAZE descriptors which have been affected by this

Currently it computes all first and second order derivatives together and the determiant of the hessian. For descriptors it would be enough to compute just first order derivates, but it is not probably worth it optimize for scenario where descriptors and keypoints are computed separately, since it is already very inefficient. When computing keypoint and descriptors together it is faster to do it the current way (preserves locality).

* parallelize non linear diffusion computation

* do multiplication right in the nlp diffusity kernel

* rework kfactor computation

* get rid of sharing buffers when creating scale space pyramid, the performace impact is neglegible

* features2d: initialize TBB scheduler in perf tests

* ensures more stable output
* more reasonable profiles, since the first call of parallel_for_ is not getting big performace hit

* compute_kfactor: interleave finding of maximum and computing distance

* no need to go twice through the data

* start to use UMats in AKAZE to leverage OpenCl in the future

* fixed bug that prevented computing determinant for scale pyramid of size 1 (just the base image)
* all descriptors now support writing to uninitialized memory
* use InputArray and OutputArray for input image and descriptors, allows to make use UMAt that user passes to us

* enable use of all existing ocl paths in AKAZE

* all parts that uses ocl-enabled functions should use ocl by now

* imgproc: fix dispatching of IPP version when OCL is disabled

* when OCL is disabled IPP version should be always prefered (even when the dst is UMat)

* get rid of copy in DeterminantHessian response

* this slows CPU version considerably
* do no run in parallel when running with OCL

* store derivations as UMat in pyramid

* enables OCL path computing of determint hessian
* will allow to compute descriptors on GPU in the future

* port diffusivity to OCL

* diffusivity itself is not a blocker, but this saves us downloading and uploading derivations

* implement kernel for nonlinear scalar diffusion step

* download the pyramid from GPU just once

we don't want to downlaod matrices ad hoc from gpu when the function in AKAZE needs it. There is a HUGE mapping overhead and without shared memory support a LOT of unnecessary transfers.

This maps/downloads matrices just once.

* fix bug with uninitialized values in non linear diffusion

* this was causing spurious segfaults in stitching tests due to propagation of NaNs
* added new test, which checks for NaNs (added new debug asserts for NaNs)
* valgrind now says everything is ok

* add nonlinear diffusion step OCL implementation

* Lt in pyramid changed to UMat, it will be downlaoded from GPU along with Lx, Ly
* fix bug in pm_g2 kernel. OpenCV mangles dimensions passed to OpenCL, so we need to check for boundaries in each OCL kernel.

* port computing of determinant to OCL

* computing of determinant is not a blocker, but with this change we don't need to download all spatial derivatives to CPU, we only download determinant
* make Ldet in the pyramid UMat, download it from CPU together with the other parts of the pyramid
* add profiling macros

* fix visual studio warning

* instrument non_linear_diffusion

* remove changes I have made to TEvolution

* TEvolution is used only in KAZE now

* Revert "features2d: initialize TBB scheduler in perf tests"

This reverts commit ba81e2a711.
2017-08-01 12:46:01 +00:00
Ismo Puustinen
c2de5cf735 dnn: force floating point literals to be float.
In OpenCL code in activations.cl, make the type of floating point
literals to be float. Otherwise the values will be interpreted as
doubles, causing Beignet to have type conversion issues.
2017-08-01 15:02:24 +03:00
Alexander Alekhin
2959e7aba9 Merge pull request #9188 from arrybn:mobilenet_ssd_sample 2017-08-01 11:12:54 +00:00
Aleksandr Rybnikov
ce1cc352d9 MobileNet SSD sample 2017-08-01 12:30:27 +03:00
Jeremy Maitin-Shepard
350d483a70 grfmt_tiff: support in-memory TIFF encoding and decoding
Previously, only file-based encoding and decoding were supported with
the libtiff library, leading to the possible use of temporary files.

This fixes issue #8483.
2017-07-31 10:22:11 -07:00
Alexander Alekhin
d34eec3ab3 Merge pull request #9278 from alalek:ts_perf_threads 2017-07-31 16:21:51 +00:00
Jeremy Maitin-Shepard
2be955a0ef loadsave: check for errors when using temp file
Previously, the return value of fwrite and fclose were not properly
checked, leading to possible silent truncation of the data if writing
failed, e.g. due to lack of disk space.

Fixes issue #9251.
2017-07-31 09:02:42 -07:00
Alexander Alekhin
830bff1241 fix OpenCV GitHub repository URL 2017-07-31 17:48:57 +03:00
Alexander Alekhin
16fb74425e ocl: fix program cache key 2017-07-31 17:24:08 +03:00
Alexander Alekhin
3786d30320 Merge pull request #9225 from paroj:reproject_cpp 2017-07-31 14:11:37 +00:00
Alexander Alekhin
adb62403ec Merge pull request #9276 from mshabunin:bump-dnn-docs 2017-07-31 13:56:03 +00:00
Alexander Alekhin
50b9a5afa9 ts(perf): initialize ThreadPool 2017-07-31 16:51:08 +03:00
Alexander Alekhin
230f22b1cd Merge pull request #9271 from berak:patch-2 2017-07-31 13:10:41 +00:00
Alexander Alekhin
06a9c16961 Merge pull request #9275 from alalek:cmake_protobuf_optional 2017-07-31 12:03:54 +00:00
Alexander Alekhin
d22506092e Merge pull request #9274 from alalek:ipp_meanstddev 2017-07-31 12:02:59 +00:00
Alexander Alekhin
728bd68977 Merge pull request #9272 from tomoaki0705:fixCudaBuild 2017-07-31 12:02:40 +00:00
Alexander Alekhin
65519ab786 Merge pull request #9265 from alalek:python_stitching 2017-07-31 12:02:18 +00:00
Maksim Shabunin
886b1f39d9 Moved dnn module documentation and tutorials links higher in the lists 2017-07-31 14:54:28 +03:00
Alexander Alekhin
cbced23de4 cmake: don't include protobuf on disabled DNN module 2017-07-31 14:18:59 +03:00
Alexander Alekhin
e58a778bd5 core(stat): disable IPP optimization in meanStdDev (cn > 1) 2017-07-31 14:09:18 +03:00
Tomoaki Teshima
1c49796e8e guad for CUDA correctly 2017-07-31 18:42:36 +09:00
berak
6b0661cca1 Update README.android 2017-07-31 08:28:34 +02:00
Alexander Alekhin
46f05f2db6 python: disable assertion in NumpyAllocator 2017-07-30 14:44:11 +03:00
Alexander Alekhin
15a6586062 python: stitching simple test 2017-07-30 14:44:10 +03:00
Alexander Alekhin
bdb6b45c91 Merge pull request #9259 from eyolfson:patch-1 2017-07-30 10:08:23 +00:00
Alexander Alekhin
1170d74868 Merge pull request #9261 from puqeko:patch-2 2017-07-30 10:07:09 +00:00
Alexander Alekhin
6ae5a9f07a Merge pull request #9255 from marting87:marting87/gpu_samples_usage_msg 2017-07-30 09:54:53 +00:00
Alexander Alekhin
cc1a95d161 Merge pull request #9254 from jtkb:feature/maven_package_update 2017-07-30 09:54:02 +00:00
Alexander Alekhin
fffd0f5b68 Merge pull request #9241 from alalek:tlsSlotsSize 2017-07-30 09:53:39 +00:00
Suleyman TURKMEN
89480801b8 some improvements on tutorials 2017-07-29 20:08:19 +03:00
puqeko
9deb206e74 Add tested codecs for OSX 2017-07-29 11:56:02 +12:00
Jon Eyolfson
27cf941284 Remove unused method declarations in hog.cpp
The class `App` appears to have two unused methods: `message` and `checkRectSimilarity`. The is no definition or use of either of these methods. This appears to be dead code.
2017-07-28 10:19:35 -04:00
Kerry Billingham
04cd09a30a Updated package dependency list & package check script. 2017-07-28 10:03:05 +01:00
Martin Ganeff
3ea889050b Removed _gpu-suffix from usage messages to align with executable name 2017-07-28 10:20:59 +02:00
Alexander Alekhin
b46e741c95 core(alloc): drop unused code, use memalign() functions instead of hacks
valgrind provides better detection without memory buffer hacks
2017-07-27 18:10:41 +03:00
Alexander Alekhin
34f9c039c5 Merge pull request #9238 from alalek:valgrind_fixes 2017-07-27 14:33:01 +00:00
Alexander Alekhin
d35422b523 core(tls): hide assertions from Thread Sanitizer 2017-07-27 17:31:51 +03:00
Bragadeesh
d61f5d160d A simple spelling change. 2017-07-27 17:08:45 +05:30
Alexander Alekhin
68ef903a7c core(tls): don't use tlsSlots without synchronization 2017-07-26 22:45:55 +03:00
Alexander Alekhin
06407b4d14 Merge pull request #9233 from LaurentBerger:dnndoc 2017-07-26 16:25:28 +00:00
Alexander Alekhin
12213f9985 flann: fix out of buffer access 2017-07-26 18:17:03 +03:00
Alexander Alekhin
caa5e3b4c5 imgproc: fix vectorized code of accumulate 2017-07-26 17:21:46 +03:00
Alexander Alekhin
2e17251160 calib3d: fix invalid memory access 2017-07-26 17:21:46 +03:00
Alexander Alekhin
3f102e5d3a dnn: protobuf shutdown 2017-07-26 17:21:46 +03:00
Alexander Alekhin
aad6d28e13 ts: don't run large videoio test (valgrind) 2017-07-26 17:21:46 +03:00
Alexander Alekhin
1650c664bc ts: don't run imgcodecs tests on large images (valgrind) 2017-07-26 17:21:46 +03:00
Alexander Alekhin
d17b099994 ts: don't run DNN tests with large models (valgrind) 2017-07-26 17:21:46 +03:00
Alexander Alekhin
1516103a15 cmake: fix compiler flags 2017-07-26 17:21:46 +03:00
Alexander Alekhin
bf0173bf38 ts: update valgrind suppressions 2017-07-26 17:21:45 +03:00
Alexander Alekhin
b4e300b78b Merge pull request #9236 from dkurt:fix_json_bool 2017-07-26 13:08:13 +00:00
Alexander Alekhin
402a77e7f7 Merge pull request #9237 from alalek:fix_winrt_build 2017-07-26 10:42:49 +00:00
Alexander Alekhin
2ca561f104 Merge pull request #9217 from alalek:cleanup_3rdparty 2017-07-26 10:38:28 +00:00
Alexander Alekhin
174cb06a7a Merge pull request #9215 from alalek:cmake_min_version 2017-07-26 10:38:11 +00:00
dkurt
583b327523 Fix JSON booleans without quotes 2017-07-26 12:51:06 +03:00
Alexander Alekhin
1081cee35f winrt: update script for MSVS2017 / SDK 10.0 2017-07-26 12:02:43 +03:00
LaurentBerger
69fd57bc96 update tutorial link for dnn 2017-07-25 19:32:17 +02:00
Alexander Alekhin
8e6e05ed3f Merge pull request #9227 from alalek:cmake_fix_ocv_add_testdata 2017-07-25 15:56:57 +00:00
Alexander Alekhin
c512bf6c66 Merge pull request #9232 from dkurt:json_named_nodes 2017-07-25 15:56:03 +00:00
Alexander Alekhin
bcff9fd067 Merge pull request #9229 from alalek:dnn_torch_memory_leaks 2017-07-25 13:23:18 +00:00
Alexander Alekhin
0d7aeacc34 Merge pull request #9230 from alalek:mat_cleanup_on_exception 2017-07-25 13:17:09 +00:00
dkurt
3515f6ec33 Missed NAMED bit of JSON nodes tag 2017-07-25 13:39:32 +03:00
Alexander Alekhin
602f047fe8 build: replace WIN32 => _WIN32 2017-07-25 13:30:48 +03:00
Alexander Alekhin
7f3eea6325 core: fix Mat/UMat cleanup on exceptions in deallocate() 2017-07-25 12:27:30 +03:00
Alexander Alekhin
878a6906cc dnn: fix torch importer memory leaks 2017-07-25 12:20:55 +03:00
Alexander Alekhin
0194d5a2d5 Merge pull request #9222 from dkurt:fix_dnn_tests 2017-07-25 09:09:23 +00:00
Alexander Alekhin
d219709cfa Merge pull request #9228 from neok-m4700:cmake 2017-07-25 09:03:10 +00:00
neok-m4700
c2e281f8cf Update OpenCVCompilerOptions.cmake
misplaced else
2017-07-25 10:25:20 +02:00
Alexander Alekhin
07334bc25c cmake: fix ocv_add_testdata() hardcoded path 2017-07-25 06:56:03 +03:00
Pavel Rojtberg
94fdd45b75 calib3d: rewrite reprojectImageTo3D using Matx expressions
about the same speed, but significatly more readable
2017-07-24 17:36:31 +02:00
dkurt
70ff3804e9 Fix SqueezeNet Halide performance test 2017-07-24 10:45:04 +03:00
Alexander Alekhin
8741d97a4f Merge pull request #9216 from alalek:build_global_defines 2017-07-22 04:29:52 +00:00
Alexander Alekhin
432d0fd707 Merge pull request #9213 from tomoaki0705:fixDnnBaseline 2017-07-21 13:34:47 +00:00
Alexander Alekhin
e45d5446f2 cleanup unused 3rdparty files 2017-07-21 15:20:13 +03:00
Tomoaki Teshima
0f91faddae fix linker error when trying CPU_BASELINE=AVX 2017-07-21 21:13:47 +09:00
Alexander Alekhin
5e6e12600f build: enable __STDC_FORMAT_MACROS macro 2017-07-21 14:29:03 +03:00
Alexander Alekhin
92f182bc3b minimal CMake version => 2.8.12.2 2017-07-21 14:06:19 +03:00
Alexander Alekhin
bc3c7e80a6 Merge pull request #9209 from alalek:fix_persistence_format 2017-07-21 10:55:40 +00:00
Alexander Alekhin
32683ee6e0 Merge pull request #9208 from alalek:ipp_minmaxidx 2017-07-21 10:54:57 +00:00
Alexander Alekhin
544eb4be1f IPP: update minMaxIdx, disable some AVX optimizations with mask 2017-07-21 12:56:36 +03:00
Alexander Alekhin
d9e092325b test: regression test for IPP minMaxIdx problem 2017-07-21 12:55:07 +03:00
Alexander Alekhin
ec7ce81401 core: fix FileStorage format detection in case of .gz archives 2017-07-20 19:58:36 +03:00
Alexander Alekhin
5bc291937f test: FileStorage format regression test 2017-07-20 19:58:10 +03:00
Alexander Alekhin
9313978f61 Merge pull request #9190 from alalek:update_java_build 2017-07-20 15:32:47 +00:00
Alexander Alekhin
ce6b06efb9 Merge pull request #9203 from tomoaki0705:eliminateRandFromTest 2017-07-20 15:31:41 +00:00
Alexander Alekhin
f01c029446 Merge pull request #9202 from alalek:cmake-3.9.0 2017-07-20 15:28:38 +00:00
Alexander Alekhin
928552ac9e Merge pull request #9206 from tomoaki0705:fixC11VS2012 2017-07-20 15:27:25 +00:00
Alexander Alekhin
ab58cac236 Merge pull request #9194 from tomoaki0705:fixBuildErrorDnn 2017-07-20 15:27:07 +00:00
Tomoaki Teshima
71496e3be4 fix build error on Visual Studio 2012 2017-07-20 22:56:05 +09:00
Tomoaki Teshima
e63d628677 remove some rand functions
* make test more reproducible
2017-07-20 22:43:11 +09:00
Alexander Alekhin
dcb3c4ff1e Merge pull request #9189 from tomoaki0705:fixCalib3dRandom 2017-07-20 12:24:34 +00:00
Alexander Alekhin
488b5d95dc Merge pull request #9200 from alalek:perf_stitching_win32 2017-07-20 12:08:35 +00:00
Alexander Alekhin
22f12dc93c cmake: fix build with CMake 3.9.0 2017-07-20 14:49:37 +03:00
Alexander Alekhin
ad183481c0 perf: skip stitching OpenCL test on Win32 platform 2017-07-20 14:14:22 +03:00
Alexander Alekhin
08c94aa5c0 build: reuse int32_t workaround from softfloat.hpp 2017-07-20 14:01:21 +03:00
Tomoaki Teshima
1989bc33a7 fix build error on Visual Studio 2012 2017-07-20 11:00:04 +09:00
Tomoaki Teshima
46bee83005 fix the test fail on Calib3d_SolvePnP.accuracy
* move array size to enum
  * move array size to member variable
  * loosen the eps of SOLVEPNP_P3P
  * loosen the eps in Calib3d_SolveP3P.accuracy
2017-07-20 06:32:32 +09:00
Alexander Alekhin
2360291c3e java: update source files processing, maven stuff 2017-07-19 22:39:23 +03:00
Alexander Alekhin
12ed7ca63e Merge pull request #9143 from sovrasov:gen_pattern_fix 2017-07-19 15:46:42 +00:00
Alexander Alekhin
e8357c0544 build: added DEBUG build guard
To prevent linkage of binary incompatible DEBUG/RELEASE binaries/runtimes
2017-07-19 18:38:08 +03:00
Alexander Alekhin
ca479c3f5b Merge pull request #9161 from alalek:separate_debug_symbols 2017-07-19 15:34:43 +00:00
Alexander Alekhin
02829f73e0 Merge pull request #9186 from alalek:cmake_fix_dump_duplication 2017-07-19 11:21:48 +00:00
Alexander Alekhin
a44c0fd51f cmake: ocv_cmake_dump_vars() remove duplicated information 2017-07-19 12:37:36 +03:00
Alexander Alekhin
773365405f Merge pull request #9037 from arrybn:googlenet_test 2017-07-18 16:35:00 +00:00
Alexander Alekhin
cb0a61b9ba Merge pull request #9181 from alalek:stitching_perf_test 2017-07-18 15:53:32 +00:00
Alexander Alekhin
8a9a9403a3 Merge pull request #9180 from alalek:fix_photo_crash_win32 2017-07-18 15:52:25 +00:00
Aleksandr Rybnikov
7d1140340e Rewrote googlenet tests 2017-07-18 18:49:14 +03:00
Alexander Alekhin
862242aa8d stitching(perf): check for available OpenCL memory 2017-07-18 17:26:21 +03:00
Alexander Alekhin
1ff6c758ec photo: crash workaround for MSVC 2015 32-bit 2017-07-18 16:04:35 +03:00
Alexander Alekhin
6ba22dea46 Merge pull request #8967 from savuor:rgb2lab_faster 2017-07-17 19:55:19 +00:00
Rostislav Vasilikhin
70b984434d RGB2Lab_f and trilinear interpolation code are in separate branch; cubeRoot(x) instead of std::pow(x, 1.f/3.f)
file with internal accuracy&speed tests moved to lab_tetra branch
2017-07-17 21:59:54 +03:00
Alexander Alekhin
e5ed9cc612 Merge pull request #8498 from savuor:bit_exact_lab 2017-07-17 14:01:05 +00:00
Alexander Alekhin
1fbf914348 Merge pull request #9176 from alalek:fix_nightly_builds 2017-07-17 13:37:46 +00:00
Alexander Alekhin
09436df1ad Merge pull request #9175 from alalek:issue_9169 2017-07-17 13:05:12 +00:00
Alexander Alekhin
4bb4a349c9 imgproc: fix warp optimizations 2017-07-17 15:12:41 +03:00
Alexander Alekhin
b4716b1d92 core: fix convertTo() AVX2 optimization 2017-07-17 15:02:14 +03:00
Alexander Alekhin
acc8589083 core: clarify documentation of cv::Mat::deallocate() method 2017-07-17 13:31:47 +03:00
Alexander Alekhin
c0dc2f2bb3 Merge pull request #9173 from thcd:patch-1 2017-07-17 10:09:33 +00:00
Alexander Alekhin
66ab4e15db Merge pull request #9172 from atinfinity:fixed_cxx11_flag 2017-07-17 07:56:31 +00:00
Shuyu Liang
c10d08f795 Fix typo in imgproc.hpp 2017-07-17 15:51:10 +08:00
Rostislav Vasilikhin
4b75be801e initial version of Lab2RGB_f tetrahedral interpolation written
RGB2Lab_f added, bugs fixed, moved to float

several bugs fixed

LUT fixed, no switch in tetraInterpolate()

temporary code; to be removed and rewritten

before refactoring

extra interpolations removed, some things to do left

added Lab2RGB_b +XYZ version, etc.

basic version is done, to be sped up

tetra refactored

interpolations: LUT for weights, refactor., etc.

address arithm optimized

initial version of vectorized code added (not compiling now)

compilation fixed, now segfaults

a lot of fixes, vectorization temp. disabled

fixed trilinear shift size, max error dropped from 19 to 10

fixed several bugs (255 vs 256, signed vs unsigned, bIdx)

minor changes

packed: address arithmetics fixed

shorter code

experiments with pure integer calculations

Lab2RGB max error decreased to 2; need to clean the code

ready for vectorization; need cleaning

vectorized, to be debugged

precision fixed, max error is 2

Lab->XYZ shortened

minor fixes

Lab2RGB_f version fixed, to be completely rewritten using _b code

RGB2Lab_f vectorized

minors

moved to separate file

refactored Lab2RGB to float and int versions

minor fix

Lab2RGB_f vectorized

minor refactoring

Lab2RGBint refactored: process methods, vectorize by 4 pix

Lab2RGB_f int version is done

cleanup extra code

code copied to color.cpp

fixed blue idx bug

optimizations enabled when testing; mulFracConst introduced

divConst -> mulFracConst

calc min time in perf instead of avg

minors

process() slightly sped up

Lab2RGB_f: disabled int version

reinterpret added, minor fixes in names

some warnings fixed

changes transferred to color.cpp

RGB2Lab_f code (and trilinear interpolation code) moved to rgb2lab_faster

whitespace

shift negative fixed

more warnings fixed

"constant condition" warnings fixed, little speed up

minor changes

test_photo decolor fixed

changes copied to test_lab.cpp

idx bounds checking in LUT init

several fixes

WIP: softfloat almost integrated

test_lab partially rewritten to SoftFloat

color.cpp rewritten to SoftFloat

test_lab.cpp: accuracy code added

several fixes

RGB2Lab_b testing fixed

splineBuild() rewritten to SoftFloat

accuracy control improved

rounding fixed

Luv <=> RGB: rewritten to SoftFloat

OCL cvtColor Lab and Lut rewritten to SoftFloat

minor fixes

refactored to new SoftFloat interface

round() -> cvRound, etc.

fixed OCL tests

softfloat.cpp: internal functions made static, unused ones removed

meaningful constants

extra lines removed

unused function removed

unfinished work

it works, need to fix TODOs

refactoring; more calls rewritten

mulFracConst removed

constants made bit exact; minors

changes moved to color.cpp

fixed 1 bug and 4 warnings

OCL: fixed constants

pow(x, _1_3f) replaced by cubeRoot(x)

fixed compilation on MSVC32

magic constants explained

file with internal accuracy&speed tests moved to lab_tetra branch
2017-07-17 00:32:30 +03:00
atinfinity
ac64713881 fixed 'OpenCVDetectCXXCompiler.cmake' to detect C++11 feature 2017-07-17 00:20:14 +09:00
Alexander Alekhin
c455fc0334 Merge pull request #9133 from sovrasov:mser_add_test 2017-07-14 19:38:05 +00:00
Alexander Alekhin
42c0914382 Merge pull request #9086 from catree:improve_solvePnPRansac 2017-07-14 17:28:47 +00:00
Alexander Alekhin
49e1f6b161 Merge pull request #9091 from alalek:update_ffmpeg 2017-07-14 17:25:35 +00:00
Alexander Alekhin
1a4c22fc46 Merge pull request #9095 from alalek:fix_gstreamer 2017-07-14 17:24:14 +00:00
Alexander Alekhin
5f4c7372c0 Merge pull request #9159 from alalek:cmake_target_rename 2017-07-14 17:19:26 +00:00
Alexander Alekhin
d07eb9ad60 Merge pull request #9157 from zhmu:opencv-dshow-allow-enable-disable-of-debug-messages 2017-07-14 17:18:31 +00:00
Alexander Alekhin
5a54acef4e Merge pull request #9130 from alalek:android_define 2017-07-14 17:17:24 +00:00
Vladislav Sovrasov
e5fbb4f5d2 Merge pull request #9034 from sovrasov:mats_from_initializer_list
Add constructors taking initializer_list for some of OpenCV data types (#9034)

* Add a constructor taking initializer_list for Matx

* Add a constructor taking initializer list for Mat and Mat_

* Add one more method to initialize Mat to the corresponding tutorial

* Add a note how to initialize Matx

* CV_CXX_11->CV_CXX11
2017-07-14 17:17:09 +00:00
Alexander Alekhin
11626fe32c Merge pull request #8975 from sovrasov:fs_additional_errors 2017-07-14 17:13:50 +00:00
Alexander Alekhin
63e89bc326 Merge pull request #9048 from sovrasov:morph_hitmiss_fix
imgproc: fix MORPH_HITMISS operation when kernel has no negative values
2017-07-14 17:13:06 +00:00
Satoshi Tanaka
96a3c7954d Merge pull request #8914 from stnk20:gstreamer_yuv
Add gstreamer capture capability for some YUV formats (#8914)

* Add gstreamer capture capability for some YUV formats.(only for gstreamer-1.0)

* avoid cross initialization error

* add checking if pipeline is manualpipeline, for compatibility.
2017-07-14 17:11:30 +00:00
Vladislav Sovrasov
25af743902 mser: add a couple of new regression tests 2017-07-14 20:07:32 +03:00
gylns
6d1cdcf601 Merge pull request #8910 from gylns:mser
fix the MSER history's size issue (#8910)

* simplify growHistory and merge

* add assertion for history's size

* MSER: fix merging components' history
2017-07-14 16:58:56 +00:00
Alexander Alekhin
dc59476c34 Merge pull request #9078 from arrybn:resnet_squeezenet_tests
Added tests for ResNet-50 and SqueezeNet v1.1
2017-07-14 16:50:25 +00:00
Alexander Alekhin
4e39d0371d Merge pull request #9074 from alalek:cpu_dispatch_core_hamming
cpu dispatch(core): hamming
2017-07-14 16:48:07 +00:00
Alexander Alekhin
11feae6631 Merge pull request #9041 from terfendail:filter_avx
AVX optimized implementation of separable filters migrated
2017-07-14 16:45:27 +00:00
Alexander Alekhin
eef78f5664 Merge pull request #9061 from terfendail:convert_avx
AVX and SSE4.1 optimized conversion migrated
2017-07-14 16:43:54 +00:00
Alexander Alekhin
9ef742bbf4 Merge pull request #9082 from terfendail:imgwarp_avx
AVX and SSE4.1 optimized implementation of resize and warp functions migrated
2017-07-14 16:42:42 +00:00
Alexander Alekhin
928bfe0b93 Merge pull request #9088 from sovrasov:no_nostl
core: get rid of OPENCV_NOSTL definition
2017-07-14 16:26:03 +00:00
Alexander Alekhin
86e8a105a5 Merge pull request #9090 from vpisarev:dnn_optim_scale_concat 2017-07-14 16:21:24 +00:00
Alexander Alekhin
a586ef725c Merge pull request #9127 from willbrazil:master
Fix typo in harris corner detection tutorial.
2017-07-14 16:12:48 +00:00
Alexander Alekhin
fe7fd4c312 Merge pull request #9098 from savuor:fix/luv_div 2017-07-14 15:46:03 +00:00
Vadim Pisarevsky
0488d9bdb2 optimize out scaleLayer & concatLayer whenever possible
fixed problem in concat layer by disabling memory re-use in layers with multiple inputs

trying to fix the tests when Halide is used to run deep nets

another attempt to fix Halide tests

see if the Halide tests will pass with concat layer fusion turned off

trying to fix failures in halide tests; another try

one more experiment to make halide_concat & halide_enet tests pass

continue attempts to fix halide tests

moving on

uncomment parallel concat layer

seemingly fixed failures in Halide tests and re-enabled concat layer fusion; thanks to dkurt for the patch
2017-07-14 18:30:53 +03:00
Alexander Alekhin
431e2e6d68 Merge pull request #9042 from terfendail:haar_avx
AVX optimized implementation of haar migrated to separate file
2017-07-14 15:05:11 +00:00
Alexander Alekhin
9439872a62 Merge pull request #9021 from terfendail:corner_avx 2017-07-14 14:58:06 +00:00
Alexander Alekhin
f6dd549e58 Merge pull request #9027 from terfendail:undistort_avx 2017-07-14 14:56:42 +00:00
Alexander Alekhin
454bc7a674 Merge pull request #9063 from alalek:hamming_perf_test 2017-07-14 14:46:17 +00:00
Alexander Alekhin
8f4b534937 Merge pull request #9093 from wzw-intel:histogram 2017-07-14 14:38:55 +00:00
Alexander Alekhin
e251ed7773 Merge pull request #9122 from ivsgroup:fix_msvc_virtual_destructor 2017-07-14 14:37:22 +00:00
Alexander Alekhin
0e6ebafdb3 Merge pull request #9110 from patrikhuber:fix-msvc1911-cmake 2017-07-14 14:37:01 +00:00
Alexander Alekhin
7d17d20dce Merge pull request #9153 from sovrasov:fix_tangent_dist_flag 2017-07-14 14:35:51 +00:00
Alexander Alekhin
1d2baf0bd3 Merge pull request #9094 from ArkadiuszRaj:fix-aravis-dependency 2017-07-14 14:31:57 +00:00
Alexander Alekhin
10e6491c22 Merge pull request #9024 from tomoaki0705:featureDispatchAccumulate 2017-07-14 14:30:06 +00:00
Alexander Alekhin
95a438d233 OpenCV version '-cvsdk' 2017-07-14 13:03:12 +03:00
Alexander Alekhin
4238add35b Merge pull request #9058 from alalek:dnn_minor_fixes 2017-07-14 09:53:09 +00:00
Alexander Alekhin
f448d75aa8 build: added DEBUG build guard
To prevent linkage of binary incompatible DEBUG/RELEASE binaries/runtimes
2017-07-14 01:25:31 +03:00
Alexander Alekhin
19c9174543 cmake: rename cpufeatures target
It is configurable via OPENCV_CPUFEATURES_TARGET_NAME variable
2017-07-13 19:24:10 +03:00
Alexander Alekhin
4784c7be5f dnn: cleanup dispatched code, fix SIMD128 types 2017-07-13 19:00:34 +03:00
Alexander Alekhin
c3e6de293f dnn: code cleanup, refactor detection output layer 2017-07-13 19:00:34 +03:00
Alexander Alekhin
544908d06c dnn: some minor fixes in docs, indentation, unused code 2017-07-13 15:33:49 +03:00
Alexander Alekhin
520da7aaaf Merge pull request #9111 from vpisarev:dnn_optim_avx1 2017-07-13 12:27:05 +00:00
Vladislav Sovrasov
bb0f9d6bc4 core: use matlab-style in 2d fftShift 2017-07-13 13:33:02 +03:00
Rink Springer
df7fb00c21 dshow: Only show debugging messages if environment variable OPENCV_DSHOW_DEBUG is explicitly set to non-zero
Based on discussion at: https://github.com/opencv/opencv/pull/9051
2017-07-13 11:44:20 +02:00
Vladislav Sovrasov
fa17267e05 calib3d: fix not working CALIB_FIX_TANGENT_DIST flag 2017-07-13 10:49:35 +03:00
Alexander Alekhin
ed4de20fd1 Merge pull request #9107 from alalek:static_analyze_python 2017-07-12 16:45:14 +00:00
Alexander Alekhin
9b9e685dbc Merge pull request #9142 from alalek:vzeroupper_guard_unused_warning 2017-07-12 16:44:00 +00:00
Alexander Alekhin
49bb0bf9c8 Merge pull request #9149 from alalek:ocl_fp16_test 2017-07-12 16:23:33 +00:00
Alexander Alekhin
d6c5e18e24 core(test): fix input data for OCL FP16 test 2017-07-12 18:51:11 +03:00
Alexander Alekhin
617e6b4cc9 Merge pull request #9145 from alalek:ipp_minmaxidx_nan 2017-07-12 15:37:54 +00:00
Vladislav Sovrasov
a683a496ea core: use matlab-style 1d fftShift in pc 2017-07-12 18:01:58 +03:00
Alexander Alekhin
5ebfb52a4a ipp(minmaxIdx): disable SSE4.2 optimizations for 32f datatype
NaN values handling issue
2017-07-12 16:06:18 +03:00
PkLab.net
6dd9e18b2e add std::string overload for cv::read() 2017-07-12 15:51:11 +03:00
Vladislav Sovrasov
5b833db558 core: forbid conversion real->int in some cases in FileStorage 2017-07-12 15:50:57 +03:00
Vladislav Sovrasov
fce018e7a9 Fix wrong chessboard generation in gen_pattern tool 2017-07-12 15:32:40 +03:00
Alexander Alekhin
e7cc2eea1d build: fix unused variable warning for vzeroupper guard 2017-07-11 16:46:35 +03:00
tribta
7c65f7ef11 Fixing Bad identations (line 18 to 96)
Adding _ to the unused variables for clarity (line 77)
2017-07-11 11:59:22 +01:00
Alexander Alekhin
9365817bfd Merge pull request #9131 from dkurt:fix_eltwise_layer 2017-07-11 07:18:42 +00:00
Alexander Alekhin
d656d39ba2 Merge pull request #9134 from mshabunin:fix-static-6 2017-07-10 20:49:36 +00:00
Maksim Shabunin
02db592014 Fixed several issues found by static analysis (Windows specific) 2017-07-10 23:14:02 +03:00
dkurt
3203635765 Eltwise layer fixes 2017-07-10 12:58:11 +03:00
Alexander Alekhin
a4a47b538c build: detect Android via '__ANDROID__' macro
https://sourceforge.net/p/predef/wiki/OperatingSystems
2017-07-10 12:43:59 +03:00
Guilherme William Guedes
d098048aba Fix typo: 'right direction' to 'y direction'.
Fix typo: 'right direction' to 'y direction' in harris corner detector tutorial.
2017-07-09 15:57:55 -07:00
Pascal Thomet
309c962169 core/bufferpool.hpp: let msvc accept a non virtual protected destructor
BufferPoolController has a non virtual protected destructor (which is legitimate)

However, Visual Studio sees this as a bug, if you enable more warnings, like below
```
add_compile_options(/W3)     # level 3 warnings
add_compile_options(/we4265) # warning about missing virtual destructors
```

This is a proposition in order to silence this warning.

See https://github.com/ivsgroup/boost_warnings_minimal_demo for a demo of the same problem
with boost/exception.hpp
2017-07-08 16:15:26 +02:00
Maksim Shabunin
cddf868572 Merge pull request #9115 from alalek:ocl_async_cleanup_queue 2017-07-07 12:05:34 +00:00
Alexander Alekhin
da8dbf6cf5 ocl: async cl_buffer cleanup queue (for event callback) 2017-07-07 13:41:20 +03:00
Tomoaki Teshima
e7d5dbfec0 dispatch accumulate series
- use universal intrinsic for base
 - dispatch for float/double version using AVX
 - AVX2 optimization not done yet
2017-07-07 18:45:30 +09:00
Maksim Shabunin
34046ec682 Merge pull request #9105 from alalek:ocl_update_event_callback 2017-07-07 08:23:46 +00:00
Vadim Pisarevsky
ed9564106c reuse AVX2-optimized kernels for AVX1 CPUs (like IvyBridge) 2017-07-06 21:36:59 +03:00
Patrik Huber
600b7a30e6 Added detection of MSVC1911
This is VS2017 Preview. It makes sure the version is detected properly and the INSTALL target then correctly installs to x64/vc15 (the same as MSVC1910).
2017-07-06 19:02:19 +01:00
Alexander Alekhin
b32d914aab static analyze: python dynamic_cast checks 2017-07-06 17:11:51 +03:00
Alexander Alekhin
daee982106 ocl: rework events handling with clSetEventCallback 2017-07-06 13:25:32 +03:00
Vitaly Tuzov
526d1d6db1 AVX optimized implementation of undistort migrated to separate file 2017-07-06 12:08:25 +03:00
Rostislav Vasilikhin
aa621d6f3c magic constants explained 2017-07-06 00:30:53 +03:00
Rostislav Vasilikhin
704c688225 OCL code fixed, fix for NEON added 2017-07-05 22:08:49 +03:00
Rostislav Vasilikhin
6c71988c54 RGB2Luv_f: R, G, B limited to [0, 1] 2017-07-05 22:08:49 +03:00
Rostislav Vasilikhin
82811d0706 Luv: singularities fixed 2017-07-05 22:08:49 +03:00
Piotr Semenov
c5b5d5c8d3 Fix. Now cv::Rect() is the identity under cv::Rect::operator| operation 2017-07-05 19:01:13 +03:00
Alexander Alekhin
cc862e996e videoio: fixes for GStreamer support
- emulated frame counter (with autodetection of GStreamer broken behavior)
- skip 'seek' tests if seeking is not supported by backend
- update 'fps' and total frames checks (increase error tolerance)
- update synthetic image generation
2017-07-05 16:52:48 +03:00
wzw
635342ab73 ocl_calcHist1: Use proper local size for merge_histogram kernel
merge_histogram kernel only need "BINS" theads to accumulate the
histgrams, it is not efficient to directly use maxGroupSize as
local size if maxGroupSize is far greater then BINS.
2017-07-05 21:24:09 +08:00
catree
98c78e0acd Use directly solvePnP when the number of input points is equal to the number of model points. Enable useExtrinsicGuess parameter. Return rvec and tvec estimated using all the inliers instead of the best rvec and tvec estimated during the Minimal Sample Sets step. Document the behavior of solvePnPRansac. 2017-07-05 13:17:38 +02:00
Alexander Alekhin
6833b46a05 videoio(test): fix message 2017-07-05 13:45:34 +03:00
Arkadiusz Raj
0ef5c8c541 Fixing Aravis support compilation issue 2017-07-05 11:30:43 +02:00
Alexander Alekhin
359bd21bd7 ffmpeg: update 3.3.2
- ffmpeg 3.3 -> 3.3.2
- added VERSIONINFO
2017-07-04 18:49:30 +03:00
Maksim Shabunin
f670a99270 Merge pull request #9089 from alalek:cmake_fix_sdl_linker_flags 2017-07-04 14:23:39 +00:00
Vitaly Tuzov
fadf25acd6 SSE4_1 optimized implementation of resize and warp functions migrated to separate file 2017-07-04 17:05:36 +03:00
Vitaly Tuzov
77264dcca9 AVX optimized implementation of haar migrated to separate file 2017-07-04 16:54:48 +03:00
Alexander Alekhin
eed5cfba7d cmake: fix linker flags 2017-07-04 15:04:42 +03:00
Vitaly Tuzov
5448d9186a AVX and SSE4.1 optimized conversion implementations migrated to separate files 2017-07-04 14:48:01 +03:00
Vladislav Sovrasov
2a2a1dc5b4 Get rid of OPENCV_NOSTL definition 2017-07-04 14:17:02 +03:00
Vitaly Tuzov
4d0f789e0a AVX optimized implementation of separable filters migrated to separate file 2017-07-04 13:47:47 +03:00
Aleksandr Rybnikov
d3c14ce3ea Added tests for ResNet-50 and SqueezeNet v1.1 2017-07-04 12:19:27 +03:00
Vladislav Sovrasov
42936d3227 imgproc: fix MORPH_HITMISS operation when kernel has no negative values 2017-07-04 11:17:44 +03:00
Alexander Alekhin
7b8e6307f8 Merge pull request #9080 from alalek:version_3.3.0-rc
version 3.3.0-rc
2017-07-03 16:21:45 +00:00
Alexander Alekhin
823353d3ac Merge pull request #9067 from D-Alex:master
Fix error message fisheye CALIB_CHECK_COND
2017-07-03 16:20:03 +00:00
Alexander Alekhin
639e7367a7 Merge pull request #9081 from catree:fix_tutorial_pca_intro
Fix wrong mat access in introduction_to_pca.cpp
2017-07-03 16:18:15 +00:00
Alexander Alekhin
2863c9fe19 Merge pull request #9077 from alalek:cmake_enable_cxx11 2017-07-03 16:15:29 +00:00
Alexander Alekhin
37c8f217a7 Merge pull request #9076 from mshabunin:fix-doc-from-mail 2017-07-03 16:12:46 +00:00
Tony Lian
c8783f3e23 Merge pull request #9075 from TonyLianLong:master
Remove unnecessary Non-ASCII characters from source code (#9075)

* Remove unnecessary Non-ASCII characters from source code

Remove unnecessary Non-ASCII characters and replace them with ASCII
characters

* Remove dashes in the @param statement

Remove dashes and place single space in the @param statement to keep
coding style

* misc: more fixes for non-ASCII symbols

* misc: fix non-ASCII symbol in CMake file
2017-07-03 16:14:17 +00:00
Alexander Alekhin
9aaf6a66a3 Merge pull request #9073 from berak:dnn_fix_tutorial_links 2017-07-03 16:11:10 +00:00
Alexander Alekhin
ced9d2357c Merge pull request #9070 from catree:imshow_64bits_doc 2017-07-03 16:10:13 +00:00
Alexander Alekhin
9611aa81b2 Merge pull request #9069 from catree:ffmpeg_warnings_errors 2017-07-03 16:09:27 +00:00
Alexander Alekhin
b10bd4b65d Merge pull request #9068 from dkurt:mkl_with_openmp 2017-07-03 16:09:11 +00:00
Alexander Alekhin
8aa3011f2d Merge pull request #9064 from sadika9:patch-1 2017-07-03 16:07:53 +00:00
Alexander Alekhin
7bb9237d99 Merge pull request #9060 from alalek:canny_inplace_bug 2017-07-03 16:06:50 +00:00
Alexander Alekhin
11a726ceb3 Merge pull request #9057 from alalek:static_build_workaround 2017-07-03 16:05:31 +00:00
Alexander Alekhin
c3586b8534 Merge pull request #9055 from fdebrabander:master
how_to_scan_images.markdown: fix grammar mistakes
2017-07-03 16:06:59 +00:00
Alexander Alekhin
7621cc19dc Merge pull request #9054 from zhmu:upstream 2017-07-03 16:04:11 +00:00
Alexander Alekhin
4f01ad8517 Merge pull request #9052 from jqly:patch-1 2017-07-03 16:03:46 +00:00
Alexander Alekhin
5590aea411 Merge pull request #8998 from abratchik:DNN.java.wrappers.fix 2017-07-03 16:02:49 +00:00
Vitaly Tuzov
3681dcef1a AVX optimized implementation of resize and warp functions migrated to separate file 2017-07-03 18:18:20 +03:00
catree
8b7cb8a3f1 Fix wrong mat access. 2017-07-03 16:56:53 +02:00
Alexander Alekhin
1b8d363231 version 3.3.0-rc 2017-07-03 16:47:05 +03:00
Alexander Alekhin
3f02f569af cmake: update CXX11 compiler flag 2017-07-03 16:13:12 +03:00
Alexander Alekhin
108188e42f Merge pull request #9032 from sovrasov:mat_doc_update 2017-07-03 12:46:42 +00:00
Maksim Shabunin
2a33f452b0 Fixed minor doc issue 2017-07-03 12:56:22 +03:00
Vladislav Sovrasov
f42b7d03b4 core: add a test of iteration through the Mat_ with range-based for 2017-07-03 12:49:17 +03:00
Vladislav Sovrasov
267fdc4c91 Add a note about cxx11 range-based loop in Mat_ documentation 2017-07-03 12:49:11 +03:00
Alexander Alekhin
32d1eb36df dnn: fix links 2017-07-03 12:44:27 +03:00
Maksim Shabunin
d5323ce848 Merge pull request #9066 from mshabunin:fix-static-5 2017-07-03 09:03:40 +00:00
Alexander Alekhin
b3f5e3bf94 core(stat): optimize size of binaries, drop AVX dispatch (no imrovements) 2017-07-02 22:45:10 +00:00
Alexander Alekhin
b66c349bba core(stat): add required CV_AVX_GUARD
Added guard with 'vzeroupper' instruction
2017-07-02 22:45:10 +00:00
Alexander Alekhin
c45d3568ae core(stat): register dispatched code, fix build 2017-07-02 22:45:10 +00:00
Alexander Alekhin
6a6222d21c core(stat): remove useless checks 2017-07-02 22:45:10 +00:00
Alexander Alekhin
880052d3f3 core(stat): create dispatch.cpp file 2017-07-02 22:45:10 +00:00
Alexander Alekhin
85afbd409b core(stat): move implementations into .hpp file w/o changes 2017-07-02 22:45:09 +00:00
Alexander Alekhin
03c3e0edcf core(stat): stat.cpp minor refactoring
- remove unused code
- added: #if CV_ENABLE_UNROLLED in Hamming's functions
2017-07-02 22:45:09 +00:00
Alexander Alekhin
4f558e8b89 cmake: added "SSE4_2" into default CPU dispatch 2017-07-02 22:45:09 +00:00
berak
34c0ab5878 dnn: fix some tutorial links 2017-07-02 10:09:27 +02:00
abratchik
8f7181429f add java wrappers to dnn module 2017-07-02 11:46:20 +04:00
catree
921f06eb6f Fix ffmpeg detection with -D OPENCV_WARNINGS_ARE_ERRORS=ON option. 2017-07-02 01:59:41 +02:00
catree
d06619ab15 Add 64-bit imshow behavior in the documentation. 2017-07-02 00:41:29 +02:00
dkurt
425e92e5ca Fix MKL linkage with enabled OpenMP 2017-07-01 20:02:13 +03:00
Alexander Duda
5ca7dcc6e7 Fix error message fisheye CALIB_CHECK_COND
The old error message was not giving any hint which input array (image)
led to an ill conditioned matrix. This made it near impossible to
identify poor images in a larger set.

A better approach would be to implement a checker function which gives
each image a rating before the real calibration is performed. This could
also include some image properties like sharpness, etc.
2017-07-01 13:31:21 -02:30
Maksim Shabunin
1f23202ad8 Issues found by static analysis (5th round) 2017-07-01 18:56:24 +03:00
tribta
6512a4b7e3 OpenCV Java Highgui Class
The objective is to:

    *Reduce greatly the number of lines of code in the Java codes;
    *Make it easy for Java users to add a trackbar and show the results;
    *Get the code more similar between C++, Java and Python, making the tutorials more uniform.
2017-07-01 11:07:20 +01:00
Sadika Sumanapala
40e1f2fc03 Fix style 2017-07-01 06:59:27 +05:30
Alexander Alekhin
582bb3c311 core(perf): added Hamming tests 2017-07-01 00:49:18 +00:00
Alexander Alekhin
e5aa213554 Merge pull request #9056 from mshabunin:fix-videoio-deps 2017-06-30 16:49:42 +00:00
Alexander Alekhin
cdf2a59afa canny: disallow broken inplace arguments 2017-06-30 19:32:16 +03:00
Maksim Shabunin
6320ede98e Removed extra dependencies from videoio library 2017-06-30 18:54:42 +03:00
Alexander Alekhin
c235bbfcb4 Merge pull request #9050 from alalek:dnn_binding_fixes 2017-06-30 15:51:34 +00:00
Alexander Alekhin
c5a6846866 static build workaround 2017-06-30 18:17:32 +03:00
Frank de Brabander
36b00e69ab how_to_scan_images.markdown: fix grammer mistakes
Improve the readability of the tutorial.
2017-06-30 15:51:02 +02:00
Rink Springer
3ce1bca670 Prevent crash when attempting to create training data without responses.
This is at least useful when using an SVM one-class linear classifier, so there are valid use cases.
2017-06-30 15:36:47 +02:00
jqly
444593014f a fix for open issue 4772 2017-06-30 20:22:16 +08:00
Alexander Alekhin
6ea6e4bceb binding: fix headers processing 2017-06-30 14:53:21 +03:00
tribta
d53a5210a8 Improving codes of the tutorial: mat_mask_oprations
*Fixing typos;
*Making codes more similar to the main one, in C++;
*Adding Grayscale option to the Python and Java codes;
*Fixing python identation, whitespaces and redundancies.
2017-06-30 12:38:24 +01:00
Alexander Alekhin
2db45c8a85 hdr_parser: ignore lines with 'CV__' macros 2017-06-30 14:36:08 +03:00
Alexander Alekhin
a84a5e8f1a Merge pull request #8936 from terfendail:clipline_fix 2017-06-30 10:55:09 +00:00
Alexander Alekhin
8bd2e9816a cmake: don't add vs_version.rc for static modules (ts) 2017-06-30 13:43:31 +03:00
Maksim Shabunin
638a01a014 Merge pull request #9038 from mshabunin:fix-static-4 2017-06-30 10:39:36 +00:00
Maksim Shabunin
90d2f8b5fe Merge pull request #9035 from alalek:dnn_fix_halide_tests 2017-06-30 10:29:13 +00:00
Alexander Alekhin
a6d88b4d1f Merge pull request #9044 from neilsh-msft:WinRTBuild 2017-06-30 10:14:48 +00:00
Maksim Shabunin
e0393f8557 Fixed some issues found by static analysis (4th round) 2017-06-30 12:26:53 +03:00
Neil Shipp
3f72ff215e Fix WinRT build breaks in highgui and videoio. 2017-06-29 17:56:09 -07:00
Alexander Alekhin
64b483c65b Merge pull request #9033 from alalek:sgbm_disable_perf_in_debug 2017-06-29 16:16:55 +00:00
Alexander Alekhin
0c08094536 Merge pull request #9039 from arrybn:disable_caffe_parser_logs 2017-06-29 15:50:05 +00:00
Aleksandr Rybnikov
fab4f4b9d5 Disabled logging in caffe parser in release 2017-06-29 17:36:48 +03:00
Alexander Alekhin
72a765d766 dnn: fix compilation of Halide tests 2017-06-29 16:36:34 +03:00
Vitaly Tuzov
1ed9a58b64 AVX optimized implementation of Harris corner detector migrated to separate file 2017-06-29 15:19:23 +03:00
Vadim Pisarevsky
2ac819018d Merge pull request #9014 from sovrasov:compare_scalars_fix 2017-06-29 11:14:44 +00:00
Vadim Pisarevsky
5f1b6ee889 Merge pull request #9017 from sovrasov:parallel_for_cxx11 2017-06-29 11:12:57 +00:00
Vadim Pisarevsky
27c7ef28a7 Merge pull request #9020 from arrybn:fix_googlenet_python_sample 2017-06-29 11:10:46 +00:00
Vadim Pisarevsky
ac49a17a82 Merge pull request #9022 from dkurt:keep_conv_weights_for_halide 2017-06-29 11:09:17 +00:00
Vadim Pisarevsky
fb1dcdd17d Merge pull request #9029 from alalek:dnn_cleanup_torch 2017-06-29 11:07:35 +00:00
Alexander Alekhin
b84cbeec8c calib3d(perf): disable SGBM tests in debug mode
because they are too long (takes minutes)
2017-06-29 12:49:47 +03:00
Maksim Shabunin
f6a33c4826 Merge pull request #9031 from huangqinjin:gtk 2017-06-29 07:59:56 +00:00
Maksim Shabunin
f1a56cb4b7 Merge pull request #9028 from alalek:dnn_experimental_namespace 2017-06-29 07:37:04 +00:00
Maksim Shabunin
9087778b06 Merge pull request #8895 from lewisjb:python-docstrings 2017-06-29 07:35:33 +00:00
Maksim Shabunin
ace0701a46 Merge pull request #9019 from alalek:dnn_trace 2017-06-29 07:33:46 +00:00
Maksim Shabunin
ca9622145e Merge pull request #9026 from alalek:remove_danger_define 2017-06-29 07:28:38 +00:00
Maksim Shabunin
9d4cd352af Merge pull request #8903 from StevenPuttemans:fix_models 2017-06-29 07:27:49 +00:00
huangqinjin
aa75b6067c gtk: check NULL before unref 2017-06-29 11:35:34 +08:00
Alexander Alekhin
511e50c19c dnn: cleanup torch integration code 2017-06-28 21:49:37 +00:00
Alexander Alekhin
324851882a Merge pull request #9025 from mshabunin:fix-static-3 2017-06-28 20:50:21 +00:00
Alexander Alekhin
da0960321b dnn: added "hidden" experimental namespace
Main purpose of this namespace is to avoid using of incompatible
binaries that will cause applications crashes.

This additional namespace will not impact "Source code API".
This change allows to maintain ABI checks (with easy filtering out).
2017-06-28 20:36:57 +00:00
Alexander Alekhin
b9a2d7b600 build: remove #define to prevent unexpected impact on user applications 2017-06-28 18:50:55 +03:00
Maksim Shabunin
a769d69a9d Fixed several issues found by static analysis 2017-06-28 18:06:18 +03:00
dkurt
b46f5b1b38 Align convolutional layer weights separately from origin ones 2017-06-28 17:05:56 +03:00
Vladislav Sovrasov
08db55fb62 core: add CV_CXX_11 flag to cvdef.h 2017-06-28 16:17:53 +03:00
Vladislav Sovrasov
3c748ccf10 core: add an ability to use cxx11 lambda as a parallel_for_ body 2017-06-28 16:16:05 +03:00
Alexander Alekhin
20f603a217 Merge pull request #8993 from Cartucho:compiling_java_code 2017-06-28 12:26:29 +00:00
Tong Ke
8088d6785a Merge pull request #8585 from tonyke1993:ap3p
Enable p3p and ap3p in solvePnPRansac (#8585)

* add paper info

* allow p3p and ap3p being RANSAC kernel

* keep previous code

* apply catrees comment

* fix getMat

* add comment

* add solvep3p test

* test return value

* fix warnings
2017-06-28 15:27:30 +03:00
Aleksandr Rybnikov
b8b8047448 Fixed python sample for googlenet in dnn 2017-06-28 15:07:56 +03:00
Vladislav Sovrasov
35a1ecef2a core: fix infinite recursion in compare 2017-06-28 15:00:52 +03:00
Alexander Alekhin
ed10383359 dnn: added trace macros 2017-06-28 14:57:26 +03:00
Alexander Alekhin
dcf3d988d5 Merge pull request #8543 from csukuangfj:fix-String 2017-06-28 11:20:29 +00:00
Vadim Pisarevsky
7567eb8433 Merge pull request #8953 from mattmyne:cocoa_window_32_64_objc_fix 2017-06-28 10:56:21 +00:00
Vadim Pisarevsky
c5faa9aefa Merge pull request #9013 from arrybn:ssd_last_layers_optim 2017-06-28 10:38:55 +00:00
tribta
98849151a2 formating style and making changes accordingly to review 2017-06-28 11:05:18 +01:00
Vadim Pisarevsky
bbb14d3746 Merge pull request #9003 from dkurt:halide_bug_fixes 2017-06-28 08:48:27 +00:00
Aleksandr Rybnikov
ec321e651f Removed usage of std::map in DetectionOutput layer 2017-06-28 11:31:38 +03:00
Vadim Pisarevsky
2ae849091c Merge pull request #9009 from alalek:fix_dnn_initialization 2017-06-28 08:26:29 +00:00
Vadim Pisarevsky
8b3d6603d5 another round of dnn optimization (#9011)
* another round of dnn optimization:
* increased malloc alignment across OpenCV from 16 to 64 bytes to make it AVX2 and even AVX-512 friendly
* improved SIMD optimization of pooling layer, optimized average pooling
* cleaned up convolution layer implementation
* made activation layer "attacheable" to all other layers, including fully connected and addition layer.
* fixed bug in the fusion algorithm: "LayerData::consumers" should not be cleared, because it desctibes the topology.
* greatly optimized permutation layer, which improved SSD performance
* parallelized element-wise binary/ternary/... ops (sum, prod, max)

* also, added missing copyrights to many of the layer implementation files

* temporarily disabled (again) the check for intermediate blobs consistency; fixed warnings from various builders
2017-06-28 11:15:22 +03:00
Alexander Alekhin
00dd433368 dnn: fix LayerFactory initialization 2017-06-27 23:19:53 +03:00
Alexander Alekhin
82ec76c123 Merge pull request #8990 from mshabunin:fix-static-2 2017-06-27 14:53:26 +00:00
Maksim Shabunin
1c4fb418cf Merge pull request #9007 from alalek:issue_9001 2017-06-27 14:38:43 +00:00
Maksim Shabunin
58c5be0002 Merge pull request #9006 from alalek:videoio_synchronize_ffmpeg_open 2017-06-27 14:19:07 +00:00
Vadim Pisarevsky
9e9f57c139 Merge pull request #9004 from alalek:fix_build_flann_sdl 2017-06-27 14:05:23 +00:00
Alexander Alekhin
f8a75c4361 dispatch: added CV_TRY_${OPT} macro, fix dnn build
- 1: OPT is available directly or via dispatcher
- 0: optimization is not compiled at all
2017-06-27 17:05:15 +03:00
Alexander Alekhin
a87d6b098f videoio: synchronize ffmpeg open() call 2017-06-27 16:32:32 +03:00
Alexander Alekhin
22d2207d41 flann: fix build with MSVC /sdl option 2017-06-27 15:25:19 +03:00
Alexander Alekhin
9ee60dbff2 Merge pull request #8963 from likan999:fix-java-camera-view 2017-06-27 11:57:13 +00:00
dkurt
121789f78e Fixed some bugs from Halide tests 2017-06-27 14:52:46 +03:00
Maksim Shabunin
32d4af36e2 Fixing some static analysis issues 2017-06-27 14:30:26 +03:00
Alexander Alekhin
b991665b5d Merge pull request #9000 from alalek:fix_winpack_build 2017-06-27 11:10:46 +00:00
Alexander Alekhin
eff47b1260 Merge pull request #8997 from alalek:fix_build_warnings 2017-06-27 09:57:39 +00:00
Alexander Alekhin
04f8194327 Merge pull request #8996 from alalek:fix_viz_build 2017-06-27 09:57:20 +00:00
Alexander Alekhin
16d1bbf2ea dnn: fix build
- winpack
- opencv_world
2017-06-27 09:07:01 +03:00
Alexander Alekhin
650830b9d6 build: eliminate warning 2017-06-27 08:16:40 +03:00
Alexander Alekhin
45cbc512bf build: fix viz tests
removed test_precomp.cpp
2017-06-27 08:03:27 +03:00
Cartucho
fd91072990 Merge branch 'master' into compiling_java_code 2017-06-27 02:32:11 +01:00
tribta
3611396c0b Compiling the Java tutorials codes using Apache Ant. 2017-06-27 02:30:22 +01:00
Vadim Pisarevsky
ef2e5a9f82 Merge pull request #8988 from sovrasov:repeat_src_eq_dst_fix 2017-06-26 21:58:26 +00:00
Vadim Pisarevsky
48924cd874 Merge pull request #8989 from alalek:move_dnn_module 2017-06-26 21:57:26 +00:00
Alexander Alekhin
986d27e49c dnn: fix failed Torch tests
"Torch invalid argument 2: position must be smaller than LLONG_MAX"

These conditions are always true for "long position" argument.
2017-06-26 22:02:22 +03:00
Alexander Alekhin
b4f1102455 Merge pull request #8995 from savuor:fix/trace_ovx_build 2017-06-26 18:47:31 +00:00
Rostislav Vasilikhin
e63feba8e2 fixed typo 2017-06-26 20:19:18 +03:00
Alexander Alekhin
93091ba203 dnn: AVX2 fix invalid unaligned read 2017-06-26 19:48:42 +03:00
Alexander Alekhin
623de337e8 dnn: fix build warnings 2017-06-26 19:48:42 +03:00
Alexander Alekhin
b500ae2d21 Merge pull request #8766 from alalek:trace 2017-06-26 16:03:43 +00:00
Alexander Alekhin
006966e629 trace: initial support for code trace 2017-06-26 17:07:13 +03:00
Alexander Alekhin
07aff8e85f 3rdparty: add ittnotify sources
https://github.com/01org/IntelSEAPI/tree/master/ittnotify
2017-06-26 17:05:06 +03:00
Alexander Alekhin
e49c429162 viz: fix tests build 2017-06-26 17:05:06 +03:00
Vitaly Tuzov
3d7fd4132b Fixed clipLine evaluation for very long lines 2017-06-26 16:00:29 +03:00
Alexander Alekhin
ee54bafe6b dnn: fix dnn python test files 2017-06-26 15:13:00 +03:00
Alexander Alekhin
e03569f3a8 dnn: remove obsolete "build opencv_contrib with dnn module" tutorial 2017-06-26 15:12:00 +03:00
Alexander Alekhin
382e38941c dnn: fix documentation links 2017-06-26 15:10:50 +03:00
Alexander Alekhin
14de8ac951 dnn: move samples 2017-06-26 14:51:12 +03:00
Alexander Alekhin
6031c79197 dnn: remove unused README 2017-06-26 14:51:12 +03:00
Alexander Alekhin
7f12836df9 dnn: fix public headers guards 2017-06-26 14:21:33 +03:00
Vladislav Sovrasov
4f9871817a core: forbid handling of the case when src=dst in cv::repeat 2017-06-26 14:02:52 +03:00
Alexander Alekhin
93729784bb dnn: move module from opencv_contrib
e6f63c7a38/modules/dnn
2017-06-26 13:41:51 +03:00
Vadim Pisarevsky
ef692350e0 Merge pull request #8966 from alalek:protobuf_sources 2017-06-26 10:27:40 +00:00
Maksim Shabunin
09db01af5b Merge pull request #8986 from alalek:build_disable_avx512 2017-06-26 09:26:50 +00:00
Maksim Shabunin
8c27ceb9de Merge pull request #8981 from alalek:port_8979 2017-06-26 09:25:23 +00:00
Maksim Shabunin
b3cd2448cd Merge pull request #8985 from alalek:update_videoio 2017-06-26 09:22:44 +00:00
Maksim Shabunin
c60b7d76c5 Merge pull request #8984 from alalek:update_videowriter_apipreference 2017-06-26 09:18:33 +00:00
Alexander Alekhin
6b7a1d4dde build: disable AVX512
Currently it is not supported.
All builds are broken with enabled AVX512 option.
2017-06-26 00:31:24 +03:00
Alexander Alekhin
d7597a8610 videoio: do not mix CV_CAP and CAP_ APIs enum values 2017-06-25 23:35:33 +03:00
Alexander Alekhin
460e9bf0af videoio: drop changes from legacy C-API header 2017-06-25 23:25:56 +03:00
Alexander Alekhin
23f4bff742 videoio: update VideoWriter apiPreference parameter position 2017-06-25 22:57:24 +03:00
Alexander Alekhin
cc021e555b Merge pull request #8982 from catree:morphologyEx_iterations_doc 2017-06-25 11:13:49 +00:00
catree
a084501ecf Add a note to morphologyEx documentation to clarify the behavior when iterations > 1. 2017-06-25 00:16:16 +02:00
Alexander Alekhin
35a2f2fef9 videoio(macosx): fix array access exception in AVFoundation 2017-06-24 11:07:57 +03:00
Alexander Alekhin
51e16bbe81 Merge pull request #8976 from jrtc27:fast-math-asm 2017-06-23 15:51:48 +00:00
James Clarke
25020f2672 fast_math.hpp: Use __asm__ rather than asm; fixes including with -std=c99 2017-06-23 15:28:09 +01:00
Vadim Pisarevsky
fa7e7e0ff9 Merge pull request #8900 from alalek:update_android_build 2017-06-23 10:58:53 +00:00
Alexander Alekhin
259147e32c Merge pull request #8969 from alalek:fix_typo 2017-06-22 19:32:12 +03:00
Alexander Alekhin
d649d1388e cmake: fix typo 2017-06-22 19:21:59 +03:00
Alexander Alekhin
1c4c58d1b5 3rdparty: update CMake scripts for protobuf 2017-06-22 17:44:53 +03:00
Alexander Alekhin
63b30554ad 3rdparty: protobuf 3.1.0 sources
without tests, testdata, .proto files
2017-06-22 16:39:18 +03:00
Maksim Shabunin
d27009c775 Merge pull request #8856 from mshabunin:media-tests-upgrade 2017-06-22 11:45:52 +00:00
Maksim Shabunin
4eb5242e16 Merge pull request #8965 from mshabunin:fix-vs-issue-tiff 2017-06-22 11:40:07 +00:00
Maksim Shabunin
5770b961a1 Fix possible uninitialized memory in libtiff 2017-06-22 14:04:30 +03:00
Alexander Alekhin
0303fa0a19 Merge pull request #8958 from alalek:update_download 2017-06-22 09:28:16 +00:00
likan999
74127d44d0 More accurate condition to detect emulator
Previous commit, 6f39f9a, tries to fix the color issue for emulator. But the condition for detecting emulator is incomplete, e.g. it stops working for emulators using Google Play, whose Build.BRAND=="google". https://stackoverflow.com/a/21505193 shows a more accurate condition for this.
2017-06-22 00:47:15 -07:00
678098
d0ab595f52 batch-oriented mutex locking in parallel haar detect loop body 2017-06-21 23:25:57 +03:00
Alexander Alekhin
92c0709c49 Merge pull request #8960 from dkurt:halide_support_opencl 2017-06-21 19:56:40 +00:00
dkurt
e74fed5c84 Catch SkipTestException in performance tests 2017-06-21 21:30:52 +03:00
Alexander Alekhin
d29c299cdb cmake: additional messages on download errors 2017-06-21 19:04:27 +03:00
Alexander Alekhin
f0e3431bc7 .gitignore: added ".cache" directory back
It is necessary for proper work of "git clean" command
2017-06-21 19:03:17 +03:00
Dmitry Kurtaev
16368a275b cmake: add Halide support (#8794) 2017-06-21 14:33:47 +03:00
Jiri Horner
5f20e802d2 Merge pull request #8869 from hrnr:akaze_part1
[GSOC] Speeding-up AKAZE, part #1 (#8869)

* ts: expand arguments before stringifications in CV_ENUM and CV_FLAGS

added protective macros to always force macro expansion of arguments. This allows using CV_ENUM and CV_FLAGS with macro arguments.

* feature2d: unify perf test

use the same test for all detectors/descriptors we have.

* added AKAZE tests

* features2d: extend perf tests

* add BRISK, KAZE, MSER
* run all extract tests on AKAZE keypoints, so that the test si more comparable for the speed of extraction

* feature2d: rework opencl perf tests

use the same configuration as cpu tests

* feature2d: fix descriptors allocation for AKAZE and KAZE

fix crash when descriptors are UMat

* feature2d: name enum to fix build with older gcc

* Revert "ts: expand arguments before stringifications in CV_ENUM and CV_FLAGS"

This reverts commit 19538cac1e.

This wasn't a great idea after all. There is a lot of flags implemented as #define, that we don't want to expand.

* feature2d: fix expansion problems with CV_ENUM in perf

* expand arguments before passing them to CV_ENUM. This does not need modifications of CV_ENUM.
* added include guards to `perf_feature2d.hpp`

* feature2d: fix crash in AKAZE when using KAZE descriptors

* out-of-bound access in Get_MSURF_Descriptor_64
* this happened reliably when running on provided keypoints (not computed by the same instance)

* feature2d: added regression tests for AKAZE

* test with both MLDB and KAZE keypoints

* feature2d: do not compute keypoints orientation twice

* always compute keypoints orientation, when computing keypoints
* do not recompute keypoint orientation when computing descriptors

this allows to test detection and extraction separately

* features2d: fix crash in AKAZE

* out-of-bound reads near the image edge
* same as the bug in KAZE descriptors

* feature2d: refactor invariance testing

* split detectors and descriptors tests
* rewrite to google test to simplify debugging
* add tests for AKAZE and one test for ORB

* stitching: add tests with AKAZE feature finder

* added basic stitching cpu and ocl tests
* fix bug in AKAZE wrapper for stitching pipeline causing lots of
! OPENCV warning: getUMat()/getMat() call chain possible problem.
!                 Base object is dead, while nested/derived object is still alive or processed.
!                 Please check lifetime of UMat/Mat objects!
2017-06-21 14:33:09 +03:00
Vadim Pisarevsky
437ca0b62a Merge pull request #8949 from alalek:fix_sortIdx 2017-06-21 11:23:10 +00:00
Matt Bennett
05acf40aff remove ARC and auto synthesize assumptions in cocoa_window.mm 2017-06-21 12:00:26 +01:00
Alexander Alekhin
3e3e2dd512 android: make optional "cpufeatures", build fixes for NDK r15 2017-06-21 13:34:19 +03:00
Vadim Pisarevsky
2c30f358dc Merge pull request #8947 from alalek:vs_version 2017-06-21 09:33:52 +00:00
Vadim Pisarevsky
6f3d881d74 Merge pull request #8950 from alalek:cmake_mkl_detection 2017-06-21 09:32:02 +00:00
Alexander Alekhin
d3ebe665e0 core: fix IPP optimization for sortIdx 2017-06-21 03:04:16 +00:00
Alexander Alekhin
9067310166 core(test): added cv::sortIdx accuracy tests 2017-06-21 03:04:16 +00:00
Alexander Alekhin
9496fe40ec cmake: guard scanning of default MKL system-wide paths
- WITH_MKL option is enabled
- user doesn't specify MKLROOT/MKL_ROOT_DIR variables
2017-06-21 02:44:48 +00:00
Maksim Shabunin
87b569d812 Rewritten some tests in videoio and imgcodecs modules
general:
- all iterative tests have been replaced with parameterized tests
- old-style try..catch tests have been modified to use EXPECT_/ASSERT_ gtest macros
- added temporary files cleanup
- modified MatComparator error message formatting

imgcodecs:
- test_grfmt.cpp split to test_jpg.cpp, test_png.cpp, test_tiff.cpp, etc.

videoio:
- added public HAVE_VIDEO_INPUT, HAVE_VIDEO_OUTPUT definitions to cvconfig.h
- built-in MotionJPEG codec could not be tested on some platforms (read_write test was disabled if ffmpeg is off, encoding/decoding was handled by ffmpeg otherwise).
- image-related tests moved to imgcodecs (Videoio_Image)
- several property get/set tests have been combined into one
- added MotionJPEG test video to opencv_extra
2017-06-20 18:20:41 +03:00
Maksim Shabunin
8b664d6122 Merge pull request #8825 from mshabunin:media-sdk-support 2017-06-20 15:15:51 +00:00
Alexander Alekhin
43b03b6517 Merge pull request #8864 from sovrasov:calib_flags_update 2017-06-20 15:12:50 +00:00
Alexander Alekhin
a9cc87636f build: update modules descriptions 2017-06-20 15:45:23 +03:00
Alexander Alekhin
db35e13b46 build: added VERSIONINFO resource 2017-06-20 15:45:21 +03:00
Alexander Alekhin
594652cac1 Merge pull request #8942 from zwsu:master 2017-06-20 10:57:17 +00:00
Maksim Shabunin
c06f3d63e8 Initial version of MediaSDK integration:
- cmake dependencies search (WITH_MFX option)
- raw H264, H265, MPEG2 encoding and decoding
- tests for supported formats
2017-06-20 12:15:10 +03:00
Maksim Shabunin
68d01972fe Merge pull request #8883 from abratchik:DNN.java.wrappers.fix 2017-06-20 09:05:53 +00:00
Zhiwei Su
8bf3f6bfcb Fixed gray window for gpu stereo BP and CSBP
compute() for BP and CSBP output 32-bit floating-point mat, and in cv::imshow() 32-bit floating-point is recognized as [0,1] and maped to [0,255], that causes gray window for BP and CSBP.
2017-06-19 20:30:28 +08:00
Maksim Shabunin
1f4067112f Merge pull request #8920 from sovrasov:video_vriter_ext 2017-06-19 10:52:34 +00:00
Vladislav Sovrasov
f1c16f42b4 video: add one more constructor for VideoWriter 2017-06-19 12:11:14 +03:00
abratchik
037d8fbdcd Refactor OpenCV Java Wrapping 2017-06-15 20:35:12 +04:00
Alexander Alekhin
3ea02e4fcc Merge pull request #8925 from savuor:fix/softfloat_comments 2017-06-15 16:12:30 +00:00
Alexander Alekhin
b21b694444 Merge pull request #8924 from tomoaki0705:fixWarningResize 2017-06-15 16:11:18 +00:00
Alexander Alekhin
7580db09ad Merge pull request #8922 from tomoaki0705:fixWarningJetsonTK1 2017-06-15 16:09:35 +00:00
Rostislav Vasilikhin
939c8e8a99 float constant replaced by int hex representations 2017-06-15 15:10:41 +03:00
Tomoaki Teshima
5ad3ddc1b6 suppress warning
- check if compiler is Intel compiler
 - remove not referenced variables
2017-06-15 18:59:48 +09:00
Tomoaki Teshima
bd215fbf33 suppress warning on Jetson TK1 2017-06-15 18:28:13 +09:00
Alexander Alekhin
26e9b42a44 Merge pull request #8915 from sovrasov:deniose_add_assert 2017-06-14 19:17:28 +00:00
Alexander Alekhin
4f35a592a1 Merge pull request #8912 from alalek:fix_cxx11_mac_flann 2017-06-14 19:15:21 +00:00
Alexander Alekhin
9b902adea6 Merge pull request #8832 from terfendail:perf_accumulate_fix 2017-06-14 18:49:09 +00:00
Rostislav Vasilikhin
29593635ed licence updated 2017-06-14 21:20:10 +03:00
Rostislav Vasilikhin
2ad612f475 removed MSVC warning suppression 2017-06-14 21:00:06 +03:00
Alexander Alekhin
cf86f88c71 Merge pull request #8911 from alalek:fix_vsum4 2017-06-14 12:00:58 +00:00
Vladislav Sovrasov
234ad8fbee photo: add assertion on empty image in denoising 2017-06-14 13:57:07 +03:00
Alexander Alekhin
e23b59da5c build: fix v_reduce_sum4 (requires SSE3) 2017-06-14 09:37:06 +00:00
Vadim Pisarevsky
12a1c127a9 Merge pull request #8890 from alalek:remove_3rdparty_jinja2_sources 2017-06-14 07:30:14 +00:00
lewisjb
078b4cc971 Added Python Docstrings 2017-06-14 16:46:08 +10:00
Alexander Alekhin
9fa90c8851 Merge pull request #8899 from tomoaki0705:fixSuppressWarningsUnreachable 2017-06-14 01:07:47 +00:00
Alexander Alekhin
cc52523375 flann: add normal assignment operator for cvflann::any 2017-06-14 00:55:52 +00:00
Vadim Pisarevsky
f49f056d29 Merge pull request #8907 from vpisarev:dnn_fast_conv 2017-06-13 21:04:31 +00:00
Vadim Pisarevsky
bd1334a83f Merge pull request #8891 from alalek:cmake_build_x64_sse3 2017-06-13 17:33:01 +00:00
Vadim Pisarevsky
e72e34ec36 Merge pull request #8843 from terfendail:resizenn_patch 2017-06-13 17:29:30 +00:00
Vladislav Sovrasov
c0e456dee2 calib3d: use calibration flags from the new enums 2017-06-13 19:55:53 +03:00
Vladislav Sovrasov
d121d1c528 calib3d: add CALIB_FIX_TANGENT_DIST flag 2017-06-13 19:40:49 +03:00
Vitaly Tuzov
3a5e036feb Updated fix for accumulate performance test in case of multiple iterations 2017-06-13 19:23:34 +03:00
Vitaly Tuzov
2de1aac665 Updated alignment declarations to CV_DECL_ALIGNED macro 2017-06-13 18:44:38 +03:00
Vadim Pisarevsky
fbafc700ea added v_reduce_sum4() universal intrinsic; corrected number of threads in cv::getNumThreads() in the case of GCD 2017-06-13 18:04:00 +03:00
Steven Puttemans
2ddbcc3c4f fixing models to resolve XML violation issue 2017-06-13 09:42:15 +02:00
Tomoaki Teshima
94848a3e1f suppress unreachable code warning
- fix the define condition based on the comment
2017-06-13 08:11:04 +09:00
Alexander Alekhin
a3189e36c0 Merge pull request #8753 from RyuheiMori:fix-cpu-feature-detection-on-android 2017-06-12 16:08:08 +00:00
Alexander Alekhin
f0c2da32f2 3rdparty: cpufeatures workaround 2017-06-11 05:06:49 +00:00
Alexander Alekhin
3dee87b697 update CPU detection on ANDROID patch 2017-06-11 05:06:49 +00:00
Alexander Alekhin
c3bea59a76 cmake: set minimal CPU instruction to SSE3 (x64) 2017-06-11 03:51:53 +00:00
Alexander Alekhin
60f3ca458a 3rdparty: remove jinja2 source code
It used for Matlab binding only
2017-06-11 05:18:15 +03:00
Alexander Alekhin
772a8188c0 Merge pull request #8888 from lewisjb:docs-build-doxygen 2017-06-10 20:12:20 +00:00
lewisjb
47c9bb7ba8 Update doc build instructions for doxygen 2017-06-11 00:00:45 +10:00
Alexander Alekhin
5b63399197 Merge pull request #8862 from alalek:build_hardening_flag 2017-06-09 14:14:52 +00:00
Alexander Alekhin
daf3fabe0d Merge pull request #8877 from alalek:fix_integer_overflow 2017-06-09 14:14:13 +00:00
Alexander Alekhin
e665be1d70 photo: fix integer overflow
There is no cast to wide integer type:
    std::numeric_limits<ST>::max() * std::numeric_limits<ST>::max()
2017-06-09 00:19:29 +00:00
Alexander Alekhin
0213b508dc Merge pull request #8868 from alalek:fix_build_softfloat 2017-06-08 20:22:53 +00:00
Alexander Alekhin
ea93bcc347 Merge pull request #8863 from LukeZheZhu:pyrlk_small_winsize 2017-06-08 20:15:04 +00:00
Alexander Alekhin
e3c0d11b55 Merge pull request #8876 from alalek:fix_build_msvs 2017-06-08 19:53:29 +00:00
Maksim Shabunin
f71ea4dfe9 Merge pull request #8816 from mshabunin:sprintf-fix
Fixed snprintf for VS 2013 (#8816)

* Fixed snprintf for VS 2013

* snprintf: removed declaration from header, changed implementation

* cv_snprintf corrected according to comments

* update snprintf patch
2017-06-08 21:53:16 +02:00
Alexander Alekhin
5c0a287ce8 build: fix warning
C4189: 'clImageUV' : local variable is initialized but not referenced
2017-06-08 20:40:36 +03:00
Alexander Alekhin
781515c514 build: fix "ambiguous call" (MSVS2010) 2017-06-08 20:40:35 +03:00
Alexander Alekhin
515e01e649 Merge pull request #8852 from BKNio:testsForVideoStab 2017-06-08 13:36:51 +00:00
Dinar
1887dcb397 add tests for videostab; 2017-06-08 09:36:17 +03:00
Alexander Alekhin
fc84c48bd7 Merge pull request #8860 from alalek:fix_java_headers 2017-06-08 02:43:09 +00:00
Alexander Alekhin
fd7e516b65 Merge pull request #8844 from mshabunin:fix-arm-tbb 2017-06-08 02:42:31 +00:00
Alexander Alekhin
71517a910a build: fix errors for MSVS2010-2013, reduce default softfloat scope 2017-06-08 01:09:21 +00:00
Alexander Alekhin
1961bb1857 cmake: add ENABLE_BUILD_HARDENING option 2017-06-08 00:39:29 +00:00
Vadim Pisarevsky
31c79668c8 Merge pull request #8803 from 4ekmah:sgbm_modehh4_SIMD 2017-06-07 13:35:53 +00:00
LukeZhu
cc47ee3b43 Modify the pyrlk.cl to support winSize from 8*8 to 24*24 for optical flow 2017-06-07 17:46:50 +08:00
Alexander Alekhin
7b8d107384 Merge pull request #8857 from alalek:fix_pch_stub_regeneration 2017-06-06 19:35:03 +00:00
Alexander Alekhin
59798b3f7c java: use module's public headers only 2017-06-06 21:10:02 +03:00
Alexander Alekhin
0e1d65d3b1 build: fix PCH stub files generation optimization 2017-06-06 21:09:22 +03:00
Alexander Alekhin
125abe2fe4 Merge pull request #8838 from tomoaki0705:dispatchFp16 2017-06-06 15:31:42 +00:00
Tomoaki Teshima
e269ef96cb update convertFp16 using CV_CPU_CALL_FP16
* avoid link error (move the implementation of software version to header)
 * make getConvertFuncFp16 local (move from precomp.hpp to convert.hpp)
 * fix error on 32bit x86
2017-06-06 22:26:51 +09:00
Maksim Shabunin
a426a65b41 TBB: fix build on ARM 2017-06-05 16:36:14 +03:00
Pyotr Chekmaryov
a113e8f088 Fixing buildbot's messages. 2017-06-04 20:32:07 +03:00
Alexander Alekhin
ebd98eaf3a Merge pull request #8848 from alalek:fix_test_photo_aarch64 2017-06-03 15:51:44 +00:00
Alexander Alekhin
3933958b34 photo(test): fix MergeRobertson test for AARCH64 build 2017-06-03 16:57:23 +03:00
Maksim Shabunin
9bb17caa24 Merge pull request #8842 from delftrobotics-forks:compile_fix_circlesgrid_debug 2017-06-02 10:19:33 +00:00
Alexander Alekhin
bad149d77d Merge pull request #8828 from woodychow:multithreaded_gaussian 2017-06-01 19:52:54 +00:00
Vitaly Tuzov
59373a1ae1 AVX and SSE optimizations for resize NN 2017-06-01 19:08:55 +03:00
rmensing
79bb920dee Compile fix for circlesgrid in debug. 2017-06-01 16:00:13 +02:00
Alexander Alekhin
f935a16ef2 Merge pull request #8819 from Robzz:master 2017-06-01 11:57:53 +00:00
Woody Chow
f743603b0a Fallback to single threaded version of IPP gaussian blur / bilateral filter when the mutlithreaded version cannot be called. 2017-06-01 13:34:50 +09:00
Woody Chow
d22fb5f949 Multithread IPP gaussian blur 2017-05-31 18:16:47 +09:00
Alexander Alekhin
0d86681b88 Merge pull request #8823 from wpalfi:patch-1 2017-05-30 20:11:33 +00:00
Werner Palfinger
0f42031b10 fixed typo in pyopencv_from Point3d 2017-05-30 16:49:23 +02:00
Robin Chavignat
c4a3278bab Fix build with CUDA on windows with JOM and Ninja (#6372) 2017-05-30 15:57:39 +02:00
Maksim Shabunin
fdba548858 Merge pull request #8818 from mshabunin:java-cleanup-fix 2017-05-29 14:53:19 +00:00
Vadim Pisarevsky
89af053aed Merge pull request #8797 from sovrasov:hog_sse_fix 2017-05-29 14:32:47 +00:00
Vadim Pisarevsky
c397361aa6 Merge pull request #8798 from BKNio:fix_motionEstimation 2017-05-29 14:31:03 +00:00
Rostislav Vasilikhin
c6a3a18894 SoftFloat integrated (#8668)
* everything is put into softfloat.cpp and softfloat.hpp

* WIP: try to integrate softfloat into OpenCV

* extra functions removed

* softfloat made stateless

* CV_EXPORTS added

* operators fixed

* exp added, log: WIP

* log32 fixed

* shorter names; a lot of TODOs

* log64 rewritten

* cbrt32 added

* minors, refactoring

* "inline" -> "CV_INLINE"

* cast to bool warnings fixed

* several warnings fixed

* fixed warning about unsigned unary minus

* fixed warnings on type cast

* inline -> CV_INLINE

* special cases processing added (NaNs, Infs, etc.)

* constants for NaN and Inf added

* more macros and helper functions added

* added (or fixed) tests for pow32, pow64, cbrt32

* exp-like functions fixed

* minor changes

* fixed random number generation for tests

* tests for exp32 and exp64: values are compared to SoftFloat-based naive implementation

* minor warning fix

* pow(f, i) 32/64: special cases handling added

* unused functions removed

* refactoring is in progress (not compiling)

* CV_inline added

* unions {uint_t, float_t} removed

* tests compilation fixed

* static const members -> static methods returning const

* reinterpret_cast

* warning fixed

* const-ness fixed

* all FP calculations (even compile-time) are done in SoftFloat + minor fixes

* pow(f, i) removed from interface (can cause incorrect cast) to internals of pow(f, f), tests fixed

* CV_INLINE -> inline

* internal constants moved to .cpp file

* toInt_minMag() methods merged into toInt() methods

* macros moved to .cpp file

* refactoring: types renamed to softfloat and softdouble; explicit constructors, etc.

* toFloat(), toDouble() -> operator float(), operator double()

* removed f32/f64 prefixes from functions names

* toType() methods removed, round() and trunc() functions added

* minor change

* minors

* MSVC: warnings fixed

* added int cvRound(), cvFloor, cvCeil, cvTrunc, saturate_cast<T>()

* typo fixed

* type cast fixed
2017-05-29 17:07:25 +03:00
Alexander Alekhin
d54b1ad88a Merge pull request #8805 from catree:solvePnP_doc 2017-05-29 13:52:15 +00:00
Alexander Alekhin
36918b3bb8 Merge pull request #8814 from woodychow:openmp_num_threads 2017-05-29 13:17:41 +00:00
Alexander Alekhin
35de1c9fdf Merge pull request #8809 from berak:fix_py_tut_braces_py3 2017-05-29 13:16:08 +00:00
catree
542cdb2c39 Improve solvePnP doc, add assert >= 4 in solvePnP, escape underscore character for Scalar_ documentation.
Add reference to SOLVEPNP_ITERATIVE in the doc.
2017-05-29 14:59:14 +02:00
berak
0f51155e79 py_tutorials: add print() braces for python3 2017-05-29 13:19:20 +02:00
Maksim Shabunin
f4e18125b4 Do not clean src and gen directories when java is disabled 2017-05-29 13:54:36 +03:00
Woody Chow
5a4f2b5d27 Add function to sort keypoints that are calculated in parallel to ensure stable output 2017-05-29 17:59:20 +09:00
Woody Chow
6e00c7651b Use num_threads clause of #pragma omp parallel instead to avoid calling omp_set_num_threads for the entire application 2017-05-29 14:16:10 +09:00
Alexander Alekhin
89fcd6d8af Merge pull request #8799 from terfendail:cmake_ignore 2017-05-28 17:28:38 +00:00
Pyotr Chekmaryov
c26fd68236 Performance tests are added. 2017-05-26 22:48:03 +00:00
Vitaly Tuzov
a0aee9d765 Removed CMake configuration files from gitignore, since builds should be performed out of source tree. 2017-05-26 18:27:21 +03:00
Dinar Ahmatnurov
f241a371b3 fix estimateGlobalMotionRansac; 2017-05-26 16:10:07 +03:00
Vadim Pisarevsky
ee257ffe9e Merge pull request #8455 from terfendail:ovxhal_skipsmall 2017-05-26 12:10:18 +00:00
Vadim Pisarevsky
d962b3f499 Merge pull request #8796 from liurs1990:master 2017-05-26 12:04:56 +00:00
Vladislav Sovrasov
6c164d86b9 obdetect: fix in SSE code 2017-05-26 14:26:05 +03:00
n001519
cc3fdd005e fix the mser issue 2017-05-26 16:51:54 +08:00
Vitaly Tuzov
1d62a025b3 Moved size restrictions for OpenVX processed images to corresponding cpp files 2017-05-25 19:25:17 +03:00
Vadim Pisarevsky
11af7b7e55 Merge pull request #8307 from AhiyaHiya:dev_xcode_macos_universal_binary 2017-05-25 15:54:13 +00:00
Vadim Pisarevsky
ec49eb813c Merge pull request #8314 from chacha21:fix_cuda_absdiff 2017-05-25 09:09:20 +00:00
Drew Hintz
f6b6fbf136 change tutorial to use enum name instead of value (#8783)
* change tutorial to use enum name instead of value

* use enum name instead of value
2017-05-25 12:10:13 +03:00
Vadim Pisarevsky
2a5e12ccb5 Merge pull request #8789 from vpisarev:parallel_ccomp 2017-05-24 17:10:42 +00:00
Vadim Pisarevsky
ea8be57871 Merge pull request #8788 from sovrasov:calib_doc_update 2017-05-24 13:59:21 +00:00
Vadim Pisarevsky
6473018d69 eliminated trailing whitespaces 2017-05-24 16:54:12 +03:00
Vadim Pisarevsky
affb60093d Merge branch 'master' of https://github.com/MicheleCancilla/opencv into parallel_ccomp 2017-05-24 16:51:18 +03:00
mschoeneck
4a4d94f266 Merge pull request #8694 from mschoeneck:Canny
Parallelize Canny with custom gradient (#8694)

* New Canny implementation. Restructuring code in parallelCanny class. Align mag buffer and map.

* Fix warnings.

* Missing SIMD check added.

* Replaced local trailingZeros in contours.cpp. Use alignSize in canny.cpp

* Fix warnings in alignSize and allocate just minimum extra columns.

* Fix another warning in map.create.

* Exchange for loop by do loop to avoid double check at the beginning.
Define extra SIMD CANNY_CHECK to avoid unnecessary continue.
2017-05-24 16:20:25 +03:00
Vladislav Sovrasov
bf8415283a calib3d: replace defines with enum values 2017-05-24 15:50:41 +03:00
Vadim Pisarevsky
2e056fbe8a Merge pull request #6854 from sturkmen72:patch-8 2017-05-24 12:45:00 +00:00
Vadim Pisarevsky
9734ee13e5 Merge pull request #7865 from LaurentBerger:UserColormap 2017-05-24 12:43:55 +00:00
Vadim Pisarevsky
057c10baac Merge pull request #8377 from ottogin:interpMultichannelImg 2017-05-24 12:38:41 +00:00
Alexander Alekhin
7bd3ccd929 Merge pull request #8713 from grundman:patch-6 2017-05-24 12:34:12 +00:00
Vadim Pisarevsky
37b1bc9d58 Merge pull request #8776 from sovrasov:inpaint_adv_formats 2017-05-24 12:17:45 +00:00
Alexander Alekhin
27649de50b Merge pull request #8717 from sovrasov:robertson_weight_change 2017-05-24 11:45:34 +00:00
Matthias Grundmann
cf4e9e5ce2 Update matrix.cpp
Fix race condition in getDefaultAllocator and setDefaultAllocator interaction / not threadsafe currently
2017-05-24 13:55:18 +03:00
Maksim Shabunin
d72ddc8255 Merge pull request #8787 from mshabunin:pr7241 2017-05-24 10:31:44 +00:00
krishraghuram
9ea2f5211e Correct the existing documented T-API functions to match the doxygen format (#8758)
* Correct the existing documented T-API functions to match the doxygen format.

* docs: fix comments style

* T-API documentation: minor formatting changes
2017-05-24 13:31:35 +03:00
Maksim Shabunin
9f0bbdada2 Merge pull request #8386 from jtkb:feature/cmake-maven-it-module 2017-05-24 10:17:03 +00:00
Yuval Langer
4ac5f37d49 Add inline code backticks 2017-05-24 12:44:52 +03:00
Vladislav Sovrasov
d9ffc4c83e photo: add support of all types of 1c images in inpaint 2017-05-24 10:24:59 +03:00
Vadzim Piatrou
2ddaaf69fa Inpainting support for any 1-channel input images 2017-05-24 10:20:21 +03:00
Vadim Pisarevsky
19464a3ed8 Merge pull request #8780 from vpisarev:fix_boxfilter 2017-05-23 21:46:13 +00:00
Vadim Pisarevsky
246f47fe96 Merge pull request #8778 from mshabunin:pr6853 2017-05-23 19:08:31 +00:00
Vadim Pisarevsky
7c3577f7ae Merge pull request #8779 from vpisarev:empty_cmp_fix 2017-05-23 19:06:57 +00:00
Vadim Pisarevsky
883d925f59 replaced SSE2 code with universal intrinsics; improved accuracy of the box filter; it should now be bit-exact 2017-05-23 20:04:35 +03:00
Alexander Alekhin
15a2c7724d Merge pull request #8743 from tomoaki0705:featureConvertFp16UMat 2017-05-23 15:32:12 +00:00
Vadim Pisarevsky
1ce61f3129 Merge pull request #8777 from mshabunin:pr6852 2017-05-23 15:19:36 +00:00
Vadim Pisarevsky
4eda8efd42 resolves https://github.com/opencv/opencv/issues/7792 2017-05-23 18:16:40 +03:00
Maksim Shabunin
7cefb52fda V4L: do not return frame if it can not be retrieved 2017-05-23 18:03:17 +03:00
Vadim Pisarevsky
a065e4b9aa Merge pull request #8769 from mshabunin:kw-fixes 2017-05-23 14:59:36 +00:00
Vadim Pisarevsky
55ee8b2917 Merge pull request #8182 from chacha21:drawing_performance 2017-05-23 14:53:12 +00:00
Alexander Alekhin
0448260ed7 Merge pull request #8542 from jveitchmichaelis:update-cudadevo-doc
Update documentation for getCudaEnabledDeviceCount
2017-05-23 17:07:20 +03:00
remi
8ee8710c02 Modifications to reduce the code through a loop
AKAZE refactoring: fixed indentation and made more minor modifications
2017-05-23 16:36:55 +03:00
Alexander Alekhin
715b88c4cb Merge pull request #8775 from mshabunin:ipp-count-fix 2017-05-23 13:29:16 +00:00
Tomoaki Teshima
d81cdb8e1c add OpenCL version of convertFp16 and test
* disable vector operation for now
 * brush up the implementation based on comment
2017-05-23 20:00:21 +09:00
Vadim Pisarevsky
b59df66709 Merge pull request #8698 from cdcseacave:fix_Mat_release 2017-05-23 10:44:12 +00:00
Vadim Pisarevsky
c3762fb2c3 Merge pull request #8731 from ylemkimon:patch-1 2017-05-23 10:42:49 +00:00
Vadim Pisarevsky
2a791ea676 Merge pull request #8745 from Neio:aravis_bayer_gr_8 2017-05-23 10:40:33 +00:00
Maksim Shabunin
f23b6ba652 Fixed multidimensional count non-zero IPP implementation 2017-05-23 13:23:59 +03:00
Maksim Shabunin
b04ed5956e Fixed several issues found by static analysis in core module 2017-05-23 12:35:31 +03:00
Alexander Alekhin
c5e9d1adae macro for static analysis tools 2017-05-23 12:35:31 +03:00
Vladislav Sovrasov
2c2b1405a3 Add test for Mat_::release() 2017-05-23 12:20:48 +03:00
cDc
003745432f fix Mat_ release #8680 2017-05-23 12:19:57 +03:00
Alexander Alekhin
0e60b26513 Merge pull request #8773 from kvaghel1:Issue-8763 2017-05-23 07:57:55 +00:00
kvaghel1
6fd9edc50f Fix frame timestamp in VideoCapture::get 2017-05-22 21:22:35 -04:00
Vadim Pisarevsky
17b89b2a35 Merge pull request #8770 from alalek:fix_pthreads_default 2017-05-22 22:18:26 +00:00
Vadim Pisarevsky
0831b43654 Merge pull request #8771 from alalek:fix_snprintf 2017-05-22 21:23:07 +00:00
Alexander Alekhin
16ea72e6b9 build: fix snprintf() usage 2017-05-22 22:24:17 +03:00
Alexander Alekhin
900c406541 core: fix threads count in pthreads 2017-05-22 21:45:25 +03:00
Alexander Alekhin
235f2cc73c Merge pull request #8750 from amroamroamro:photo-debevec 2017-05-22 16:47:32 +00:00
Amro
39954cc6af generalize number of channels
plus minor edits and fixes
2017-05-22 17:27:26 +03:00
vskarlsruhe
0bc30d382d Merge pull request #8752 from vskarlsruhe:patch-7
Update windows_install.markdown (#8752)
2017-05-22 16:44:23 +03:00
Alexander Alekhin
2186ec7665 Merge pull request #8754 from berak:fix_py_hog_svm_tut 2017-05-22 13:41:10 +00:00
Drew Hintz
aea846ad96 Update broken downloads link in documentation (#8764)
* Update broken downloads link

* Update broken downloads link

* Update broken downloads link
2017-05-22 12:37:58 +03:00
berak
2af63c2bf1 fix py_svm_opencv sample 2017-05-21 07:39:05 +02:00
chacha21
7763a86634 restored memset optimization
when dropping optimizations in the last commit, I forgot to keep the
simplest case where a single memset can be called
2017-05-19 16:05:00 +02:00
Ryuhei Mori
bb3a416320 Fix cpu features detection on android 2017-05-19 21:19:13 +08:00
Pyotr Chekmaryov
ba39bb8da8 SIMD for modeHH4 is added. Plus some small optimization of CalcBT func. 2017-05-17 22:11:02 +00:00
Neio Zhou
7faf8cd06e Aravis: support Bayer GR 8 raw format. 2017-05-17 08:31:24 -07:00
Vadim Pisarevsky
913a2dbdaa Merge pull request #8399 from woodychow:filter_avx2 2017-05-17 15:06:24 +00:00
Vadim Pisarevsky
31aa69f556 Merge pull request #8708 from terfendail:agast_fix 2017-05-17 15:03:41 +00:00
Vadim Pisarevsky
0d60c0e8c4 Merge pull request #8712 from grundman:patch-5 2017-05-17 15:02:45 +00:00
Vadim Pisarevsky
03aa69da99 Merge pull request #8697 from sovrasov:cvt_col_bgra_bgra_fix 2017-05-17 14:11:51 +00:00
Vadim Pisarevsky
78815133df Merge pull request #8739 from terfendail:perf_accumulate_fix 2017-05-17 14:07:56 +00:00
Vitaly Tuzov
01f773b803 Fix for accumulate performance test in case of multiple iterations 2017-05-16 18:28:13 +03:00
Woody Chow
67fe820c75 Merging master to filter_avx2, and resolving conflicts 2017-05-16 15:34:11 +09:00
Vladislav Sovrasov
bfc4eb31cb imgproc: fix BGRA2BGRA conversion 2017-05-15 10:23:20 +03:00
ylemkimon
5e74547b4f Remove redundant precomp.hpp and using-namespace
Removed redundant precompiled header include
2017-05-14 21:35:53 +09:00
Alexander Alekhin
fe4555ec74 Merge pull request #8727 from anupamsobti:master 2017-05-13 16:08:38 +00:00
Arek
9edcd9b4ef Merge pull request #8711 from ArkadiuszRaj:aravis_autoexposure_correction
Aravis: Use of std::fabs, added support for 16-bit mono files and exposure compensation (#8711)

* Use of std::fabs, added support for 16-bit mono files

* Correction in priority2 stage &  adding exposure compensation
2017-05-12 23:46:46 +03:00
Alexander Alekhin
17eef4d8a9 Merge pull request #8596 from nnorwitz:nnorwitz 2017-05-12 19:48:28 +00:00
Anupam Sobti
42a2454f1a Fix for issue #8615. Added cudawarping to optional modules and removed opencv_cudafilters 2017-05-12 21:55:35 +05:30
Maksim Shabunin
e60535d3ce Merge pull request #8724 from saskatchewancatch:i8723 2017-05-12 15:44:22 +00:00
sovrasov
b87a8a5719 Set LUT for Robertson weights function to zero on borders 2017-05-12 16:33:30 +03:00
saskatchewancatch
e4cb8a6f09 issue 8723: Changed doc for cv::imwrite to reflect correct default flag used for png compression strategy. 2017-05-12 00:01:38 -06:00
Cartucho
2055bcc807 Extending template_matching tutorial with Java (#8043)
* Extending template_matching tutorial with Java

* adding mask to java version of the tutorial

* adding the python toggle and code

* updating table of content

* adding py and java to table of content

* adding mask to python

* going back to markdown with duplicated text

* non duplicated text
2017-05-12 00:42:04 +03:00
Alexander Alekhin
3b669149d2 Merge pull request #8710 from ioxp:master 2017-05-11 18:24:16 +00:00
Maksim Shabunin
aaabb07bee Merge pull request #8715 from berak:fix_digits_py 2017-05-11 12:46:41 +00:00
berak
7b05d52f7b py_samples: fix digits.py 2017-05-11 08:34:21 +02:00
Matthias Grundmann
0e64e68d31 Update cap_mjpeg_encoder.cpp
Avoid shifting by 32bits; undefined behavior according to c - standard
2017-05-10 13:29:02 -07:00
Philipp Hasper
dcd8589b67 Fixed exp32f() compilation on MSVC 2017-05-10 18:25:39 +02:00
Vitaly Tuzov
ee5b5a6b2f Fixed out of bound reading in makeAgastOffsets 2017-05-10 16:21:22 +03:00
chacha21
fa4fd48072 Drop best optimizations to reduce code size
Only keep the ICV_HLINE_X optimization to reduce code size.
2017-05-10 13:55:39 +02:00
Vadim Pisarevsky
06b0fe35d2 Merge pull request #8609 from LukeZheZhu:pyrlk_err_ocl_fix 2017-05-04 16:12:13 +00:00
LukeZhu
65be9e1978 Fix OpenCL's wrong output of calcOpticalFlowPyrLK function's output vector of err. Improve err's precison of the calcOpticalFlowPyrLK OpenCL function and add the relative test. 2017-05-04 14:07:45 +08:00
Vadim Pisarevsky
833832ac91 Merge pull request #8391 from woodychow:warpAffine_avx2 2017-05-03 15:09:54 +00:00
Vadim Pisarevsky
e00d0528a4 Merge pull request #8397 from woodychow:initUndistortRectifyMap_avx2 2017-05-03 14:50:22 +00:00
Vadim Pisarevsky
b683e68223 Merge pull request #8398 from woodychow:normL2Sqr_avx2 2017-05-03 14:49:56 +00:00
nnorwitz
256b6bb3db Don't blow out the stack. Use a smaller buffer and prevent buffer overruns with snprintf. 2017-05-03 16:56:09 +03:00
Vadim Pisarevsky
925594d1e3 Merge pull request #7894 from alalek:ocl_program 2017-05-03 13:48:58 +00:00
Vadim Pisarevsky
dd81c29834 Merge pull request #8359 from csukuangfj:patch-fix-error-code-documentation 2017-05-03 13:48:28 +00:00
Vadim Pisarevsky
dea5eaca30 Merge pull request #8660 from 4ekmah:making_sgbm_parallel 2017-05-03 13:47:36 +00:00
Vadim Pisarevsky
5950431e73 Merge pull request #8602 from alalek:ffmpeg_update 2017-05-03 13:01:55 +00:00
Vadim Pisarevsky
05387b3921 Merge pull request #8271 from ziggy90127:avfoundation-bugfix1 2017-05-03 12:59:44 +00:00
vskarlsruhe
986d57c7b2 Update canny_detector.markdown (#8684) 2017-05-03 05:46:34 -07:00
Vadim Pisarevsky
fe2416575b Merge pull request #8432 from csukuangfj:issue-8411 2017-05-03 12:39:55 +00:00
Maksim Shabunin
ea49d7b7c5 Merge pull request #8653 from alalek:android_fixes 2017-05-03 12:20:19 +00:00
Vadim Pisarevsky
b92bbffa1a Merge pull request #8557 from grundman:patch-3 2017-05-03 12:12:59 +00:00
Vadim Pisarevsky
f77e9bc995 Merge pull request #8582 from alalek:cmake_disable_insource_builds 2017-05-03 11:53:32 +00:00
Vadim Pisarevsky
8a16997b1e Merge pull request #8580 from terfendail:ovx_newperftest 2017-05-03 11:01:01 +00:00
Vadim Pisarevsky
374c5ce471 Merge pull request #8598 from sovrasov:java_wrap_prt_arg 2017-05-03 10:53:58 +00:00
Vadim Pisarevsky
58f19b4f4c Merge pull request #8676 from jveitchmichaelis:jveitchmichaelis-sgbm-create 2017-05-03 10:28:39 +00:00
Vadim Pisarevsky
40d61e5c5b Merge pull request #8688 from ysolovyov:num-jobs-fix 2017-05-03 10:25:54 +00:00
Maksim Shabunin
2a5a143f0f Merge pull request #8686 from sovrasov:port_affine3_fix 2017-05-03 10:20:16 +00:00
Maksim Shabunin
f71f76add9 Merge pull request #8649 from saskatchewancatch:8647 2017-05-03 09:19:29 +00:00
Yuriy Solovyov
96f1ef1347 Fix buildcmd 2017-05-02 18:59:37 +03:00
Yuriy Solovyov
4f6238aa04 Use all available cpu cores in iOS/OSX build procedure 2017-05-02 18:48:54 +03:00
André Mewes
70e6391f38 create homogeneous affine matrix when constructing from 4x3 cv::Mat 2017-05-02 14:09:20 +03:00
Vladislav Sovrasov
bf62be7f63 java: allow to wrap functions which take cv::Ptr 2017-05-02 11:50:31 +03:00
saskatchewancatch
bbb785e43c Issue 8647: Updated doc for cv::matchTemplate to reflect current support for methods when mast template is supplied. 2017-04-30 20:22:47 -06:00
jveitchmichaelis
369bfbfd23 Add default parameters for SGBM::create
Added default parameters for minDisparity, numDisparities and blockSize. This fixes a bug where SGBM::load would not compile.
2017-04-30 16:32:30 +01:00
Alexander Alekhin
04573615c5 Merge pull request #8671 from tomoaki0705:fixBuildVS2012sprintf 2017-04-29 15:13:15 +00:00
Alexander Alekhin
14ae679971 Merge pull request #8675 from ninadpchaudhari:patch-1
Spell correction
2017-04-29 18:12:46 +03:00
Ninad P.Chaudhari
7885ef2ac8 Spell correction
Corrected the spelling which was used in explanation for parameters.
2017-04-29 20:03:47 +05:30
Alexander Alekhin
a740a4ca38 Merge pull request #8665 from louiehelm:master 2017-04-28 05:10:50 +00:00
Louie Helm
39874d7254 Fix Farneback GPU Sample in GCC6 2017-04-27 16:28:36 -07:00
Alexander Alekhin
21fff4dfb6 Merge pull request #8654 from paroj:py_vector_ptr 2017-04-27 18:23:42 +00:00
Alexander Alekhin
11cd884c7c Merge pull request #8664 from alalek:fix_build_with_tbb 2017-04-27 16:29:46 +00:00
Alexander Alekhin
bfe4e1fed4 Merge pull request #8663 from rib:wip/rib/android-build-fix 2017-04-27 15:36:26 +00:00
Alexander Alekhin
cdc7f10767 cmake: dispatcher: add handling of include dirs
from linked targets of base modules
2017-04-27 18:11:32 +03:00
Alexander Alekhin
e04d663acd Merge pull request #8656 from alalek:fix_cpu_detection 2017-04-27 14:14:56 +00:00
Robert Bragg
8f5ea7deda core: avoid clash with _N define from ctype.h in headers
This updates the public headers to use _Nm instead of _N in templates
since _N is defined by the widely used ctype.h.
2017-04-27 14:45:24 +01:00
Michele Cancilla
9405c6d206 Improvement of array of equivalences’ upper bound + fix some wrong comments 2017-04-27 12:53:33 +02:00
Pyotr Chekmaryov
d6bc6895a6 Test data correction. 2017-04-27 10:05:55 +00:00
Vitaly Tuzov
2492c299f3 Extended set of existing performance test to OpenVX HAL suitable execution modes 2017-04-27 12:32:29 +03:00
Pavel Rojtberg
930611dfa8 python: move Ptr specializations above generic_vec to allow vector_Ptr_T 2017-04-27 11:28:31 +02:00
Alexander Alekhin
4c2858fd61 cmake: fix POPCNT & SSE4.2 detection code 2017-04-26 18:59:43 +03:00
Alexander Alekhin
c5c3ec46ad Merge pull request #8655 from alalek:fix_bug_persistence_raw_io 2017-04-26 15:57:00 +00:00
Alexander Alekhin
62e9bed17a Merge pull request #8588 from kylefleming:mac-deployment-target 2017-04-26 15:27:35 +00:00
Alexander Alekhin
75f28245a8 core: fix persistence bug in RAW I/O code
- persistence.cpp code expects special sizeof value for passed structures
- this assumption is lead to memory corruption problems
- fixed/workarounded test to prevent memory corruption on Linux 32-bit systems
2017-04-26 17:19:26 +03:00
Alexander Alekhin
c757d2863e Merge pull request #8640 from alalek:doc_mathjax 2017-04-26 11:29:29 +00:00
Alexander Alekhin
133b91a026 android: build fixes
- eliminate CMake 3.5+ warnings
- removed usage of dropped "OPENCV_CAMERA_MODULES" variable
- partial support for Android NDK 11+
2017-04-26 14:24:51 +03:00
Alexander Alekhin
26be2402a3 Merge pull request #8629 from lupustr3:pvlasov/icv2017u2_update2 2017-04-26 10:45:37 +00:00
Alexander Alekhin
6ffab80169 Merge pull request #8648 from alalek:cmake_fix_ippiw 2017-04-26 10:13:52 +00:00
Alexander Alekhin
f3eff00bf7 cmake: update handling of IPPICV/IPPIW 2017-04-26 00:15:54 +03:00
Pyotr Chekmaryov
21be2aa677 Memory repaired + Cleanup. 2017-04-25 21:00:31 +00:00
Alexander Alekhin
3db496f677 Merge pull request #8558 from grundman:patch-4 2017-04-25 16:03:02 +00:00
Pavel Vlasov
11c2ffaf1c Update for IPP for OpenCV 2017u2 integration;
Updated integrations for:
cv::split
cv::merge
cv::insertChannel
cv::extractChannel
cv::Mat::convertTo - now with scaled conversions support
cv::LUT - disabled due to performance issues
Mat::copyTo
Mat::setTo
cv::flip
cv::copyMakeBorder - currently disabled
cv::polarToCart
cv::pow - ipp pow function was removed due to performance issues
cv::hal::magnitude32f/64f - disabled for <= SSE42, poor performance
cv::countNonZero
cv::minMaxIdx
cv::norm
cv::canny - new integration. Disabled for threaded;
cv::cornerHarris
cv::boxFilter
cv::bilateralFilter
cv::integral
2017-04-25 15:53:12 +03:00
Alexander Alekhin
41d55c5095 Merge pull request #8620 from saskatchewancatch:8457 2017-04-25 12:22:51 +00:00
saskatchewancatch
3fe18392ef Updated comments for cv::ellipse and cv::ellipse2Poly to clarify some behaviour that has confused some users.
Amend: Delete trailing whitespace to make doc tests happy
2017-04-25 14:31:46 +03:00
Alexander Alekhin
56a0a50da3 Merge pull request #8603 from alalek:fix_test_name 2017-04-25 10:36:03 +00:00
Alexander Alekhin
c744eff30d Merge pull request #8646 from saskatchewancatch:i8632 2017-04-25 10:33:17 +00:00
Alexander Alekhin
a7e80f7c10 Merge pull request #8645 from brian-armstrong-discord:bugfix_inmemory_exif 2017-04-25 10:32:00 +00:00
Alexander Alekhin
c4d4248e49 Merge pull request #8639 from berak:fix_webp_grayscale 2017-04-25 10:29:59 +00:00
Vadim Pisarevsky
96aaac186d Merge pull request #8616 from vpisarev:dnn4 2017-04-25 06:32:16 +00:00
saskatchewancatch
d363e2789f 8632: Corrected cv::seamlessClone doc to reflect actual name of flag used in code 2017-04-24 21:01:38 -06:00
Brian Armstrong
40dc0bcd63 fix ByteStreamBuffer 2017-04-24 18:07:47 -07:00
Alexander Alekhin
8952863b9c doc: change MathJax URL
https://www.mathjax.org/cdn-shutting-down/#alternative-cdn-providers
2017-04-24 16:56:33 +03:00
berak
cbda9b332b imgcodecs: fix webp IMREAD_GRAYSCALE loading 2017-04-24 11:56:23 +02:00
Alexander Alekhin
fe21487f91 Merge pull request #8618 from pwuertz:umat-pyopencl 2017-04-23 13:49:24 +00:00
Alexander Alekhin
7ccdf801dd Merge pull request #8635 from daB0bby:patch-1 2017-04-23 13:47:02 +00:00
daB0bby
566630595d Fixes typo 2017-04-22 12:32:18 +02:00
Peter Würtz
4c095a76c0 Add docstring for UMat::handle 2017-04-22 09:44:29 +02:00
Peter Würtz
a4c70aebd0 Expose UMat OpenCL handles and buffer information to python 2017-04-22 09:42:27 +02:00
Pyotr Chekmaryov
7ffa49e02c Vertical passes added and we have working parralel version. 2017-04-22 00:00:08 +00:00
Alexander Alekhin
8eade61ec7 Merge pull request #8612 from sovrasov:roi_selector 2017-04-21 17:20:28 +00:00
Tomoaki Teshima
0f5aaade61 fix test error on VS2012 2017-04-21 23:07:46 +09:00
Alexander Alekhin
b4f22803cd Merge pull request #8593 from devnexen:test_fixes 2017-04-21 12:41:10 +00:00
Alexander Alekhin
f1c8094f5f Merge pull request #8575 from lupustr3:pvlasov/icv2017u2_initial_update 2017-04-21 10:55:29 +00:00
Alexander Alekhin
b0519368ce Merge pull request #8627 from alessandro-gentilini:patch-1 2017-04-21 10:43:35 +00:00
Vladislav Sovrasov
ad7cf58450 highgui: add ROI selector 2017-04-21 13:29:35 +03:00
Alessandro Gentilini
fc8f1890c0 Fix markdown format. 2017-04-21 10:29:13 +02:00
Pavel Vlasov
35c7216846 IPP for OpenCV 2017u2 initial enabling patch; 2017-04-20 20:26:30 +03:00
Vadim Pisarevsky
dd54f7a22a got rid of Blob and BlobShape completely; use cv::Mat and std::vector<int> instead 2017-04-19 23:20:17 +03:00
Arnaud Brejeon
636ab095b0 Merge pull request #8535 from arnaudbrejeon:std_array
Add support for std::array<T, N> (#8535)

* Add support for std::array<T, N>

* Add std::array<Mat, N> support

* Remove UMat constructor with std::array parameter
2017-04-19 13:13:39 +03:00
insoow
2922738b6d Merge pull request #8104 from insoow:master
Gemm kernels for Intel GPU (#8104)

* Fix an issue with Kernel object reset release when consecutive Kernel::run calls

Kernel::run launch OCL gpu kernels and set a event callback function
to decreate the ref count of UMat or remove UMat when the lauched workloads
are completed. However, for some OCL kernels requires multiple call of
Kernel::run function with some kernel parameter changes (e.g., input
and output buffer offset) to get the final computation result.
In the case, the current implementation requires unnecessary
synchronization and cleanupMat.

This fix requires the user to specify whether there will be more work or not.
If there is no remaining computation, the Kernel::run will reset the
kernel object

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* GEMM kernel optimization for Intel GEN

The optimized kernels uses cl_intel_subgroups extension for better
performance.

Note: This optimized kernels will be part of ISAAC in a code generation
way under MIT license.

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* Fix API compatibility error

This patch fixes a OCV API compatibility error. The error was reported
due to the interface changes of Kernel::run. To resolve the issue,
An overloaded function of Kernel::run is added. It take a flag indicating
whether there are more work to be done with the kernel object without
releasing resources related to it.

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* Renaming intel_gpu_gemm.cpp to intel_gpu_gemm.inl.hpp

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* Revert "Fix API compatibility error"

This reverts commit 2ef427db91.

Conflicts:
	modules/core/src/intel_gpu_gemm.inl.hpp

* Revert "Fix an issue with Kernel object reset release when consecutive Kernel::run calls"

This reverts commit cc7f9f5469.

* Fix the case of uninitialization D

When C is null and beta is non-zero, D is used without initialization.
This resloves the issue

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* fix potential output error due to 0 * nan

Signed-off-by: Woo, Insoo <insoo.woo@intel.com>

* whitespace fix, eliminate non-ASCII symbols

* fix build warning
2017-04-19 12:57:54 +03:00
Alexander Alekhin
dd304dbe05 test: fix min/max name mismatching 2017-04-18 22:25:00 +03:00
Alexander Alekhin
a8a1838615 update FFmpeg Windows wrapper
ffmpeg 3.2.1 -> 3.3
libvpx 1.6.0 -> 1.6.1
2017-04-18 22:12:34 +03:00
Alexander Alekhin
cea0e94376 Merge pull request #8600 from tomoaki0705:fixErrorOdroidX2 2017-04-18 12:22:57 +00:00
Tomoaki Teshima
ebf13b39e5 fix build error on ODROID-X2 2017-04-18 19:31:57 +09:00
David Carlier
bacc210606 fixing segfaults occuring when launching those unit tests 2017-04-18 09:50:17 +01:00
Alexander Alekhin
b993b9b7c7 Merge pull request #8590 from berak:patch-2 2017-04-18 08:08:55 +00:00
Alexander Alekhin
2be4f2c4dc Merge pull request #8589 from tomoaki0705:fixTypoCalib3d 2017-04-17 14:20:25 +00:00
Alexander Alekhin
0d10eb5173 Merge pull request #8565 from iglesias:fix/bgsknn-initialization 2017-04-17 08:08:34 +00:00
berak
7ce6895a2c Update tvl1_optical_flow.cpp
repair broken cmdline param for cpu/gpu mode
2017-04-17 09:10:10 +02:00
Tomoaki Teshima
62c17dc3cf fix typo and align white spaces 2017-04-17 08:32:08 +09:00
Kyle Fleming
3d52661400 Set Mac OS X deployment target to 10.9
Without it set, the build will choose the current OS version as the deployment target. 10.9 is the earliest usable, since that is when OS X introduced libc++.
2017-04-16 14:39:26 -07:00
Pyotr Chekmaryov
20036b82d3 There added parallel realization of vertical passes for MODE_HH4. 2017-04-15 21:51:15 +00:00
Alexander Alekhin
a07d8a89b6 cmake: disallow in-source builds 2017-04-15 06:55:46 +03:00
Alexander Alekhin
10787c68d0 Merge pull request #8581 from ysolovyov:zlib-ios-fix 2017-04-14 20:12:19 +00:00
brian-armstrong-discord
9e054d3880 Merge pull request #8492 from brian-armstrong-discord:exif_inmemory
autorotate in-memory jpegs (#8492)

* autorotate in-memory jpegs

* correct indentation (4 spaces)

* imgcodecs: don't apply EXIF rotation for unloaded images

* videoio: don't try to rotate MJPEG stream

* imgcodecs: ByteStreamBuffer::seekoff support all seek "dir"

* imgcodecs: fix condition: "off == egptr() - eback()" is valid offset
2017-04-14 23:12:07 +03:00
Yuriy Solovyov
26ccc09c46 Fix zlib issue on iOS 2017-04-14 17:16:00 +03:00
Alexander Alekhin
b37f0c5ac2 Merge pull request #8522 from zongwave:master 2017-04-14 11:40:07 +00:00
Alexander Alekhin
2d05db6f22 Merge pull request #8576 from terfendail:ovx_fixwrappers 2017-04-14 11:04:58 +00:00
Vitaly Tuzov
9dc36a1ece Tuned restrictions for Canny, Warp, FAST, Accumulate and Convolution OpenVX HAL calls on small images 2017-04-14 13:20:25 +03:00
zongwave
1fc60e6d64 Add method KeypointBasedMotionEstimator::estimate(InputArray, InputArray) to support both cpu & opencl algorithm processing
the orignal estimate function has input parameters defined as "Mat", this prevent users to call into algorithm opencl path
2017-04-14 10:08:48 +08:00
Vitaly Tuzov
d873fe66ab Fixed size estimation for copyFrom/To vector in vx_matrix and vx_convolution wrappers 2017-04-13 17:45:42 +03:00
Alexander Alekhin
1c728258e0 Merge pull request #8571 from alalek:cmake_fix_optimization_filter 2017-04-12 19:23:41 +00:00
Alexander Alekhin
6b432b4011 Merge pull request #8508 from vskarlsruhe:patch-5 2017-04-12 16:04:16 +00:00
Alexander Alekhin
c90dee668f cmake: fix optimization filter
Check file name only:
    Excluding from source files list (optimization is disabled):
    C:/Code/SrcExt/OpenCV/Buildv3.2_x64/modules/core/opencl_kernels_core.cpp
2017-04-12 18:27:20 +03:00
Alexander Alekhin
85321807dd Merge pull request #8567 from tomoaki0705:fixCbrtVS2012 2017-04-12 13:46:09 +00:00
Tomoaki Teshima
c145f28c71 fix build error on VS2012 2017-04-12 20:09:00 +09:00
Alexander Alekhin
4d3cef35c2 Merge pull request #8564 from orisano:patch-1 2017-04-12 08:52:08 +00:00
Alexander Alekhin
ab9bbf645c Merge pull request #8559 from liquidmetal:feature/utsinh_allocate_ecc 2017-04-12 08:39:10 +00:00
orisano
550ca10ec6 Remove stdout log when destructor called. 2017-04-12 17:12:25 +09:00
Fernando Iglesias Garcia
21e698053f Initialize background model in background subtraction KNN.
The method does cvCheckPixelBackgroundNP (which reads bgmodel)
before it is ever updated (in cvUpdatePixelBackgroundNP). This
initialization is thus needed to avoid reads of unitialized values.
2017-04-12 10:11:50 +02:00
Utkarsh Sinha
0330934c8b Updating documentation. 2017-04-11 06:42:20 -07:00
Alexander Alekhin
3cee54cd27 Merge pull request #8561 from alalek:fix_ffmpeg_check 2017-04-11 13:25:36 +00:00
Vitaly Tuzov
4c0d833dec Disabled vxuConvolution call for sepFilter evaluation 2017-04-11 15:57:20 +03:00
Alexander Alekhin
8ba95cd498 Merge pull request #8548 from csukuangfj:fix-typo-RNG 2017-04-11 11:46:06 +00:00
Vitaly Tuzov
87bb74312b Disabled vxuConvolution call for Sobel, GaussianBlur and Box filter evaluation 2017-04-11 14:11:55 +03:00
Alexander Alekhin
4e31eef77d Merge pull request #8540 from tomoaki0705:fixWaringPhoto 2017-04-11 10:36:01 +00:00
Alexander Alekhin
a2af1d4f71 Merge pull request #8458 from grundman:patch-2 2017-04-11 10:06:34 +00:00
Alexander Alekhin
c1ade083d9 ffmpeg: add __STDC_CONSTANT_MACROS to check code 2017-04-11 12:35:48 +03:00
Alexander Alekhin
c839a2ccb1 Merge pull request #8525 from nnorwitz:master 2017-04-11 09:30:09 +00:00
Tomoaki Teshima
ccc8767b55 suppress warning on Jetson TK1 2017-04-11 18:27:12 +09:00
Alexander Alekhin
6c07b446f8 Merge pull request #8555 from tomoaki0705:jetsontx2 2017-04-11 09:20:14 +00:00
Utkarsh Sinha
b9c2d88e69 If the user passes an empty output matrix, initialize it to identity. 2017-04-10 20:43:33 -07:00
Matthias Grundmann
e0fe3cce71 Update autotuned_index.h
Add missing sstream header for decl of std::ostringstream in line 104
2017-04-10 12:07:28 -07:00
Matthias Grundmann
fce7469961 Update utility.hpp
Adding missing header for ostream decl. in line 384
2017-04-10 12:04:09 -07:00
Tomoaki Teshima
9cd42650dc build with cc 6.2 on Jetson TX2 2017-04-10 22:19:17 +09:00
Fangjun KUANG
4065778255 fix typos. 2017-04-10 09:32:50 +02:00
Vitaly Tuzov
0f1a56da7c Changed restrictions for OpenVX HAL calls on small images 2017-04-09 01:17:57 +03:00
Fangjun KUANG
ff31d069d0 avoid allocating memory for string with a length of zero.
Remove the specifier "explicit", because the constructor has no parameter. There is no point to add it here.
2017-04-07 20:46:17 +02:00
jveitchmichaelis
8f19363c07 Update documentation for getCudaEnabledDeviceCount
Inform users that getCudaEnabledDeviceCount can return -1 in some cases.
2017-04-07 14:30:14 +01:00
Tong Ke
0a63ab36bb Merge pull request #8301 from tonyke1993:p3p_alg
New p3p algorithm (accepted by CVPR 2017) (#8301)

* add p3p source code

* indent 4

* update publication info

* fix filename

* interface done

* plug in done, test needed

* debugging

* for test

* a working version

* clean p3p code

* test

* test

* fix warning, blank line

* apply patch from @catree

* add reference info

* namespace, indent 4

* static solveQuartic

* put small functions to anonymous namespace
2017-04-07 09:48:34 +03:00
Alexander Alekhin
2561c59698 Merge pull request #8524 from mshabunin:java-fixes 2017-04-06 20:49:33 +00:00
nnorwitz
24e8cd1a78 Use %% for inline assembly rather than % so this compiles with clang.
Same as 9210cefb36 but for this file too.
2017-04-06 12:54:56 -07:00
Vitaly Tuzov
bf62dca45a Extended restrictions for OpenVX HAL calls on small images 2017-04-06 18:17:34 +03:00
Vitaly Tuzov
bf5b7843e8 Extended set of OpenVX HAL calls disabled for small images 2017-04-06 18:17:32 +03:00
Vitaly Tuzov
62fab57c3e Tune OpenVX HAL usability checks to distinguish multiplication and color conversion kernels 2017-04-06 18:17:30 +03:00
Vitaly Tuzov
9620cb550d Calls to OpenVX HAL disabled for images less than FullHD 2017-04-06 18:17:28 +03:00
nnorwitz
9210cefb36 Use %% for inline assembly rather than % so this compiles with clang. 2017-04-05 10:57:50 -07:00
Maksim Shabunin
4d62f1de1e Added javadoc generation 2017-04-05 18:18:39 +03:00
Maksim Shabunin
8b455e8bb3 Fixed Algorithm.save and other methods work in Java 2017-04-05 17:48:38 +03:00
Alexander Alekhin
fd93ae08b6 Merge pull request #8523 from mshabunin:fix-cvtcolor-ocl 2017-04-05 10:02:01 +00:00
Maksim Shabunin
ce50df564c Fixed cvtColor OCL compilation issue (BGRA2mBGRA) 2017-04-05 11:48:29 +03:00
Alexander Alekhin
bd786f3bea Merge pull request #8520 from tomoaki0705:cudaWarningsSuppress 2017-04-05 06:34:45 +00:00
Tomoaki Teshima
731b5b206f suppress warnings from cuda 2017-04-05 08:30:16 +09:00
Alexander Alekhin
739f87da6d Merge pull request #8518 from alalek:fix_fp16 2017-04-04 20:06:59 +00:00
Alexander Alekhin
bd5a6f8af2 Merge pull request #8517 from alalek:fix_build_pch 2017-04-04 17:41:02 +00:00
Alexander Alekhin
e5d9b608c4 cmake: fix fp16 support 2017-04-04 20:34:58 +03:00
Alexander Alekhin
1f86d8564f cmake: fix GCC precompiled headers warnings 2017-04-04 19:48:16 +03:00
Alexander Alekhin
d15d9f558d Merge pull request #8514 from paroj:v4lretval 2017-04-04 15:01:21 +00:00
Pavel Rojtberg
d92d82d194 cap_v4l: SetProperty - do not return false while setting video size 2017-04-04 15:07:02 +02:00
Alexander Alekhin
e93aa158cf Merge pull request #8496 from Sahloul:fixes/wrappers/imgproc/EMD 2017-04-03 20:55:51 +00:00
Alexander Alekhin
297ba85323 Merge pull request #8441 from alalek:dispatch_mathfuncs_core 2017-04-03 14:03:49 +00:00
vskarlsruhe
ef033be59d Update py_setup_in_windows.markdown
updated links for python, numpy and matplotlib
2017-04-03 11:58:22 +02:00
Vadim Pisarevsky
36e8017580 Merge pull request #8465 from claudiofantacci:enh/cudastreamhog 2017-04-03 09:58:21 +00:00
Vadim Pisarevsky
4aa51f6a32 Merge pull request #8484 from berak:patch-2 2017-04-03 09:57:58 +00:00
Vadim Pisarevsky
a973d93dcb Merge pull request #8504 from bcr3ative:fixStereoBMROI 2017-04-03 09:57:34 +00:00
Vadim Pisarevsky
2409924dbc Merge pull request #8342 from grundman:patch-1 2017-04-03 09:34:53 +00:00
Vadim Pisarevsky
8bfc3845e2 Merge pull request #8499 from mszu:patch-1 2017-04-03 09:34:18 +00:00
Vadim Pisarevsky
63d3fdcf58 Merge pull request #8466 from sxldvd:master 2017-04-03 09:32:38 +00:00
Alexander Alekhin
8bee226d79 Merge pull request #8495 from sergiud:standalone-dynamic-ipp-detection 2017-04-02 10:17:06 +00:00
Alexander Alekhin
c049275512 Merge pull request #8502 from tomoaki0705:fixWarningsArrayBound 2017-04-02 10:15:47 +00:00
Alexander Alekhin
bbdd8ba078 Merge pull request #8506 from sergiud:mat-move-assignment-dont-copy 2017-04-02 10:13:17 +00:00
Sergiu Deitsch
4f31759965 prevent copying in cv::Mat_<T> move assignment 2017-04-01 21:53:30 +02:00
Alexander Alekhin
45e866f0e1 Merge pull request #8500 from Sahloul:fixes/wrappers/ptr 2017-04-01 14:18:42 +00:00
Tomoaki Teshima
6ab10fc3ac suppress warnings on GCC 4.9 series
- check boundary strictly
 - initialize the variable before using it
2017-04-01 20:53:50 +09:00
Paolo Perkovic
dd576c89a3 Fix StereoBM ROI selection
- Fix StereoBM ROI (Region of interest) selection for stereo
images used by block matching algorithm
2017-04-01 13:29:44 +02:00
Hamdi Sahloul
89088937a7 Avoid memory leakage in smart pointers wrapper 2017-04-01 18:27:57 +09:00
Hamdi Sahloul
6a856d677c Wraps cv::EMD for Python and Java 2017-04-01 17:20:03 +09:00
Mark Szumowski
94d63d4281 Update research paper link in Python sample
The docstring for one of the Python sample programs includes a link to the research paper describing the main algorithm. That link is no longer valid (results in a 404 error) so this update replaces it with another link from the same institution which is currently valid.
2017-04-01 10:58:07 +11:00
Alexander Alekhin
0ae297ad95 Merge pull request #8497 from Sahloul:fixes/wrappers/ptr 2017-03-31 20:52:46 +00:00
Hamdi Sahloul
c75b589f89 Wraps smart pointers properly 2017-04-01 03:19:29 +09:00
Alexander Alekhin
b67382cbeb Merge pull request #8494 from tomoaki0705:fixWarningCuda 2017-03-31 15:42:01 +00:00
Sergiu Deitsch
98b8c32f30 cmake: fixed standalone dynamic IPP detection under win32 2017-03-31 15:44:38 +02:00
Tomoaki Teshima
507071cc6f suppress warnings on Jetson TK1 2017-03-31 08:20:59 +09:00
Alexander Alekhin
1c53595817 Merge pull request #8474 from alalek:ocv_download 2017-03-30 20:08:14 +00:00
Alexander Alekhin
a7de4aca6a cmake: update ocv_download
- more aggressive cache for files under CMAKE_BINARY_CACHE
  * don't re-read files MD5
  * don't repack archives
- add support for ENV{OPENCV_DOWNLOAD_PATH}
- added ID parameter as project/group identifier
- non-flat .cache directory (based on ID)
- download message prefix based on ID
- more detailed logging via ocv_download_log() macro
- force .gitignore file for .cache folder (with '*' pattern)
2017-03-30 19:36:33 +00:00
berak
3e0b63f65b fix comment in optim.hpp 2017-03-30 11:07:52 +02:00
Alexander Alekhin
f34b2f7b8d Merge pull request #8470 from superbort:stitching-estimators 2017-03-28 13:08:24 +00:00
Alexander Broemmer
b2524f4571 Clear old CameraParameters in AffineBasedEstimator
AffineBasedEstimator crashed when called with an existing CameraParameters.
This happens e.g. when using Stitcher in SCANS mode.
CameraraParameters is now cleared before any calculation is executed.
2017-03-28 15:19:25 +02:00
Alexander Alekhin
7cc97fd96c Merge pull request #8421 from mshabunin:download-cache 2017-03-28 11:13:14 +00:00
Matthias Grundmann
de52887c49 Update circlesgrid.cpp
Use identity matrix if homography finding failed. Current behavior zeros out all points.

Update circlesgrid.cpp

Addressed comments

Update circlesgrid.cpp

removed whitespace
2017-03-28 10:56:12 +03:00
Pyotr Chekmaryov
106413a3ea Simplest test added and code debuged. 2017-03-27 21:40:17 +00:00
Sixela David
75a489b75b Correcting issue #8431 2017-03-27 11:15:03 +02:00
Claudio
4709b9d2d8 Add cuda::streams to by_rows and 8UC1 functions
Fix #8177
2017-03-27 10:54:07 +02:00
Claudio
dd3655f6a6 Align parameter code style between hog .cu and .cpp files 2017-03-27 10:53:37 +02:00
Claudio
35f66340d7 Add cuda::Stream capability to cuda::HOG::compute
In the previous version only the default stream was/could be used, i.e.
cv::cuda::Stream::Null().

With this change, HOG::compute() will now run in parallel over different
cuda::Streams.

The code has been reordered so that all data allocation is completed
first, then all the kernels are run in parallel over streams.

Fix #8177
2017-03-27 10:53:22 +02:00
Alexander Alekhin
f109c0134f Merge pull request #8459 from alalek:fix_msvc_static_build 2017-03-25 12:15:54 +00:00
Alexander Alekhin
005c4777c7 cmake: fix MSVC static builds 2017-03-25 01:28:43 +03:00
Artem Lukoyanov
84a0a91d16 Merge branch 'master' of https://github.com/opencv/opencv into interpMultichannelImg
Added assertios to remap and warpAffine functions

As @mshabunin said, remap and warpAffine functions do not support more than 4 channels in
Bicubic and Lanczos4 interpolation modes. Assertions were added. Appropriate test was chenged.
resolves #8272
2017-03-24 23:58:51 +03:00
Matthias Grundmann
13540bf7f4 Update bgfg_gaussmix2.cpp
Addressed comments.
2017-03-24 13:26:32 -07:00
Alexander Alekhin
49e16a3c9f Merge pull request #8448 from jexner:foreach-segfault-fix 2017-03-24 18:25:30 +00:00
Alexander Alekhin
e7cad594c1 Merge pull request #8454 from superbort:reuse-stitching 2017-03-24 14:38:54 +00:00
Julian Exner
46af07575e Add test case for cv::Mat::forEach
This test case uses a matrix with more dimensions than columns. Without
the fix in
b45e784beb
this crashes with a segmentation fault, hangs or simply fails with wrong
values.
2017-03-24 15:34:58 +01:00
Alexander Broemmer
30d26acee0 Make stitching panoramas reusable after estimating transform once
Stitcher will now make a working copy of the CameraParams object to avoid side effects when composing Panorama.
Makes it possible to estimate transform once and then compose multiple panoramas. Useful for setup with fixed cameras.
2017-03-24 14:20:43 +01:00
Maksim Shabunin
e72d353b45 Download cache 2017-03-24 16:19:56 +03:00
Artem Lukoyanov
c4ae5c0ee5 Added assertios to remap and warpAffine functions
Remap and warpAffine functions do not support more than 4 channels in
Bicubic and Lanczos4 interpolation modes. Assertions were added.
resolve #8272
2017-03-24 11:19:58 +03:00
Alexander Alekhin
d0c64fca2b Merge pull request #8433 from csukuangfj:issue-8189 2017-03-23 20:20:07 +00:00
Alexander Alekhin
cf9a01970f Merge pull request #8446 from terfendail:ovxhal_sepfilter3x3 2017-03-23 20:19:06 +00:00
Alexander Alekhin
2271b9af1b Merge pull request #8443 from alalek:fix_coverage_trycompile 2017-03-23 20:12:18 +00:00
jexner
b45e784beb Fix segmentation fault in cv::Mat::forEach
This issue concerns only matrices with more dimensions than columns.
See https://github.com/opencv/opencv/issues/8447
2017-03-23 18:48:59 +01:00
Vitaly Tuzov
c5eb3dfecb Restricted OpenVX HAL separable filter implementation to 3x3 kernel size 2017-03-23 20:23:56 +03:00
Alexander Alekhin
69df0eee77 cmake: fix try_compile() with --coverage flags 2017-03-23 18:15:24 +03:00
Fangjun KUANG
da94d85789 add more info to the error code. 2017-03-23 14:40:34 +01:00
Fangjun KUANG
f82d64c6e5 Add more info to the error code. 2017-03-23 14:34:24 +01:00
Alexander Alekhin
1e6ce1d2f8 core(mathfuncs_core): cpu optimization dispatched code 2017-03-23 16:17:10 +03:00
Alexander Alekhin
17e5e4cd5a core: CPU target dispatcher update
- use suffixes like '.avx.cpp'
- added CMake-generated files for '.simd.hpp' optimization approach
- wrap HAL intrinsic headers into separate namespaces for different build flags
- automatic vzeroupper insertion (via CV_INSTRUMENT_REGION macro)
2017-03-23 16:12:11 +03:00
Julian Tanke
f70cc29edb export SVM::trainAuto to python #7224 (#8373)
* export SVM::trainAuto to python #7224

* workaround for ABI compatibility of SVM::trainAuto

* add parameter comments to new SVM::trainAuto function

* Export ParamGrid member variables
2017-03-23 16:00:19 +03:00
Vadim Pisarevsky
1857aa22b3 Merge pull request #8430 from sovrasov:interactive_calib_can_drop_aruco 2017-03-23 12:51:43 +00:00
Alexander Alekhin
b069646494 Merge pull request #8439 from egorpugin:patch-1 2017-03-23 12:49:28 +00:00
Vadim Pisarevsky
9ac34bd2c4 Merge pull request #8437 from matrush:master 2017-03-23 12:47:54 +00:00
Egor Pugin
a321cce5e4 Fix build under directories with '.cpp' string. 2017-03-23 14:42:23 +03:00
Chaoshuai Lu
de7018539d Fix UIImageToMat method by taking image scale information into account 2017-03-22 22:33:13 -07:00
Chaoshuai Lu
874fb7ae78 Fix MatToUIImage method crash when the step is not equal to cols * elemSize() 2017-03-22 22:04:27 -07:00
Fangjun KUANG
94521629ab fix issue 8411. 2017-03-22 23:24:47 +01:00
KUANG, Fangjun
03c4c37969 fix issue 8189. 2017-03-22 22:24:20 +01:00
KUANG, Fangjun
eae1ebfd29 fix issue 8411. 2017-03-22 22:03:29 +01:00
Alexander Alekhin
bcac7bd6d2 Merge pull request #8423 from terfendail:vt_ivx_enumupdate 2017-03-22 15:23:34 +00:00
Vadim Pisarevsky
0b3d13645f Merge pull request #8364 from csukuangfj:patch-2 2017-03-22 14:13:13 +00:00
Vitaly Tuzov
5ebf066dd5 Updated OpenVX detector and wrappers to handle Reference attribute names change 2017-03-22 16:50:38 +03:00
Vladislav Sovrasov
a56bd1fbba Make aruco dependency optional for interactive calibration app 2017-03-22 16:20:19 +03:00
Alexander Alekhin
ba104b61bf Merge branch 'pr8392' 2017-03-22 13:45:24 +03:00
Vadim Pisarevsky
8abd163464 Merge pull request #8404 from khnaba:stream-with-custom-allocator 2017-03-21 20:06:56 +00:00
Vadim Pisarevsky
e5dbd2c3a5 Merge pull request #8406 from khnaba:dft-as-algorithm 2017-03-21 20:05:54 +00:00
Vadim Pisarevsky
a57d144076 Merge pull request #7462 from alalek:cpu_multi_target 2017-03-21 19:51:32 +00:00
q
2918c3d75a First occurence of 4-directional version of SGBM.
Even without any tests.
Next step is parallelising it.
2017-03-21 14:51:19 +00:00
Naba Kumar
29680100ac Support for creating streams with custom allocator 2017-03-21 14:50:14 +02:00
Alexander Alekhin
8bce760174 Merge pull request #8424 from khnaba:expose-buffer-pool 2017-03-21 12:43:15 +00:00
Alexander Alekhin
b3d128bb39 Merge pull request #8401 from avartenkov:multichannel_warp 2017-03-21 11:59:56 +00:00
Alexander Alekhin
741e51396b Merge pull request #8416 from berak:patch-2 2017-03-21 11:57:57 +00:00
Naba Kumar
00f3ad7217 Implement DFT as cv::Algorithm to support concurrent streams 2017-03-21 13:55:13 +02:00
Naba Kumar
cdcf44b3ef Expose BufferPool class for external use also 2017-03-21 13:50:02 +02:00
Alexander Alekhin
1389cc9600 Merge pull request #8393 from alalek:ocl_driver_version 2017-03-21 10:44:52 +00:00
Alexander Alekhin
e77a5d5f13 Merge pull request #8422 from berak:fix_shapematchmodes 2017-03-21 09:06:30 +00:00
vartenkov
3fbe1f8d64 Fix multichannel warping with BORDER_CONSTANT
Warping a matrix with more than 4 channels using BORDER_CONSTANT and
INTER_NEAREST, INTER_CUBIC or INTER_LANCZOS4 interpolation led to
undefined behaviour. This commit changes the behavior of these methods
to be similar to that of INTER_LINEAR. Changed the scope of some of the
variables to more local. Modified some tests to be able to detect the
error described.
2017-03-20 15:21:49 +03:00
berak
11f3c0741e imgproc: move ShapeMatchModes enum from c to c++ header 2017-03-20 09:59:19 +01:00
berak
0b31eca9c2 remove unnessecary print statement
#resolves: 7881

remove printf statement and associated variables from invMapPointSpherical() in undistort.cpp
2017-03-19 10:12:50 +01:00
Kerry Billingham
d9231afa29 Changes made to the Maven build process:
* Introduced OSGi Blueprint XML file and Bean class too automatically load the native library.

* Introduced integration testing module to deploy to Karaf OSGi implementation.

* Clears library executable stack flag during build.

* Updated README document.
2017-03-18 10:49:02 +00:00
Woody Chow
9eecb5a9fe Optimize RowVec_32f and SymmColumnVec_32f with AVX2 2017-03-16 15:42:58 +09:00
Woody Chow
c370cc10e9 Optimize normL2Sqr_ with AVX2 2017-03-16 14:20:41 +09:00
Woody Chow
05476d6604 Optimize initUndistortRectifyMap with AVX2 2017-03-16 13:50:24 +09:00
Woody Chow
9a29fc2ce1 Optimize WarpAffine using AVX2 2017-03-16 10:13:56 +09:00
Alexander Alekhin
c1007c7276 Merge pull request #8376 from mshabunin:reduce-dependencies 2017-03-15 17:27:18 +00:00
Alexander Alekhin
dcdd5d64b6 ocl: dump OpenCL driver version in tests 2017-03-15 18:23:30 +03:00
Maksim Shabunin
9333f82be0 Reduce dependencies between modules 2017-03-15 17:58:52 +03:00
Fangjun KUANG
246d3761ce Merge pull request #8383 from csukuangfj/patch-10
* Improve documentation.

* Update imgproc.hpp
2017-03-15 11:12:59 +00:00
Naba Kumar
27cf6e549e Merge pull request #8367 from khnaba:cuda-calchist-with-mask
Implement cv::cuda::calcHist with mask support (#8367)

* Implement cuda::calcHist with mask

* Fix documentation build warning

* Have their own step sizes for src and mask. Fix review comment.
2017-03-15 09:34:00 +00:00
Woody Chow
a8763c1fec Optimize exp32f with AVX2 2017-03-15 17:03:36 +09:00
Maksim Shabunin
a83a1cafa7 Merge pull request #8388 from ottogin:calib3d 2017-03-15 04:33:33 +00:00
Matthias Grundmann
7295dd7dec Update bgfg_gaussmix2.cpp
1e-12 -> DBL_EPSILON
2017-03-14 16:57:50 -07:00
Artem Lukoyanov
3bf5d34544 Callib3d 4channel image detection
3.2 version doesn't support 4 channel color image
detections, unlike 3.1. Now, we don't call
CV_Error() if 4 channel image is given.

resolve #8326
2017-03-15 02:54:15 +03:00
Alexander Alekhin
b6e8de23f8 Merge pull request #8345 from ChristofKaufmann:pch_gcc6_workaround 2017-03-14 14:09:23 +00:00
Alexander Alekhin
73e9c44377 Merge pull request #8370 from csukuangfj:patch-7 2017-03-14 13:32:35 +00:00
Alexander Alekhin
661f3e2160 Merge pull request #8371 from csukuangfj:patch-8 2017-03-14 13:23:02 +00:00
Alexander Alekhin
6fcb07d41e Merge pull request #8375 from Sahloul:fixes/matx/init 2017-03-14 13:22:26 +00:00
Alexander Alekhin
54f7ebdec9 Merge pull request #8380 from csukuangfj:patch-9 2017-03-14 13:20:52 +00:00
Kene Udeh
873b2cabb8 Merge pull request #8378 from kudeh:master
Fix grammar error in py_features_meaning.markdown (#8378)
2017-03-14 13:21:28 +00:00
Alexander Alekhin
c5781afa47 Merge pull request #8379 from hailong-wang:patch-1 2017-03-14 10:12:32 +00:00
Hamdi Sahloul
171e705ba4 Fixes the constructor of 1x14, 2x7, 7x2 or 14x1 matrix 2017-03-14 18:26:22 +09:00
Fangjun KUANG
3ad6d13ff3 Fix an error in the documentation. 2017-03-14 09:57:37 +01:00
hailong-wang
207218e920 Fix the bug of Mat_<>::opeartor []
`template<typename _Tp> inline const _Tp* Mat_<_Tp>::operator [](int y) const` does not support 3d matrix since it checks rows.

This operator[] shall check size.p[0] instead.
2017-03-14 13:02:59 +08:00
Fangjun KUANG
31cc519cd3 fix typos. 2017-03-13 13:51:22 +01:00
Fangjun KUANG
3c15913f53 Impove the documentation for Mat::diag 2017-03-13 12:46:50 +01:00
Alexander Alekhin
502aa1f053 Merge pull request #8368 from csukuangfj:patch-5 2017-03-13 10:15:30 +00:00
Alexander Alekhin
fdda19cb0c Merge pull request #8356 from csukuangfj:patch-1 2017-03-13 09:59:16 +00:00
Alexander Alekhin
5ea5d08892 Merge pull request #8365 from csukuangfj:patch-3 2017-03-13 09:51:21 +00:00
Fangjun KUANG
95468b72f3 Fix typos in the documentation for cv::Mat. 2017-03-13 10:20:41 +01:00
KUANG, Fangjun
debc1c4c95 fix an error while setting kernel argument for a 3-D matrix. 2017-03-12 18:29:49 +01:00
KUANG, Fangjun
be7d4608fb Add more comments to the members of CoreTLSData related to OpenCL. 2017-03-12 16:13:00 +01:00
KUANG, Fangjun
3c5d87cbae Add more information to the error code. 2017-03-11 10:55:50 +01:00
Alexander Alekhin
08c6ffaa8d Merge pull request #8346 from Sahloul:fixes/python_wrapper/flann 2017-03-10 20:01:54 +00:00
Fangjun KUANG
2a30d8c9f9 Update documentation for cv::accumulate.
Make it more clear for the type of input argument.
2017-03-10 17:53:12 +01:00
Vadim Pisarevsky
da0188acc0 Merge pull request #8245 from oulenz:patch-1 2017-03-10 14:30:09 +00:00
Hamdi Sahloul
db52841544 Accept default argument of FLANN index parameters 2017-03-10 22:09:31 +09:00
chacha21
8c7d29e526 more minor changes to fix -Wunused-function warning on Apple platforms 2017-03-09 18:08:34 +01:00
chacha21
94c58e7347 minor changes to fix -Wunused-function warning on Apple platforms 2017-03-09 17:28:52 +01:00
Christof Kaufmann
583e3a6875 cmake: Avoid adding default path as system directory for GCC 6.x
This is a completion for PR #7390 and fixes #6517 and #815.
2017-03-09 16:23:53 +01:00
Alexander Alekhin
e4377e7c51 Merge pull request #8335 from kuanyili:typo-patch 2017-03-09 10:43:00 +00:00
Matthias Grundmann
0a1767a6b5 Update bgfg_gaussmix2.cpp to avoid divide by zero cases. 2017-03-08 19:27:43 -08:00
Alexander Alekhin
8ef23d64a1 Merge pull request #8308 from sovrasov:fs_dmatch_kpts_update 2017-03-07 19:28:34 +00:00
Kuan-Yi Li
e685dcef0b Fix typos 2017-03-07 23:42:24 +08:00
Vadim Pisarevsky
24efb02d93 Merge pull request #8332 from sovrasov:qt_no_dbg_output_in_release 2017-03-07 14:39:44 +00:00
Vadim Pisarevsky
e832870288 Merge pull request #8333 from sovrasov:ml_svm_params_scope_fix 2017-03-07 14:38:10 +00:00
Vladislav Sovrasov
195c12f2db ml: remove useless namespace identifiers in SVM 2017-03-07 16:02:19 +03:00
Vladislav Sovrasov
cd7f0a5177 QT: disable debug output in Release mode 2017-03-07 15:41:07 +03:00
Alexander Alekhin
6b1d9971f4 Merge pull request #8313 from alalek:ocl_fix_cvtcolor 2017-03-07 11:29:01 +00:00
Alexander Alekhin
f9f013e264 Merge pull request #8323 from csukuangfj:csukuangfj-patch-8 2017-03-07 11:24:19 +00:00
Alexander Alekhin
9d593e7779 Merge pull request #8324 from sturkmen72:update_objectDetection_cpp 2017-03-07 09:39:02 +00:00
chacha21
bfd800342b use "double" from scalar only for CV_64F input
Restore "DstType" in AbsDiffScalarOp template arguments, even if
eventually it will be equal to SrcType

use "double" from scalar only for CV_64F input
2017-03-07 09:49:49 +01:00
Alexander Alekhin
6fe1898ab6 Merge pull request #8294 from alalek:fix_stitching_failure 2017-03-06 14:55:23 +00:00
Alexander Alekhin
990e87effb Merge pull request #8111 from utibenkei:saliency-module-java 2017-03-06 14:39:23 +00:00
Alexander Alekhin
55ff28ed93 Merge pull request #8321 from sergboec:patch-1 2017-03-06 14:23:13 +00:00
chacha21
2375e58705 assert SrcDepth == DstDepth
simplify code by requesting srcDepth == dstDepth
2017-03-06 15:08:59 +01:00
Suleyman TURKMEN
50bda8adfe Update objectDetection.cpp 2017-03-06 16:51:29 +03:00
Fangjun KUANG
8a679128fa Update comments for cv::InputArray. 2017-03-06 14:45:30 +01:00
Sergey
f743c82bdd Updated OpenCVFindMKL.cmake
Current version of search for MLKROOT environment variable is wrong and should be corrected to (DEFINED ENV{MKLROOT})
2017-03-06 15:28:05 +03:00
Alexander Alekhin
3e2b05b096 Merge pull request #8274 from abratchik:mser.brisk.3.0.0-rc1 2017-03-06 10:22:29 +00:00
Alexander Alekhin
aa5204958e Merge pull request #8279 from sovrasov:calib3d_new_recover_pose 2017-03-06 10:20:43 +00:00
Alexander Alekhin
459a2bbc9e Merge pull request #8316 from xuning0:xuning0-patch-1 2017-03-06 10:17:51 +00:00
xuning0
8c93b61e2c Fix the description of ROI 2017-03-05 22:47:49 +08:00
Alexander Alekhin
92c4b6ae4c Merge pull request #8298 from delftrobotics-forks:circles-grid-parameters 2017-03-05 10:17:51 +00:00
Alexander Alekhin
eb6279d6ff Merge pull request #8310 from PhilLab:patch-1 2017-03-05 09:46:43 +00:00
Jaime O. Rios
5d03262b00 Added message about 32-bit Obj-C to all @synthesize sections. 2017-03-03 13:34:29 -05:00
chacha21
6cf4371eb4 make cuda::absdiff support multi-channel scalars
I took the subScalar.cu code and changed the inner operation
2017-03-03 18:24:12 +01:00
Alexander Alekhin
ba8a6e3533 ocl: don't use vload4 for 3 channel images 2017-03-03 19:36:38 +03:00
Philipp Hasper
ec38ef9b10 CameraBridgeViewBase synchronizes on a final field
Synchronizing against non-final fields is advised against.
2017-03-03 16:07:10 +01:00
Jaime O. Rios
10651d491f Added message about synthesize keyword. 2017-03-03 09:43:44 -05:00
Jose Gómez
6f39f9a6a0 Merge pull request #8168 from jmgomezpoveda:issue_8166
* Use the YV12 format in the Android emulator to avoid image issues

* Removed trailing spaces

* Added exception in else case

* Removed tab
2017-03-03 13:44:11 +00:00
Vladislav Sovrasov
931b32d102 core: add single DMatch/Keypoint I/O 2017-03-03 13:58:55 +03:00
Alexander Alekhin
89ce2dc405 core: DMatch I/O tests 2017-03-03 13:55:27 +03:00
chacha21
27cfe31b64 more ICV_HLINE specific cases
added ICV_HLINE custom implementations for element sizes up to 32
but timings show that it is not very relevant for sizes >= 12
2017-03-03 11:47:46 +01:00
Alexander Alekhin
9a92777fc1 Merge pull request #8207 from StevenPuttemans:fix_timing_traincascade 2017-03-03 10:14:18 +00:00
StevenPuttemans
db7922b9ee fix timing of traincascade 2017-03-03 10:06:35 +01:00
Alexander Alekhin
5d31d6ebbb Merge pull request #8306 from chacha21:portability 2017-03-03 04:46:05 +00:00
Jaime O. Rios
2d20aa4ed0 Modified code to work with universal build. 2017-03-02 16:00:29 -05:00
chacha21
74abbd0898 Fix compilation when USE_ZLIB is false
create a dummy gzFile type
2017-03-02 16:58:51 +01:00
chacha21
aa1b031274 get rid of warning C4800 under VS2010
the "std::basic_ios::operator bool" differs between C++98 and C++11. The
"double not" syntax is portable and covers both cases with equivalent
meaning
2017-03-02 16:56:20 +01:00
Vadim Pisarevsky
8e8da3f5b0 Merge pull request #8282 from vskarlsruhe:patch-3 2017-03-02 11:18:26 +00:00
Vadim Pisarevsky
d00561d396 Merge pull request #8217 from terfendail:ovx_halheader 2017-03-02 11:17:54 +00:00
Vadim Pisarevsky
b46364e436 Merge pull request #7996 from mshabunin:hal-filter-revert 2017-03-02 11:12:08 +00:00
Vadim Pisarevsky
e0ee2f769a Merge pull request #8116 from mrquorr:master 2017-03-02 11:07:23 +00:00
Alexander Alekhin
e65c6270bf stitching(perf): workaround test failures
force other RNG seed
2017-03-02 13:45:12 +03:00
Alexander Alekhin
147f3ebf0a flann: use OpenCV theRNG()
std::rand() has no thread-safe guarantee.
2017-03-02 13:45:12 +03:00
Alexander Alekhin
53e685461e stitching: force "stable" RNG 2017-03-02 13:45:12 +03:00
Hans Gaiser
11b24eb49f Expose CirclesGridFinderParameters in findCirclesGrid. 2017-03-02 10:53:45 +01:00
chacha21
92a3dbe18f more ICV_HLINE optimization
added 64b optimization for 3 channels case
not added 64b optimization for 4 channels case since timings did not
show any improvement
split ICV_HLINE cases into inline functions instead of macro for code
size reduction, without significand speed drawback at first sight
2017-03-02 09:44:12 +01:00
Vadim Pisarevsky
f46fa6e096 Merge pull request #8283 from ramele1907:master 2017-03-02 05:54:06 +00:00
Vadim Pisarevsky
408ef5c65b Merge pull request #8288 from Jejos:bugfix_medianBlur_accessviolation 2017-03-02 05:53:09 +00:00
Vadim Pisarevsky
38abc61de5 Merge pull request #8289 from vskarlsruhe:patch-4 2017-03-02 05:52:05 +00:00
Vadim Pisarevsky
c7049ca627 Merge pull request #8293 from alalek:update_rng_in_parallel_for 2017-03-02 05:51:01 +00:00
Vadim Pisarevsky
5f990566c4 Merge pull request #8297 from csukuangfj:csukuangfj-patch 2017-03-02 05:47:33 +00:00
Vadim Pisarevsky
ddfe688be6 Merge pull request #8299 from sovrasov:fs_fix_kpts_dmatch_output 2017-03-02 05:46:38 +00:00
Adeel Ahmad
bc7f6fc44c Merge pull request #8253 from adl1995:master
* Update linux_install.markdown

Grammar improvements, fixed typos.

* Update tutorials.markdown

Improvements in grammar.

* Update table_of_content_calib3d.markdown

* Update camera_calibration_square_chess.markdown

Improvements in grammar. Added answer.

* Update tutorials.markdown

* Update erosion_dilatation.markdown

* Update table_of_content_imgproc.markdown

* Update warp_affine.markdown

* Update camera_calibration_square_chess.markdown

Removed extra space.

* Update gpu_basics_similarity.markdown

Grammatical improvements, fixed typos.

* Update trackbar.markdown

Improvement for better understanding.
2017-03-01 18:44:34 +00:00
Alexander Alekhin
da0b1d8821 Merge pull request #8238 from PkLab:fix_doc_ellipse 2017-03-01 14:31:06 +00:00
Alexander Alekhin
69f1d1ddff Merge pull request #8296 from ville-v:master 2017-03-01 14:12:00 +00:00
Alexander Alekhin
47c4dcc8a3 Merge pull request #8204 from terfendail:ovx_tlcontext 2017-03-01 12:36:37 +00:00
Vladislav Sovrasov
c321d025c4 Fix DMatch and Keypoint I/O in FileStorage 2017-03-01 15:07:38 +03:00
Fangjun KUANG
34c70e7a1c Fix typos. 2017-03-01 11:13:46 +01:00
ville-v
0c1bcf354c Fix issue #8278: "CV_XADD compile errors with Embarcadero C++ Builder 10.1" 2017-03-01 08:47:49 +02:00
ville-v
1de10f9f86 Add files via upload
Fix issue #8280: "fastmath.h related compile errors with Embarcadero C++ Builder 10.1"
2017-03-01 08:42:14 +02:00
mrquorr
d8425d8881 finished for one sample
Finished with several samples support, need regression testing

Gave a more relevant name to function (getVotes)

Finished implicit implementation

Removed printf, finished regresion testing

Fixed conversion warning

Finished test for Rtrees

Fixed documentation

Initialized variable

Added doxygen documentation

Added parameter name
2017-02-28 11:14:33 -06:00
Alexander Alekhin
649bb7ac04 core: parallel_for_(): update RNG state of the main thread 2017-02-28 18:28:15 +03:00
Alexander Alekhin
ebdd74105a core(test): add regression test for RNG in parallel_for_() 2017-02-28 18:22:58 +03:00
Alexander Alekhin
b28fd79fdc core: parallel_for_(): propagate RNG state from the main thread 2017-02-28 18:22:46 +03:00
Alexander Alekhin
78784040aa Merge pull request #8249 from vskarlsruhe:patch-1 2017-02-28 14:25:50 +00:00
Alexander Alekhin
2570a5af38 Merge pull request #8292 from sovrasov:backport_8267 2017-02-28 11:56:25 +00:00
umbraclet16
17ece5861a Solve issue #8264
Fix bug in camera_calibration.cpp that the program tries to
parse input of type VIDEO_FILE as IMAGE_LIST which causes the
program to crash.
2017-02-28 13:31:24 +03:00
vskarlsruhe
6e12391c91 Code cleanup, removed cv:: because using namespace cv is already used. 2017-02-28 10:03:09 +01:00
Jejos
5169c79978 fix medianBlur accessviolation
medianBlur called with "empty" source and ksize >= 7 crashes application with accessviolation. With this extra assert this is avoided and the application may normally catch the thrown exception.
2017-02-28 08:31:28 +01:00
Maksim Shabunin
220d1f0b3e Merge pull request #8231 from paroj:pytype 2017-02-27 11:17:02 +00:00
vskarlsruhe
ed9c924102 Code easier to read now
Increase readability by using namespace std
2017-02-27 11:29:00 +01:00
Vladislav Sovrasov
710506e9e2 calib3d: add a new overload for recoverPose 2017-02-27 13:26:04 +03:00
Maksim Shabunin
c4c1c4c9bb Replaced several hal:: classes with functions, marked old variants deprecated 2017-02-27 12:13:31 +03:00
Vitaly Tuzov
61404dd2ac imgproc HAL header inclusion moved 2017-02-27 10:56:33 +03:00
abratchik
276e47afae fix #7833 2017-02-26 15:14:34 +04:00
ziggy90127
d69b3e385e Add AVMediaTypeMuxed capture devices to AVFoundation, just as QTKit does. 2017-02-26 01:36:26 -07:00
Maksim Shabunin
0d7666a012 Merge branch 'master' into master 2017-02-26 07:46:59 +03:00
ziggy90127
0aadab0941 Add AVMediaTypeMuxed capture devices to AVFoundation, just as QTKit does. 2017-02-25 15:48:09 -07:00
Alexander Alekhin
dcbed8d676 Merge pull request #8250 from tomoaki0705:fixNonAsciiChar 2017-02-24 11:19:00 +00:00
Alexander Alekhin
eee638fd81 Merge pull request #8244 from sovrasov:adjust_roi_fix 2017-02-24 11:18:35 +00:00
Alexander Alekhin
c624d82383 Merge pull request #8239 from tomoaki0705:buildUniversalIntrinsicBlend 2017-02-24 11:17:51 +00:00
Alexander Alekhin
0c00242f7a Merge pull request #8235 from berak:fix_dshow_leak 2017-02-24 11:11:20 +00:00
Vadim Pisarevsky
12d7429ff0 Merge pull request #8064 from terfendail:sgbm_bigbuffer 2017-02-23 20:11:26 +00:00
Tomoaki Teshima
822c67fdee remove non ASCII character from comment 2017-02-24 01:31:32 +09:00
vskarlsruhe
56cedfc4d2 Update AddingImages.cpp
If-condition was always true (alpha = 0.5 is set in Line 19).
Now the user input is checked to be between 0 and 1.
This is correct in the tutorial code for OpenCV 2.4.
2017-02-23 11:43:30 +01:00
PkLab.net
e03c81d90a Change image e small fix to cv::ellipse() Doc 2017-02-23 09:10:48 +01:00
Tomoaki Teshima
aec59aba34 suppress warnings
- brush up the implementation
2017-02-23 09:11:12 +09:00
oulenz
28cfb07445 FLANN_INDEX_KDTREE = 0 -> 1
0 corresponds to FLANN_INDEX_LINEAR
2017-02-22 19:13:34 +01:00
oulenz
9cb13435a1 FLANN_INDEX_KDTREE = 0 -> 1
0 corresponds to FLANN_INDEX_LINEAR
2017-02-22 19:10:33 +01:00
oulenz
29eda007bb Fix FLANN_INDEX_KDTREE, add FLANN_INDEX_LSH initialisation
Add initialisations to make clear what values actually have to be passed.

Moreover, in accordance with 383559c228/modules/flann/include/opencv2/flann/defines.h (L68), I believe `FLANN_INDEX_KDTREE` was being initialised wrongly in the code examples, 1 should be correct, whereas 0 is `FLANN_INDEX_LINEAR`.
2017-02-22 17:45:21 +01:00
Alexander Alekhin
ee9c0f5f9c Merge pull request #8234 from alalek:issue_8121 2017-02-22 16:21:01 +00:00
Maksim Shabunin
a9e33fe54e Merge pull request #8243 from sovrasov:hal_round_to_cvround 2017-02-22 15:52:10 +00:00
Maksim Shabunin
e192c6842e Merge pull request #8240 from hewj03:issue_1012_contrib 2017-02-22 15:51:07 +00:00
Vladislav Sovrasov
595437bdd1 hal: replace round() with cvRound() 2017-02-22 14:08:38 +03:00
Vladislav Sovrasov
14451f3f06 core: fix adjustROI behavior on indexes overflow 2017-02-22 14:05:51 +03:00
Wenju He
9fbce6c8c8 fix multiband_blend.cu build error in issue opencv_contrib#1012 2017-02-22 08:44:10 +08:00
ionut
a41d877fe6 Change the value of bit/pixel from channels to 8*channels because videos encoded
by cap_mjpeg_encoder.cpp don't play on windows media player.
Issue number #8113
2017-02-21 19:15:40 +02:00
Alexander Alekhin
88a338a3eb cmake: disable pkg-config for Apple frameworks 2017-02-21 19:23:37 +03:00
berak
d7240d1a28 fix leaking handle in cap_dshow.cpp 2017-02-21 14:27:12 +01:00
Vitaly Tuzov
9a4b5a4545 OpenVX calls updated to use single common OpenVX context per thread 2017-02-21 16:08:23 +03:00
Alexander Alekhin
ec7f74f7b4 core(TLS): add cleanup() method 2017-02-21 16:08:23 +03:00
chacha21
afbcc07184 Merge remote-tracking branch 'origin/drawing_performance' into drawing_performance
# Conflicts:
#	modules/imgproc/src/drawing.cpp
2017-02-21 12:03:15 +01:00
chacha21
91a0270432 try to fix Android compilation 2017-02-21 12:02:23 +01:00
Alexander Alekhin
eaba0e6358 cmake: append '-framework UIKit' for videoio/imgcodecs module 2017-02-21 13:37:37 +03:00
Alexander Alekhin
f1c8e04268 ios framework: don't disable opencv_world in dynamic framework 2017-02-21 13:37:37 +03:00
Alexander Alekhin
a78d143c98 ios framework: refactor code (no functional changes) 2017-02-21 13:37:37 +03:00
Pavel Rojtberg
789dc0a3b7 python: type of initial_button_state must match format string 2017-02-21 11:11:22 +01:00
Fangjun KUANG
526220a171 Fix typos in the documentation (#8226)
* fix typos.

* Fix typos.

* Fix typos.

* Fix typos.

* Fix typos.
2017-02-21 12:48:15 +03:00
Vadim Pisarevsky
5bfaf9931b Merge pull request #8228 from csukuangfj:csukuangfj-patch 2017-02-21 09:46:09 +00:00
Vadim Pisarevsky
007354ebaf Merge pull request #8233 from Sahloul:features/python_matx 2017-02-21 09:43:26 +00:00
Hamdi Sahloul
232d6b87f4 cv::Matx python wrapper 2017-02-21 11:29:28 +09:00
Fangjun KUANG
b1851e2f16 Add support to print cv::UMat.
Now a user can use `std::cout` to print an object of `cv::UMat` just like `cv::Mat`.
2017-02-20 16:22:46 +01:00
Tomoaki Teshima
64cf206fb5 optimize blend using universal intrinsic
- add more channels/depth performance test for blend
2017-02-20 19:09:26 +09:00
Alexander Alekhin
b2da9df82d Merge pull request #8221 from csukuangfj:csukuangfj-path-2 2017-02-19 10:16:00 +00:00
LaurentBerger
8638bba670 Merge pull request #8220 from LaurentBerger:Issue5035 2017-02-19 13:15:58 +03:00
Fangjun KUANG
e827a5bd9e Fix an error in the demo code for cv::Mat::forEach 2017-02-18 10:14:29 +01:00
Vadim Pisarevsky
9053839282 Merge pull request #8178 from tomoaki0705:addBayer2RGBA 2017-02-16 15:01:49 +00:00
Vadim Pisarevsky
3240f2a6b7 Merge pull request #8187 from hewj03:improve-MultiBandBlender-cuda 2017-02-16 15:00:58 +00:00
Fangjun KUANG
57ed0e57f0 Fix the documentation for Mat::diag(int). (#8199)
* Fix the documentation for Mat::diag(int).

Fix issue #8181

* Fix the documentation for Mat::diag(int).

Fix issue #8181.

* Add support for printing out cv::Complex.

* Remove extra spaces.

* cv::Complex is submitted as a new pull request.
2017-02-16 18:00:32 +03:00
Vadim Pisarevsky
ca0b6fbb95 Merge pull request #8203 from alalek:ocl_kernelarg_validate 2017-02-16 14:58:25 +00:00
Alexander Alekhin
0af3638c5a Merge pull request #8214 from jinay1991:patch-1 2017-02-16 11:09:00 +00:00
Jinay Patel
f710d96602 Update ocl.cpp function Device::OpenCLVersion()
Instead of CL_DEVICE_EXTENSIONS in Querying OpenCLVersion, it should be CL_DEVICE_VERSION flag which needs to be passed to the function.
2017-02-16 15:20:57 +05:30
Alexander Alekhin
bc8a91ed83 Merge pull request #8211 from csukuangfj:csukuangfj-patch-3 2017-02-16 08:57:44 +00:00
Alexander Alekhin
bb8be523c5 Merge pull request #8210 from alalek:fix_mkl_link 2017-02-16 08:56:02 +00:00
Vadim Pisarevsky
236815ec40 Merge pull request #8131 from atinfinity:170205-add_dense_flow_sample 2017-02-15 20:22:57 +00:00
Vadim Pisarevsky
e720427b53 Merge pull request #8153 from Sejsel:patch-1 2017-02-15 20:17:39 +00:00
Fangjun KUANG
a8a208e0fe Merge pull request #8208 from csukuangfj:complex_support
Add support for printing out cv::Complex. (#8208)

* Add support for printing out cv::Complex.

* Conform to the format of std::complex.

* Remove extra spaces.

* Remove extra spaces.
2017-02-15 21:50:14 +03:00
Alexander Alekhin
3fbaabc866 Merge pull request #8209 from csukuangfj:csukuangfj-patch-2 2017-02-15 18:48:01 +00:00
Fangjun KUANG
5e4dfb9546 Change the argument type to cl_platform_info.
Although both `cl_platform_info` and `cl_device_info` are defined as macro `cl_uint`, it needs to use `cl_platform_info` to get
the platform information.
2017-02-15 16:44:40 +01:00
Alexander Alekhin
13b0fd993c Merge pull request #8206 from paroj:cast 2017-02-15 15:35:17 +00:00
Alexander Alekhin
05248a3dea cmake: fix order of MKL libraries, don't pass additional libraries as modules 2017-02-15 17:13:13 +03:00
Fangjun KUANG
46fe74177d Fix typos. 2017-02-15 14:52:00 +01:00
Pavel Rojtberg
df86f0752a add missing casts to _Tp as determinant() always returns double 2017-02-15 12:21:17 +01:00
Alexander Alekhin
4c7aa8645a ocl: validate arguments in KernelArgs constructor
- don't use undefined flag=0. It should be CONSTANT instead.
- don't allow 'UMat* m=NULL' argument (except LOCAL/CONSTANT flags).
  This case is not handled well to provide NULL __global pointers.
  It is better to use '-D' macro defines instead (at least for performance)
2017-02-14 16:10:32 +03:00
Alexander Alekhin
1304ad1e12 Merge pull request #8160 from ilijapuaca:master 2017-02-14 13:03:09 +00:00
Alexander Alekhin
e16227b53c cmake: support multiple CPU targets 2017-02-13 19:52:59 +03:00
Alexander Alekhin
47ae5f14f5 Merge pull request #8186 from Kronopath:patch-1 2017-02-13 10:59:59 +00:00
Alexander Alekhin
156d736e75 Merge pull request #8176 from alalek:cmake_cleanup_msvc_checks 2017-02-13 10:59:31 +00:00
Alexander Alekhin
b7945827f9 Merge pull request #8175 from alalek:cmake_cleanup_defines 2017-02-13 10:59:09 +00:00
Fangjun KUANG
1e11657ba4 Merge pull request #8197 from csukuangfj/csukuangfj-patch-1
Fix typos in the documentation for AutoBuffer. (#8197)

* Allocate 1000 floats to match the documentation

Fix the documentation of `AutoBuffer`. By default, the following code
```.cpp
cv::AutoBuffer<float> m;
```` 
allocates only 264 floats. But the comment in the demonstration code says it allocates 1000 floats, which is 
not correct.

* fix typo in the comment.
2017-02-13 13:58:44 +03:00
atinfinity
ca5e0f53b8 refactoring 2017-02-13 00:53:35 +09:00
atinfinity
bbe0f2cef5 refactoring 2017-02-13 00:35:52 +09:00
atinfinity
c2a880d7c9 fixed indent 2017-02-13 00:26:48 +09:00
atinfinity
9552206a4c added option to specify flow type 2017-02-12 23:33:57 +09:00
Wenju He
2722133206 add accuracy test CUDA_MultiBandBlender 2017-02-12 17:16:49 +08:00
Wenju He
b76e88354c improve MultiBandBlender cuda, add normalizeUsingWeight and addSrcWeight kernels 2017-02-12 17:08:05 +08:00
Gabriel B. Nunes
88e54ca1c0 Work around CMake bug that mangles install dir
CMake has a long-standing bug/feature (see [here](https://cmake.org/pipermail/cmake/2015-March/060204.html) and reply [here](https://cmake.org/pipermail/cmake/2015-March/060209.html)) which can mangle certain path variables by attempting to make them into relative paths if you try to set them with CACHE PATH.

Say you have your OpenCV download at `/path/on/my/computer/to/opencv/`. What actually happens is that if you try to set this variable by invoking CMAKE with `-DCMAKE_INSTALL_PREFIX=/my/desired/install/path`, what you end up is *not* `/usr/local/` and *not* `my/desired/install/path`, but instead, this monstrosity: `/path/on/my/computer/to/opencv/src/OpenCV-build//my/desired/install/path`.

That is, CMake attempts, for some reason, to turn the path that you passed into a path relative to `${CMAKE_BINARY_DIR}`. See the links I posted above: this is a known (and apparently unfixable) issue with CMake.

In OpenCV's case, among other potential issues, this leads to broken paths in `opencv_tests_config.hpp`, which can break the build or cause bizarre behaviour.

The fix for this issue, as stated in my links above, is to test that the variable hasn't been set yet with an `if(NOT DEFINED ...)` before attempting to set it. This is what I've implemented here. I admit I don't know enough about OpenCV's internals to know whether you *really* need to force the install to be in `/usr/local`, but as it stands right now you get *neither* a clean `/usr/local` path *nor* a customized `/my/desired/install/path`, but a broken mess. This change at least allows the user to customize their install directory.

In the meantime, there's a workaround for this, by explicitly defining the variable as a path with `-DCMAKE_INSTALL_PREFIX:PATH=my/desired/install/path`. But if this change can save anyone else the hours of headaches that I had today, I'll be happy.
2017-02-11 20:40:37 -05:00
Alexander Alekhin
642e4d97a4 Merge pull request #8165 from AdeelH:master 2017-02-11 11:02:10 +00:00
chacha21
16a9407fbf new try to adapt to iOS build bot 2017-02-11 11:26:55 +01:00
chacha21
e19000a56f adaptation for iOS buildbot 2017-02-11 11:07:00 +01:00
chacha21
7521bcc32c comment unused function
On MacOS and iOS, the unused opencvBigToHost32 is a warning for buildbot
2017-02-10 22:34:44 +01:00
chacha21
d3a15c625a do not use GCC_VERSION 2017-02-10 21:58:02 +01:00
chacha21
af746a9269 optimize ICV_HLINE
ICV_HLINE is split into several specific cases, according to pixel_size,
to optimize memory copies of the same color components along the line.
2017-02-10 16:26:24 +01:00
Tomoaki Teshima
37be9ddeec add enum Bayer**2BGRA
- let it possible to reach Bayer2BGRA conversion
2017-02-11 00:20:57 +09:00
Alexander Alekhin
28f9ce4e33 cmake: cleanup MSVC checks 2017-02-10 15:29:12 +03:00
Alexander Alekhin
8633ef451e cmake: cleanup unused defines 2017-02-10 15:18:29 +03:00
cclauss
a347569350 Merge pull request #8150 from cclauss/patch-1
cv2.findContours() no longer modifies source image (#8150)

* cv2.findContours() no longer modifies source image

Since OpenCV 3.2, cv2.findContours() no longer modifies the source image but returns a modified image as the first of three return parameters.  ??? Do I have that correct ???

Also fixed up the code blocks to be valid markdown.

* ```python --> @code{.py}

Enables syntax highlighting in docs.
2017-02-10 15:12:11 +03:00
Ilija Puaca
1b842c4762 Updated version of libwebp to 0.6.0. Removed iOS from build exceptions for libwebp 2017-02-09 23:35:27 +01:00
Alexander Alekhin
7c3b415d6a Merge pull request #8159 from alalek:fix_8158 2017-02-09 15:52:38 +00:00
Adeel
03fb85f179 update fix for #8105 (compiling with mingw32)
taken from https://github.com/google/googletest/pull/856
2017-02-09 20:11:00 +05:00
Alexander Alekhin
9ac9e9e29a core: fix String::end() implementation 2017-02-09 16:36:22 +03:00
Jiří Sejkora
0689b43a7c Fixed two typos in the Filter2D tutorial 2017-02-09 02:07:06 +01:00
Vadim Pisarevsky
3450528fad Merge pull request #8134 from chrizandr:doc_typo 2017-02-08 13:57:36 +00:00
Vadim Pisarevsky
fb3298f076 Merge pull request #7904 from paroj:initmapfc2 2017-02-08 13:30:15 +00:00
Vadim Pisarevsky
e9017fb71e Merge pull request #7910 from StevenPuttemans:add_visapp2017_contribution 2017-02-08 13:29:31 +00:00
Alexander Alekhin
476d2e1eea Merge pull request #8140 from StevenPuttemans:fix_gdal_driver_4channel_16bit 2017-02-08 11:29:34 +00:00
Vitaly Tuzov
4950f542d1 Fix for SGBM compute() buffer allocation failure on big images 2017-02-08 12:49:21 +03:00
StevenPuttemans
22d8a81a57 enable processing of 16, 32 and 64 bit 4 channel data using GDAL1.2 2017-02-07 15:51:45 +01:00
Alexander Alekhin
976ee44682 Merge pull request #8125 from terfendail:ovxhal_integral_fix 2017-02-07 12:53:18 +00:00
Alexander Alekhin
3b5f1f767d Merge pull request #8137 from LaurentBerger:thresholdDoc
Solve issue 8136 opencv doc of threshold
2017-02-07 15:12:53 +03:00
LaurentBerger
b3c1bd788a Add note about OTSU and TRIANGLE (comment sovrasov) 2017-02-07 10:14:24 +01:00
LaurentBerger
fa4d32f7dd Solve issue 8136 opencv doc of threshold 2017-02-06 22:49:18 +01:00
LaurentBerger
91e06e7c05 Merge branch 'UserColormap' of https://github.com/LaurentBerger/opencv into UserColormap 2017-02-06 16:50:31 +01:00
Alexander Alekhin
072f873df6 Merge pull request #8133 from StevenPuttemans:add_detectMultiScale_notice 2017-02-06 10:36:06 +00:00
chrizandr
88f5e2f3f7 Corrected typo in py_histogram_begins tutorial 2017-02-06 16:05:48 +05:30
Alexander Alekhin
f0637e5e91 Merge pull request #8132 from tonytheodore:highgui-gl 2017-02-06 10:35:27 +00:00
Alexander Alekhin
519e452e1a Merge pull request #8128 from LaurentBerger:MatrixExpressions
Add a link to MatExpr in Detailed Description of Mat
2017-02-06 10:34:12 +00:00
Alexander Alekhin
89eca83f5b Merge pull request #8123 from msk-repo01:master 2017-02-06 10:32:23 +00:00
Alexander Alekhin
48f7cbec75 Merge pull request #8107 from reunanen:fix8093 2017-02-06 10:31:34 +00:00
StevenPuttemans
bfb18d29a6 add explanation to detectMultiScale overload functionality 2017-02-06 10:38:03 +01:00
Tony Theodore
678e114e5f highgui: use forward slash for gl.h include
The backslash causes build failure when cross-compiling with mingw-w64
2017-02-06 04:15:10 +11:00
atinfinity
18dbed0e0d added dense flow sample 2017-02-05 22:10:37 +09:00
LaurentBerger
488eb11ba8 Add a link to MatExpr in Detailed Description of Mat 2017-02-04 11:10:50 +01:00
Vitaly Tuzov
b6561ce57d Fixed addressing structure population for integral image output 2017-02-03 13:54:22 +03:00
Alexander Alekhin
a2fed4c790 Merge pull request #8084 from mshabunin:libstdcplusplus-debug 2017-02-03 08:47:37 +00:00
msk-repo01
9a1835ce66 Fix for opencv/opencv#8105 (compiling with mingw32)
fix for opencv/opencv#8105, compilation issue with mingw32 (in
google/googletest#721 a similar issue was solved and the reason was
described as MinGW defines _CRITICAL_SECTION and _RTL_CRITICAL_SECTION
as two separate (equivalent) structs, instead of using typedef)
2017-02-02 13:47:09 -08:00
PkLab
ece3fac7ef Merge pull request #8112 from PkLab:Fix_7898
CoInitialize/CoUninitialize in VFW classes (#8112)
2017-02-01 14:37:24 +00:00
Alexander Alekhin
607ff2e189 Merge pull request #8114 from lupustr3:pvlasov/ipp_python_export 2017-02-01 09:46:59 +00:00
Pavel Vlasov
a47b7a34be Adds IPP control functions to bindings export 2017-02-01 10:29:35 +03:00
Alexander Alekhin
3476440ec3 Merge pull request #8078 from tomoaki0705:universalIntrinsicLapack 2017-01-31 18:46:54 +00:00
Alexander Alekhin
b333b1f6e8 Merge pull request #8109 from lupustr3:pvlasov/ipp_build_fix 2017-01-31 16:10:09 +00:00
utibenkei
6501d54267 Fix bug that occurs when module name and inherited class name are same. 2017-01-31 22:42:30 +09:00
Pavel Vlasov
9228a8bee6 Fixes IPP build on linux; 2017-01-31 16:39:09 +03:00
Juha Reunanen
f3cb5084cf Fix #8093: CV_DbgAssert that the result of area() fits in the return value 2017-01-31 15:02:36 +02:00
Vadim Pisarevsky
dfb348ef0b Merge pull request #8081 from mshabunin:fix-kmeans-compactness 2017-01-31 12:19:46 +00:00
Maksim Shabunin
50d350bcd1 Enable GNU STL debug mode for debug builds 2017-01-31 12:36:26 +03:00
Maksim Shabunin
0aab7c6fc3 Merge pull request #8077 from sovrasov:mog2_docs_update 2017-01-31 09:13:53 +00:00
Maksim Shabunin
13dffa0017 Merge pull request #8103 from sovrasov:em_docs_update 2017-01-31 09:10:37 +00:00
Maksim Shabunin
b417b4dbee KMeans improvement
- fixed returned compactness value
- added centers drawing to the example app
- added compactness test
2017-01-31 12:05:08 +03:00
Tomoaki Teshima
fd711219a2 use universal intrinsic in VBLAS
- brush up v_reduce_sum of SSE version
2017-01-31 05:36:27 +09:00
Vladislav Sovrasov
a789c08588 ml::EM: add documentation for predict() method 2017-01-30 17:38:13 +03:00
Alexander Alekhin
75533fcd06 Merge pull request #8098 from chrizandr:Tree_load_Wrapper
Add wrappers for load functions for DTrees and Boost classifiers
2017-01-30 17:25:23 +03:00
Alexander Alekhin
82902b6fd5 Merge pull request #8082 from PkLab:fix_videoio_doc 2017-01-30 14:05:03 +00:00
Alexander Alekhin
124c4825a7 Merge pull request #8089 from hrnr:estimate_convert_fix
fix wrong conversion in estimateAffine2D* functions
2017-01-30 16:53:50 +03:00
Alexander Alekhin
11470077e1 Merge pull request #8099 from chrizandr:ML_Wrappers
Wrappers for load methods of EM, LR, SVMSGD and Normal Bayes Classifier
2017-01-30 16:52:31 +03:00
Alexander Alekhin
67e24dd347 Merge pull request #8088 from paroj:vtkfix 2017-01-30 13:51:41 +00:00
chrizandr
519fbdb8ab Wrappers for load methods of EM, LR, SVMSGD and Normal Bayes Classifier 2017-01-29 18:51:55 +05:30
chrizandr
d22df8c41f Add wrappers for load functions for DTrees and Boost classifiers 2017-01-29 15:55:38 +05:30
Alexander Alekhin
a8aff6f643 Merge pull request #8085 from tomoaki0705:checkSse2 2017-01-28 11:40:04 +00:00
LaurentBerger
48e2d38be7 Merge branch 'master' of git://github.com/Opencv/opencv into UserColormap 2017-01-28 11:25:11 +01:00
Jiri Horner
4ee25c7e95 add test for convertions in estimateAffine2D* functions
test with integer points to cover conversion bugs.
2017-01-27 22:16:58 +01:00
Jiri Horner
9408a5ef5d fix conversion bug in estimateAffine2D* functions
functions support points to have other datatypes than floats.

* fix bug in coversion that overwrites src points with dst points
2017-01-27 16:55:29 +01:00
Pavel Rojtberg
67f163892e viz: fix compilation - we need the VTK includes before ocv_define_module 2017-01-27 15:51:19 +01:00
Tomoaki Teshima
d0bdf99501 check correct flag 2017-01-27 18:42:58 +09:00
Alexander Alekhin
156871d888 Merge pull request #8080 from alalek:fix_8079 2017-01-26 18:14:28 +00:00
PkLab.net
eb768514c3 Fix misplaced description CAP_PROP_SETTINGS and others minor changes in videoio doc 2017-01-26 17:10:32 +01:00
Alexander Alekhin
ec47a0a6de build: workaround for missing _mm256_setr_m128 in GCC 2017-01-26 18:39:38 +03:00
Alexander Alekhin
74defefd61 Merge pull request #8076 from tomoaki0705:brushupAvxPopcount 2017-01-26 12:57:14 +00:00
Vladislav Sovrasov
4e0351bafd Clarify docs for MOG2::apply 2017-01-26 12:43:41 +03:00
Tomoaki Teshima
820fdbff23 brush up AVX optimization in popcount
- make sure SIMD optimization works even when AVX is not available
2017-01-26 18:37:56 +09:00
Alexander Alekhin
776c8c5c87 Merge pull request #8074 from alalek:fix_java_tests 2017-01-26 08:56:22 +00:00
Alexander Alekhin
c1dec72fb6 java: force 64F in solvePnP test 2017-01-25 19:42:09 +03:00
Alexander Alekhin
aa5caf83f6 Merge pull request #8072 from tomoaki0705:AVXcorner 2017-01-25 16:10:59 +00:00
Alexander Alekhin
993ff7ad12 Merge pull request #8071 from tomoaki0705:imgprocRemoveRedundantCheck 2017-01-25 16:09:15 +00:00
Alexander Alekhin
3413c23b34 Merge pull request #8061 from tomoaki0705:universalIntrinsicStereoCalib3d 2017-01-25 16:08:02 +00:00
Alexander Alekhin
383559c228 Merge pull request #8062 from mshabunin:add-cv_deprecated 2017-01-25 15:04:42 +00:00
Tomoaki Teshima
07979b02c3 optimize corner detection series using AVX instructions
- make sure SSE version will be still available for backward compatibility
2017-01-25 22:35:11 +09:00
Tomoaki Teshima
ddca982c09 remove pure SSE part 2017-01-25 22:05:53 +09:00
Maksim Shabunin
6f848b8520 Merge pull request #8068 from catree:thrust_tutorial 2017-01-25 13:05:04 +00:00
Alexander Alekhin
9e9fd281b9 Merge pull request #8044 from alalek:opencv_world_with_contrib 2017-01-25 12:54:16 +00:00
Alexander Alekhin
5c13ffb73e Merge pull request #8060 from Legoless:master 2017-01-25 11:32:24 +00:00
Alexander Alekhin
a446cb271f Merge pull request #8065 from paroj:pnpfloat
solvePnP: use CV_32F for rvec, tvec if all PnP inputs are CV_32F
2017-01-25 12:50:05 +03:00
catree
6eed6a8e9f Add thrust tutorial in the GPU main page documentation. 2017-01-24 21:07:27 +01:00
Dal Rupnik
576d43d1c2 Fixed build_framework.py script for osx 2017-01-24 19:14:50 +01:00
Pavel Rojtberg
3e708e015c solvePnP: use CV_32F for rvec, tvec if all PnP inputs are CV_32F 2017-01-24 18:17:46 +01:00
mshabunin
c6c519166e Added CV_DEPRECATED macro 2017-01-24 15:57:06 +03:00
Vadim Pisarevsky
2bac66a181 Merge pull request #8004 from chrizandr:RTrees_load_wrapper 2017-01-24 11:55:42 +00:00
Vadim Pisarevsky
ff5eaadfdf Merge pull request #8045 from onetimking:master 2017-01-24 11:44:56 +00:00
Dal Rupnik
c10283b2b6 Replaced macro with built-in OpenCV export 2017-01-24 10:26:19 +01:00
Tomoaki Teshima
b34ebc8cfe use universal intrinsic in stereo matching
- check SIMD availability before executing
2017-01-24 18:25:22 +09:00
Dal Rupnik
a50efda49d Added export functions for ObjC classes 2017-01-23 17:15:17 +01:00
Alexander Alekhin
4b7c0b9c76 cuda: fix samples 2017-01-23 18:45:53 +03:00
Alexander Alekhin
68e50661a2 cmake: fix CUDA flags generation
VTK uses parentheses in defines, so generated code is wrong:
set(nvcc_flags -m64;-D__OPENCV_BUILD=1;-DvtkRenderingContext2D_AUTOINIT=1(vtkRenderingContextOpenGL);...)
2017-01-23 18:45:53 +03:00
Alexander Alekhin
f1adc32765 cmake: fix support of duplicated file names in static libraries 2017-01-23 18:45:53 +03:00
Alexander Alekhin
a5d16f09e6 cmake world: allow to build python bindings 2017-01-23 18:45:53 +03:00
Alexander Alekhin
36b34465a4 cmake: include contrib modules into opencv_world 2017-01-23 18:45:53 +03:00
Alexander Alekhin
9bb5d6cab0 remove precomp.cpp 2017-01-23 18:45:53 +03:00
Alexander Alekhin
205ccddff8 Merge pull request #8053 from pwuertz:umat-copy-python 2017-01-23 13:20:56 +00:00
Alexander Alekhin
533d399dab Merge pull request #8058 from tomoaki0705:universalIntrinsicFast 2017-01-23 13:13:14 +00:00
Tomoaki Teshima
1d01e435ca use universal intrinsic in fast 2017-01-23 19:03:22 +09:00
Peter Würtz
c659f94dca Expose more UMat constructors to python 2017-01-22 13:11:13 +01:00
Alexander Alekhin
dc1502ad71 Merge pull request #8001 from alalek:c_defines 2017-01-20 17:52:24 +00:00
Alexander Alekhin
bb5c40d944 Merge pull request #8049 from tomoaki0705:universalIntrinsicCorner 2017-01-20 16:43:48 +00:00
Dal Rupnik
e71ff78f7f Merge pull request #8009 from Legoless:master
CMake: Building Dynamic Framework on iOS (#8009)

* Updated python script with dynamic parameter

Updated python script to build static library by default

Updated python script to include bitcode flag

Added bitcode flag to c flags

Fixed directories and targets with static

Bitcode parameter fixed

Fixed script for static library

Fixed parameters in build function

Updated cmake common toolchain

Added changes to OpenCV Utils

Updates to cmake

Added cache internal

Updates to common toolchain

Fixed path in framework destination and added UIKit dependency

Dynamic plist for framework

Lib version removed hardcoded value

Removed trailing whitespace in toolchain

* Removed trailing whitespace

* Fixed typo in comment

* Renamed bitcode variable to bitcodedisabled

* Fixed target device family
2017-01-20 19:16:01 +03:00
Tomoaki Teshima
062d2179eb use universal intrinsic in corner detection series 2017-01-20 19:22:44 +09:00
Alexander Alekhin
73b5ef48ef Merge pull request #8042 from alalek:fix_8037 2017-01-19 17:04:34 +00:00
Alexander Alekhin
a46adbfcbc Merge pull request #8020 from alalek:fix_4976 2017-01-19 15:40:07 +00:00
Alexander Alekhin
c25f587584 Merge pull request #7926 from saskatchewancatch:issue-7310 2017-01-19 14:03:43 +00:00
chrizandr
e3ec3566d9 RTrees: Add wrapper for RTrees_load method to enable loading trained RTrees 2017-01-19 17:16:45 +05:30
Alexander Alekhin
f9828cd0c9 cmake: fix MKL detection in case of unsupported versions
CMake should not fail.
2017-01-19 13:33:39 +03:00
Tim King
203b398caa Fixed bug #7482. Updated dense flow routine to reference bound textures. 2017-01-18 19:30:45 +02:00
Alexander Alekhin
a22f03e749 Merge pull request #7863 from tomoaki0705:universalIntrinsicPopcount 2017-01-18 17:25:02 +00:00
Alexander Alekhin
8f96b15e2a Merge pull request #8024 from catree:fix_typo_py_houghlines
Fix typos in py_houghlines tutorial.
2017-01-18 19:56:25 +03:00
Alexander Alekhin
7c91700cc6 Merge pull request #7999 from alalek:fix_lapack 2017-01-18 13:20:30 +00:00
Alexander Alekhin
6f93a3ac5b Merge pull request #8021 from mshabunin:doc-minor-fixes 2017-01-18 12:15:32 +00:00
Alexander Alekhin
85ef02bc5c Merge pull request #8023 from sovrasov:fs_add_full_yml_type_heading 2017-01-18 12:08:10 +00:00
Maksim Shabunin
66cdc10010 Minor documentation fixes:
- disabled OPTIMIZE_OUTPUT_JAVA
- filtered out *.m scripts
- removed link to old Sphinx documentation
- replaced all mentions of Sphinx with Doxygen
2017-01-18 13:32:20 +03:00
Alexander Alekhin
a2b6b595c2 shape: force column-based vector 2017-01-18 13:02:51 +03:00
Alexander Alekhin
474e5f4cdf Merge pull request #8026 from catree:fix_link_tutorial_brightness
Fix tutorial code link in basic_linear_transform tutorial.
2017-01-18 12:54:26 +03:00
catree
00d2e279d7 Fix tutorial code link in basic_linear_transform tutorial. Add some resource links. 2017-01-17 17:47:27 +01:00
catree
e357e2c1b7 Fix typos in py_houghlines tutorial. Extract the python code in a specific folder. 2017-01-17 16:09:27 +01:00
Alexander Alekhin
1989d94ef5 Merge pull request #7941 from wykvictor:master 2017-01-17 14:34:04 +00:00
Vladislav Sovrasov
896c34fab3 Add support of type headings from YAML1.2 2017-01-17 16:40:38 +03:00
Alexander Alekhin
3668a01fca eliminate warnings
hal_internal.cpp(101): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
2017-01-17 15:56:42 +03:00
Alexander Alekhin
2b44c0b649 cmake: fix lapack
- added compile check with multiple tries for different configurations
- restored find_package(LAPACK)
- avoided modification of OPENCV_LINKER_LIBS
2017-01-17 15:56:42 +03:00
berak
89a740a62f Merge pull request #8019 from berak:patch-2
ml: fix small typo in lr.cpp (#8019)
2017-01-17 13:57:50 +03:00
logic1988
a8e5d1d9fd Merge pull request #7978 from logic1988:master
Fix error usage in HitMiss tutorial, and improved the visualization results (#7978)

* Fix error usage in HitMiss tutorial, and improved the visualization results

Fix error usage in HitMiss tutorial, and improved the visualization results

* Update HitMiss.cpp

* Update HitMiss.cpp
2017-01-16 13:19:24 +03:00
Nicholas Nadeau
256aa53326 Merge pull request #7994 from nnadeau:master
Fixed exceptions, print statements, and long types for gen_pattern.py to be Python 3 compatible (#7994)

* fixed exceptions and print statements to be python 3 compatible; removed long type checks (py3 uses int); whitespace reformatting

* Pulled latest svgfig from upstream

f3179a8926
2017-01-16 13:03:49 +03:00
Alexander Alekhin
5b363df2ae Merge pull request #8000 from mshabunin:fix-opencl-clahe 2017-01-16 10:01:59 +00:00
Vadim Pisarevsky
10e639cdb9 Merge pull request #7966 from Tetragramm:Issue#4235 2017-01-13 14:24:57 +00:00
mshabunin
8c66531c42 imgproc/CLAHE/ocl: Removed unnecessary __local variable 2017-01-13 16:25:43 +03:00
Alexander Alekhin
b7630a088b cmake: add global defines to enable useful macros 2017-01-13 14:30:19 +03:00
Alexander Alekhin
c9cedf3c5b Merge pull request #7998 from alalek:fix_7993 2017-01-12 16:57:25 +00:00
Alexander Alekhin
f94e64a0ae cuda: fix CUDA tests initialization 2017-01-12 16:15:52 +03:00
Tomoaki Teshima
8b22099da2 use universal intrinsic and SSE4 popcount instruction in normHamming
- add v_popcount in universal intrinsic
 - add test for v_popcount
 - add wrapper of popcount for both MSVC and GCC
2017-01-12 09:09:22 +09:00
Vadim Pisarevsky
0c8e069640 Merge pull request #7991 from sovrasov:cmake_find_mkl_x86_fix 2017-01-11 15:47:14 +00:00
LaurentBerger
587e9a554e remove new operator 2017-01-11 16:32:14 +01:00
Vladislav Sovrasov
7e99911c82 Fix MKL x86 detection on Windows 2017-01-11 17:18:21 +03:00
Vadim Pisarevsky
ec5038f2a7 Merge pull request #7947 from utibenkei:tracking-module-java 2017-01-11 11:41:19 +00:00
Alexander Alekhin
97f5d05d1f Merge pull request #7960 from catree:tutorial_parallel_for_
Add OpenCV parallel_for_ tutorial.
2017-01-11 12:58:53 +03:00
Alexander Alekhin
f4fdd94cf5 Merge pull request #7976 from StevenPuttemans:fix_opencv_annotation_tool 2017-01-11 04:40:43 +00:00
Tetragramm
7cc0b0f93e Add case including both moments empty. 2017-01-10 21:38:31 -06:00
catree
e16e141c38 Add OpenCV parallel_for_ tutorial. 2017-01-10 17:39:46 +01:00
Vadim Pisarevsky
65598e4075 Merge pull request #7972 from catree:tutorial_brightness 2017-01-10 12:26:20 +00:00
Vadim Pisarevsky
b345c6e552 Merge pull request #7935 from alalek:fix_waitKey 2017-01-10 11:18:13 +00:00
Vadim Pisarevsky
c0cde75d54 Merge pull request #7975 from tomoaki0705:cleanupCalib3dStereo 2017-01-10 11:12:15 +00:00
Vadim Pisarevsky
85474f581d Merge pull request #7983 from LaurentBerger:docFindcontours 2017-01-10 11:10:16 +00:00
Alexander Alekhin
e6d7989b20 Merge pull request #7986 from atinfinity:pullreq/170109-add_USE_AVX2_condition 2017-01-09 16:11:00 +00:00
Maksim Shabunin
406fe899d5 Merge pull request #7965 from D-Barber:stereoCalibrateR2T2CalculationTinyDocumentationFix 2017-01-09 13:16:38 +00:00
atinfinity
b3c77e664d added to check the support of AVX2 2017-01-09 19:51:33 +09:00
LaurentBerger
5e08d588f8 Merge branch 'master' of git://github.com/Opencv/opencv into UserColormap 2017-01-09 10:38:08 +01:00
LaurentBerger
e6f27240d5 dd a note in findcontours doc 2017-01-08 15:24:29 +01:00
StevenPuttemans
46fa9a6bd4 fix some issues with skipping files and old redundant code 2017-01-06 12:35:56 +01:00
Tomoaki Teshima
f1aae52daf clean up unused #if 2017-01-06 18:23:45 +09:00
Alexander Alekhin
45f0cf0d41 Merge pull request #7959 from alalek:fix_7957 2017-01-06 02:10:06 +00:00
catree
a891caa755 Use directly the doxygen snippet command for the Changing the contrast and brightness of an image tutorial. Extend the tutorial with a pratical example and with a gamma correction method to adjust the brightness of an image. 2017-01-05 18:31:03 +01:00
Tetragramm
d33d37ffd9 Add check for all zero moments. If one of the shapes is empty, the match would return zero distance between the shapes even when the other one had content. It now returns DBL_MAX if no moments had value. 2017-01-04 18:38:46 -06:00
Duncan Barber
1c3b9d7591 Tiny documentation fix in stereoCalibrate
Modified the (R2,T2) computation documentation in the stereoCalibrate function documentation to display on two lines for clarity
2017-01-04 21:24:25 +00:00
Alexander Alekhin
9be630466f Merge pull request #7948 from LorenaGdL:hitmiss_tutorial 2017-01-03 19:35:40 +00:00
Alexander Alekhin
fa36b9d345 imgproc: fix using of uninitialized edge[] members in FillConvexPoly 2017-01-03 22:18:27 +03:00
Lorena García
3650ec02be HitMiss tutorial 2017-01-03 18:34:04 +01:00
Bryce Evans
a85b4b5805 Merge pull request #7942 from bae43:fix-typos
Fix Documentation Typos (#7942)
2017-01-03 03:00:12 +00:00
Matt Bennett
c3a8db6d6c Merge pull request #7952 from mattmyne:JSONWriteFixTrailingDecimalPoint
Append zero to trailing decimal place for FileStorage JSON write of a float or double value (#7952)

* Fix for FileStorage JSON write of a float or double value that has no fractional part; appends a zero character after the trailing decimal place to meet JSON standard.

* strlen return to size_t type rather than unnecessary cast to int
2017-01-02 20:28:07 +00:00
Alexander Alekhin
23e53a32e5 Merge pull request #7950 from BadrinathS:firstbugfix-lr_opencv 2016-12-31 12:48:54 +00:00
BadrinathS
d1f727191f Resolving issue #7924 2016-12-31 16:37:51 +05:30
utibenkei
579ffbf97e Added Java wrapping for tracking module 2016-12-31 02:19:38 +09:00
Alexander Alekhin
3153450756 Merge pull request #7946 from SSteve:master 2016-12-30 10:35:22 +00:00
Steve
8a6fabed83 Avoid segmentation fault
Change `<=` to `<` to avoid accessing the first character of an empty string
2016-12-29 17:23:40 -08:00
Yakun Wang
c6f666a02b BufferPool is used for temporary buffer, use mat create directly 2016-12-29 18:29:44 +08:00
wykvictor
5fad2a3f24 Speedup MedianFilter::apply() when calling repeatedly
Speedup MedianFilter::apply(), avoid to newly create the two GpuMat every time calling filter->apply(), which is very time consuming.
2016-12-29 17:11:58 +08:00
Alexander Alekhin
d015b55e6b highgui: preserve waitKey -1 return value 2016-12-28 13:06:28 +03:00
LaurentBerger
a2f3692bff Merge branch 'master' of git://github.com/Opencv/opencv into UserColormap 2016-12-26 17:03:52 +01:00
Raj Natarajan
b7a053b0e5 Issue-7310: Updated imwrite doc to correct default setting for IMWRITE_PNG_COMPRESSION and clarified existing doc a bit. 2016-12-26 00:44:43 -06:00
Alexander Alekhin
7dd3723abe Merge tag '3.2.0' 2016-12-23 16:20:02 +03:00
Alexander Alekhin
70bbf17b13 OpenCV Version++
3.2.0
2016-12-23 15:54:44 +03:00
Vadim Pisarevsky
0bd68671bd restored OpenBLAS detection; fixed MKL's lapack header (#7921) 2016-12-23 15:40:51 +03:00
Alexander Alekhin
d0f883524e cmake(osx): fix CoreImage error (#7916) 2016-12-23 11:30:17 +03:00
Vadim Pisarevsky
ad74fdd7cc moved BLAS/LAPACK detection scripts from opencv_contrib/dnn to the main repository (#7918)
* moved BLAS/LAPACK detection scripts from opencv_contrib/dnn to the main repository.

* trying to fix the bug with undefined symbols sgesdd_ and dgesdd_

* removed extra whitespaces; disabled LAPACK on IOS
2016-12-22 22:57:44 +03:00
Alexander Alekhin
ce06fbdf77 Merge pull request #7901 from peterentwistle:fixClassifierTutorialLinks 2016-12-22 12:38:26 +00:00
Alexander Alekhin
090c46eca2 Merge pull request #7915 from alalek:CvMat 2016-12-22 12:36:37 +00:00
Alexander Alekhin
c3e409f950 ocl: update program cache defaults 2016-12-22 04:52:43 +03:00
Alexander Alekhin
dc31ddc80a photo: fix InputArray -> CvMat 2016-12-22 04:22:47 +03:00
Alexander Alekhin
ca6beb9ca8 calib3d: fix InputArray -> CvMat 2016-12-22 04:22:46 +03:00
Vitaly Tuzov
be7d060ea4 Merge pull request #7802 from terfendail:ovxhal_wrappers_migration
* OpenVX HAL updated to use generic OpenVX wrappers

* vxErr class from OpenVX HAL replaced with ivx::WrapperError

* reduced usage of vxImage class from OpenVX HAL replaced with ivx::Image

* vxImage class rewritten as ivx::Image subclass that calls swapHandle prior release

* Fix OpenVX HAL build

* Fix for review comments
2016-12-21 15:19:06 +02:00
StevenPuttemans
fdbc598e4c add new frontal face detection model, VISAPP2017 contribution 2016-12-21 10:49:03 +01:00
Pavel Rojtberg
40686b5e87 initUndistortRectifyMap: CV_32FC2 is also supported as m1type 2016-12-20 10:22:32 +01:00
Peter Entwistle
b3900c5dfe Fixed broken links in the cascade classifier tutorial 2016-12-19 23:22:08 +00:00
Alexander Alekhin
a4db9833f7 Merge pull request #7885 from alalek:release-3.2.0-rc 2016-12-19 17:59:14 +00:00
Alexander Alekhin
ece08374a1 Merge pull request #7838 from khnaba:morphology-32f 2016-12-19 16:22:03 +00:00
Vadim Pisarevsky
c64ac42b27 Merge pull request #7852 from savuor:fix/orb_rotation 2016-12-19 16:19:38 +00:00
Vadim Pisarevsky
01de65c2e9 Merge pull request #7887 from kevinhughes27:traincascade-baseformat-fix 2016-12-19 16:18:42 +00:00
Alexander Alekhin
8d6500be20 Merge pull request #7687 from apavlenko:vx-hal 2016-12-19 15:57:36 +00:00
Kevin Hughes
0d32bec5c3 add the type_id to the old save format 2016-12-19 09:40:32 -05:00
apavlenko
2312131e27 moving HAL-related CMakeLists.txt to 'hal' sub-dir 2016-12-19 17:30:19 +03:00
apavlenko
bbfbdd9da1 moving hal to a separate folder 2016-12-19 17:30:19 +03:00
Alexander Alekhin
ccd32f6608 Merge pull request #7897 from alalek:fix_ffmpeg_check
cmake: fix ffmpeg check code (port into master #7893)
2016-12-19 16:18:49 +02:00
Alexander Alekhin
7a95e654eb ocl: update compiled programs
- minimize library initialization time (lazy calculations of program hash)
- LRU cache of in-memory compiled programs
2016-12-19 17:17:20 +03:00
Alexander Alekhin
d85c11e525 OpenCV version++
3.2.0-rc
2016-12-19 17:12:18 +03:00
Alexander Alekhin
3e1695d6e3 cmake: fix ffmpeg check code 2016-12-19 17:05:30 +03:00
Alexander Alekhin
2638abe12b Merge pull request #7694 from sergiud:cmake-config-optional-components 2016-12-19 13:53:36 +00:00
Alexander Alekhin
86bb523991 Merge pull request #7871 from savuor:fix/openvx_cvt_on 2016-12-19 13:51:53 +00:00
Alexander Alekhin
5a07e102fa Merge pull request #7896 from alalek:fix_add_testdata 2016-12-19 13:49:23 +00:00
Vadim Pisarevsky
ae9f80c1a9 Merge pull request #7855 from logic1988:master 2016-12-19 13:45:51 +00:00
Alexander Alekhin
35308bc45f cmake: fix CMake error
"install DIRECTORY does not allow "COMPONENT" after PATTERN or REGEX."
2016-12-19 14:58:56 +03:00
Alexander Alekhin
07004a46ca Merge pull request #7773 from savuor:openvx_harris 2016-12-19 11:39:38 +00:00
Alexander Alekhin
05d187ec90 ocl: move deprecated code from ocl.cpp 2016-12-19 00:34:50 +03:00
Sergiu Deitsch
d71ec0cd1d cmake: support OPTIONAL_COMPONENTS in OpenCVConfig.cmake
find_package allows to specify optional components. This way, the
command will not fail if any of the components marked as optional was
not found. This is useful in cases where components such as xfeatures2d,
viz etc. are not available either because they were not compiled by the
user or package maintainers decided to not provide the packages at all.

The user can check the availability of the optional component using the
OpenCV_<component>_FOUND variable.
2016-12-19 00:15:51 +03:00
Alexander Alekhin
85e01f3ffe Merge pull request #7884 from jacobdang:bugfix_7846 2016-12-17 18:31:58 +00:00
jacobdang
dd482c6a29 bug fix for #7846 2016-12-17 21:48:29 +08:00
Alexander Alekhin
9e57d1ae34 Merge pull request #7881 from alalek:unpack_into_binary 2016-12-17 12:23:02 +00:00
Alexander Alekhin
6a537e3986 Merge pull request #7882 from savuor:fix/ovx_pyrlk_err 2016-12-17 07:33:33 +00:00
Rostislav Vasilikhin
328151c8a4 don't run OpenVX pyrLK if user asked for err vector 2016-12-16 23:38:47 +03:00
Rostislav Vasilikhin
fcdbe16252 openvx_cvt disabled for Khronos, fixed sstep and dstep usage 2016-12-16 23:00:55 +03:00
logic1988
de059567d7 Update inner_functions.cpp
Fix #4958 cv::ml::StatModel::calcError not working for responses of type CV_32S
2016-12-16 20:01:07 +03:00
Alexander Alekhin
ef08110182 Merge pull request #7880 from sovrasov:rtrees_disable_kfold 2016-12-16 16:46:57 +00:00
Alexander Alekhin
862c3aa6e1 Merge pull request #7873 from addisonElliott:Mat_Range_InitializerList 2016-12-16 16:45:17 +00:00
Alexander Alekhin
c9237a6f48 cmake: unpack IPPICV into binary directory 2016-12-16 18:43:54 +03:00
Rostislav Vasilikhin
13b9dd3963 fixed segfault at ORB::compute() near image's border 2016-12-16 18:36:37 +03:00
Alexander Alekhin
0a4694d6e0 Merge branch '2.4' into master 2016-12-16 17:04:32 +03:00
Alexander Alekhin
0e4dde1781 Merge pull request #7872 from alalek:merge-2.4 2016-12-16 16:03:14 +02:00
Vladislav Sovrasov
d2e5bea1fb Disable training of RTrees when CVFolds > 0 2016-12-16 16:39:44 +03:00
Alexander Alekhin
c7ae26bf24 Merge pull request #7879 from alalek:backport_7852 2016-12-16 13:19:58 +00:00
Alexander Alekhin
a206e12174 Merge pull request #7876 from mshabunin:fix-sgbm-memory 2016-12-16 13:09:04 +00:00
Rostislav Vasilikhin
cf5e976fad OpenVX convert enabled 2016-12-16 15:57:21 +03:00
Rostislav Vasilikhin
a2646062b2 ivx::Scalars replaced by immediate values 2016-12-16 15:44:31 +03:00
Rostislav Vasilikhin
1e2ad7e3e3 rewritten for new macro use 2016-12-16 15:44:31 +03:00
Rostislav Vasilikhin
ee77538cf9 disabled due to bad accuracy 2016-12-16 15:44:31 +03:00
Rostislav Vasilikhin
3f1734bbc7 fixed type checks in wrappers; array downloading code simplified 2016-12-16 15:44:31 +03:00
Rostislav Vasilikhin
77f99358df fix vxCommitArrayRange() call 2016-12-16 15:44:31 +03:00
Rostislav Vasilikhin
5f4112a1cf added initial version of wrapper for Harris corner detection 2016-12-16 15:44:31 +03:00
Vadim Pisarevsky
75eeb25c1e Merge pull request #7866 from alalek:update_waitKey 2016-12-16 12:25:11 +00:00
Rostislav Vasilikhin
8444c23803 fixed segfault at ORB::compute() near image's border 2016-12-16 14:55:15 +03:00
Rostislav Vasilikhin
969c55da58 Merge pull request #7720 from savuor:openvx_FAST
Added OpenVX based processing to FAST (#7720)

* added wrapper for OVX FAST & fixes to IVX wrappers

* fixed type checks in wrappers, array downloading code simplified

* rewritten for new macro use
2016-12-16 13:48:18 +02:00
Alexander Alekhin
c038d1be60 Merge pull request #7858 from addisonElliott:master 2016-12-16 10:57:27 +00:00
Rostislav Vasilikhin
faefbf93bc Merge pull request #7793 from savuor:openvx_pyrDown
OpenVX pyrDown wrappers (#7793)

* wrappers for vx_pyramid added

* initial version of pyrDown() wrapper added

* disabled for Khronos

* rewritten for new macro use; border mode added to node
2016-12-16 12:48:58 +02:00
Rostislav Vasilikhin
5372c8b331 Merge pull request #7774 from savuor:openvx_pyrlk
OpenVX optical flow PyrLK wrappers added (#7774)

* wrappers for vx_pyramid added

* initial version of Optical Flow PyrLK wrappers added

* array downloading code simplified

* disabled due to bad accuracy; fixed bugs, e.g. vendor-specific ones

* rewritten for new macro use
2016-12-16 12:46:03 +02:00
Alexander Alekhin
9c7088d95f Merge pull request #7851 from terfendail:ovx_imagespace 2016-12-16 10:37:04 +00:00
Alexander Alekhin
a615d79f2d Merge pull request #7768 from terfendail:ovx_remap 2016-12-16 10:33:58 +00:00
LaurentBerger
8415b907bb warnings 2 2016-12-16 09:23:21 +01:00
LaurentBerger
f92c9ddb43 warning 2 2016-12-16 09:09:39 +01:00
LaurentBerger
1f724e2e8a warnings 2016-12-16 08:33:31 +01:00
LaurentBerger
5ad02d7a9a Add sample 2016-12-15 22:55:59 +01:00
LaurentBerger
d8fdf9321d mend 2016-12-15 22:49:37 +01:00
Alexander Alekhin
f7d956ea3e Merge pull request #7869 from alalek:icc
Build with ICC
2016-12-15 19:21:18 +02:00
Alexander Alekhin
22df206e1f Merge pull request #7875 from alalek:winpack_fix_2.4
cmake: update PDB support condition
2016-12-15 18:47:41 +02:00
Alexander Alekhin
b06bd50144 cmake: update PDB support condition
Unfortunately there is no stable support for installation of PDB files in CMake.
This patch is just eliminate problems with modern versions.
2016-12-15 19:13:44 +03:00
Alexander Alekhin
cc09f5a7de Merge pull request #7854 from alalek:backports_2016
(2.4) Backports from master branch (#7854)
2016-12-15 18:09:44 +02:00
Alexander Alekhin
49e6bb2993 Merge pull request #7868 from alalek:icc_2.4
(2.4) Build with ICC
2016-12-15 18:09:17 +02:00
Alexander Alekhin
667cb2e9fc Merge pull request #7867 from alalek:cuda_warnings_2.4
(2.4) Fix CUDA warnings
2016-12-15 18:09:12 +02:00
mshabunin
bfde5cdde0 SGBM: fixed uninitialized memory in cost buffer 2016-12-15 19:08:14 +03:00
Addison Elliott
eb04b2bfa9 Added N-dim submat selection with vectors
Currently, to select a submatrix of a N-dimensional matrix, it requires
two lines of code while only one line of code is required if using a 2D
array.

I added functionality to be able to select an N-dim submatrix using a
vector list instead of a Range pointer. This allows initializer lists to
be used for a one-line selection.
2016-12-15 09:16:40 -06:00
Alexander Alekhin
a8c7a1029e Merge pull request #7817 from savuor:openvx_pyrWrap 2016-12-15 14:56:06 +00:00
Maksim Shabunin
7d5fd6a800 Merge pull request #7812 from alalek:fix_putText 2016-12-15 13:33:56 +00:00
Alexander Alekhin
041502e42c build: eliminate ICC warnings 2016-12-15 16:03:15 +03:00
Alexander Alekhin
737fa519d1 test: use relative error in HOG tests 2016-12-15 15:58:16 +03:00
Alexander Alekhin
ceb5210bfb build: eliminate ICC PCH warning 2016-12-15 15:58:16 +03:00
Alexander Alekhin
dbbbad40fb build: eliminate ICC warnings 2016-12-15 15:57:40 +03:00
Alexander Alekhin
540ece74a5 cmake: support ICC warnings 2016-12-15 15:57:27 +03:00
Alexander Alekhin
3fc06f14d4 cmake: use -fp-model precise with ICC 2016-12-15 15:56:31 +03:00
Alexander Alekhin
d206e84a13 cmake: use -fp-model precise with ICC 2016-12-15 15:50:30 +03:00
Alexander Alekhin
03beff06ff build: disable warnings (Ubuntu 16.04 + CUDA 8.0)
Examples:
- NPP_staging.cu:1606:105: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
- NCVHaarObjectDetection.hpp:95:37: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
2016-12-15 15:47:41 +03:00
StevenPuttemans
6d34d6b47e update samples: waitKey() usage
Original commit is a5f19f7dd6
2016-12-15 15:39:47 +03:00
Cartucho
fcddfa4f86 GSoC 2016 - Adding ALIASES for tutorial (#7041)
* GSoC 2016 - Adding toggle files to be used by tutorials.

Add a toggle option for tutorials.
* adds a button on the HTML tutorial pages to switch between blocks
* the default option is for languages: one can write a block
for C++ and another one for Python without re-writing the tutorial

Add aliases to the doxyfile.
* adding alises to make a link to previous and next tutorial.
* adding alias to specify the toggle options in the tutorials index.
* adding alias to add a youtube video directly from link.

Add a sample tutorial (mat_mask_opertaions) using the developed aliases:
* youtube alias
* previous and next tutorial alias
* buttons
* languages info for tutorial table of content
* code referances with snippets (and associated sample code files)

* Removing the automatic ordering.
Adding specific toggles for cpp, java and python.
Move all the code to the footer / header and Doxyfile.
Updating documentation.
2016-12-15 15:32:12 +03:00
Rostislav Vasilikhin
45d3286168 wrappers for vx_pyramid added 2016-12-15 15:00:26 +03:00
Alexander Alekhin
4e7b521438 highgui: change waitKey() default behaviour
The old behaviour is available via waitKeyEx() call or
via setting of OPENCV_LEGACY_WAITKEY environment variable
2016-12-15 14:17:38 +03:00
LaurentBerger
4826d976d6 Suppress warning unused parameter 2016-12-15 10:51:08 +01:00
LaurentBerger
61b9484155 ApplyColorMap can be used with a user colormap 2016-12-15 10:17:05 +01:00
Addison Elliott
fa6692afcf Added new overloaded functions for Mat and UMat that accepts std::vector<int> instead of int * for the sizes on a N-dimensional array.
This allows for an N-dimensional array to be setup in one line instead of two when using C++11 initializer lists. cv::Mat(3, {zDim, yDim, xDim}, ...) can be used instead of having to create an int pointer to hold the size array.
2016-12-14 13:52:03 -06:00
Alexander Alekhin
36b5abf6b7 Merge pull request #7857 from savuor:openvx_macro_wrappers 2016-12-14 16:40:09 +00:00
Alexander Alekhin
059c2a8328 Merge pull request #7856 from mshabunin:long-tests 2016-12-14 15:52:23 +00:00
Maksim Shabunin
daa97021bd Merge pull request #7810 from parismita:patch-1 2016-12-14 14:54:53 +00:00
Rostislav Vasilikhin
8b9422a052 OpenVX wrappers rewritten with CV_OVX_RUN, VX_DbgThrow 2016-12-14 17:49:41 +03:00
mshabunin
f5bf1e510b Test run script: added long test filter for valgrind 2016-12-14 17:16:08 +03:00
Alexander Alekhin
5592142511 Merge pull request #7831 from terfendail:ovx_array_update 2016-12-14 14:08:47 +00:00
Vitaly Tuzov
3c5eb513dd Fixed OpenVX to OpenCV compatibility for NN remap 2016-12-14 16:53:07 +03:00
Vitaly Tuzov
f8b4d28745 Added OpenVX based processing to remap 2016-12-14 16:53:04 +03:00
Vitaly Tuzov
138f0cbf3c Added wrapper for IMAGE_SPACE attribute setter 2016-12-14 15:40:50 +03:00
Alexander Alekhin
53f72f18f5 Merge pull request #7853 from mshabunin:fix-doc-warning
Documentation fixes for latest doxygen
2016-12-14 13:52:27 +02:00
mshabunin
965deaba8d Documentation fixes for latest doxygen 2016-12-14 14:14:13 +03:00
Alexander Alekhin
8b92151ef0 Merge pull request #7832 from alalek:install_docs_target 2016-12-14 11:05:04 +00:00
Alexander Alekhin
7db13c7aab Merge pull request #7847 from alalek:install_docs_target_2.4 2016-12-14 11:01:57 +00:00
Alexander Alekhin
af0ee306cf Merge pull request #7819 from alalek:fix_mulSpectrums_inplace_2.4 2016-12-14 11:00:54 +00:00
Maksim Shabunin
1451f7d0ec Merge pull request #7848 from rjray-nvidia:cuda_tegra_tutorial_update_1 2016-12-14 10:21:13 +00:00
Alexander Alekhin
19c8cc8f13 Merge pull request #7760 from terfendail:ovx_histogram 2016-12-14 03:20:30 +00:00
Alexander Alekhin
8f83d97adc Merge pull request #7800 from paroj:fisheye_undist 2016-12-14 03:17:49 +00:00
Alexander Alekhin
c977af8ee8 Merge pull request #7843 from chacha21:fix-capture-msmf 2016-12-14 02:47:19 +00:00
Randy J. Ray
dd99b7c1cb Further editing/refinement of the tutorial.
This is based on testing OpenCV 3.1 with VisionWorks, which identified issues.
The tutorial now specifies 3 cherry-pick commands for opencv.
2016-12-13 10:54:10 -08:00
Alexander Alekhin
7241b90dec cmake: special target to build/install docs only 2016-12-13 20:13:06 +03:00
Vitaly Tuzov
2c89b39eee Added OpenVX based processing to calcHist 2016-12-13 18:33:02 +03:00
Alexander Alekhin
a24ebc9952 Merge pull request #7840 from alalek:fix_test_rng 2016-12-13 11:29:53 +00:00
Alexander Alekhin
7a3b5b308c Merge pull request #7790 from sovrasov:convexity_defects_enable_small_hulls 2016-12-13 10:33:56 +00:00
Alexander Alekhin
fbf2383d5d Merge pull request #7787 from alalek:ocl_explicit_only 2016-12-13 10:22:33 +00:00
Alexander Alekhin
cb1d4e692b Merge pull request #7801 from alalek:fix_7795 2016-12-13 10:20:31 +00:00
Alexander Alekhin
188ccac2f3 Merge pull request #7837 from sovrasov:solvepnp_ransac_error_thresh_fix 2016-12-13 10:17:40 +00:00
Alexander Alekhin
069d51d23b Merge pull request #7836 from sovrasov:akaze_fix_detect_only_mode 2016-12-13 10:14:42 +00:00
Alexander Alekhin
1473f032b7 Merge pull request #7839 from sovrasov:mser_python_sample_update 2016-12-13 10:11:55 +00:00
chacha21
166d75e3c5 Fix for unhandled error cases when using Media Foundation
Some function calls to Media Foundation can fail and retrun null
pointers. They should be checked before being dereferenced to avoid a
crash.
2016-12-13 10:40:06 +01:00
Vladislav Sovrasov
12383a124b Disable error throwing in convexityDefects when hull is a line or point 2016-12-13 12:28:38 +03:00
bedbad
ffcf866e2f Merge pull request #7754 from LAZI-2240:toupstream2.4
Introducing boundingRect2f() (#7754)

* Introducing boundingRect2f to return exact bounding float rectangle for RotatedRect

* Introducing boundingRect2f to return exact bounding float rectangle for RotatedRect

* Introducing boundingRect2f() - update

* Introducing boundingRect2f to return exact bounding float rectangle for RotatedRect

* Introducing boundingRect2f() - update - tested
2016-12-12 21:29:53 +02:00
Alexander Alekhin
34c07f6aaf Merge pull request #7729 from apavlenko:vx-canny 2016-12-12 19:14:39 +00:00
Alexander Alekhin
ec859ceb2c test: limit chessboard generator parameters 2016-12-12 18:09:52 +03:00
apavlenko
3aedc134c2 replacing white noise with fruits picture 2016-12-12 17:55:11 +03:00
Alexander Alekhin
fb223784a6 test: fix Core_HAL.mat_decomp test implementation 2016-12-12 14:47:38 +03:00
Alexander Alekhin
03bcfe4107 test: fix RNG problem in accuracy tests 2016-12-12 14:40:52 +03:00
Vladislav Sovrasov
21683a550a Update MSER python sample 2016-12-12 14:17:25 +03:00
Naba Kumar
a5d857eda8 Update docs for 32f support in morphology operation 2016-12-12 12:38:43 +02:00
Naba Kumar
3f7cde0485 Implement 32f support for morphology operation 2016-12-12 12:25:27 +02:00
Vladislav Sovrasov
120531cb46 Fix error threshhold in SolvePnPRansac 2016-12-12 13:22:44 +03:00
Vladislav Sovrasov
4a3da1c4ed Fix missing angles in AKAZE keypoints 2016-12-12 12:28:16 +03:00
Alexander Alekhin
7bceef715c test: fix mulSpectrums error tolerance 2016-12-10 18:38:05 +03:00
Alexander Alekhin
26fbaada0a cmake: disable warning C4127 for MSVS < 2015 2016-12-10 18:38:05 +03:00
Alexander Alekhin
2fded5d8fb Merge pull request #7822 from alalek:fix_arithmmask_test 2016-12-09 19:02:30 +00:00
Alexander Alekhin
5f57d0295e Merge pull request #7818 from catree:solvePnP_doc 2016-12-09 19:01:15 +00:00
parismita
f55e966210 Update linux_install.markdown
Update linux_install.markdown

Update linux_install.markdown

Update linux_install.markdown

Update linux_install.markdown

Update linux_install.markdown

Update linux_install.markdown
2016-12-09 23:04:54 +05:30
Alexander Alekhin
c98330b2d1 cmake: special target to build/install docs only 2016-12-09 20:04:35 +03:00
Vitaly Tuzov
c447e5f615 Added vxTruncateArray wrapper to ivx::Array 2016-12-09 17:48:06 +03:00
catree
a93c70f533 Add note about solvePnP methods that cannot be used.
Add note: SOLVEPNP_EPNP will be used instead of SOLVEPNP_DLS and instead of SOLVEPNP_UPNP.
2016-12-09 13:15:52 +01:00
apavlenko
a99118c4c7 moving CannyVX test from ocl to cpp file 2016-12-09 15:07:53 +03:00
apavlenko
4246d3667f disabling again 2016-12-09 14:53:06 +03:00
apavlenko
76c38f0c80 trying to enable canny_vx adding a new test comparing canny_cv vs canny_vx 2016-12-09 14:53:06 +03:00
apavlenko
f3ec56fcee fixing build errors 2016-12-09 14:53:06 +03:00
apavlenko
541d5b02d9 disabling due to accuracy issues 2016-12-09 14:53:06 +03:00
apavlenko
ccd8031a33 fixing compilation 2016-12-09 14:53:06 +03:00
apavlenko
1e2ddc30b1 Canny via OpenVX, Node wrapper extended (query/set attribute), some naming fixes 2016-12-09 14:53:06 +03:00
Alexander Alekhin
98181e9d7f imgproc/drawing: minor refactoring in FillConvexPoly 2016-12-08 22:14:32 +03:00
Alexander Alekhin
7e0f1ec00a test: putText regression garbage test 2016-12-08 22:14:31 +03:00
Alexander Alekhin
bcbe2f123f test: move more drawing tests 2016-12-08 22:14:30 +03:00
Alexander Alekhin
781ab3d481 test: minor refactoring in test_drawing 2016-12-08 22:14:29 +03:00
Alexander Alekhin
beea04cc89 Merge pull request #7826 from mshabunin:fix-base64-issue 2016-12-08 17:01:33 +00:00
Alexander Alekhin
48bff3bfd3 Merge pull request #7748 from LaurentBerger:Normalize3d 2016-12-08 16:20:11 +00:00
Alexander Alekhin
a1d68ff361 Merge pull request #7820 from catree:imread_doc 2016-12-08 15:27:50 +00:00
Alexander Alekhin
5cc2d7ad7c Merge pull request #7771 from alalek:ffmpeg_update 2016-12-08 15:22:00 +00:00
Alexander Alekhin
6946f510fe mulSpectrums: refactor code 2016-12-08 18:03:14 +03:00
mshabunin
e941259434 Persistence: fixed valgrind warning in base64 decoder 2016-12-08 14:58:18 +03:00
Randy J. Ray
036dd8d48f Contribute a tutorial on building for NVIDIA Tegra (#7814)
* Contribute a tutorial on building for NVIDIA Tegra

* Clean-up and fixes based on feedback.
2016-12-08 11:50:59 +03:00
Alexander Alekhin
ee265962b2 test: move test_drawing into imgproc module 2016-12-07 22:04:25 +03:00
Alexander Alekhin
79857f1e38 test: fix Core_ArithmMask.uninitialized test
Don't run binary operations for floating-point numbers
norm() will fail with NAN result.
2016-12-07 21:44:17 +03:00
catree
c4d4158bd8 Add imread documentation note when EXIF orientation is embedded. 2016-12-07 18:08:18 +01:00
Alexander Alekhin
62c9ff25e5 core: added inplace check in 'divSpectrums' 2016-12-07 19:59:16 +03:00
Alexander Alekhin
ab429d2e73 test: fix inplace in 'mulComplex' from test_dxt 2016-12-07 19:55:40 +03:00
Alexander Alekhin
21f3531b17 core: fix inplace support in mulSpectrums 2016-12-07 19:42:34 +03:00
Alexander Alekhin
7be4a0ee2f Merge pull request #7809 from alalek:backport_7797 2016-12-07 16:20:45 +00:00
Alexander Alekhin
25727454d9 Merge pull request #7807 from alalek:ipp_build_fix_2.4 2016-12-07 16:00:20 +00:00
Maksim Shabunin
29f5294fd2 Merge pull request #7808 from alalek:backport_7767 2016-12-07 14:01:38 +00:00
Maksim Shabunin
cf97e6e00f Merge pull request #7806 from alalek:backport_7640 2016-12-07 14:00:41 +00:00
Maksim Shabunin
bc96997410 Merge pull request #7805 from alalek:fix_java_test_2.4 2016-12-07 13:58:32 +00:00
Maksim Shabunin
2341222672 Merge pull request #7804 from alalek:fix_java_test 2016-12-07 13:57:25 +00:00
Alexander Alekhin
d37106e008 Merge pull request #7789 from pengli:gaussian_blur 2016-12-07 09:15:45 +00:00
Patrik Huber
c6af179afc Added VS2017 support (MSVC 1910) 2016-12-06 20:22:59 +03:00
Alexander Alekhin
300f92397e Merge pull request #7797 from patrikhuber:add-vs2017 2016-12-06 17:20:56 +00:00
Maksim Shabunin
ab260dafd2 Fixed Intel C++ 17 build in VS2015 2016-12-06 20:18:32 +03:00
Alexander Alekhin
10d1b33a80 perf: remove tvl1 check for magic numbers, reduce number of samples 2016-12-06 20:10:40 +03:00
Alexander Alekhin
a05444618c test: tvl1 test check update 2016-12-06 20:10:40 +03:00
Alexander Alekhin
d42d155c16 java: fix PATH environment variable 2016-12-06 20:07:30 +03:00
Alexander Alekhin
61792a839f java: fix PATH environment variable 2016-12-06 20:01:06 +03:00
Rostislav Vasilikhin
695b20172b Merge pull request #7794 from savuor:fix/ovx_cvt_continuous
Fixed OpenVX wrapper for Mat::convertTo() (#7794)

* fixed for cases of unrolled (w*h x 1) matrices

* more error handling
2016-12-06 18:29:44 +02:00
Rostislav Vasilikhin
cb46946d34 Merge pull request #7782 from savuor:fix/ivx_types
Several fixes for OpenVX wrappers (#7782)

* Several fixes added to ivx.hpp:
* `#include <VX/vxu.h>`
* `vx_keypoint_t` support added
* type check fixed
* fixed Node::create() for >6 args in c++98
* fixed Array::copyFrom() if array is empty
* type check changed; Array::addItem methods changed
2016-12-06 18:08:33 +02:00
Alexander Alekhin
fef94315af core: exp/log workaround for MSVS 2016-12-06 16:57:35 +03:00
Pavel Rojtberg
2bfcbe1459 fisheye::undistortPoints: sanitize theta values
the current camera model is only valid up to 180° FOV for larger FOV the
undistort loop does not converge.
Clip values so we still get plausible results for super fisheye images >
180°.
2016-12-06 14:16:37 +01:00
Alexander Alekhin
2d28bb4171 ipp: disable compilation with IPP 9+ 2016-12-06 16:04:35 +03:00
Li Peng
396921dd23 5x5 gaussian blur optimization
Add new 5x5 gaussian blur kernel for CV_8UC1 format,
it is 50% ~ 70% faster than current ocl kernel in the perf test.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-12-06 09:42:37 +08:00
Patrik Huber
bd0a8c7e3f Added VS2017 support (MSVC 1910) 2016-12-06 00:04:24 +00:00
Alexander Alekhin
37cbcf024c Merge pull request #7788 from Kotrix:patch-1 2016-12-05 12:00:08 +00:00
Kotrix
10ccd0328c Removed redundant calculations
Operations inside for loops are unnecessary. They are repeated anyway just below for loops
2016-12-04 20:28:56 +01:00
Alexander Alekhin
c48d7f86ba Merge pull request #7786 from alalek:cuda_warnings 2016-12-04 09:47:39 +00:00
Alexander Alekhin
fefc348040 Merge pull request #7783 from alalek:fix_7746_2 2016-12-04 09:46:34 +00:00
Alexander Alekhin
0724d13bcd build: cuda warnings 2016-12-04 03:10:05 +03:00
Alexander Alekhin
44d9d59f08 ocl: stop using of OpenCL without explicit UMat arguments 2016-12-04 02:34:17 +03:00
Alexander Alekhin
380cc520f3 build: fix cuda tests 2016-12-03 13:17:37 +03:00
Alexander Alekhin
4a095e4d66 Merge pull request #7777 from alalek:test_refactor 2016-12-02 20:09:56 +00:00
Alexander Alekhin
5025ca497c Merge pull request #7778 from mshabunin:fix-persistence-valgrind 2016-12-02 17:35:16 +00:00
Alexander Alekhin
5032dae9ed test: refactor test to capture more information on failure
Core_ArithmMask.uninitialized
2016-12-02 18:54:27 +03:00
mshabunin
a0e771f545 Fixed valgrind issues in persistence functions 2016-12-02 18:41:25 +03:00
Vadim Pisarevsky
b87cee8b9a Merge pull request #7454 from terfendail:ovxhal_integral 2016-12-02 15:25:02 +00:00
Vadim Pisarevsky
f84dc354f6 Merge pull request #7564 from terfendail:ovx_gaussianfilter 2016-12-02 15:24:03 +00:00
Vadim Pisarevsky
537db2d53f Merge pull request #7598 from terfendail:ovx_lut 2016-12-02 15:22:06 +00:00
Alexander Alekhin
39ca6a0137 ffmpeg: update Windows binaries
Versions:
- ffmpeg 3.2.1 (was 3.1.3)
- openh264 1.6.0 (was 1.5.0)
- libvpx 1.6.0 (was 1.5.0)
2016-12-02 15:47:15 +03:00
Vitaly Tuzov
afc7396975 Added OpenVX based processing to gaussianBlur 2016-12-02 14:46:12 +03:00
Vitaly Tuzov
ced81f72bc Added OpenVX based processing to LUT 2016-12-02 14:36:47 +03:00
Alexander Alekhin
49194023b5 ffmpeg: remove compatibility glue code 2016-12-02 14:18:40 +03:00
Alexander Alekhin
025ceb4d27 Merge pull request #7764 from pengli:pyr_up 2016-12-02 11:05:15 +00:00
Alexander Alekhin
a09288c673 Merge pull request #7772 from mshabunin:tbb-arm-fix 2016-12-02 11:03:40 +00:00
mshabunin
2e8b9b1891 Fixed TBB build on Android armeabi 2016-12-02 12:24:42 +03:00
Li Peng
b69cdb2434 Image pyramids upsampling optimization
Add new ocl kernel for image pyramids upsampling,
It is 35% faster than current OCL kernel in perf test.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-12-02 13:54:58 +08:00
Alexander Alekhin
3ae1990727 Merge pull request #7769 from alalek:cmake_ffmpeg_cleanup 2016-12-01 20:24:05 +00:00
Alexander Alekhin
735f5a01ec Merge pull request #7492 from straywarrior:fix-cudev-headers-with-opencv_world 2016-12-01 20:20:14 +00:00
Vadim Pisarevsky
5e75503fc2 Merge pull request #7750 from alalek:ts_find_or_skip 2016-12-01 18:10:18 +00:00
Vadim Pisarevsky
4f7453be86 Merge pull request #7763 from jrheard:patch-1 2016-12-01 18:04:55 +00:00
Vadim Pisarevsky
c99097f89a Merge pull request #7478 from terfendail:ovx_boxfilter 2016-12-01 17:57:46 +00:00
Vadim Pisarevsky
b0d2217c65 Merge pull request #7515 from terfendail:ovxhal_graytobgr 2016-12-01 17:56:51 +00:00
Vadim Pisarevsky
1d45726f47 Merge pull request #7588 from terfendail:ovx_medianblur 2016-12-01 17:54:34 +00:00
Vadim Pisarevsky
e623e710be Merge pull request #7597 from terfendail:ovx_threshold 2016-12-01 17:53:38 +00:00
Vadim Pisarevsky
32f48a8d9c Merge pull request #7631 from savuor:openvx_accumulate 2016-12-01 17:49:18 +00:00
Vadim Pisarevsky
924ac10159 Merge pull request #7649 from terfendail:ovx_meanstddev 2016-12-01 17:46:30 +00:00
Vadim Pisarevsky
0a775e43e1 Merge pull request #7659 from savuor:openvx_convert_depth 2016-12-01 17:44:49 +00:00
Vadim Pisarevsky
8968318dfc Merge pull request #7668 from savuor:openvx_equalize_hist 2016-12-01 17:43:44 +00:00
Vadim Pisarevsky
ddc5155a85 Merge pull request #7677 from terfendail:ovx_minmaxloc 2016-12-01 17:42:18 +00:00
Alexander Alekhin
39ff8a0d26 cmake: cleanup ffmpeg detection 2016-12-01 19:33:27 +03:00
Vadim Pisarevsky
817a17b218 Merge pull request #7767 from mshabunin:icl-support 2016-12-01 16:30:42 +00:00
Alexander Alekhin
5985d71657 Merge pull request #7757 from mshabunin:tbb-search 2016-12-01 15:42:53 +00:00
Maksim Shabunin
19959cbfc9 Fixed Intel C++ 17 build in VS2015 2016-12-01 18:02:50 +03:00
Alexander Alekhin
b5b3a0474d Merge pull request #7761 from UnaNancyOwen:add_props 2016-12-01 14:32:53 +00:00
mshabunin
695c518384 Updated TBB search script and code checks 2016-12-01 16:58:38 +03:00
Alexander Alekhin
e547bbbc3f videoio: preserve conflict with common properties
Usage:
    writer.set(cv::CAP_PROP_IMAGES_BASE + cv::IMWRITE_JPEG_QUALITY, 80);
2016-12-01 15:37:12 +03:00
Alexander Alekhin
c560ff23ad videoio: images: fix buffer overflow problem 2016-12-01 15:24:36 +03:00
JR Heard
47f53b675d fix a typo in the canny docs 2016-11-30 16:52:28 -08:00
Alexander Alekhin
46a333ed94 Merge pull request #7755 from pengli:warp_image 2016-11-30 20:43:11 +00:00
Tsukasa Sugiura
e4985f604a Add support image save parameters in VideoWriter
Add support image save parameters in cv::VideoWriter.
This change will become available setting same parameters as
cv::imwrite() to cv::VideoWriter::set( cv::IMWRITE_*, value ).
2016-12-01 00:55:00 +09:00
Alexander Alekhin
5b85adaab1 Merge pull request #7756 from terfendail:ovx_linkage 2016-11-30 10:16:12 +00:00
Alexander Alekhin
45e18eed29 Merge pull request #7751 from sim642:capture-pref-v4l 2016-11-30 10:05:16 +00:00
Vitaly Tuzov
6d55e99291 Added OpenVX based processing to boxFilter 2016-11-30 11:27:25 +03:00
Vitaly Tuzov
179a6e0cca OpenVX wrappers linkage fix 2016-11-30 11:25:45 +03:00
Li Peng
2ca5a7e862 more optimization for warpAffine and warpPerspective
Add new OpenCL kernels for bicubic interploation, it is 20% faster
than current warp image kernel with bicubic interploation.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-30 15:43:41 +08:00
Alexander Alekhin
71b2409df0 ts: added findDataFile() utility function and SkipTestException 2016-11-29 23:17:39 +03:00
Simmo Saan
6c524e8444 Allow V4L, V4L2 to be used as preferred capture API 2016-11-29 21:31:34 +02:00
Vadim Pisarevsky
3d8395cae9 Merge pull request #7743 from alalek:cmake_ffmpeg_cleanup_2.4 2016-11-29 17:35:12 +00:00
Vadim Pisarevsky
c47267ef7f Merge pull request #7538 from Tetragramm:CLAHEfix 2016-11-29 16:42:05 +00:00
Vadim Pisarevsky
57aaec1ee8 Merge pull request #7610 from terfendail:ovx_sobel 2016-11-29 16:40:10 +00:00
Vitaly Tuzov
78b80b6abd Added wrappers for OpenVX context attributes and setter for convolution scale attribute (#7732) 2016-11-29 09:34:46 -07:00
Rostislav Vasilikhin
0ac934d09a added OpenVX call to equalizeHist() function 2016-11-29 17:53:47 +03:00
Rostislav Vasilikhin
7c2734ff14 added OpenVX calls to accumulate(), accumulateSquare(), accumulateWeighted() 2016-11-29 17:53:35 +03:00
Rostislav Vasilikhin
2b56b174e8 fixed: data types, empty input case 2016-11-29 17:52:50 +03:00
Rostislav Vasilikhin
0a6958813c added OpenVX call to Mat::convertTo() (w/o scaling) 2016-11-29 17:52:36 +03:00
Vitaly Tuzov
a4b9eb23d1 Added OpenVX based processing to meanStdDev 2016-11-29 16:59:25 +03:00
Vitaly Tuzov
0cd3788624 Added OpenVX based processing to threshold 2016-11-29 15:35:52 +03:00
Vitaly Tuzov
e9cc0f6a4c Added OpenVX based processing to minMaxLoc 2016-11-29 15:33:48 +03:00
Vitaly Tuzov
9200db778c Added OpenVX based processing to medianBlur 2016-11-29 15:32:07 +03:00
Vitaly Tuzov
e8f3469096 Added OpenVX based processing to Sobel 2016-11-29 15:29:00 +03:00
Alexander Alekhin
90b52cd9b8 Merge pull request #7726 from pengli:warp_image 2016-11-29 12:19:18 +00:00
Alexander Alekhin
159b29e9b1 Merge pull request #7747 from alalek:fix_cuda_test 2016-11-29 12:15:08 +00:00
LaurentBerger
c56c0e140b Solve exception for 3D Mat 2016-11-29 12:10:33 +01:00
Li Peng
b72d196753 optimization for warpAffine and warpPerspective
Add new ocl kernels for warpAffine and warpPerspective,
The average performance improvemnt is about 30%. The new
ocl kernels require CV_8UC1 format and support nearest
neighbor and bilinear interpolation.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-29 14:55:58 +08:00
Alexander Alekhin
4a7d441b37 test: fix cuda build 2016-11-29 01:18:10 +03:00
Vadim Pisarevsky
be0865406f Merge pull request #7548 from tomoaki0705:fixRngAvoidFmadd 2016-11-28 21:04:03 +00:00
Vadim Pisarevsky
2af4dc7249 Merge pull request #7741 from alalek:cmake_remove_legacy_pkgconfig 2016-11-28 20:55:29 +00:00
Vadim Pisarevsky
5cead19006 Merge pull request #7742 from alalek:backport_5884 2016-11-28 20:53:27 +00:00
Vadim Pisarevsky
7e38a2f0bb Merge pull request #7739 from alalek:fix_gtk_deprecated_2.4 2016-11-28 16:39:17 +00:00
Alexander Alekhin
2c03c8d71f Update googletests 1.8.0 (20160822) (#7738)
* restore Google Test 1.7.0 (get patch)

* ts: update Google Test to 1.8.0 release

https://github.com/google/googletest

* ts: re-apply OpenCV patch for gtest

* ts: fixes for gtest 1.8.0

* ts: workaround MSVS2015 problem in gtest
2016-11-28 19:10:12 +03:00
Vadim Pisarevsky
35db7f67e0 Merge pull request #7745 from ColinFinck:master 2016-11-28 16:09:42 +00:00
Michele Cancilla
89a0a46a69 Removed parallel version for CV_16U label type 2016-11-28 14:54:44 +01:00
Vitaly Tuzov
ff2747dff5 Added wrappers for OpenVX context attributes and setter for convolution scale attribute 2016-11-28 13:02:36 +03:00
Colin Finck
e8f591143c objdetect: Properly check for C++11 as it's done in the matching .cpp file. Fixes #7623 2016-11-28 10:15:16 +01:00
Alexander Alekhin
32f568308a cmake: cleanup ffmpeg detection 2016-11-28 00:21:46 +03:00
Alexander Alekhin
5ac15f09ed cmake: add DEBUG_PRE/DEBUG_POST commands handling
Useful for debug purposes:
    cmake -DDEBUG_POST="ocv_cmake_dump_vars(CUDA)" .
    cmake -DCMAKE_PRE="ocv_cmake_dump_vars(\"OPENCL|opencl\")" .
2016-11-27 21:31:23 +03:00
Alexander Alekhin
36d7712c2c cmake: CMakeVars.txt (for debugging purpose) 2016-11-27 21:23:15 +03:00
Alexander Alekhin
e5041abe55 cmake: remove outdated pkg-config module 2016-11-27 20:56:30 +03:00
Alexander Alekhin
90da593316 highgui: g_thread_create deprecated warning 2016-11-26 18:12:04 +03:00
Alexander Alekhin
e04eb8cc04 Merge pull request #7735 from alalek:ts_cv_enum_static_fiasco 2016-11-26 08:15:56 +00:00
Alexander Alekhin
fa757ebd92 Merge pull request #7734 from alalek:fix_gtk_deprecated 2016-11-26 08:14:45 +00:00
Alexander Alekhin
ac118aee78 Merge pull request #7733 from alalek:debug_check_matrelease_2.4 2016-11-26 08:13:38 +00:00
Alexander Alekhin
954082d891 Merge pull request #7730 from alalek:fix_contrib_872 2016-11-26 08:11:59 +00:00
Alexander Alekhin
f6d5a1dd2c Merge pull request #7727 from alalek:backport_7536 2016-11-26 08:10:29 +00:00
Alexander Alekhin
1a3f1a31b2 ts: CV_ENUM fix static initialization order fiasco 2016-11-26 03:05:32 +03:00
Alexander Alekhin
3f37e34e76 highgui: g_thread_create deprecated warning 2016-11-26 03:01:39 +03:00
Alexander Alekhin
56ed8b1721 calib3d: fix fisheye for test fisheyeTest.stereoCalibrateFixIntrinsic 2016-11-26 02:43:39 +03:00
Alexander Alekhin
e878b60dbc core: drop type/dims/rows/cols information in Mat::release() 2016-11-26 02:43:05 +03:00
Vitaly Tuzov
8098e5b045 Added OpenVX based implementation for Gray2BGR conversion HAL API 2016-11-25 20:59:20 +03:00
Alexander Alekhin
7dc673fd56 imgproc: fix findContours (submatrix input) 2016-11-25 18:25:26 +03:00
Vadim Pisarevsky
a53f93ff8d Merge pull request #7710 from alalek:debug_check_matrelease 2016-11-25 14:24:23 +00:00
Michele Cancilla
4b7fc59332 Fixed _P reserved variable name problem and changed getNumThreads with getNumberOfCPUs 2016-11-25 13:25:17 +01:00
Alexander Alekhin
b38d29b2e4 Merge pull request #7721 from apavlenko:vx-fix-build-1.0.1 2016-11-25 10:02:36 +00:00
Alexander Alekhin
7ad8e378ce Merge pull request #7719 from paroj:calib_ret 2016-11-25 09:22:08 +00:00
Alexander Alekhin
11b642fb8c viz: eliminate warnings from tutorial code 2016-11-25 09:07:38 +03:00
Alexander Alekhin
6fb75c677b viz: update for VTK6.2+
PCL PR 1205
2016-11-25 09:07:26 +03:00
Alexander Alekhin
4a759abe39 Revert "Fix for VTK6.2 issue."
This reverts commit f45da9866a.
2016-11-25 09:07:04 +03:00
Alexander Alekhin
88ef8c996e Merge pull request #7709 from alalek:fix_java_tests 2016-11-24 16:15:56 +00:00
Alexander Alekhin
979b0ae9ce Merge pull request #7711 from alalek:fix_java_tests_2.4 2016-11-24 16:14:25 +00:00
Alexander Alekhin
408e4a7c27 Merge pull request #7708 from alalek:cmake_ccache_2.4 2016-11-24 16:12:46 +00:00
apavlenko
f5f91ed7f6 eliminating conflict with ivx.hpp 2016-11-24 18:48:51 +03:00
Michele Cancilla
5b23c0b176 Fixed unnecessary black spaces;
Extended parallel version to all frameworks supported by OpenCV;
Added some documentation notes in modules/imgproc/include/opencv2/imgproc.hpp;
2016-11-24 15:03:36 +01:00
Pavel Rojtberg
e1503cc29e calibrateCamera: specifiy what kind of re-projection error is returned 2016-11-24 14:02:01 +01:00
Vitaly Tuzov
12e0bc0fe7 Added wrappers for vx_matrix and vx_convolution (#7651) 2016-11-24 15:02:12 +03:00
Alexander Alekhin
4c5c722939 Merge pull request #7718 from guoxuedong:updateExifReader 2016-11-24 10:34:17 +00:00
guoxuedong
e69253a4fb Update exif.cpp
ExifReader::getExif may enter infinite loop with jpeg image which have no EOI.
For example, bytesToSkip may be set to 0 and fseek seems like fseek(f, -2 , SEEK_CUR) for image that end with RST7(FF D7) instead of EOI.
2016-11-24 11:08:11 +08:00
Alexander Alekhin
4fd00c1ae1 Merge pull request #7714 from onixie:master
Fix docs explaining the returnPoints argument of convexHull.
2016-11-23 17:44:05 +03:00
Rostislav Vasilikhin
7db43f9fff fixed wrong equivalence in YUV conversion (#7481)
* fixed wrong equivalence in YUV conversion

* fixed channel order from YVU to YUV
2016-11-23 17:39:18 +03:00
Vadim Pisarevsky
b8c875d4a1 Merge pull request #7707 from K-Shinotsuka:issue37 2016-11-23 14:15:02 +00:00
Alexander Alekhin
da75d129fe java: fix Calib3d test 2016-11-23 15:49:24 +03:00
Alexander Alekhin
a3bfa6f566 cmake: ccache 2016-11-23 15:07:58 +03:00
monoid911
b879126584 Fix docs explaining the returnPoints argument of convexHull. 2016-11-23 20:43:52 +09:00
Alexander Alekhin
8e22b17919 java: backport test changes from master 2016-11-23 14:26:22 +03:00
Alexander Alekhin
0bdea2b714 core: fix absdiff (non-optimized, fp) to prevent "-0" results 2016-11-23 13:55:38 +03:00
Alexander Alekhin
8019498c6e java tests fixes 2016-11-23 13:53:00 +03:00
Alexander Alekhin
fe29080d59 java: skip test in case of missed classes from opencv_contrib 2016-11-23 13:53:00 +03:00
Alexander Alekhin
d65df72754 java: fix testIsSubmatrix test 2016-11-23 13:51:37 +03:00
Alexander Alekhin
a936cb087e calib3d: fix fisheye for test fisheyeTest.stereoCalibrateFixIntrinsic 2016-11-23 13:51:37 +03:00
Alexander Alekhin
69949025db core: drop type/dims/rows/cols information in Mat::release() 2016-11-23 13:51:37 +03:00
Alexander Alekhin
8d662a1a28 Merge pull request #7640 from alalek:fix_test_tvl1 2016-11-23 10:50:30 +00:00
k-shinotsuka
284006e336 add NEON code for RGB2Luv_f. 2016-11-23 19:18:41 +09:00
Alexander Alekhin
8151be9abc Merge pull request #7163 from savuor:openvx_sample 2016-11-22 19:10:48 +00:00
Vadim Pisarevsky
c1ee798213 Merge pull request #7662 from K-Shinotsuka:issue34 2016-11-22 13:57:13 +00:00
Rostislav Vasilikhin
f89ea6d7fa hide info warnings 2016-11-22 16:49:46 +03:00
apavlenko
1c9262dce4 hiding silly warnings 2016-11-22 16:49:46 +03:00
Rostislav Vasilikhin
fa8add8686 compilation fixed for C++98 2016-11-22 16:49:46 +03:00
Andrey Pavlenko
bfecea489e warnings in ivx.hpp fixed
* fixing 1.0.1

* fixing build without c++11

* hiding warnings
2016-11-22 16:49:46 +03:00
Rostislav Vasilikhin
d7db220196 "no previous declaration" warnings fixed in samples 2016-11-22 16:49:46 +03:00
Andrey Pavlenko
289d879d48 build fixes for openvx-1.0.1 and c++03
* fixing 1.0.1
* fixing build without c++11
2016-11-22 16:49:46 +03:00
Rostislav Vasilikhin
2c63d2bd72 changed image creation from handle 2016-11-22 16:49:46 +03:00
apavlenko
e8d2aad978 sugar for single plane images 2016-11-22 16:49:46 +03:00
Rostislav Vasilikhin
9032a7ab81 minor fixes in samples and ivx.hpp 2016-11-22 16:49:46 +03:00
Rostislav Vasilikhin
5c969d1972 interoperability OpenVX samples added 2016-11-22 16:49:46 +03:00
Vadim Pisarevsky
af22b6c4a9 Merge pull request #7664 from K-Shinotsuka:issue35 2016-11-22 13:49:14 +00:00
Vadim Pisarevsky
b54bc2db1e Merge pull request #7665 from K-Shinotsuka:issue36 2016-11-22 13:44:42 +00:00
Vadim Pisarevsky
81fc6b3fde Merge pull request #7621 from terfendail:ovxhal_resizefix 2016-11-22 13:39:20 +00:00
Vadim Pisarevsky
3f224abb37 Merge pull request #7646 from alalek:cmake_ccache 2016-11-22 13:35:44 +00:00
Vadim Pisarevsky
9638dfcd85 Merge pull request #7641 from alalek:warnings 2016-11-22 13:31:26 +00:00
Vadim Pisarevsky
af8e6b06f7 Merge pull request #7689 from alalek:warnings_2.4 2016-11-22 13:30:25 +00:00
Vadim Pisarevsky
54d215902f Merge pull request #7627 from sovrasov:fs_vec_of_vec 2016-11-22 12:40:22 +00:00
Vadim Pisarevsky
511c0c2e71 Merge pull request #7688 from alalek:fix_orb_test 2016-11-22 11:35:07 +00:00
Alexander Alekhin
7b13550bdd Merge pull request #7697 from alalek:backport_6561 2016-11-22 11:01:29 +00:00
Michele Cancilla
0bc9a0db18 Improvement of sequential connected components Wu's algorithm and provide parallel version of both Wu's and Grana's algorithms (using TBB library) 2016-11-22 11:42:13 +01:00
Vadim Pisarevsky
7adb52b427 Merge pull request #7699 from alalek:test_hog_eps 2016-11-22 10:19:52 +00:00
Alexander Alekhin
9cdab426b1 Merge pull request #7702 from lupustr3:pvlasov/ipp2017_filter_fix 2016-11-22 09:49:17 +00:00
Vadim Pisarevsky
62b2039040 Merge pull request #7698 from alalek:backport_perf_gabor 2016-11-21 14:42:54 +00:00
Pavel Vlasov
dfb9c574a4 IPP 2017 filter2D fix;
filter2D IPP runtime check;
2016-11-21 17:18:03 +03:00
Alexander Alekhin
771fa5b8ac test: change EPS in Objdetect_HOGDetector tests 2016-11-21 14:59:06 +03:00
Alexander Alekhin
f21f153a5f test: backport check for Image_KernelSize_GaborFilter2d perf test 2016-11-21 14:56:51 +03:00
Tomoaki Teshima
3ea4f72e35 fix Core_MulSpectrum test on 64bit ARM + release mode
* fix issue 6536
  * increase threshold in particular tests due to the difference of fmsub and fsub
2016-11-21 14:52:29 +03:00
LaurentBerger
fb456eb69c Merge pull request #7691 from LaurentBerger:I7676
* Solve issue 7676

* I7676 bis
2016-11-21 04:28:59 +03:00
Arek
866f8eb1e7 Merge pull request #7695 from ArkadiuszRaj:aravis-release-bug-fix
* Aravis: fixing releasing object when no communication with camera is possible

* Removing unnecessary include
2016-11-21 04:22:43 +03:00
Alexander Alekhin
b1c8557401 Merge pull request #7690 from alalek:backport_arm_toolchain 2016-11-20 11:38:01 +00:00
Alexander Alekhin
0a543c5531 test: fix Legacy_StereoGC.regression assertion 2016-11-18 22:32:32 +03:00
Alexander Alekhin
a42be1f9bd backport ARM toolchain from master 2016-11-18 15:36:16 +03:00
Alexander Alekhin
19270eeab4 warnings 2016-11-18 15:31:59 +03:00
Alexander Alekhin
497d0fd2e7 build: OSSpinLock deprecation warning 2016-11-18 15:31:14 +03:00
Maksim Shabunin
21167b1bf1 Fixed several GCC 5.x warnings 2016-11-18 15:31:05 +03:00
Alexander Alekhin
39d7ecc93b perf: disabled checks for magic numbers
Results are not bit-exact
2016-11-18 15:20:18 +03:00
Alexander Alekhin
dac37a0bc9 features2d: update rotation invariance test
Don't process keypoints near border, because after rotation border points
have contrast gradients with rotation border fill.
2016-11-18 15:20:03 +03:00
Alexander Alekhin
30807b26c7 Merge pull request #7644 from alalek:cmake_python_install 2016-11-18 12:19:00 +00:00
Alexander Alekhin
14d2046f80 cmake: ccache 2016-11-18 15:09:44 +03:00
Alexander Alekhin
30cdcfa554 warnings 2016-11-18 14:08:53 +03:00
Alexander Alekhin
40aa8aa862 ffmpeg: check return value 2016-11-18 13:26:19 +03:00
Alexander Alekhin
12569dc730 Merge pull request #7625 from souch55:Fixapi 2016-11-17 17:54:25 +00:00
Alexander Alekhin
a19cb20b23 Merge pull request #7673 from pengli:deriv 2016-11-17 09:40:27 +00:00
Li Peng
6cb73356b1 laplacian ocl kernel optimization
This ocl kernel is 46%~171% faster than current laplacian 3x3
ocl kernel in the perf test, with image format "CV_8UC1".

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-17 12:01:02 +08:00
Vitaly Tuzov
e6f2729c7a Replaced magic constant in large image handling check 2016-11-16 17:55:04 +03:00
Andrey Pavlenko
1f1dc42534 Merge pull request #7681 from apavlenko:ivx-docs
OpenVX C++ wrappers docs (#7681)

* adding wrapper headers to the project to see them in IDE project explorer

* readme

* doxygen: toplevel brief-s

* more doxygen

* more doxygen
2016-11-16 17:05:08 +03:00
Vladislav Sovrasov
7c266ffffe Add support of vector of vectors serialization to FileStorage 2016-11-16 13:37:30 +03:00
Alexander Alekhin
876c2c0efd Merge pull request #7678 from dec1:tag_3.0.0 2016-11-15 19:35:38 +00:00
Alexander Alekhin
4d041e6809 Merge pull request #7672 from dec1:2.4 2016-11-15 19:01:46 +00:00
Alexander Alekhin
c3f0ee0768 Merge pull request #7675 from filnet:msys2 2016-11-15 15:59:27 +00:00
k-shinotsuka
cf5c400ecb add SSE code for RGB2HLS_f. 2016-11-16 00:46:13 +09:00
Declan Moran
4d84e6efee fix compiler error when building with gnu-5 toolchain (eg as currently shipped with crystax.org android ndk, and presumably soon with android studio).
"ts_perf.cpp ....error: 'errno' was not declared in this scope
      int err=errno;"
2016-11-15 16:35:11 +01:00
Declan Moran
a49e50a33b fix error when building android sample:
https://github.com/opencv/opencv/issues/7590
2016-11-15 15:02:10 +01:00
Philippe Renon
e79f83e573 calib3d: fix missing cv::redirectError symbol error
happens on msys2 with gcc 6.2.0
see also http://stackoverflow.com/questions/38552221/undefined-reference-to-cvredirecterror-while-creating-shared-build-of-opencv-3
2016-11-15 08:56:01 +01:00
sourin
94b5a74067 Fixed with review comments. 2016-11-15 12:16:15 +05:30
Alexander Alekhin
8f4251fbfa Merge pull request #7655 from alalek:backport_7213 2016-11-14 13:42:31 +00:00
Alexander Alekhin
c93fb14dd2 Merge pull request #7653 from pengli:deriv 2016-11-14 13:40:04 +00:00
Alexander Alekhin
ad888c80cf Merge pull request #7643 from alalek:libpng_aarch64 2016-11-14 13:38:44 +00:00
Alexander Alekhin
099be88f02 Merge pull request #7638 from ArkadiuszRaj:move-exif-from-jpeg-to-loadsave 2016-11-14 13:37:42 +00:00
Juha Reunanen
5bb08bae28 Merge pull request #7464 from reunanen:test-7409-7458
Change contour test images to be very wide (#7464)

* Change contour test images to be very wide (#7409, #7458)

Unfortunately, slows down the tests.

* Decrease the number of contour test cases, in order to (at least partially) offset the test run duration increase caused by making the test images wider

* Don't test with very wide images on 32-bit architectures
2016-11-14 16:31:29 +03:00
Li Peng
8d4a7d3dcc sobel and scharr ocl kernel optimization
It improves 108%~230% performance in the perf test
with image format "CV_8UC1" and kernel size 3.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-14 15:34:59 +08:00
k-shinotsuka
a909527a39 add SSE code for HLS2RGB_f. 2016-11-14 01:44:33 +09:00
k-shinotsuka
614ce7743e add SSE code for HSV2RGB_f. 2016-11-13 23:46:21 +09:00
Vadim Pisarevsky
a679e4ca7c Merge pull request #7656 from alalek:python_warning 2016-11-11 20:37:38 +00:00
Vadim Pisarevsky
b587c57b2a Merge pull request #7654 from souch55:Fixgtk 2016-11-11 20:35:24 +00:00
Vadim Pisarevsky
6b7d570c34 Merge pull request #7539 from Tetragramm:90DegreeRotations 2016-11-11 20:30:25 +00:00
Vadim Pisarevsky
6df723e42d Merge pull request #7645 from alalek:cmake_arm_toolchain 2016-11-11 20:27:41 +00:00
Vadim Pisarevsky
c3fc115551 Merge pull request #7642 from alalek:plantuml 2016-11-11 15:06:56 +00:00
Alexander Alekhin
a88b94cc44 build: fix warning in python parser
/usr/lib/python3.5/re.py:203: FutureWarning: split() requires a non-empty pattern match.
  return _compile(pattern, flags).split(string, maxsplit)
2016-11-11 17:45:12 +03:00
Vadim Pisarevsky
4ebdf4938a Merge pull request #7634 from paroj:undistpt 2016-11-11 14:13:18 +00:00
Vadim Pisarevsky
4f8c3d7d97 Merge pull request #7648 from alalek:cmake_warnings 2016-11-11 14:09:11 +00:00
Alexander Alekhin
64a2d1904b ffmpeg: backport 7213
Commit:
  6d54abbd0f
2016-11-11 16:57:10 +03:00
sourin
879315f2fe Fix error gtk 2016-11-11 10:55:38 +05:30
Tetragramm
24379fcb5f Use transpose() as suggested, because it works on pre-existing destination Mats. 2016-11-10 21:35:00 -06:00
Vitaly Tuzov
9eac0f0575 Completely disabled OpenVX based implementation of resize HAL API 2016-11-10 20:55:28 +03:00
Vitaly Tuzov
88ea9f5dd7 Fix for OpenVX based implementation of resize HAL API 2016-11-10 20:55:27 +03:00
Vitaly Tuzov
850d12ae69 Completely disabled OpenVX based implementation of warp HAL API 2016-11-10 20:55:26 +03:00
Vitaly Tuzov
cd1b324e5e Fix for OpenVX based implementation of wrapAffine HAL API 2016-11-10 20:55:26 +03:00
Vitaly Tuzov
ca1ce5fa5c Fix for large image handling in OpenVX based implementation of HAL API 2016-11-10 20:55:25 +03:00
Alexander Alekhin
acaa1e1b29 Merge pull request #7628 from sergiud:viz-vtkUnsignedCharArray-delete 2016-11-10 17:04:04 +00:00
Alexander Alekhin
b2e0873af1 Merge pull request #7629 from alalek:issue_7626 2016-11-10 16:35:08 +00:00
Vadim Pisarevsky
a2d6d96ef1 Merge pull request #7161 from terfendail:shortline_fix 2016-11-10 16:02:20 +00:00
Vadim Pisarevsky
67c404632a Merge pull request #7556 from terfendail:ovxhal_101compl 2016-11-10 15:56:01 +00:00
Alexander Alekhin
04ddbf565e cmake: eliminate configuration warnings 2016-11-10 18:36:07 +03:00
Alexander Alekhin
fddc9c5839 cmake: ARM toolchain: find ld/ar 2016-11-10 18:00:32 +03:00
Alexander Alekhin
cc121e06de cmake: ARM toolchain: do not force compiler version 2016-11-10 17:58:42 +03:00
Alexander Alekhin
edcbc15a90 cmake: python installation
Also fixes issue with empty PYTHON_PACKAGES_PATH (cross-compilation mode)
2016-11-10 17:53:53 +03:00
Alexander Alekhin
a50bc7d824 cmake: fix libpng for AARCH64 2016-11-10 17:50:52 +03:00
Arkadiusz Raj
40778fa30a Change name to minimize confusion 2016-11-10 15:31:34 +01:00
Arkadiusz Raj
4a9c84c570 Add static to local function 2016-11-10 15:04:28 +01:00
Alexander Alekhin
3e0252ebcc docs: drop plantuml support 2016-11-10 16:29:04 +03:00
Alexander Alekhin
45bf60d18c perf: remove tvl1 check for magic numbers, reduce number of samples 2016-11-10 15:41:44 +03:00
Alexander Alekhin
a01a4c4b3b test: tvl1 test check update 2016-11-10 15:39:18 +03:00
Andrey Pavlenko
bdf661538d Merge pull request #7550 from apavlenko:ivx
C++ wrappers over OpenVX 1.x API (#7550)

* initial commit

* fixing missing swap(refcount) bug

* removing dead code

* fixinf identation

* splitting c++98 and external refcount definitions

* fixing formatToMatType

* using vector instead of initializer_list for consistency with c++98 API

* IVX_HIDE_INFO_WARNINGS

* just in case a compiler doesn't do this

* removing copy functionality from ImagePatch, Image can be used for that

* stricter type checks
2016-11-10 14:43:08 +03:00
Vitaly Tuzov
26899bb345 OpenVX 1.0.1 compliance update 2016-11-10 14:04:02 +03:00
Arkadiusz Raj
f893ee5cec Added IMREAD_IGNORE_ORIENTATION flag 2016-11-09 18:09:22 +01:00
Pavel Rojtberg
3609343acf undistortPoints: only consider distCoeffs if present
iters should be 0 if we have no distortion. Also skip tilt distortion in
that case.
Furthermore move variable declarations to usage sites.
2016-11-09 16:11:26 +01:00
Alexander Alekhin
6991c24a27 Merge pull request #7632 from paroj:homgpt_int 2016-11-09 14:55:10 +00:00
Alexander Alekhin
17ffb28807 Merge pull request #7602 from mshabunin:fix-opencl-warnings 2016-11-09 12:35:00 +00:00
Pavel Rojtberg
25061b4280 convertPointsToHomogeneous: fix output type for depth == CV_32S 2016-11-09 11:35:12 +01:00
Alexander Alekhin
f1d93cb23b Merge pull request #7624 from pengli:gaussian_blur 2016-11-09 09:25:25 +00:00
Alexander Alekhin
b2fa82ffcd Merge pull request #7618 from lupustr3:pvlasov/instrumentation_update 2016-11-08 15:37:03 +00:00
Alexander Alekhin
183c75358b imgproc: fix trailingZeros for MSVS 2010 2016-11-08 16:48:41 +03:00
Sergiu Deitsch
d4b501e734 viz: free new[] allocated arrays using delete[] instead of free
Clang's AddressSanitizer throws an alloc-dealloc-mismatch (operator
new[] vs free) error here.
2016-11-08 13:03:22 +01:00
Pavel Vlasov
349d5ba012 --perf_instrument parameter now has int type and 0, 1, 2 modes (1 - simple trees, 2 - expanded trees for functions with same name but different calling address);
Maximum depth limit var was added to the instrumentation structure;

Trace names output console output fix: improper tree formatting could happen;
Output in case of error was added;

Custom regions improvements;

Improved timing and weight calculation for parallel regions; New TC (threads counter) value to indicate how many different threads accessed particular node;

parallel_for, warnings fixes and ReturnAddress code from Alexander Alekhin;
2016-11-08 10:18:05 +03:00
Li Peng
8f63f51e81 gaussian blur ocl kernel optimization
This ocl kernel is for 3x3 kernel size and CV_8UC1 format
It is 115% ~ 300% faster than current ocl path in perf test

python ./modules/ts/misc/run.py -t imgproc --gtest_filter=OCL_GaussianBlurFixture*

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-08 11:22:26 +08:00
Alexander Alekhin
442380bfac Merge pull request #7585 from pengli:morph_filter 2016-11-07 17:11:32 +00:00
mshabunin
3e28d51779 Fixed several OpenCL compiler warnings 2016-11-07 16:49:12 +03:00
Li Peng
35198b84a4 morph ocl kernel for erode and dilate filter
This kernel is for CV_8UC1 format and 3x3 kernel size,
It is about 33% ~ 55% faster than current ocl kernel with below perf test

python ./modules/ts/misc/run.py -t imgproc --gtest_filter=OCL_ErodeFixture*
python ./modules/ts/misc/run.py -t imgproc --gtest_filter=OCL_DilateFixture*

Also add accuracy test cases for this kernel, the test command is

./bin/opencv_test_imgproc --gtest_filter=OCL_Filter/MorphFilter3x3*

Signed-off-by: Li Peng <peng.li@intel.com>
2016-11-04 12:24:24 +08:00
Tetragramm
17df65e666 Fix the OpenCL portion to match the c++ code.
Fix an undiscovered bug in the c++ code.
2016-11-03 20:41:16 -05:00
Alexander Alekhin
d1bbc0b6e6 Merge pull request #7604 from rokm:highgui-qt 2016-11-03 19:24:52 +00:00
Tomoaki Teshima
676736bdb2 avoid using fmadd in RNG 2016-11-03 23:11:52 +09:00
Vadim Pisarevsky
3dc022ae84 Merge pull request #7423 from grahamfyffe:leading_edges 2016-11-03 11:20:43 +00:00
Alexander Alekhin
712fa9a73c Merge pull request #7605 from tomoaki0705:fixBuildFp16Error 2016-11-03 07:41:42 +00:00
Tetragramm
ad5c50a923 Improve the efficiency as suggested by vpisarev.
Alter the Rotation enum to be unambiguous as to direction.
2016-11-02 17:44:13 -05:00
Vadim Pisarevsky
280cdb5b94 Merge pull request #7595 from sovrasov:fs_utf8_bom 2016-11-02 15:27:48 +00:00
Tomoaki Teshima
9ee6f10896 fix build error 2016-11-02 23:18:58 +09:00
Vadim Pisarevsky
6fceb1dd59 Merge pull request #7601 from sovrasov:remap_big_img_assert 2016-11-02 14:17:04 +00:00
Vadim Pisarevsky
545f573a6c Merge pull request #7596 from sovrasov:doc_core_clarify 2016-11-02 13:32:14 +00:00
Vadim Pisarevsky
bebd49d91b Merge pull request #7467 from tomoaki0705:featureCheckSimdUniversal 2016-11-02 12:30:55 +00:00
Vadim Pisarevsky
050731c4d2 Merge pull request #7552 from es0m:master 2016-11-02 12:12:09 +00:00
Rok Mandeljc
baf613bc5c highgui: window_QT: added missing virtual method specifier
Fixes #7603, which was caused by OCVViewPort::icvmouseProcessing
not being declared as virtual, and hence was not overriden by
DefaultViewPort::icvmouseProcessing (which does the inverse
coordinate mapping).
2016-11-02 13:11:51 +01:00
Vladislav Sovrasov
e955d17c51 Add new error messages 2016-11-02 14:53:56 +03:00
Vladislav Sovrasov
38483fe7a7 Skip UTF-8 BOM in FileStorage 2016-11-02 14:51:07 +03:00
Vladislav Sovrasov
af01267f23 Add assertion to prevent processing of large images in remap 2016-11-02 14:17:56 +03:00
Vladislav Sovrasov
33d82da436 Clarify documentation for cv::Algorithm::read 2016-11-02 13:51:16 +03:00
Vadim Pisarevsky
f632f5c552 Merge pull request #7529 from alalek:backport_7526 2016-11-02 10:50:45 +00:00
Vadim Pisarevsky
8944875258 Merge pull request #7526 from alalek:fix_arm_builds 2016-11-02 10:49:43 +00:00
Vadim Pisarevsky
94d879737b Merge pull request #7582 from K-Shinotsuka:issue32 2016-11-02 10:48:29 +00:00
Vadim Pisarevsky
01f355dfaa Merge pull request #7583 from K-Shinotsuka:issue33 2016-11-02 10:47:33 +00:00
Vadim Pisarevsky
7dd99258c7 Merge pull request #7584 from tomoaki0705:fixFp16BuildOldCompiler 2016-11-02 10:43:34 +00:00
k-shinotsuka
a7db950b66 add SSE code for Lab2RGB_f. 2016-11-01 22:33:58 +09:00
Alexander Alekhin
6c12533160 Merge pull request #7571 from panxiaochun:CvVideoCamera_stop 2016-10-31 17:35:41 +00:00
Alexander Alekhin
811eb76277 Merge pull request #7497 from abratchik:java.wrapper.fix.3.1 2016-10-31 17:24:18 +00:00
Tomoaki Teshima
6d460bb602 fix build error on old compiler
* vget_lane_** accepts constant value, not variable
2016-10-31 23:20:44 +09:00
Eric Sommerlade
752b10e410 fixed _MSC_VER check for at least vs2013 in dbt_face_detection sample 2016-10-31 13:48:41 +00:00
Eric Sommerlade
72e4e9d43d fixed _MSC_VER check for vs2013 in dbt_face_detection sample 2016-10-31 13:46:22 +00:00
Alexander Alekhin
25f740ea5a Merge pull request #7589 from alalek:fix_perf_stitching 2016-10-31 12:10:13 +00:00
Eric Sommerlade
62c28c5b92 Merge branch 'master' of https://github.com/es0m/opencv 2016-10-31 11:10:01 +00:00
Eric Sommerlade
049a894986 fixed detection_based_tracker on visual studio 2013 and later
modules/objectdetect/src/detection_based_tracker.cpp: made unique_lock<mutex> local to each function
samples/cpp/dbt_face_detection.cpp: fixed warnings on loop in Visual Studio
2016-10-31 11:07:09 +00:00
Alexander Alekhin
522cfa77b8 test: don't check magic values in stitching perf test 2016-10-31 13:37:59 +03:00
E Sommerlade
d00dcb1b3a reversed mysterious mode change 2016-10-31 09:47:44 +00:00
abratchik
f978ee613e fix for #7510, #7511 and #7512 2016-10-31 11:07:56 +04:00
abratchik
78874c568e fix java wrapper autotests 2016-10-31 10:06:32 +04:00
Alexander Alekhin
4c66772783 Merge pull request #7516 from sovrasov:find_contours_fix 2016-10-30 08:33:12 +00:00
Alexander Alekhin
51f2b27bcb Merge pull request #7574 from Tytan:expcomp_before_seams 2016-10-30 08:28:36 +00:00
k-shinotsuka
c1c7c7f83e add SSE code for Luv2RGB_f. 2016-10-30 14:50:18 +09:00
Vadim Pisarevsky
7fe0fb6be7 Merge pull request #7580 from seanlis:wrong_diag_comment 2016-10-29 21:30:26 +00:00
Vadim Pisarevsky
7b532cea89 Merge pull request #7540 from K-Shinotsuka:issue31 2016-10-29 21:28:25 +00:00
Vadim Pisarevsky
2b7866f21b Merge pull request #7503 from pengli:box_filter_v2 2016-10-29 21:20:06 +00:00
Vadim Pisarevsky
b077d6a192 Merge pull request #7549 from StevenPuttemans:add_sample_content 2016-10-29 21:13:38 +00:00
Sean Li
6f3483ade3 Correct the comment of Mat::diag(const Mat& d). 2016-10-29 16:01:23 +08:00
k-shinotsuka
992795d47d add SSE code for RGB2Luv_f. 2016-10-29 15:28:31 +09:00
Tomoaki Teshima
cba22349b7 add universal hardware support check function
* use hasSIMD128 rather than calling checkHardwareSupport
  * add SIMD check in spartialgradient.cpp
  * add SIMD check in stereosgbm.cpp
  * add SIMD check in canny.cpp
2016-10-29 13:24:31 +09:00
Vadim Pisarevsky
ecb8fb964d Merge pull request #7572 from tomoaki0705:featureUniversalStereoSgbm 2016-10-28 15:34:11 +00:00
Quentin
bbd4a0eb51 Compensate exposure before finding seams 2016-10-28 17:04:05 +02:00
Tomoaki Teshima
b823c8e95c add universal intrinsic in StereoSGBM
* add 8 elements version of reduce operation
  * add tests for new universal intrinsic
2016-10-28 21:47:13 +09:00
Alexander Alekhin
7f2ac764ae Merge pull request #7561 from paroj:winvisible 2016-10-28 11:31:04 +00:00
Pavel Rojtberg
358ec04413 highgui: add property WND_PROP_VISIBLE
checks whether the window exists and is visible. On QT closing a window
merley hides it, so the common hack for checking whether a window exists

exists = cv2.getWindowProperty(.., 0) >= 0

does not work.
2016-10-28 11:35:02 +02:00
Vladislav Sovrasov
56c133d459 Disable redundant border initialization in findContours 2016-10-28 11:05:54 +03:00
panxiaochun
bec3479f9e fix the problem:repeatedly stop cause app crash 2016-10-28 15:50:37 +08:00
panxiaochun
f888f47102 remove self. in release method 2016-10-28 14:48:49 +08:00
panxiaochun
03a9fd46c7 fix the problem: leak memory when repeatedly start and stop 2016-10-28 11:18:33 +08:00
Alexander Alekhin
bdfb4decb2 Merge pull request #7554 from lupustr3:pvlasov/morph_isolated 2016-10-27 16:51:03 +00:00
Alexander Alekhin
f0d592e6b6 Merge pull request #7559 from alalek:cv_xadd_24 2016-10-27 16:00:37 +00:00
Alexander Alekhin
76f28fd48f Merge pull request #7558 from alalek:cv_xadd 2016-10-27 15:59:17 +00:00
Alexander Alekhin
c585d3890e core: update CV_XADD
Allow to use custom implementations of CV_XADD (passed via -D of CXXFLAGS)
2016-10-27 13:46:51 +03:00
Alexander Alekhin
33a5778a0e core: update CV_XADD
Allow to use custom implementations of CV_XADD (passed via -D of CXXFLAGS)
2016-10-27 13:22:13 +03:00
Alexander Alekhin
9b2b8404a0 Merge pull request #7553 from erichkeane:interlocked_add_fix 2016-10-27 07:03:18 +00:00
Pavel Vlasov
f07525031b BORDER_ISOLATED support for Laplacian, boxFilter and morphology; 2016-10-27 09:53:19 +03:00
E Sommerlade
c93de78ff6 removed spaces at line endings, fixed warning 2016-10-26 19:59:10 +01:00
Erich Keane
ad6af6b9e4 Remove Intel Specific CV_XADD Definition
Intel supports __atomic_fetch_add, so it isn't necessary to use
a specific version otherwise.
2016-10-26 09:37:25 -07:00
E Sommerlade
41c47a84fc restored Parameters() constructor to maintain ABI compatibility. Added CV_EXPORTS to nested class 2016-10-26 15:59:44 +01:00
E Sommerlade
d0474a9b81 fixed use of std::lock outside of ifdefs 2016-10-26 15:37:06 +01:00
Alexander Alekhin
8333ea41e2 Merge pull request #7551 from fegorsch:fix_yaml_header 2016-10-26 13:30:13 +00:00
StevenPuttemans
5728f796f6 updating python tutorials + providing necessary data 2016-10-26 13:14:20 +02:00
Li Peng
3607da9f6b ocl kernel performance optimization for box filter
The optimization is for CV_8UC1 format and 3x3 box filter,
it is 15%~87% faster than current ocl kernel with below perf test

./modules/ts/misc/run.py -t imgproc --gtest_filter=OCL_BlurFixture*

Also add test cases for this ocl kernel.

Signed-off-by: Li Peng <peng.li@intel.com>
2016-10-26 11:56:11 +08:00
Erich Keane
689cf79625 Correct cast for _InterlockedExchangeAdd on ICC
A bug in ICC improperly identified the first parameter as "void*"
rather than the proper "volatile long*".  This is scheduled to be
fixed in ICC in a future release.

This patch casts only to a "long*" to preserve backwards compatibility
with the ICC 16 and ICC 17 releases.
2016-10-25 14:18:55 -07:00
E Sommerlade
118c1b4ace fixed detection_based_tracker on visual studio 2013 and later 2016-10-25 20:18:41 +01:00
Eric Sommerlade
5ebdf6cedd Merge pull request #2 from opencv/master
update to master
2016-10-25 18:47:12 +01:00
fegorsch
ddf0554fff Use colon in "%YAML:1.0" directive when persisting to YAML-files
In YAML 1.0 the colon is mandatory. See http://yaml.org/spec/1.0/#id2558635.

This also allows prior releases to read YAML files created with the current version.
2016-10-25 18:18:35 +02:00
Alexander Alekhin
dc9602ee84 Merge pull request #7545 from sovrasov:flood_fill_fix_mask_value 2016-10-25 14:24:19 +00:00
Vladislav Sovrasov
c55890f637 Enable chessboard detector test on Ubuntu 2016-10-25 11:53:53 +03:00
Vladislav Sovrasov
34df4ae02a Add a regression test, fix documentation 2016-10-25 11:38:07 +03:00
Vladislav Sovrasov
1f4f50b9dc findContours: integrate workaroung to allow contours detection on image border 2016-10-25 11:38:07 +03:00
Vladislav Sovrasov
f5592fd21b Fix wrong default mask value in floodFill 2016-10-25 11:16:59 +03:00
Alexander Alekhin
2038434c7e Merge pull request #7541 from tomoaki0705:fixArmDivCaroteneSaturate 2016-10-24 15:35:06 +00:00
Tomoaki Teshima
2a91453ef1 brush up divSaturate of carotene
* use rounding to nearest same as divSaturateQ
2016-10-23 08:51:25 +09:00
Tetragramm
6f7bf653f7 Add 90 degree rotation methods. This provides a quick simple way of doing 90 degree rotations.
Also fix warnings that show up on other compilers in test builds.
2016-10-22 12:48:52 -05:00
Alexander Alekhin
de35c59ba4 Merge pull request #7517 from paroj:pp_dpdf 2016-10-22 16:16:24 +00:00
Alexander Alekhin
ecac70f120 Merge pull request #7531 from dtmoodie:cmake_updates 2016-10-22 16:13:11 +00:00
Jiri Horner
c17afe0fab Merge pull request #6933 from hrnr:gsoc_all
[GSOC] New camera model for stitching pipeline

* implement estimateAffine2D

estimates affine transformation using robust RANSAC method.

* uses RANSAC framework in calib3d
* includes accuracy test
* uses SVD decomposition for solving 3 point equation

* implement estimateAffinePartial2D

estimates limited affine transformation

* includes accuracy test

* stitching: add affine matcher

initial version of matcher that estimates affine transformation

* stitching: added affine transform estimator

initial version of estimator that simply chain transformations in homogeneous coordinates

* calib3d: rename estimateAffine3D test

test Calib3d_EstimateAffineTransform rename to Calib3d_EstimateAffine3D. This is more descriptive and prevents confusion with estimateAffine2D tests.

* added perf test for estimateAffine functions

tests both estimateAffine2D and estimateAffinePartial2D

* calib3d: compare error in square in estimateAffine2D

* incorporates fix from #6768

* rerun affine estimation on inliers

* stitching: new API for parallel feature finding

due to ABI breakage new functionality is added to `FeaturesFinder2`, `SurfFeaturesFinder2` and `OrbFeaturesFinder2`

* stitching: add tests for parallel feature find API

* perf test (about linear speed up)
* accuracy test compares results with serial version

* stitching: use dynamic_cast to overcome ABI issues

adding parallel API to FeaturesFinder breaks ABI. This commit uses dynamic_cast and hardcodes thread-safe finders to avoid breaking ABI.

This should be replaced by proper method similar to FeaturesMatcher on next ABI break.

* use estimateAffinePartial2D in AffineBestOf2NearestMatcher

* add constructor to AffineBestOf2NearestMatcher

* allows to choose between full affine transform and partial affine transform. Other params are the as for BestOf2NearestMatcher
* added protected field

* samples: stitching_detailed support affine estimator and matcher

* added new flags to choose matcher and estimator

* stitching: rework affine matcher

represent transformation in homogeneous coordinates

affine matcher: remove duplicite code
rework flow to get rid of duplicite code

affine matcher: do not center points to (0, 0)
it is not needed for affine model. it should not affect estimation in any way.

affine matcher: remove unneeded cv namespacing

* stitching: add stub bundle adjuster

* adds stub bundle adjuster that does nothing
* can be used in place of standard bundle adjusters to omit bundle adjusting step

* samples: stitching detailed, support no budle adjust

* uses new NoBundleAdjuster

* added affine warper

* uses R to get whole affine transformation and propagates rotation and translation to plane warper

* add affine warper factory class

* affine warper: compensate transformation

* samples: stitching_detailed add support for affine warper

* add Stitcher::create method

this method follows similar constructor methods and returns smart pointer. This allows constructing Stitcher according to OpenCV guidelines.

* supports multiple stitcher configurations (PANORAMA and SCANS) for convenient setup
* returns cv::Ptr

* stitcher: dynamicaly determine correct estimator

we need to use affine estimator for affine matcher

* preserves ABI (but add hints for ABI 4)
* uses dynamic_cast hack to inject correct estimator

* sample stitching: add support for multiple modes

shows how to use different configurations of stitcher easily (panorama stitching and scans affine model)

* stitcher: find features in parallel

use new FeatureFinder API to find features in parallel. Parallelized using TBB.

* stitching: disable parallel feature finding for OCL

it does not bring much speedup to run features finder in parallel when OpenCL is enabled, because finder needs to wait for OCL device.

Also, currently ORB is not thread-safe when OCL is enabled.

* stitching: move matcher tests

move matchers tests perf_stich.cpp -> perf_matchers.cpp

* stitching: add affine stiching integration test

test basic affine stitching (SCANS mode of stitcher) with images that have only translation between them

* enable surf for stitching tests

stitching.b12 test was failing with surf

investigated the issue, surf is producing good result. Transformation is only slightly different from ORB, so that resulting pano does not exactly match ORB's result. That caused sanity check to fail.

* added size checks similar to other tests
* sanity check will be applied only for ORB

* stitching: fix wrong estimator choice

if case was exactly wrong, estimators were chosen wrong

added logging for estimated transformation

* enable surf for matchers stitching tests

* enable SURF
* rework sanity checking. Check estimated transform instead of matches. Est. transform should be more stable and comparable between SURF and ORB.
* remove regression checking for VectorFeatures tests. It has a lot if data andtest is the same as previous except it test different vector size for performance, so sanity checking does not add any value here. Added basic sanity asserts instead.

* stitching tests: allow relative error for transform

* allows .01 relative error for estimated homography sanity check in stitching matchers tests
* fix VS warning

stitching tests: increase relative error

increase relative error to make it pass on all platforms (results are still good).

stitching test: allow bigger relative error

transformation can differ in small values (with small absolute difference, but large relative difference). transformation output still looks usable for all platforms. This difference affects only mac and windows, linux passes fine with small difference.

* stitching: add tests for affine matcher

uses s1, s2 images. added also new sanity data.

* stitching tests: use different data for matchers tests

this data should yeild more stable transformation (it has much more matches, especially for surf). Sanity data regenerated.

* stitching test: rework tests for matchers

* separated rotation and translations as they are different by scale.
* use appropriate absolute error for them separately. (relative error does not work for values near zero.)

* stitching: fix affine warper compensation

calculation of rotation and translation extracted for plane warper was wrong

* stitching test: enable surf for opencl integration tests

* enable SURF with correct guard (HAVE_OPENCV_XFEATURES2D)
* add OPENCL guard and correct namespace as usual for opencl tests

* stitching: add ocl accuracy test for affine warper

test consistent results with ocl on and off

* stitching: add affine warper ocl perf test

add affine warper to existing warper perf tests. Added new sanity data.

* stitching: do not overwrite inliers in affine matcher

* estimation is run second time on inliers only, inliers produces in second run will not be therefore correct for all matches

* calib3d: add Levenberg–Marquardt refining to estimateAffine2D* functions

this adds affine Levenberg–Marquardt refining to estimateAffine2D functions similar to what is done in findHomography.

implements Levenberg–Marquardt refinig for both full affine and partial affine transformations.

* stitching: remove reestimation step in affine matcher

reestimation step is not needed. estimateAffine2D* functions are running their own reestimation on inliers using the Levenberg-Marquardt algorithm, which is better than simply rerunning RANSAC on inliers.

* implement partial affine bundle adjuster

bundle adjuster that expect affine transform with 4DOF. Refines parameters for all cameras together.

stitching: fix bug in BundleAdjusterAffinePartial

* use the invers properly
* use static buffer for invers to speed it up

* samples: add affine bundle adjuster option to stitching_detailed

* add support for using affine bundle adjuster with 4DOF
* improve logging of initial intristics

* sttiching: add affine bundle adjuster test

* fix build warnings

* stitching: increase limit on sanity check

prevents spurious test failures on mac. values are still pretty fine.

* stitching: set affine bundle adjuster for SCANS mode

* fix bug with AffineBestOf2NearestMatcher (we want to select affine partial mode)
* select right bundle adjuster

* stitching: increase error bound for matcher tests

* this prevents failure on mac. tranformation is still ok.

* stitching: implement affine bundle adjuster

* implements affine bundle adjuster that is using full affine transform
* existing test case modified to test both affinePartial an full affine bundle adjuster

* add stitching tutorial

* show basic usage of stitching api (Stitcher class)

* stitching: add more integration test for affine stitching

* added new datasets to existing testcase
* removed unused include

* calib3d: move `haveCollinearPoints` to common header

* added comment to make that this also checks too close points

* calib3d: redone checkSubset for estimateAffine* callback

* use common function to check collinearity
* this also ensures that point will not be too close to each other

* calib3d: change estimateAffine* functions API

* more similar to `findHomography`, `findFundamentalMat`, `findEssentialMat` and similar
* follows standard recommended semantic INPUTS, OUTPUTS, FLAGS
* allows to disable refining
* supported LMEDS robust method (tests yet to come) along with RANSAC
* extended docs with some tips

* calib3d: rewrite estimateAffine2D test

* rewrite in googletest style
* parametrize to test both robust methods (RANSAC and LMEDS)
* get rid of boilerplate

* calib3d: rework estimateAffinePartial2D test

* rework in googletest style
* add testing for LMEDS

* calib3d: rework estimateAffine*2D perf test

* test for LMEDS speed
* test with/without Levenberg-Marquart
* remove sanity checking (this is covered by accuracy tests)

* calib3d: improve estimateAffine*2D tests

* test transformations in loop
* improves test by testing more potential transformations

* calib3d: rewrite kernels for estimateAffine*2D functions

* use analytical solution instead of SVD
* this version is faster especially for smaller amount of points

* calib3d: tune up perf of estimateAffine*2D functions

* avoid copying inliers
* avoid converting input points if not necessary
* check only `from` point for collinearity, as `to` does not affect stability of transform

* tutorials: add commands examples to stitching tutorials

* add some examples how to run stitcher sample code
* mention stitching_detailed.cpp

* calib3d: change computeError for estimateAffine*2D

* do error computing in floats instead of doubles

this have required precision + we were storing the result in float anyway. This make code faster and allows auto-vectorization by smart compilers.

* documentation: mention estimateAffine*2D function

* refer to new functions on appropriate places
* prefer estimateAffine*2D over estimateRigidTransform

* stitching: add camera models documentations

* mention camera models in module documentation to give user a better overview and reduce confusion
2016-10-22 19:10:42 +03:00
Arek
e77bc24b96 Merge pull request #7518 from ArkadiuszRaj:aravis-buffer-status
Aravis several updates

* Fix adressing camera with id=0

* Aravis buffer property control & status added

* Modify of autoexposure algorith, ream frame ID from aravis + new properites

* Change of macro name

* VideoCapture now returns no frame on camera disconnecion

* Allow aravis-0.4 usage, proper camera object release.
2016-10-22 19:07:55 +03:00
Tetragramm
c6772a8f5d Fix CLAHE distribution.
Fix CLAHE for 16-bit images.
2016-10-21 19:54:42 -05:00
Alexander Alekhin
44e5d26312 Merge pull request #7536 from alalek:viz_warn 2016-10-21 18:21:50 +00:00
Alexander Alekhin
c31f89f0de viz: eliminate warnings from tutorial code 2016-10-21 18:33:40 +03:00
Alexander Alekhin
f129950dec viz: update for VTK6.2+
PCL PR 1205
2016-10-21 18:33:38 +03:00
Alexander Alekhin
c724d61219 Revert "Fix for VTK6.2 issue."
This reverts commit f45da9866a.
2016-10-21 17:57:33 +03:00
Alexander Alekhin
17398c1e36 Merge pull request #7533 from seanm:master 2016-10-21 11:59:51 +00:00
Sean McBride
943ac96526 Eliminated use of obsolete 'register' keyword
Fixes clang warnings about uses of this obsolete keyword.
2016-10-20 20:19:14 -04:00
Dan
8842b9b2b2 Newer versions of gstreamer use a slightly different include path on windows.
Newer versions of VTK have moved some of the reader objects into vtkIOGeometry.
2016-10-20 11:02:18 -04:00
Alexander Alekhin
c57f145e90 ts: update run.py
Add information about python bindings
2016-10-20 16:54:51 +03:00
Alexander Alekhin
a901cc542b test: fix tolerance perf check for Exp/Log/Sqrt 2016-10-20 16:54:48 +03:00
Alexander Alekhin
43c48e2ed1 test: update Div and ConvertScaleAbs perf tests 2016-10-20 16:54:46 +03:00
Alexander Alekhin
ee4b78fcce test: change condition in Photo_Decolor 2016-10-20 16:54:43 +03:00
Alexander Alekhin
4439ba09f9 test: update condition for Calib3d_StereoCalibrate 2016-10-20 16:54:40 +03:00
Alexander Alekhin
db451f20df test: don't use points on single line for solvePnP 2016-10-20 16:54:38 +03:00
Alexander Alekhin
7a9ed39655 test: update HoughLines perf test 2016-10-20 16:54:35 +03:00
Alexander Alekhin
5bafc1db75 test: fix tolerance
cv::rand result is not bitexact for floating-point numbers
2016-10-20 16:54:33 +03:00
Alexander Alekhin
abad2ca76c test: fix tolerance
cv::rand result is not bitexact for floating-point numbers
2016-10-20 16:54:30 +03:00
Alexander Alekhin
8577f71810 ts: 2.4 changes 2016-10-20 16:26:19 +03:00
Alexander Alekhin
6f00e53159 ts: update run.py
Add information about python bindings
2016-10-20 16:23:27 +03:00
Alexander Alekhin
7793299e53 Merge pull request #7507 from vrabaud:iplimage_overflow 2016-10-20 13:04:54 +00:00
Alexander Alekhin
052e62532a Merge pull request #7520 from kesinger:memsetform 2016-10-20 12:56:18 +00:00
Alexander Alekhin
d18e45b442 Merge pull request #7524 from tomoaki0705:fixDivFixtureArm 2016-10-20 09:37:13 +00:00
Vincent Rabaud
a89aa8c90a Fix imageSize overflow in IplImage 2016-10-20 11:23:45 +02:00
Tomoaki Teshima
971a7c88dc let the performance test pass on ARM
* use round-to-neaerest in div of carotene
2016-10-20 10:44:34 +09:00
Pavel Rojtberg
01b592c8e1 calibrateCamera: mask f_x when using FIX_ASPECT_RATIO
this avoids a singular Jacobian such that LM converges when DECOMP_LU is
used.
2016-10-19 14:20:39 +02:00
Jake Kesinger
bd50553149 videoio: Fix for valgrind warning in icvGetPropertyCAM_V4L
https://github.com/opencv/opencv/issues/7380
2016-10-18 14:18:35 -04:00
Maksim Shabunin
157a90ac46 Merge pull request #7513 from abratchik:fix.wrappers.for.video.tracking 2016-10-18 12:09:14 +00:00
Alexander Alekhin
3a3dfcbdce Merge pull request #7509 from lpea:camv4l_segfault 2016-10-18 11:32:31 +00:00
abratchik
c72fbd7a14 fix for #7501 2016-10-18 09:38:57 +04:00
Guillaume Jacob
df2b591896 videoio: fix segfault if CONVERT_RGB is false (issue #7465) 2016-10-17 23:01:30 +02:00
Alexander Alekhin
07711e404b Merge pull request #7506 from mshabunin:x11-collide-warning 2016-10-17 19:50:30 +00:00
Alexander Alekhin
e15acd4fcf Merge pull request #7508 from alalek:fix_optflow_test 2016-10-17 19:49:28 +00:00
Alexander Alekhin
5dfb810327 video: fix optflow test: NAN results shouldn't bypass checks 2016-10-17 20:06:45 +03:00
Alexander Alekhin
8213e57f3b Merge pull request #7494 from tomoaki0705:fixVideoLKPyramidARM 2016-10-17 17:06:26 +00:00
Alexander Alekhin
505c19bc20 Merge pull request #7505 from LukeZheZhu:filterSmall_double_support 2016-10-17 10:33:52 +00:00
Vadim Pisarevsky
27c8f8a1d4 Merge pull request #7443 from Tytan:akaze 2016-10-17 09:22:52 +00:00
mshabunin
6a66af72c8 Added warning about possible X11 macro collision 2016-10-17 12:07:27 +03:00
Vitaly Tuzov
058f93d9e8 OpenVX based implementation for integral image HAL API. 2016-10-17 11:47:59 +03:00
LukeZhu
ef47bcc88b Fix the problem: filterSmall.cl report error with double 2016-10-17 15:12:42 +08:00
Alexander Alekhin
422154dc97 Merge pull request #7499 from catree:add_distortion_images_2.4 2016-10-17 03:21:45 +00:00
Alexander Alekhin
50486bd34d Merge pull request #7498 from catree:morphology_additional_information_2.4 2016-10-17 03:21:26 +00:00
catree
1c409abe9c Add example image about distortion effect. 2016-10-17 00:18:41 +02:00
catree
c419552002 Add images for tutorials on morphological operations to avoid possible confusion. 2016-10-17 00:01:08 +02:00
Alexander Alekhin
18327aed30 Merge pull request #7496 from abratchik:java.wrapper.fix.3.1 2016-10-16 16:49:33 +00:00
Arek
4ea27061ee Merge pull request #7472 from ArkadiuszRaj:aravis-autoexposure
Aravis SDK: Basic software based autoexposure control

* Basic software based autoexposure control

* Aravis autoexposure: skip frame taken while changing exposure setup
2016-10-16 19:14:58 +03:00
abratchik
8da1303179 add vector_vector_KeyPoint support to python wrappers 2016-10-16 19:09:35 +04:00
abratchik
adbb1471fc fix regression issues in Feature2D and DescriptorMatcher interfaces 2016-10-16 13:36:40 +04:00
Tomoaki Teshima
ea4ff91861 fix error from performance test of LK pyramid 2016-10-16 17:21:37 +09:00
Feng Zhoutian
316fece020 fix the problem: the headers of cudev module are not installed if BUILD_opencv_world 2016-10-16 02:22:28 +08:00
Alexander Alekhin
1ae27eb696 Merge pull request #7476 from abratchik:java.wrapper.fix.3.1 2016-10-15 09:21:45 +00:00
Alexander Alekhin
e2e1485373 Merge pull request #7487 from StevenPuttemans:add_compute_capabilities 2016-10-15 09:19:22 +00:00
Alexander Alekhin
9c6d063750 Merge pull request #7490 from alalek:ios_disable_ippicv 2016-10-15 09:18:15 +00:00
abratchik
4207ebbce7 fix for VideoCapture crash 2016-10-15 08:16:31 +04:00
Alexander Alekhin
d1e8651aae ios: disable IPPICV on i386-iPhoneSimulator 2016-10-15 03:29:21 +03:00
Vitaly Tuzov
1d045f2731 Added test for drawing beyond 32768 column 2016-10-14 18:38:01 +03:00
Vitaly Tuzov
26c9889c6b Fix for incorrect line drawing beyond 32768 row or column 2016-10-14 18:37:59 +03:00
Alexander Alekhin
de85680a6a Merge pull request #7483 from paroj:addtext 2016-10-14 14:06:50 +00:00
Pavel Rojtberg
a37a6bd783 fix BGR <> RGB swap
we are drawing on a BGR image declared as RGB, so we should not swap
components here either.
2016-10-14 12:06:50 +02:00
Pavel Rojtberg
8cc09f1784 highgui: allow wrapping cv::addText
also correctly forward spacing parameter in fontQt
2016-10-14 12:06:49 +02:00
Maksim Shabunin
18bd47c9b9 Merge pull request #7367 from terfendail:ovxhal_imgprocfix 2016-10-14 09:49:28 +00:00
StevenPuttemans
fa32abe5f3 add 5.2 and 6.1 compute capability support 2016-10-14 10:14:12 +02:00
Alexander Alekhin
0d0a399a13 Merge pull request #7468 from StevenPuttemans:fix_single_scale_detection 2016-10-13 16:19:18 +00:00
Maksim Shabunin
699c25a4be Merge pull request #7471 from alalek:fix_java_generator 2016-10-13 15:21:39 +00:00
Maksim Shabunin
28b64f6f13 Merge pull request #7457 from alalek:cmake_fix_ios 2016-10-13 14:59:36 +00:00
StevenPuttemans
ca762a6ba7 allow minObjectSize==maxObjectSize for single scale detection capability 2016-10-13 16:05:23 +02:00
abratchik
084c595855 fix for legacy FeatureDetector and DescriptorMatcher classes 2016-10-13 14:45:59 +04:00
Alexander Alekhin
4c8d25878b cmake: update configuration for iOS 2016-10-12 23:43:29 +03:00
Vadim Pisarevsky
4ed40fd694 Merge pull request #7432 from abratchik:java.wrapper.fix.3.1 2016-10-12 19:54:03 +00:00
Vadim Pisarevsky
4acda3f609 Merge pull request #7428 from alalek:cmake_fix_compiler_flags_detection 2016-10-12 19:38:25 +00:00
Alexander Alekhin
c16c803fe9 java: integrate code from base modules
To resolve undefined "Mat_to_vector_KeyPoint" error
2016-10-12 18:01:51 +03:00
Alexander Alekhin
994815fbd4 Merge pull request #7413 from tomoaki0705:featureUniversalThreshold 2016-10-12 10:01:37 +00:00
Alexander Alekhin
994c682b77 Merge pull request #7455 from tomoaki0705:featureUniversalLkPyramid 2016-10-12 09:57:53 +00:00
Alexander Alekhin
685a050339 Merge pull request #7431 from ArkadiuszRaj:pgm-16bit 2016-10-12 09:52:04 +00:00
Alexander Alekhin
8e701a948b Merge pull request #7466 from Trojahn:master 2016-10-12 07:58:37 +00:00
Juha Reunanen
4e7f28811c Merge pull request #7452 from reunanen:issue-7409-2.4
Fix findContours crash for very large images (v2.4)

* Cast step to size_t in order to avoid integer overflow when processing very large images

* Change assert to CV_Assert
2016-10-12 10:37:07 +03:00
Juha Reunanen
0f387cda8f Merge pull request #7451 from reunanen:issue-7409
Fix findContours crash for very large images (#7451)

* Cast step to size_t in order to avoid integer overflow when processing very large images

* Change assert to CV_Assert
2016-10-12 10:34:51 +03:00
Alexander Alekhin
016359f406 Merge pull request #7442 from catree:morphology_additional_information 2016-10-12 07:31:21 +00:00
Alexander Alekhin
6373e24bd3 Merge pull request #7441 from catree:add_distortion_images 2016-10-12 07:30:52 +00:00
viodetools
114d378cfc Bugfix #7438 2016-10-11 19:42:50 -03:00
Tomoaki Teshima
1ef740fa2c use universal intrinsic implementation for calcSharrDeriv 2016-10-11 20:32:33 +09:00
Tomoaki Teshima
ea6410d1e7 use universal intrinsic in threshold
* add performance test for 32F and 64F threshold
  * requires update of opencv_extra
2016-10-11 18:00:41 +09:00
abratchik
789b35d813 improved fix for java wrapper generator (gen_java.py) to avoid generation of java methods with duplicate signatures(v3) 2016-10-11 02:47:02 +04:00
Alexander Alekhin
73a8fa8e6e Merge pull request #7447 from alalek:ocl_fix_svm 2016-10-10 20:55:08 +00:00
Alexander Alekhin
f11715b6c3 Merge pull request #7430 from ArkadiuszRaj:aravis 2016-10-10 20:54:14 +00:00
Alexander Alekhin
fe8501c931 ocl: fix SVM code 2016-10-10 20:52:30 +03:00
Alexander Alekhin
218f7574f9 Merge pull request #7440 from mschoeneck:Prefer_OCL_befor_IPP_for_Sobel_and_Scharr 2016-10-10 10:45:27 +00:00
Alexander Alekhin
b0e9346eee Merge pull request #7416 from StevenPuttemans:add_comment_medianBlur 2016-10-10 10:43:04 +00:00
StevenPuttemans
947f32d2e0 add border replicate note 2016-10-10 09:55:13 +02:00
catree
5e8486f68c Try to clarify the morphological operations in the tutorial to avoid possible confusions. 2016-10-09 23:45:04 +02:00
ArkadiuszRaj
19bc3f4d17 Chenge arv_camera_abort_acquisition to arv_camera_stop_acquisition 2016-10-09 20:40:00 +02:00
catree
ce7811e5dd Add distortion example images for calib3d documentation. 2016-10-09 20:35:58 +02:00
ArkadiuszRaj
8bd595acfe fourcc support, improved buffer handling, check if exposure, gain & fps properties are available 2016-10-09 16:58:30 +02:00
matze
d9f6a06773 Adding check for IPP if UMat and OpenCL is available in Sobel and Scharr. 2016-10-09 15:37:22 +02:00
ArkadiuszRaj
48ae99ecef Support for MONO8 & MONO12 pixel formats 2016-10-08 13:01:01 +02:00
Alexander Alekhin
714db4cf0d java: fix Ptr<> code generation
Before:
    Ptr<Dictionary>((cv::aruco::Dictionary*)dictionary_nativeObj)
After:
    Ptr<cv::aruco::Dictionary>((cv::aruco::Dictionary*)dictionary_nativeObj)
2016-10-08 02:19:43 +03:00
Alexander Alekhin
5da8d65371 eliminate compiler warnings 2016-10-08 02:19:43 +03:00
Alexander Alekhin
6cfe4a85f7 cmake: fix ocv_check_compiler_flag 2016-10-08 02:19:43 +03:00
ArkadiuszRaj
d80fd0c85c Missing declaration 2016-10-07 22:22:46 +02:00
abratchik
be028d0774 fix for #7420, #7421 2016-10-07 23:58:57 +04:00
ArkadiuszRaj
70c12e5407 Basic support for GigE cameras via Aravis SDK 2016-10-07 21:55:49 +02:00
ArkadiuszRaj
797030aa90 Solution to issue #7408 2016-10-07 21:29:08 +02:00
Graham Fyffe
57be99ff18 Added getLeadingEdges function to subdivision2d 2016-10-06 18:01:34 -07:00
Quentin
9b4cf896fd Added AKAZE features in the stitcher pipeline (issue #6474) 2016-10-06 17:47:20 +02:00
Vadim Pisarevsky
dd379ec9fd Merge pull request #7410 from pylbert:doc_DectectPython 2016-10-06 13:40:33 +00:00
Vadim Pisarevsky
84699e0e18 Merge pull request #7399 from K-Shinotsuka:issue27 2016-10-06 13:31:06 +00:00
Vadim Pisarevsky
294bea11a5 Merge pull request #7401 from K-Shinotsuka:issue28 2016-10-06 13:30:31 +00:00
Vadim Pisarevsky
8ee459207e Merge pull request #7402 from K-Shinotsuka:issue29 2016-10-06 13:29:56 +00:00
Vadim Pisarevsky
285e6ad15b Merge pull request #7404 from K-Shinotsuka:issue30 2016-10-06 13:29:00 +00:00
Vadim Pisarevsky
c7c831bca5 Merge pull request #7414 from StevenPuttemans:fix_docs_OPENNI_2.4 2016-10-06 13:26:47 +00:00
Vadim Pisarevsky
018485050f Merge pull request #7415 from StevenPuttemans:fix_issue_7409 2016-10-06 13:25:28 +00:00
Jcrist99
770c69a978 fix for feature2d java wrappers as described in this post: http://ans… (#7372)
* fix for feature2d java wrappers as described in this post: http://answers.opencv.org/question/101675/surfsift-java-wrapper-for-opencv-3xosx-1011/

* fix for feature2d java wrappers as described in this post: http://answers.opencv.org/question/101675/surfsift-java-wrapper-for-opencv-3xosx-1011/

* rollback of one change as requested (similar change already merged)
2016-10-06 15:48:26 +03:00
StevenPuttemans
524c61279b replace principle by principal 2016-10-06 14:09:26 +02:00
StevenPuttemans
80f03f58e7 backport of 7361 2016-10-06 13:45:55 +02:00
Noel Eck
d6bcab3c7b doc: Small change to documentation in DectectPython.cmake
Fixed small typo for python 3 default version.

Signed-off-by: Noel Eck <noel.eck@intel.com>
2016-10-05 16:52:28 -07:00
Vadim Pisarevsky
a799cc13d9 Merge pull request #6078 from PolarNick239:master 2016-10-05 17:27:23 +00:00
Vadim Pisarevsky
fad0598634 normHamming done with AVX 2 intrinsics (ver 2) (#7405)
* normHamming done with AVX 2 intrinsics.

* fixed compiling AVX2-optimized norm hamming with MSVC
2016-10-05 21:23:32 +04:00
Alexander Alekhin
0f03f692a9 Merge pull request #7403 from tomoaki0705:fixDuplicateInclude 2016-10-05 17:20:45 +00:00
k-shinotsuka
880ace2eb3 add simd code when dcn equals 4 at HSV2RGB_b(). 2016-10-06 00:06:02 +09:00
k-shinotsuka
db8b3252bf add simd code when scn equals 4 at RGB2HLS_b(). 2016-10-05 22:01:33 +09:00
Vadim Pisarevsky
913b9cd661 Merge pull request #7398 from vpisarev:mat2umat_copy_fix 2016-10-05 12:21:42 +00:00
k-shinotsuka
c1745539c4 add simd code when dcn equals 4 at HLS2RGB_b(). 2016-10-05 21:02:53 +09:00
Vadim Pisarevsky
42fbfb9be0 Merge pull request #7311 from fran6co:lsd 2016-10-05 11:27:43 +00:00
Vadim Pisarevsky
43b60f4617 Merge pull request #6961 from K-Shinotsuka:issue5 2016-10-05 11:23:35 +00:00
Vadim Pisarevsky
33ce36397c Merge pull request #7222 from mschoeneck:Improve_findContours_with_SSE2 2016-10-05 11:21:37 +00:00
Vadim Pisarevsky
2b01e316b3 Merge pull request #7392 from K-Shinotsuka:issue25 2016-10-05 11:19:43 +00:00
k-shinotsuka
a5f493a763 add simd code when scn equals 4 at Lab2RGB_b(). 2016-10-05 20:14:02 +09:00
Vadim Pisarevsky
bdf82149e9 Merge pull request #7393 from alalek:cmake_pch_update 2016-10-05 11:12:34 +00:00
Vadim Pisarevsky
83f2eb79f1 make sure that the empty mat is copied to UMat properly - i.e. UMat becomes empty. Before the patch such copy operation crashed 2016-10-05 14:07:50 +03:00
Tomoaki Teshima
f6350bdfa8 remove duplicated include 2016-10-05 06:53:34 +09:00
Alexander Alekhin
b640e72877 cmake: update PCH
1) fix include directories
2) don't use PCH for source file with custom COMPILE_FLAGS
2016-10-04 19:41:28 +03:00
k-shinotsuka
47c792ecc0 add simd code when scn equals 4 at RGB2Luv_b(). 2016-10-05 01:18:43 +09:00
Alexander Alekhin
e0435d3b8a Merge pull request #7356 from mshabunin:extend-openvx 2016-10-04 15:14:51 +00:00
Vadim Pisarevsky
eddd417d74 Merge pull request #7282 from alalek:fix_calculations 2016-10-04 15:05:42 +00:00
Vadim Pisarevsky
a34b8d4abf Merge pull request #7391 from alalek:24_fix_7388 2016-10-04 12:42:18 +00:00
mshabunin
81938af5d0 Added support for OpenVX 1.0, updated cmake part, minor fixes 2016-10-04 15:31:54 +03:00
Vitaly Tuzov
72066a5111 Fix for OpenVX-based implementation of HAL multiplication API 2016-10-04 15:31:22 +03:00
Vadim Pisarevsky
3bd5055af1 Merge pull request #7336 from K-Shinotsuka:issue23 2016-10-04 12:29:46 +00:00
Vadim Pisarevsky
a3d44d523d Merge pull request #7214 from mshabunin:hal_integral 2016-10-04 12:26:58 +00:00
Vadim Pisarevsky
2e2ac54eca Merge pull request #7374 from catree:fix_hitmiss_doc_link 2016-10-04 12:15:58 +00:00
Vadim Pisarevsky
72becbbb1f Merge pull request #7379 from catree:fix_hitmiss_doc_link_2.4 2016-10-04 12:15:35 +00:00
Vadim Pisarevsky
706862d5ba Merge pull request #7382 from alalek:ocl_build_fix_warnings 2016-10-04 12:08:22 +00:00
Vadim Pisarevsky
0ce3686a37 Merge pull request #7384 from K-Shinotsuka:issue24 2016-10-04 12:06:37 +00:00
Vadim Pisarevsky
6f4a29d547 Merge pull request #7390 from alalek:fix_7388 2016-10-04 12:04:54 +00:00
Alexander Alekhin
cecc1857dd Merge pull request #7373 from tomoaki0705:featureCannyUniversalIntrinsic 2016-10-04 10:52:13 +00:00
Alexander Alekhin
c181f2f493 cmake: fix for GCC 6.x 2016-10-04 13:30:43 +03:00
Alexander Alekhin
9c90a5f5e7 Merge pull request #7389 from alalek:fix_defines_typo 2016-10-03 17:03:24 +00:00
Alexander Alekhin
21d9412c93 cmake: fix for GCC 6.x 2016-10-03 19:39:04 +03:00
Alexander Alekhin
fef677f51a fix defines typo 2016-10-03 18:29:11 +03:00
Tomoaki Teshima
841ccccada use universal intrinsic in canny
* add v_abs for universal intrinsic
  * add test of v_abs in test_intrin
  * fix compile error on gcc
  * fix bool OR operation
2016-10-03 13:23:43 +09:00
k-shinotsuka
e310c3f9f4 add simd code when dcn equals 4 at Luv2RGB_b(). 2016-10-03 00:20:26 +09:00
Alexander Alekhin
fa87422026 Merge pull request #7358 from convoyinc:ios-framework-module-exclusion 2016-10-02 11:38:59 +00:00
Alexander Alekhin
36db16a00d Merge pull request #7383 from alalek:fix_get_property 2016-10-02 11:34:36 +00:00
Alexander Alekhin
26a32dcbf6 videoio: remove 'const' from getProperty
'const' is available in OpenCV 3.x only
2016-10-02 03:04:37 +03:00
Alexander Alekhin
411e551335 ocl: autogenerated code 2016-10-02 02:43:02 +03:00
Alexander Alekhin
a0add98b30 ocl: eliminate build warning
Templates are replaced by macro
2016-10-02 02:43:02 +03:00
Vadim Pisarevsky
39467d84bf Merge pull request #7353 from alalek:ocl_update_canny_test_threshold 2016-10-01 15:48:21 +00:00
Vadim Pisarevsky
a719a6f17c Merge pull request #7368 from berak:py_tutorials_fix 2016-10-01 15:40:54 +00:00
Vadim Pisarevsky
991c41c849 Merge pull request #7371 from mshabunin:aruco-java-wrap 2016-10-01 15:38:59 +00:00
Vadim Pisarevsky
b741ec2dc1 Merge pull request #7376 from alalek:fix_gcc_pch 2016-10-01 15:37:33 +00:00
Alexander Alekhin
1c18b1d245 Merge pull request #7370 from souch55:Fixxn 2016-10-01 10:44:56 +00:00
Alexander Alekhin
16b4ccb846 Merge pull request #7377 from alalek:fix_cuda_fp16 2016-10-01 10:34:58 +00:00
k-shinotsuka
1a51a96de2 fixed the difference of the calculation result for findStereoCorrespondenceBM_SSE2() and findStereoCorrespondenceBM_(). 2016-10-01 16:26:35 +09:00
catree
f1009e2234 Fix dead link for hit or miss 2.4 documentation. 2016-09-30 23:56:35 +02:00
Alexander Alekhin
12e00827be cuda: fix fp16 compilation 2016-09-30 23:55:39 +03:00
Alexander Alekhin
a3f74aaaaf cmake: repair GCC PCH 2016-09-30 23:37:43 +03:00
catree
2dd77f886a Fix dead link for hit or miss documentation. 2016-09-30 20:34:30 +02:00
mshabunin
7a7a2749e0 Fixed java wrappers 2016-09-30 16:21:04 +03:00
berak
c2513ffb5f python tutorials: removed remainders of former Algorithm interface 2016-09-30 12:53:09 +02:00
sourin
a34fbf7bb1 Fixed identifiers warns 2016-09-30 15:16:29 +05:30
Alexander Alekhin
63280767f1 Merge pull request #7360 from alalek:fix_aarch64_fp16 2016-09-29 16:37:45 +00:00
Vitaly Tuzov
ba23dec78a Fix for OpenVX implementation of color conversion HAL API 2016-09-29 19:24:45 +03:00
Alexander Alekhin
a9ab629f60 build: fix aarch64 build with aarch64-linux-gnu-g++-4.8 2016-09-29 17:26:19 +03:00
Maksim Shabunin
2f6c37b806 Merge pull request #7361 from StevenPuttemans:fix_documentation_link_OPENNI 2016-09-29 13:50:11 +00:00
StevenPuttemans
e1b4f5aeb6 fix issue 7352 2016-09-29 14:59:43 +02:00
mshabunin
55e3deac46 Merge remote-tracking branch 'upstream/master' into pr7050 2016-09-29 12:57:28 +03:00
Maksim Shabunin
3d5c0f1faf HAL interface for cv::integral 2016-09-29 12:12:10 +03:00
Ian MacLeod
b78f1ad823 Support for blacklisting modules when building iOS and OS X frameworks 2016-09-28 14:46:40 -07:00
Alexander Alekhin
6970469299 Merge pull request #7347 from tomoaki0705:fixClang3rdparty 2016-09-28 12:10:40 +00:00
Alexander Alekhin
696972bf8e ocl: update Canny test threshold
OpenCL Device:
- Intel(R) HD Graphics (OpenCL 2.0: r2.0.54425)
2016-09-28 13:38:02 +03:00
Alexander Alekhin
a595ea208d Merge pull request #7342 from terfendail:OVXHAL_redundant_consts 2016-09-28 10:31:22 +00:00
Tomoaki Teshima
c0216c518f let the build available using clang
* add if section for clang
2016-09-28 09:06:45 +09:00
Vitaly Tuzov
25b014691f Fix for OpenVX implementation of morphology HAL API 2016-09-27 19:05:35 +03:00
Alexander Alekhin
73e1d64ae0 Merge pull request #6956 from mshabunin:fix-chessboard-bug 2016-09-27 13:33:42 +00:00
Alexander Alekhin
f4b84dd45d Merge pull request #7334 from daB0bby:patch-3 2016-09-27 13:29:50 +00:00
Alexander Alekhin
4a5b775a8d Merge pull request #7333 from daB0bby:patch-2 2016-09-27 13:29:32 +00:00
Vitaly Tuzov
91002393a5 Remove redundant constant definitions 2016-09-26 17:13:18 +03:00
Alexander Alekhin
d34f2cfefe Merge pull request #7317 from tomoaki0705:fixIfdefFp16 2016-09-26 10:59:32 +00:00
daB0bby
809bbb472b bypass macro 2016-09-23 13:01:19 +02:00
daB0bby
7840b07d2f bypass macro 2016-09-23 13:00:30 +02:00
Tomoaki Teshima
c7cb116dc0 check FP16 build condition correctly
* use __GNUC_MINOR__ in correct place to check the version of GCC
  * check processor support of FP16 at run time
  * check compiler support of FP16 and pass correct compiler option
  * rely on ENABLE_AVX on gcc since AVX is generated when mf16c is passed
  * guard correctly using ifdef in case of various configuration
  * use v_float16x4 correctly by including the right header file
2016-09-23 11:04:22 +09:00
Alexander Alekhin
7f14a278a7 Merge pull request #7321 from sovrasov:python_test_update 2016-09-22 16:43:28 +00:00
Maksim Shabunin
b8bce55270 Several chessboard detector improvements:
- fixed uninitialized memory access and memory leaks
- extracted several code blocks to separate functions
- updated part of algorithm to use cv::Mat instead of CvMat and IplImage
2016-09-22 19:25:04 +03:00
Maksim Shabunin
ee7e231e8b Merge pull request #7322 from alalek:fix_test_crash 2016-09-22 15:55:19 +00:00
Maksim Shabunin
9e27f82ee2 Merge pull request #7328 from alalek:fix_win32_2 2016-09-22 15:52:06 +00:00
Alexander Alekhin
f50f34016e test: fix test crash (exception in destructor) 2016-09-22 15:18:32 +03:00
Alexander Alekhin
c66efd05fa imgproc: use target type for calculations
reduce scope of "i" variable
2016-09-22 15:14:59 +03:00
Vadim Pisarevsky
fbc44bcb78 Merge pull request #6845 from jbosch:master 2016-09-22 11:57:06 +00:00
Alexander Alekhin
7366be696a imgproc: fix win32 build 2016-09-22 14:56:23 +03:00
Vadim Pisarevsky
0330322dbd Merge pull request #6820 from grochefort:fix_backgroundsubstractormog2_master 2016-09-22 11:56:23 +00:00
Francisco Facioni
8283ddb52f LSD: Use a fixed size array instead of using std::vector 2016-09-22 12:39:49 +01:00
Francisco Facioni
de9c0d9926 LSD: Avoid re allocating the histogram for multiple calls of LineSegmentDetector::detect in ll_angle
This is useful when reusing the same instance of LineSegmentDetector for multiple images
2016-09-22 12:39:47 +01:00
Francisco Facioni
ef6b696446 LSD: Avoid pre allocating a big region, std::vector allocations is quite expensive 2016-09-22 12:39:45 +01:00
Francisco Facioni
a12207c3ad LSD: Avoid using pointers directly, image could be non continuous 2016-09-22 12:39:43 +01:00
Francisco Facioni
f5a0b226f2 LSD: Optimization, avoid converting the image to double 2016-09-22 12:39:37 +01:00
Vadim Pisarevsky
9ff63a46fc Merge pull request #7314 from alalek:backport_7266 2016-09-22 11:28:46 +00:00
Alexander Alekhin
4ccde1330d Merge pull request #7323 from lupustr3:pvlasov/rgb_to_gray_array_fix 2016-09-22 09:52:16 +00:00
Alexander Alekhin
cde9d640fe Merge pull request #7309 from K-Shinotsuka:issue22 2016-09-21 14:46:53 +00:00
Pavel Vlasov
2073af2f05 RGB2Gray array size fix; 2016-09-21 17:46:51 +03:00
Vladislav Sovrasov
ae28345ca5 Make test_texture_flow.py more robust 2016-09-21 17:11:00 +03:00
Alexander Alekhin
3f990accb0 Merge pull request #7306 from K-Shinotsuka:issue21 2016-09-21 12:47:33 +00:00
Alexander Alekhin
9b12bd915b Merge pull request #7305 from K-Shinotsuka:issue20 2016-09-21 12:47:15 +00:00
Alexander Alekhin
b2314c9ae5 Merge pull request #7304 from K-Shinotsuka:issue19 2016-09-21 12:46:30 +00:00
Alexander Alekhin
b43989bdaf Merge pull request #7303 from K-Shinotsuka:issue18 2016-09-21 12:45:16 +00:00
Alexander Alekhin
17f0c93b37 Merge pull request #7300 from K-Shinotsuka:issue17 2016-09-21 12:44:42 +00:00
daB0bby
5728795cf7 Merge pull request #7320 from daB0bby:patch-1
* bypass makro

* syntax
2016-09-21 14:22:58 +03:00
Alexander Alekhin
c314178e7a highgui/osx: backport AVFoundation support 2016-09-19 19:51:10 +03:00
Alexander Alekhin
3648c61172 highgui: clone cap_avfoundation_mac.mm from master 2016-09-19 19:46:42 +03:00
Francisco Facioni
31bd84de12 LSD: Removes unused code 2016-09-19 15:29:30 +01:00
Alexander Alekhin
cd6e7ac46e Merge pull request #7252 from terfendail:transparent_sobel_fix 2016-09-19 12:24:50 +00:00
Alexander Alekhin
86f01c254d Merge pull request #7307 from Jeroonk:fix_detect_python_majorversion 2016-09-19 12:23:06 +00:00
k-shinotsuka
0d85d2cc0a improve RGB2HLS_b() 2016-09-18 23:36:31 +09:00
k-shinotsuka
4f22f48e63 improve HSV2RGB_b() 2016-09-18 23:07:09 +09:00
Jeroen Kromwijk
401537ebab Detect the correct Python major version 2016-09-18 12:02:33 +02:00
k-shinotsuka
0fc187d7a3 improve HLS2RGB_b() 2016-09-18 15:46:00 +09:00
k-shinotsuka
1f8aa4f7d3 improve Lab2RGB_b() 2016-09-18 14:48:40 +09:00
k-shinotsuka
37be868679 improve RGB2Luv_b() 2016-09-18 11:08:57 +09:00
k-shinotsuka
4540260df9 improve Luv2RGB_b() 2016-09-17 19:42:48 +09:00
Vadim Pisarevsky
dc3d0cbc22 Merge pull request #7266 from alalek:pr7159 2016-09-16 21:18:26 +00:00
Alexander Alekhin
d68e350227 OpenCV version++ 2016-09-16 18:55:58 +03:00
Alexander Alekhin
14ac55d05e Merge pull request #7289 from alalek:android24 2016-09-16 15:55:39 +00:00
Alexander Alekhin
d5c202e46b Merge pull request #7294 from tomoaki0705:fixBuildCudaAarch64 2016-09-16 14:27:18 +00:00
Alexander Alekhin
fb912e1ba7 Merge pull request #7295 from lupustr3:pvlasov/vs11_compat_fix 2016-09-16 13:20:08 +00:00
Alexander Alekhin
2d10336601 fix documentation 2016-09-16 16:15:51 +03:00
Alexander Alekhin
4d17051f14 android: backport Android SDK build script 2016-09-16 16:15:51 +03:00
Alexander Alekhin
9285dddbaa android: clone build_sdk.py from 3.x 2016-09-16 16:15:51 +03:00
Vitaly Tuzov
48f132f35f Fix Sobel evaluation for image ROI without isolated border. 2016-09-16 16:08:37 +03:00
Alexander Alekhin
26ecf2f374 Merge pull request #7285 from danil-tolkachev:none-comparison 2016-09-16 09:57:59 +00:00
Alexander Alekhin
a35bec1e0a Merge pull request #7293 from Algomorph:master 2016-09-16 09:57:34 +00:00
Alexander Alekhin
1f6cf50be3 Merge pull request #7286 from alalek:fix_android_clang 2016-09-16 09:56:34 +00:00
Pavel Vlasov
0a9470bf09 Compatibility fix for Visual Studio 2012; 2016-09-16 10:03:42 +03:00
Gregory Kramida
0d626c8fef v4l2 backend: Y16 default behavior fixed & FOURCC setting added
1) Cameras started with Y16 (V4L2_PIX_FMT_Y16) format via v4l2 backend will now exhibit default camera behavior, i.e. convert the 16-bit image to BGR as with all other formats. 16-bit 1-channel output will now only be produced for Y16 if CV_CAP_PROP_CONVERT_RGB is set to "false" using VideoCap::set method.
2) v4l2 videoio backend now supports setting CV_CAP_PROP_FOURCC explicitly (icvSetPropertyCAM_V4L function in cap_v4l.cpp), allowing users to manually set the codec on cameras that support multiple codecs.
2016-09-15 21:02:24 -04:00
Tomoaki Teshima
0db4b7cebb fix build error on CUDA + Aarch64
* __fp16 doesn't exist on nvcc, but it slips through ifdef guard
2016-09-16 08:06:14 +09:00
Alexander Alekhin
aac745c8e4 Merge pull request #7291 from lr-morales:openni/7290-openni1_2_conflict 2016-09-15 17:10:20 +00:00
Luis Roberto Morales Iglesias
60b33046a7 [Issue #7290] Fixes OpenNI and OpenNI2 linking conflict 2016-09-15 17:13:04 +02:00
stbnps
a4a6ee34bf Added support for V4L2_PIX_FMT_Y16 2016-09-15 11:06:15 -04:00
Alexander Alekhin
32df09c275 Merge pull request #7287 from seanm:master 2016-09-15 10:39:49 +00:00
Sean McBride
5357e28a2f Removed some extra semi-colons
Fixes clang -Wextra-semi warnings.
2016-09-14 16:22:35 -04:00
Alexander Alekhin
c68b9328ca android: workaround for Android NDK-8e clang ICE 2016-09-14 23:20:10 +03:00
danil-tolkachev
50d02b9f84 supress numpy future warning with None comparison 2016-09-14 21:39:11 +03:00
Alexander Alekhin
05b15943d6 Merge pull request #7188 from valeriyvan:andfutheriosfixes 2016-09-14 17:05:34 +00:00
Alexander Alekhin
d1492eefca Merge pull request #7181 from valeriyvan:ioscleanup 2016-09-14 17:04:59 +00:00
matze
975d2e4294 Enable built in counting trailing zeros function for Intel compiler and clang. 2016-09-14 18:20:47 +02:00
Vadim Pisarevsky
ab3814f9b9 Merge pull request #7191 from anirudt:docs_moments 2016-09-14 12:30:27 +00:00
Vadim Pisarevsky
6a1e549ffe Merge pull request #7217 from thiell:master 2016-09-14 12:08:45 +00:00
Vadim Pisarevsky
0d3b6465bd Merge pull request #7112 from StevenPuttemans:improve_cascadeclassifier_training_tutorial 2016-09-14 12:07:26 +00:00
Vadim Pisarevsky
2f01930ecc Merge pull request #7218 from savuor:fix2.4/copyTo 2016-09-14 11:58:29 +00:00
Vadim Pisarevsky
52535d3ef1 Merge pull request #7278 from alalek:opencv_version 2016-09-14 11:56:11 +00:00
Vadim Pisarevsky
a554941737 Merge pull request #7280 from sovrasov:calib_app_license 2016-09-14 11:54:55 +00:00
Alexander Alekhin
adbf2dc9f1 Merge pull request #7193 from valeriyvan:osxcleanup 2016-09-14 11:51:25 +00:00
Valeriy Van
f1dcf71dd7 Merge pull request #7178 from valeriyvan:iosfixes
* Changes delegate property from assign to weak

In modern Objective-C delegate should be weak. In very rare conditions you might want delegate be strong.
Assign for delegate is sign of legacy code.
This change prevents crash when you forget nil delegate in dealloc and makes rush with nilling delegate unnecessary.
This change shouldn't break any existing code.

* Adds implementation for setters and getters for weak delegate properties for non ARC Obj-C files

For whatever reason compiler can't synthesize these.
And yes, it's time to convert all Objective-C stuff to ARC.
2016-09-14 14:48:41 +03:00
Vladislav Sovrasov
ec40b85e75 Add license to interactive-calibration app sources 2016-09-14 12:52:06 +03:00
Alexander Alekhin
2935fcea62 apps: add opencv_version command line tool 2016-09-14 09:28:10 +03:00
matze
a865876c0f Added CV_UNUSED to not used variable when build without SSE2 support. 2016-09-13 19:32:37 +02:00
anirudt
2879eada25 docs: truncated commit msg 2016-09-13 16:14:05 +05:30
Vadim Pisarevsky
473dba1189 Merge pull request #7208 from terfendail:openvx_hal_impl 2016-09-13 10:15:12 +00:00
Vadim Pisarevsky
ca9183d567 Merge pull request #7034 from K-Shinotsuka:issue12 2016-09-13 10:05:46 +00:00
StevenPuttemans
a65f2b4bd3 huge overhaul/update of cascade classifier training 2016-09-12 09:56:09 +02:00
matze
aaa255465e Renamed haveSSE2 in haveSIMD. Conditional compilation for function header removed 2016-09-11 13:15:53 +02:00
Vadim Pisarevsky
b632f95f8d Merge pull request #7133 from sovrasov:interactive_calibration_update 2016-09-09 19:33:46 +00:00
Vadim Pisarevsky
a9ab869800 seriously improved performance of blur function, especially 3x3 and 5x5 cases (#7262)
* seriously improved performance of blur function, especially 3x3 and 5x5 cases

* trying to fix warnings and test failures

* replaced #if 0 with #if IPP_DISABLE_BLOCK
2016-09-09 23:31:02 +04:00
Maksim Shabunin
4e918fb987 Merge pull request #7165 from PkLab:doc_videoio 2016-09-09 18:01:41 +00:00
PkLab.net
be65701908 Large update of videoio doc and samples following mshabunin comments 2016-09-09 18:46:11 +02:00
Alexander Alekhin
f85e33f4af videoio: refactor AVFoundation code integration 2016-09-09 17:42:41 +03:00
Vadim Pisarevsky
c1024b112e Merge pull request #7259 from alalek:issue_7232 2016-09-09 12:08:40 +00:00
Vadim Pisarevsky
6dd609a709 Merge pull request #7260 from alalek:ffmpeg_windows_binaries 2016-09-09 12:07:12 +00:00
anirudt
06e0fb25e9 docs: adds doxygen @note for python in docs related to contour moments 2016-09-09 13:23:43 +05:30
Vitaly Tuzov
311a232a09 Added color conversion HAL API functions implemented as immediate mode OpenVX calls. 2016-09-08 20:40:51 +03:00
Alexander Alekhin
186f6977bc ffmpeg: update Windows binaries (ffmpeg 3.1.3) 2016-09-08 19:54:02 +03:00
Vitaly Tuzov
14fd22e664 Added morphology and channel merge HAL API functions implemented as immediate mode OpenVX calls. 2016-09-08 19:47:03 +03:00
Alexander Alekhin
d402bac69d cmake: fix libpng build on MSVS2012 2016-09-08 19:41:11 +03:00
Alexander Alekhin
ca4b7e1e0f Merge pull request #7171 from alalek:ocl_instrumentation 2016-09-08 16:31:22 +00:00
Vitaly Tuzov
fb3140ceef Fixed compilation. Changed value returned by functions called with unsuported parameters. 2016-09-08 18:55:27 +03:00
Vitaly Tuzov
5ec47299e2 Fixed warpings, added border mode support to warps and filter. Added morphology HAL API functions implemented as immediate mode OpenVX calls. 2016-09-08 18:55:26 +03:00
Vitaly Tuzov
c9229f7543 Resize, Warp and Filter HAL API functions are implemented as immediate mode OpenVX calls 2016-09-08 18:55:25 +03:00
Vitaly Tuzov
4170c97984 Several HAL API functions are implemented as immediate mode OpenVX calls 2016-09-08 18:55:25 +03:00
Maksim Shabunin
11a65475d8 Merge pull request #7257 from alalek:issue_7256 2016-09-08 15:28:09 +00:00
Alexander Alekhin
e5e30253ef Merge pull request #7213 from alalek:issue_7203 2016-09-08 15:25:14 +00:00
Alexander Alekhin
c7f5bc3624 viz: use ../precomp.hpp in modules/viz/src/vtk/* files 2016-09-08 16:19:44 +03:00
Alexander Alekhin
d855608e6e instrumentation: fix build on Linux
- enable C++11
- fix macro
2016-09-08 16:13:46 +03:00
Alexander Alekhin
10d18a315c instrumentation: minor refactoring, wrap OpenCL
- calculate ticksTotal instead of ticksMean
- local / global width is based on ticksTotal value
- added instrumentation for OpenCL program compilation
- added instrumentation for OpenCL kernel execution
2016-09-08 16:13:44 +03:00
Alexander Alekhin
03767340bb ffmpeg: fill avg_frame_rate 2016-09-08 15:43:34 +03:00
Alexander Alekhin
6d54abbd0f ffmpeg: fix get_fps() 2016-09-08 14:41:57 +03:00
Alexander Alekhin
4bccd9a92a Merge pull request #7239 from savuor:fix2.4/ported 2016-09-08 11:18:13 +00:00
Alexander Alekhin
4013ce570f Merge pull request #7246 from paroj:bgfg_ocl 2016-09-08 11:16:01 +00:00
Alexander Alekhin
0bb85a0ec8 Merge pull request #7253 from Finfa811:revert_borderconstant 2016-09-08 11:15:25 +00:00
Vladislav Sovrasov
d5603caa0b Delete direct lapack calls, minor fixes in UI 2016-09-08 13:00:36 +03:00
Alexander Alekhin
f6208e3dea Merge pull request #7247 from valeriyvan:matrix 2016-09-08 09:49:02 +00:00
Alexander Alekhin
125e2dcbba Merge pull request #7156 from sovrasov:hal_qr_decomp 2016-09-08 09:47:52 +00:00
Finfa811
fd1370b92b Reverted BORDER_CONSTAT in stitcher.cpp
Resolves #7251
2016-09-08 10:49:48 +02:00
Alexander Alekhin
c8d77fd961 Merge pull request #7233 from tomoaki0705:featureUniversalIntrinsicFp16 2016-09-07 14:42:46 +00:00
Valeriy Van
c562f0ad38 Minor fix in MatAllocator::download
Minor fix in MatAllocator::upload
Minor fix in MatAllocator::copy
Minor fix in setSize function
Minor fix in Mat::Mat
Minor fix in cvMatNDToMat function
Minor fix in _InputArray::getMatVector
Minor fix in _InputArray::getUMatVector
Minor fix in cv::hconcat
Minor fix in cv::vconcat
Minor fix in cv::setIdentity
Minor fix in cv::trace
Minor fix in transposeI_ template function
Minor fix in reduceC_ template function
Minor fix in sort_ template function
Minor fix in sortIdx_ template function
Minor fix in cvRange function
Minor fix in MatConstIterator::seek
Minor fix in SparseMat::create
Minor fix in SparseMat::copyTo
Minor fix in SparseMat::convertTo
Minor fix in SparseMat::convertTo
Minor fix in SparseMat::ptr
Minor fix in SparseMat::resizeHashTab
Fixes indentation
2016-09-07 17:25:36 +03:00
Pavel Rojtberg
27ae1578ac BackgroundSubtractorMOG2Impl: only use OpenCL if input image is UMat 2016-09-07 15:53:35 +02:00
Rostislav Vasilikhin
b8b7f155a5 fixed random failures in Core_DFT.complex_output2 test (the case of input_mat.cols == 1) 2016-09-07 14:56:22 +03:00
Rostislav Vasilikhin
27dd27400a fixed invalid output of cv::dft when using DFT_ROWS + DFT_COMPLEX_OUTPUT (http://code.opencv.org/issues/3428) 2016-09-07 14:56:22 +03:00
Rostislav Vasilikhin
6d691f2e05 added test for http://code.opencv.org/issues/1918 2016-09-07 14:56:21 +03:00
Rostislav Vasilikhin
9840825743 added test checking http://code.opencv.org/issues/4050 2016-09-07 14:56:21 +03:00
Maksim Shabunin
ce2733bb37 Merge pull request #7242 from bkuhls:asm 2016-09-07 09:09:29 +00:00
Maksim Shabunin
48af5e5579 Merge pull request #7202 from valeriyvan:fixUIImageToMat 2016-09-06 20:45:19 +00:00
Maksim Shabunin
c16f96cb5b Merge pull request #7221 from terfendail:sepfilter_vec_kernel 2016-09-06 20:41:28 +00:00
Maksim Shabunin
8b222ac014 Merge pull request #7229 from catree:add_peopledetect_video_option 2016-09-06 20:28:50 +00:00
Alexander Alekhin
a92aed45a4 Merge pull request #7064 from DmtKats:pam 2016-09-06 16:56:27 +00:00
Maksim Shabunin
e2de96289b Merge pull request #7220 from paroj:imgproc_doxy 2016-09-06 14:33:17 +00:00
Dimitrios Katsaros
41431e11f5 Imgcodecs: Implemented simple tests for PAM format 2016-09-06 15:47:22 +02:00
Dimitrios Katsaros
4e513a3346 Imgcodecs: Fixed a bug with checkSignature in GdalDecoder
In cases where the signaure string contains a terminating character,
the std::string member function size returns a smaller value than the
allocated string. In these cases, if you then try to use substr,
you will get an out_of_range exception. This patch remedies the problem.
2016-09-06 15:47:22 +02:00
Dimitrios Katsaros
6172803012 imgcodecs: Implementation of PAM encoder/decoder
This patch implements the PAM image format as defined at:
http://netpbm.sourceforge.net/doc/pam.html

The PAM format provides a generic means for storing 2 dimensional information.
This is useful for opencv since there are cases where data gets translated into
non standardized formats, which makes it difficult to store and load this information.
2016-09-06 15:47:22 +02:00
Rostislav Vasilikhin
cb52d249fe fixed optional args processing in SVD::compute() 2016-09-06 14:09:44 +03:00
Bernd Kuhls
c7045184ce types_c.h: Fix compiling VFP assembler code
Replace asm by __asm__ according to
https://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html#Alternate-Keywords
as suggested by Arnout Vandecappelle:
http://lists.busybox.net/pipermail/buildroot/2016-September/171491.html

to fix build errors in ffmpeg with opencv2 support detected by
buildroot autobuilders:
http://autobuild.buildroot.net/results/c32/c32a21240a9933796ee850349a62ff3c2314f25c/build-end.log

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
2016-09-06 12:25:09 +02:00
Vladislav Sovrasov
dfe4519c07 Add QR decomposition to HAL 2016-09-05 18:20:04 +03:00
mschoeneck
9e61a28b2e Improve canny (#7227)
* Improve Canny by using _mm_movemask_epi8 to find next pixel magnitude greater than lower threshold. Added parallelized finalPass to Canny with variable gradients. Little changes in finalPass.

* Some things fixed
2016-09-05 13:51:36 +03:00
Alexander Alekhin
c62931f000 Merge pull request #7234 from taketwo:is-continuous-gpu-mat 2016-09-05 10:46:40 +00:00
Sergey Alexandrov
765dd30981 Add support for GpuMat in InputArray::isContinuous() 2016-09-05 09:27:35 +02:00
Tomoaki Teshima
903789f7af use universal intrinsic for FP16
* use v_float16x4 (universal intrinsic) instead of raw SSE/NEON implementation
  * define v_load_f16/v_store_f16 since v_load can't be distinguished when short pointer passed
  * brush up implementation on old compiler (guard correctly)
  * add test for v_load_f16 and round trip conversion of v_float16x4
  * fix conversion error
2016-09-05 08:13:52 +09:00
catree
aaa335b617 Add the possibility to use a video stream with the peopledetect.cpp sample.
Fixed video input argument.
2016-09-04 19:50:36 +02:00
Rostislav Vasilikhin
0a3a2df433 fixed U non-orthogonality in SVD (http://code.opencv.org/issues/3801) 2016-09-03 21:58:19 +03:00
Rostislav Vasilikhin
b28d13430c fixed http://code.opencv.org/issues/3828 2016-09-03 21:49:54 +03:00
matze
fd6f54c895 Bug fixed in findEndContours and icvFindContoursInInterval adjusted. 2016-09-03 20:09:39 +02:00
Rostislav Vasilikhin
726efee4d2 fixed http://code.opencv.org/issues/4278 2016-09-03 20:28:54 +03:00
matze
f6451c7ae6 Varaible names renamed. Macro definitions fixed. findEndContourPoint function fixed. findContoursInInterval adjusted. 2016-09-03 14:35:09 +02:00
matze
25cf33d5c8 Warning fixed by adding a cast to char 2016-09-02 21:09:25 +02:00
matze
0acd818efc Removed #elif defined(__INTEL_COMPILER) because it is disabled at the moment 2016-09-02 20:35:08 +02:00
matze
8af8c4d0aa Improves findContours using SSE _mm_movemask_epi8 to find next contour point. Cleaned up code a little bit 2016-09-02 20:09:13 +02:00
Pavel Rojtberg
cfcf8abbb6 doxygen: imgproc - underscores should not be escaped in texttt 2016-09-02 16:41:45 +02:00
Pavel Rojtberg
62cabb58a9 doxygen: undistortPoints - replace matlab code by latex forumlae 2016-09-02 16:41:45 +02:00
Alexander Alekhin
d102ea96c0 Merge pull request #7210 from mshabunin:fix-warnings 2016-09-02 12:50:45 +00:00
Alexander Alekhin
8104db2232 Merge pull request #7130 from souch55:Fixed 2016-09-02 12:49:49 +00:00
Vitaly Tuzov
f773f45d90 Updated HAL interface for separable filters to address that both kernels are vectors. 2016-09-02 14:42:01 +03:00
Alexander Alekhin
a5dcefd50e Merge pull request #7183 from mself:LMeDS_median_optimization 2016-09-02 11:16:12 +00:00
Maksim Shabunin
28db4a2207 Merge pull request #7175 from tomoaki0705:featureIntrinsic64 2016-09-02 10:16:44 +00:00
Maksim Shabunin
1ac1e5be08 Merge pull request #7174 from guycook:android-libcpp 2016-09-02 09:54:52 +00:00
Rostislav Vasilikhin
be7c924e7c integer overflow fixed in getContinuousSize() 2016-09-02 01:50:54 +03:00
Matthew Cook
e06a9e9009 Fix android libc++ build 2016-09-02 10:25:46 +12:00
Stephane Thiell
3335963987 cmake: add support for Nvidia GPU Tesla K80 2016-09-01 12:07:32 -07:00
Alexander Alekhin
671e95d59e Merge pull request #7212 from alalek:issue_7003 2016-09-01 14:25:36 +00:00
Maksim Shabunin
dc704d77ac Fixed several GCC 5.x warnings 2016-09-01 15:44:01 +03:00
Alexander Alekhin
a986db56c6 cmake: update matlab path 2016-09-01 15:17:32 +03:00
Alexander Alekhin
0a30f64f12 Merge pull request #7206 from alalek:issue_7204 2016-09-01 12:07:02 +00:00
Alexander Alekhin
a6e5ebafcf calib3d: fix cornerSubPix memory error 2016-08-31 15:18:25 +03:00
Maksim Shabunin
595fd2757c Merge pull request #7182 from mself:two_channel_universal_intrinsics 2016-08-31 10:11:43 +00:00
Alexander Alekhin
d4ae7f32e3 Merge pull request #7205 from souch55:Fixtrans 2016-08-31 09:51:45 +00:00
sourin
d2e23008ab Fixed traincascade read issue 2016-08-31 11:29:15 +05:30
Valeriy Van
464d289fa9 Gets rid of magic constant 2016-08-30 23:22:49 +03:00
Tomoaki Teshima
7fef96be1e add 64F intrinsic in HAL NEON
* use universal intrinsic for accumulate series using float/double
  * accumulate, accumulateSquare, accumulateProduct and accumulateWeighted
  * add v_cvt_f64_high in both SSE/NEON
  * add test for conversion v_cvt_f64_high in test_intrin.cpp
  * improve some existing universal intrinsic by using new instructions in Aarch64
  * add workaround for Android build in intrin_neon.hpp
2016-08-30 17:21:02 +09:00
Valeriy Van
acb62692e4 Cleans up declarations in window_cocoa.mm removing unnecessary iVars declarations and changing retain property attribute to strong 2016-08-29 21:55:59 +03:00
anirudt
6825375694 docs: adds note for python in docs related to moments 2016-08-29 20:22:08 +05:30
Alexander Alekhin
4e8f8922e2 Merge pull request #7170 from alalek:fix_build 2016-08-29 10:15:58 +00:00
Alexander Alekhin
da0e07bc1b Merge pull request #7177 from alalek:msvs_layout 2016-08-29 09:36:49 +00:00
Maksim Shabunin
a278abdc76 Merge pull request #7140 from Asalle:fix-7136-Bounding_Box_explanation 2016-08-29 08:42:02 +00:00
Maksim Shabunin
a21b8ed92c Merge pull request #7180 from mrquorr:add_dcm_test 2016-08-29 08:40:02 +00:00
Valeriy Van
5a71bde79a Changes existential NSStringFromSelector(_cmd) for straightforward __FUCNTION__ 2016-08-28 12:48:08 +03:00
Valeriy Van
517be4bfa9 Changes [error localizedDescription] for [error description] in NSLog
There's no sense to log error messages in user’s locale.
Imagine you’re trying to guess what's going on decrypting logs in hebrew, arabic, slavic. localizedDescription is for end user messages, not for logs.
2016-08-28 12:34:50 +03:00
Valeriy Van
31e790da33 Fixes spelling in NSLog 2016-08-28 12:29:58 +03:00
k-shinotsuka
9df8400f3d improve RGB5x52Gray() 2016-08-28 14:25:06 +09:00
Matthew Self
7de2e1e795 Improve perfomance of median calculation in LMedS algorithm
* Use `nth_element()` to find the median instead of `sort()` in `LMeDSPointSetRegistrator::run()`

* Improves performance of this part of LMedS from `n log(n)` to `n` by avoiding doing a full sort.

* Makes LMedS 2x faster for 100 points, 4x faster for 5,000 points in `EstimateAffine2D()`.

* LMedS is now never more than 2x slower than RANSAC and is faster in some cases.
2016-08-26 20:39:38 -07:00
Matthew Self
9678d48e1a 2-channel interleaved load/store for universal intrinsics (float only)
* Added 2-channel ops to match existing 3-channel and 4-channel ops

* v_load_deinterleave() and v_store_interleave()

* Implements float32x4 only on SSE (but all types on NEON and CPP)

* Includes tests

* Will be used to vectorize 2D functions, such as estimateAffine2D()
2016-08-26 18:17:08 -07:00
Valeriy Van
69c7eea694 Cleans up ios stuff declaration removing not needed ivars backing properties 2016-08-27 01:10:17 +03:00
Asal Mirzaieva
ec5ae4af1d add explanation to the Bounding Box and Circles tutorial
- also some minor changes to the respective sample cpp file
2016-08-26 18:23:32 +03:00
mrquorr
a88bf4e5aa test added, only if HAVE_GDCM is on 2016-08-26 13:27:55 +00:00
Vadim Pisarevsky
40b870704e add 2 extra methods to ml::TrainData (#7169)
* expose 2 extra methods from ml::TrainData: getNames() and getVarSymbolFlags(). The first one returns text labels from CSV (if the data has been loaded from CSV); the second one returns a matrix of boolean values; its n-th element is 1 iff the corresponding column in the CSV uses symbolic names, not numbers.

* check that the dynamic_cast succeeds
2016-08-26 16:25:46 +04:00
Vadim Pisarevsky
5ddd25313f Add Grana's connected components algorithm for 8-way connectivity. (#6823)
* Add Grana's connected components algorithm for 8-way connectivity. That algorithm is faster than Wu's one (currently implemented in opencv). For more details see https://github.com/prittt/YACCLAB.

* New functions signature and distance transform compatibility

* Add tests to imgproc/test/test_connectedcomponents.cpp

* Change of test_connectedcomponents.cpp for c++98 support
2016-08-26 16:01:00 +04:00
Vadim Pisarevsky
4f0f5a24ef Merge pull request #7158 from sturkmen72:documentation_fix 2016-08-26 11:40:19 +00:00
Vadim Pisarevsky
e00e8ebea9 Merge pull request #7149 from Cartucho:patch-1 2016-08-26 11:39:51 +00:00
Vadim Pisarevsky
2b6da67e17 Merge pull request #7093 from mshabunin:openvx_hal 2016-08-26 11:22:52 +00:00
Vadim Pisarevsky
3ed948a822 Merge pull request #7167 from alalek:modules_deps 2016-08-26 11:16:45 +00:00
Vadim Pisarevsky
e21fed3c4f Merge pull request #7172 from valeriyvan:iosfixes 2016-08-26 11:11:49 +00:00
Alexander Alekhin
db6d94a7b0 cmake: minimize MSVS projects layout
Also put "object" targets to off by default (they doesn't work well)
2016-08-26 13:40:16 +03:00
Valeriy Van
f1db065c10 Unifies Obj-C property attributes changing retain to strong
strong and retain are synonymous but using strong along with  obsolete synonym retain in one file is negligent
2016-08-25 21:40:16 +03:00
Alexander Alekhin
5383a625a7 fix Win build, change default WINNT macro to WinXP
Returning to Win2k value is possible via this CMake option:

    cmake -DOPENCV_EXTRA_FLAGS="/D_WIN32_WINNT=0x0500" ...
2016-08-25 16:21:52 +03:00
Maksim Shabunin
ae3dfa80db OpenVX HAL 2016-08-25 16:08:45 +03:00
Alexander Alekhin
554017673a Merge pull request #7162 from kurenai:update_png 2016-08-25 13:00:47 +00:00
Alexander Alekhin
063ac74369 fix modules deps 2016-08-25 14:57:12 +03:00
Alexander Alekhin
da5ead2c23 Merge pull request #7166 from tomoaki0705:brushUpFp16 2016-08-25 11:49:23 +00:00
kurenai
b0a3b42287 Update libpng to 1.6.24
Enable SSE optimization
2016-08-25 10:28:20 +08:00
Tomoaki Teshima
c5d7791b67 brush up fp16 implementation
* DRY
  * switch to Cv32suf and remove fp32Int32
  * add Cv16suf
2016-08-25 05:31:25 +09:00
Vadim Pisarevsky
b03e3abd62 Merge pull request #7088 from wiryls:FileStorageJSON 2016-08-24 16:49:06 +00:00
MYLS
47f2e618ee Add two tests.
- one test for type_id;
- another for comments in JSON;
2016-08-24 17:01:57 +08:00
Vadim Pisarevsky
e5175dbc1e Merge pull request #7152 from PkLab:fix_rho&phi_doc_2.4 2016-08-23 20:36:39 +00:00
Vadim Pisarevsky
b1302cdb06 Merge pull request #7157 from valeriyvan/patch-1
Fixes spelling in comment
2016-08-24 00:33:06 +04:00
Matthew Self
0882936707 Fix buffer release issue
CvVideoWriter_AVFoundation_Mac had a serious buffer release bug.

Also made writeFrame() block until isReadyForMoreMediaData rather than
return an error.
2016-08-23 12:38:14 -07:00
Matthew Self
a92da54e79 Add support for CAP_PROP_MODE
Support setting CAP_PROP_MODE to capture grayscale or YUV frames much
faster from CV_CAP_AVFOUNDATION_MAC.
2016-08-23 12:38:10 -07:00
Suleyman TURKMEN
fcc28fecb6 Make Up 2016-08-23 22:17:30 +03:00
Valeriy Van
574f319c74 Fixes spelling in comment 2016-08-23 22:04:41 +03:00
yoffy
767780a4b2 add VideoCapture / VideoWriter AVFoundation implementation for Mac 2016-08-23 10:51:58 -07:00
Alexander Alekhin
b3b434e221 Merge pull request #7141 from lupustr3:pvlasov/instrumentation_extension 2016-08-23 16:48:25 +00:00
PkLab.net
2d0fe514a0 Fix rho,phi exchange. Backport to 2.4 2016-08-22 20:17:11 +02:00
Alexander Alekhin
3d5700655f Merge pull request #7150 from mpkh:patch-1 2016-08-22 15:11:19 +00:00
mpkh
01d2e7af71 fix building on FreeBSD
resolve undeclared identifier close error
2016-08-22 17:17:06 +04:00
Vadim Pisarevsky
4c75872e0f Merge pull request #6937 from catree:add_peopledetect_sample 2016-08-22 12:48:41 +00:00
Vadim Pisarevsky
5ee2051863 Merge pull request #7142 from alalek:fix_hls_test_check 2016-08-22 12:26:54 +00:00
Cartucho
d482b5c102 Update hull_demo.cpp
The Mat "src_copy" is never used.
2016-08-22 13:45:24 +02:00
Alexander Alekhin
413e985907 Merge pull request #7145 from Bleach665:vs2010_fix 2016-08-20 21:51:47 +00:00
Bleach
b4b83f2f29 casting to fix vs2010 compile error 2016-08-20 16:29:15 +03:00
Vadim Pisarevsky
5903c7257e Merge pull request #7122 from haikusw:UIImageAlphaToMatFix 2016-08-20 10:38:35 +00:00
Pavel Vlasov
30a6cee2fe Instrumentation for OpenCV API regions and IPP functions; 2016-08-19 18:10:03 +03:00
Alexander Alekhin
86a515fdae imgproc: fix accuracy check for HLS cvtColor 2016-08-19 17:32:17 +03:00
Alexander Alekhin
bf4c5bef7f Merge pull request #7135 from lupustr3:pvlasov/icv_restrictions_remove 2016-08-19 13:23:47 +00:00
Pavel Vlasov
680ca88ce0 Outdated ICV restrictions were removed; 2016-08-19 15:08:39 +03:00
Vadim Pisarevsky
f189ffe9af Merge pull request #7132 from Asalle:fix-6944-template-update 2016-08-19 08:13:26 +00:00
Vadim Pisarevsky
0f716cdf33 Merge pull request #7108 from K-Shinotsuka:issue16 2016-08-19 08:10:51 +00:00
Alexander Alekhin
93e5947f55 Merge pull request #7101 from lupustr3:pvlasov/instrumentation 2016-08-18 14:56:41 +00:00
Alexander Alekhin
fd1da009a8 Merge pull request #7129 from paroj:mousecallback-dry-code 2016-08-18 14:12:46 +00:00
Vadim Pisarevsky
2f069c108f Merge pull request #6945 from sturkmen72:update_documentation 2016-08-18 13:23:17 +00:00
Vadim Pisarevsky
d22c6855c3 Merge pull request #6855 from yigitsoy:patch-1 2016-08-18 13:19:00 +00:00
Vadim Pisarevsky
ea1f885be1 Merge pull request #7055 from gylns:master 2016-08-18 13:17:18 +00:00
Vadim Pisarevsky
66e94467dc Merge pull request #7087 from terfendail/master
Fix for incorrect calcOpticalFlowPyrLK result evaluation with ARM NEON
2016-08-18 17:12:38 +04:00
Vadim Pisarevsky
2a4252e117 Merge pull request #7097 from JoeHowse:master 2016-08-18 13:08:56 +00:00
Vadim Pisarevsky
9e6575428d Merge pull request #7111 from sovrasov:mkl_lapack 2016-08-18 13:05:26 +00:00
Vadim Pisarevsky
8568914c03 Merge pull request #7125 from alalek:cmake_apple_usr_local_lib 2016-08-18 13:02:23 +00:00
Asal Mirzaieva
0f8023967c add reqiured includes to the "Load, Modify, and Save an Image" tutorial
resolves #6944
2016-08-18 15:57:20 +03:00
sourin
ce818dc01f respective changes added 2016-08-18 17:24:43 +05:30
Alexander Alekhin
46bd49ef8a Merge pull request #7126 from paroj:buttonlayout 2016-08-18 10:36:47 +00:00
Alexandr Kondratev
46bfdbaf82 highgui: window_QT mousecallback code refactored using DRY 2016-08-18 11:54:33 +02:00
Alexander Alekhin
241df6c6a8 Merge pull request #6972 from vicproon:fix_6836_other_places 2016-08-18 09:33:07 +00:00
Alexander Alekhin
5d7ee48031 Merge pull request #7085 from sovrasov:hal_doc_fix 2016-08-17 15:15:08 +00:00
Alexander Alekhin
185fe7aa1b Merge pull request #7094 from terfendail:MSER_fix 2016-08-17 15:14:34 +00:00
Alexander Alekhin
fde4e8fed9 cmake: add /usr/local/lib on Apple platform 2016-08-17 18:04:06 +03:00
Pavel Vlasov
a462d76a95 Implementations instrumentation framework for OpenCV performance system; 2016-08-17 16:26:03 +03:00
Pavel Rojtberg
e4cf3297c7 highgui: allow specifying that a button should create a new buttonbar 2016-08-17 14:34:33 +02:00
Alexander Alekhin
89833fa073 Merge pull request #7095 from PkLab:fix_rho&phi_doc 2016-08-17 10:46:30 +00:00
Sovrasov
a3b4d4608d Static Lapack linkage 2016-08-17 11:33:09 +03:00
Morrison
ca318e7099 handle images with alpha better
UIImages with alpha were ending up with garbage pixels in background (random memory values).  Need to initialize matrix pixels before drawing UIImage with alpha on it.

Note: didn’t fix Grayscale image with alpha stripping alpha in UIImage -> Mat conversion.
2016-08-16 15:10:48 -07:00
Alexander Alekhin
45a21555c7 Merge pull request #7117 from patsp:fix_tiff_imdecode_remove_temporary_file 2016-08-16 15:40:50 +00:00
Maksim Shabunin
d1d8c7d8a6 Merge pull request #7056 from ludv1x:python-extra-bindings 2016-08-16 13:00:31 +00:00
PkLab.net
4b099e8ade Fix rho,phi exchange and amend linearPolar & logPolar docs with details and pics. 2016-08-16 12:49:33 +02:00
Vitaliy Lyudvichenko
ab8de8f506 Adding of user-defined type conversions for python bindings inside module directories
Adding of destructor and placement new constructors for classes wrapped with CV_EXPORTS_W_SIMPLE macro
2016-08-16 13:10:17 +03:00
Maksim Shabunin
0a1812c257 Merge pull request #7089 from catree:fix_cvProjectPoints2_typo_bug_2_4 2016-08-16 09:31:35 +00:00
Maksim Shabunin
48aa1234d9 Merge pull request #7082 from souch55:Fixmerge 2016-08-16 09:30:39 +00:00
Maksim Shabunin
84d71fae48 Merge pull request #7091 from alalek:reduce_precommit_ios_build 2016-08-16 09:18:54 +00:00
Patrick Spettel
84e1712659 Fix temporary file removal in imdecode for tiff
The TiffDecoder keeps an open file handle.
As a consequence the file cannot be removed
before the TiffDecoder closes the file.
2016-08-16 10:56:00 +02:00
LaurentBerger
42b763e6b7 Canny with own gradient (#6664)
* example using the Canny algorithm with custom image gradient.

* Modified example to integrate new function canny with custom gradient
2016-08-16 10:51:09 +03:00
Alexander Alekhin
e884bbabcb Merge pull request #7110 from tomoaki0705:featureUniversalIntrinsicAccumulate 2016-08-15 14:54:10 +00:00
Suleyman TURKMEN
bb6f65c199 Update documentation ( tutorials ) 2016-08-15 17:23:04 +03:00
Vitaly Tuzov
62c1a5a152 Replaced quiet return from MSER:detectRegion function with exeption throwing to notify user in case small image is processed 2016-08-15 14:16:13 +03:00
k-shinotsuka
3faaabd6f4 improve YCrCb2RGB_i<uchar>() 2016-08-15 19:20:04 +09:00
Maksim Shabunin
cd943cc60d Merge pull request #7106 from lupustr3:pvlasov/ipp_hal_fix 2016-08-15 10:08:44 +00:00
Maksim Shabunin
031076ab93 Merge pull request #7077 from LaurentBerger:I7063 2016-08-15 09:08:44 +00:00
Maksim Shabunin
b9ea59df35 Merge pull request #6995 from PkLab:i6746_naming_videoio_enums 2016-08-15 09:01:24 +00:00
Tomoaki Teshima
4f7679cf51 use universal intrinsic in accumulate series
* accumulate, accumulateSquare, accumulateProduct and accumulateWeighted
2016-08-15 13:00:39 +09:00
will hunt
ac2d79fd67 MSER: all test passed.
1. if a component's variation is a global minimum than it should be a local minimum
2. for the small image with invert and blur, the MSERs number should be 20
2016-08-15 09:25:45 +08:00
Pavel Vlasov
3860b8db02 IPP was enabled in mathfuncs_core;
Exp and Log IPP implementations are changed to hal interface;
2016-08-12 18:16:04 +03:00
k-shinotsuka
020b47c41a improve RGB2Gray<ushort>() 2016-08-12 23:12:51 +09:00
Alexander Alekhin
658e4c3db6 Merge pull request #7104 from alalek:port_6106 2016-08-12 13:51:55 +00:00
Ilya Lavrenov
1b3f634843 fixed compilation warning 2016-08-12 14:23:15 +03:00
Alexander Alekhin
1fb1088b7d Merge pull request #7102 from lupustr3:pvlasov/ipp_switch_fix 2016-08-12 10:39:44 +00:00
Vitaly Tuzov
9db93d773d Fix for MSER::detectRegions crash on images with either dimension less than 3 2016-08-12 10:31:13 +03:00
Vitaly Tuzov
d8dc6caf09 Fix for incorrect calcOpticalFlowPyrLK result evaluation with ARM NEON 2016-08-12 10:14:54 +03:00
Pavel Vlasov
8bcec7d77f IPP enabling fix and typo fix; 2016-08-12 10:11:47 +03:00
Joe Howse
00045bbf27 Removing whitespace to appease doc builder 2016-08-12 00:31:50 -03:00
Joe Howse
86108012ce Improved cat face cascades (lower false positive rate) 2016-08-11 20:47:08 -03:00
PkLab.net
3ea02018b5 Naming some enumerations in videoio 2016-08-11 20:27:42 +02:00
Alexander Alekhin
74e997f15b Merge pull request #7062 from kurenai:return_if_camera_disconnected 2016-08-11 14:07:42 +00:00
Maksim Shabunin
cf30c582c6 Merge pull request #7057 from K-Shinotsuka:issue13 2016-08-11 11:46:33 +00:00
Vladislav Sovrasov
13d2154f9a Fix HAL documentation 2016-08-11 14:41:49 +03:00
Maksim Shabunin
648bac2cc4 Merge pull request #7069 from StevenPuttemans:try_fix_cuda 2016-08-11 11:06:34 +00:00
Maksim Shabunin
07cffc9df2 Merge pull request #7090 from daB0bby:patch-1 2016-08-11 10:57:33 +00:00
Alexander Alekhin
1734f435f7 ios: reduce number of test configurations in precommit builds 2016-08-11 13:48:06 +03:00
Alexander Alekhin
c2394339a8 Merge pull request #7075 from alalek:ocl_fix_canny_perf_test 2016-08-11 09:19:44 +00:00
Maksim Shabunin
de0909e03c Merge pull request #7083 from tomoaki0705:fixAccumulateShortFloat 2016-08-11 09:00:38 +00:00
LaurentBerger
b75bac7975 Solve Issue 7063
consequences of changes

accuracy test

Solve issue 7063
2016-08-11 10:56:50 +02:00
Maksim Shabunin
8e06ae2762 Merge pull request #7078 from mshabunin:pr6862 2016-08-11 08:56:07 +00:00
daB0bby
5cc1ef9022 fix code-style consistency 2016-08-11 10:15:48 +02:00
catree
a893395da8 Fix typo bug in the calculation of some derivatives (dmxdt, dmydt, dmxdr, dmydr) in cvProjectPoints2 function. 2016-08-11 00:56:24 +02:00
MYLS
d99832163a solve warnings and do some cleaning. 2016-08-11 03:31:35 +08:00
MYLS
8596e82d98 Add JSON support.
a JSON emitter, a parser, tests and some basic doc.
2016-08-11 00:53:15 +08:00
MYLS
26a8c45e23 Merge remote-tracking branch 'refs/remotes/opencv/master' into FileStorageJSON 2016-08-11 00:47:13 +08:00
Vadim Pisarevsky
f210602d1e Merge pull request #7071 from K-Shinotsuka:issue14 2016-08-10 10:49:05 +00:00
Alexander Alekhin
f8b185b55f Merge pull request #7070 from paroj:noculegacy 2016-08-10 10:48:31 +00:00
Alexander Alekhin
0dd00321e0 Merge pull request #7072 from alalek:ocl_fix_canny 2016-08-10 13:44:52 +03:00
Vadim Pisarevsky
df665e2386 Merge pull request #6983 from K-Shinotsuka:issue8 2016-08-10 10:31:12 +00:00
Vadim Pisarevsky
96d48331da Merge pull request #7076 from sovrasov:mkl_lapack 2016-08-10 10:25:17 +00:00
Alexander Alekhin
923967403e Merge pull request #7074 from sovrasov:interactive_calib_fix 2016-08-10 13:05:52 +03:00
Marek Smigielski
1aa14e4929 fix tab for gen_java.py 2016-08-10 12:03:28 +02:00
Tomoaki Teshima
ba73249dc0 let the test of AccSqr_SIMD<ushort, float> pass
* The difference becomes too large when multiply is done in int16
  * To reproduce the test failure, IPP has to be switched off
2016-08-10 18:36:00 +09:00
Vadim Pisarevsky
8b155b1c6d Merge pull request #6955 from snosov1:fix-6836 2016-08-10 09:26:51 +00:00
Vadim Pisarevsky
5eee757658 Merge pull request #6949 from wiryls:FileStorageBase64DocsTests 2016-08-10 09:26:13 +00:00
sourin
99374598b3 Fix modified 2016-08-10 14:38:32 +05:30
Vladislav Sovrasov
a113d9bcc1 Add MKL support 2016-08-10 11:20:23 +03:00
ggargov
83b36bfd79 Added comments to clarify sample code
Program flow is not easily apparent so hopefully ANY comments in the code could help new users.
2016-08-09 18:08:58 +03:00
Alexander Alekhin
44bda8fbb7 Merge pull request #7044 from wolever:master 2016-08-09 12:59:38 +00:00
Alexander Alekhin
f2e41ce391 ocl: fix input data for Canny perf test
"declare.in(img, WARMUP_RNG)" overrides input image with random values

Also added support for different input sizes (via cv::resize)
2016-08-09 15:49:22 +03:00
Vladislav Sovrasov
5590421a5d Fix build interactive-calibration app 2016-08-09 15:29:57 +03:00
StevenPuttemans
a0ff9f69ef fix inclusion of OpenCV header opencv.hpp
cudev (only for use in .cu files) & cudalegacy (only legacy code) not included
2016-08-09 13:45:10 +02:00
Alexander Alekhin
32c239085d Merge pull request #7067 from tomoaki0705:fixBuildErrorJetsonK1 2016-08-09 10:39:56 +00:00
k-shinotsuka
042b0a584d improve LKTrackerInvoker::operator() 2016-08-09 18:59:29 +09:00
Alexander Alekhin
b8e08d5d3c ocl: fix Canny for Intel devices
There is an issue with processing of abs(short) function for
negative argument.

Affected OpenCL devices:
- iGPU: Intel(R) HD Graphics 520 (OpenCL 2.0 )
- CPU: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (OpenCL 2.0 (Build 10094))
2016-08-09 12:48:06 +03:00
Pavel Rojtberg
677f242761 stitching: use correct ifdef to allow compilation without cudalegacy
GraphCutSeamFinderGpu requires cudalegacy.
2016-08-09 11:39:05 +02:00
Tomoaki Teshima
3debc78a5f fix build error on JetsonTK1
* avoid using vld1_f16 and vst1_f16 on gcc 4 series (Ubuntu 14.04)
  * guard correctly with #if
  * use static inline
2016-08-09 17:12:22 +09:00
k-shinotsuka
e37c53d13e improve RGB2YCrCb_i<uchar>() 2016-08-09 11:33:00 +09:00
Vadim Pisarevsky
c1d73e4fca Merge pull request #7059 from berak:doc_python_drawkeypoints 2016-08-08 15:31:11 +00:00
Vadim Pisarevsky
35acfcf791 Merge pull request #7015 from lewgate:bugfix_1 2016-08-08 15:20:31 +00:00
Vadim Pisarevsky
0d8a21efd5 Merge pull request #7016 from lewgate:bugfix_2 2016-08-08 15:20:11 +00:00
Vadim Pisarevsky
28d28a2607 Merge pull request #7024 from paroj:semanticidx 2016-08-08 15:19:36 +00:00
Vadim Pisarevsky
b316aa3710 Merge pull request #7043 from alalek:add_nonfree_flag 2016-08-08 15:18:49 +00:00
Vadim Pisarevsky
a95d63dab6 Merge pull request #7042 from alalek:update_6967 2016-08-08 15:17:48 +00:00
Vadim Pisarevsky
39ebca5dbf Merge pull request #7047 from tomoaki0705:brushUpFp16Cuda 2016-08-08 14:43:57 +00:00
Maksim Shabunin
ad974de165 Merge pull request #7066 from StevenPuttemans:fix_build_cuda_issues 2016-08-08 13:22:49 +00:00
kurenai
c61f4e8863 return false from VideoCapture::grabFrame when camera is disconneted 2016-08-08 20:41:56 +08:00
Alexander Alekhin
2833aeb310 Merge pull request #7060 from catree:add_camera_model_doc 2016-08-08 11:49:41 +00:00
Alexander Alekhin
fc6c55f070 Merge pull request #7061 from catree:add_camera_model_doc_2_4 2016-08-08 11:47:54 +00:00
Alexander Alekhin
443f302414 Merge pull request #7065 from StevenPuttemans:fix_typo_features2d 2016-08-08 11:39:26 +00:00
Alexander Alekhin
9c90b6271c Merge pull request #7040 from sovrasov:calib_tutorial_code_update 2016-08-08 11:38:20 +00:00
StevenPuttemans
2ad411f914 fixing issues 2016-08-08 12:12:35 +02:00
Vladislav Sovrasov
46c8b09453 Improvements in camera_calibration tutorial code 2016-08-08 12:07:04 +03:00
StevenPuttemans
79d8d0da3b fix small typo 2016-08-08 10:58:46 +02:00
berak
d2a1994d71 python docs: fix missing output image in cv2.drawKeypoint examples 2016-08-08 08:14:26 +02:00
catree
ba14895fd7 Add figure for the pinhole camera model in the 2.4 documentation. 2016-08-08 04:06:46 +02:00
catree
74b899d8b0 Modify the figure of the pinhole camera model with pixels starting from the uv axis. 2016-08-08 03:31:31 +02:00
will hunt
c3d2921971 MSER: grew unnecessary histories.
the merge() calls growHistory() too many times such that:
1. some CompHistory nodes not used have been created
2. some CompHistory node's val equal their parents
2016-08-07 08:28:23 +08:00
will hunt
c2e5418e51 MSER: off-by-one bug 2016-08-06 13:12:50 +08:00
mschoeneck
5f30a0a076 Merge pull request #6958 from mschoeneck:Common-Canny-parallelization
* Common Canny parallelization added. TBB and single thread code removed. Final pass vectorized with SSE2 intrinsics.

* wrong #ifdef replaced with #if

* Merged to actual Canny version

* Merged common parallelized Canny with actual Canny implementation

* Remove 'Mutex *mutex' and pass 'Mutex mutex' from outside to parallelCanny

* Replaced extern Mutex with intern mutable Mutex.
2016-08-05 17:20:56 +03:00
Marek Smigielski
723b42e0da Add namespaces and proper support of the pointers 2016-08-05 15:34:57 +02:00
Tomoaki Teshima
2db2d137ce follow the naming rule as other API
* stop using 'CUDA' prefix
  * add explanation
2016-08-05 22:14:55 +09:00
Alexander Alekhin
b12286329f imgproc: sepFilter: update OpenCL condition
Problem is observed with test_loop_times=100
in corner cases like 93x1 or similar
2016-08-05 12:27:24 +03:00
Alexander Alekhin
2812762d6b imgproc: disable IPP for GaussianBlur in case of ROI 2016-08-05 12:27:18 +03:00
matze
37cccf17c0 imgproc: Prefer OCL calculation before IPP in GaussianBlur. 2016-08-05 12:27:16 +03:00
MYLS
1da8a19af3 fixed two bugs that I caused. 2016-08-05 16:15:03 +08:00
MYLS
86238d2748 make some changes according to the code review.
- use `std::string` instead of `new char`;
- reserve 1 MB for buffer;
2016-08-05 15:17:21 +08:00
David Wolever
b42288c2de Cleaner fix for crash on double-stop of CvVideoCamera 2016-08-04 12:44:07 -04:00
Alexander Alekhin
18e7afdfd9 cmake: add OPENCV_ENABLE_NONFREE option and macro 2016-08-04 19:23:49 +03:00
Vadim Pisarevsky
35d0a45df6 Merge pull request #7020 from StevenPuttemans:add_scale_option 2016-08-04 13:37:29 +00:00
Vadim Pisarevsky
d67e6f5cc9 Merge pull request #7029 from wolever:master 2016-08-04 13:34:55 +00:00
Maksim Shabunin
1ae9a5d1d8 Merge pull request #7038 from StevenPuttemans:fix_module_including 2016-08-04 13:23:41 +00:00
Vadim Pisarevsky
29afb83f24 Merge pull request #7039 from vpisarev:2_small_fixes 2016-08-04 12:13:35 +00:00
k-shinotsuka
065d631f0e improve MomentsInTile_SIMD<uchar, int, int>() 2016-08-04 20:08:53 +09:00
Vadim Pisarevsky
d7ee62f03b 1. fix warning from Xcode 7.x
2. fixed parsing of "cat[range_spec]ord[range_spec]" type specification string when using ml::TrainData::loadFromCSV(). Thanks to A. Kaehler for reporting it
2016-08-04 12:52:10 +03:00
StevenPuttemans
e42750c63c fix including of correct header files #7027 2016-08-04 11:32:33 +02:00
Alexander Alekhin
b2698f24b0 Merge pull request #7033 from tomoaki0705:brushUpFp16 2016-08-04 09:31:52 +00:00
Vadim Pisarevsky
7eee5cb724 Merge pull request #7026 from sovrasov:calib_points_number 2016-08-04 09:14:03 +00:00
Vadim Pisarevsky
b8d743bf50 Merge pull request #6970 from K-Shinotsuka:issue6 2016-08-03 18:50:00 +00:00
Vadim Pisarevsky
0a7e53da0a Merge pull request #7010 from K-Shinotsuka:issue10 2016-08-03 18:44:02 +00:00
Vadim Pisarevsky
03d6c5e473 Merge pull request #7011 from K-Shinotsuka:issue11 2016-08-03 18:34:08 +00:00
Alexander Alekhin
6a69852df1 Merge pull request #7030 from jpaveggio:patch-1 2016-08-03 10:20:23 +00:00
k-shinotsuka
1a18a33688 improve SumSqr_SIMD<schar, int, int>() 2016-08-03 19:17:51 +09:00
Tomoaki Teshima
87ca607fd4 brush up convertFp16
* raise an error when wrong bit depth passed
  * raise an build error when wrong depth is specified for cvtScaleHalf_
  * remove unnecessary safe check in cvtScaleHalf_
  * use intrinsic instead of direct pointer access
  * update the explanation
2016-08-03 17:27:45 +09:00
Juan Pablo Aveggio
ba5f9d68c4 Update bagofwords.cpp 2016-08-02 20:53:05 -03:00
David Wolever
3d19de2b58 Fix crash on double-stop of CvVideoCamera 2016-08-02 17:52:02 -04:00
k-shinotsuka
0b4e06ad3c improve SumSqr_SIMD<uchar, int, int>() 2016-08-02 23:46:03 +09:00
k-shinotsuka
5775ace5e0 improve thresh_8u() 2016-08-02 23:35:14 +09:00
Vadim Pisarevsky
fc742da6e3 Merge pull request #6959 from LeoBras:Better_StereoBM 2016-08-02 14:30:02 +00:00
Jeff McBride
562c15cbe9 Don't assume all images have the same number of calibration points
Cast to (int) to avoid warnings

Add test for different points number case in fisheye calibration function
2016-08-02 17:21:17 +03:00
Pavel Rojtberg
15dabc11b5 Mat: use row/ col instead of i0/ i1 for parameter names in 2D case
this improves documentation when using an IDE and reflects that Mats are
row major.
2016-08-02 13:57:51 +02:00
StevenPuttemans
d8698fc359 allow for screen size related resizing 2016-08-02 10:44:01 +02:00
Alexander Alekhin
da2810918c Merge pull request #6991 from tomoaki0705:featureGpuMatFp16 2016-08-02 08:39:25 +00:00
Alexander Alekhin
4f7b3e8a56 Merge pull request #7018 from catree:add_camera_model_doc 2016-08-01 13:27:34 +00:00
catree
6e931aaab7 Add pinhole camera model illustration in calib3d documentation. 2016-08-01 02:25:45 +02:00
Tomoaki Teshima
2974b049e7 cudev: add feature to convert FP32(float) from/to FP16(half) on GPU
* add feature of Fp16 on GPU (cudev)
  * add test
  * leave template function as unimplemented to raise error
2016-08-01 00:55:16 +09:00
lewgate
4ae4a705d5 Fix a bug for seam_finders.cpp when computing the source and destination points of the seam 2016-07-31 17:13:23 +08:00
lewgate
0af9bf457a Fix a latent bug for seam_finders.cpp when computing the source and destination points of the seam 2016-07-31 16:22:53 +08:00
MYLS
7429ed07be solve warnings in sample file 2016-07-30 02:05:15 +08:00
MYLS
3935855365 Merge remote-tracking branch 'refs/remotes/opencv/master' into FileStorageBase64DocsTests
# Conflicts:
#	modules/core/test/test_io.cpp
2016-07-30 01:08:27 +08:00
MYLS
08911cbfae change code to snippet and do some cleaning.
- use `@snippet` instead of `@code` in docs.
- remove some functions that were not used.
2016-07-30 00:35:41 +08:00
Alexander Alekhin
f2e9588c93 Merge pull request #6999 from tomoaki0705:featureCmakeFp16 2016-07-29 10:35:54 +00:00
Tomoaki Teshima
c57f8780e9 show CPU feature correctly when FP16 is available
* make sure that CV_FP16 has the correct meaning
  * check FP16 feature correctly
2016-07-29 14:10:33 +09:00
Vadim Pisarevsky
3b1803f6b1 Merge pull request #6989 from mself:gftt-deterministic-sort 2016-07-28 15:27:39 +00:00
Vadim Pisarevsky
f96b5652ce Merge pull request #6984 from K-Shinotsuka:issue9 2016-07-28 12:05:13 +00:00
Vadim Pisarevsky
b721269c29 Merge pull request #6996 from juliendehos:merge_debevec 2016-07-28 11:51:12 +00:00
Vadim Pisarevsky
8124b5600f Merge pull request #7007 from tomoaki0705:fixDocTypo 2016-07-28 11:42:07 +00:00
Vadim Pisarevsky
f9e02aa612 Merge pull request #6986 from Wing0:master 2016-07-28 11:35:07 +00:00
Tomoaki Teshima
bae8b2a9b0 doc: fix typo and grammar 2016-07-28 18:35:16 +09:00
Alexander Alekhin
8cdd91cd23 Merge pull request #7006 from derlunz:fix-qtopengl-build 2016-07-27 20:10:38 +00:00
Alexander Alekhin
6cff909bc8 Merge pull request #7004 from StevenPuttemans:cmd_parser_opencv_annotation 2016-07-27 18:24:17 +00:00
Alexander Alekhin
328da251ed Merge pull request #7000 from StevenPuttemans:fix_master_build 2016-07-27 18:17:37 +00:00
Alexander Alekhin
085ea5049b Merge pull request #7002 from StevenPuttemans:add_extra_limits_to_help 2016-07-27 18:16:37 +00:00
Christian Kapeller
81e6ef2958 highgui: window QT+OpenGL mouse wheel support, another build fix
amends work done in pull request #6976.
2016-07-27 16:14:57 +02:00
StevenPuttemans
e0f19ec48a change parameter input to the CommandLineParser interface 2016-07-27 14:02:28 +02:00
k-shinotsuka
ecfd4ad11e improve MomentsInTile_SIMD<ushort, int, int>() 2016-07-27 20:27:30 +09:00
StevenPuttemans
6df12a0507 add limits of tool to help message 2016-07-27 11:42:22 +02:00
StevenPuttemans
64dbf6c987 fix build #6993 2016-07-27 11:21:08 +02:00
Your Name
718891d937 Tabs -> Whitespaces. 2016-07-26 23:46:58 -03:00
Your Name
c6f790ce12 Fixed using local variable instead of global var.
- Still need to change SSE_2
2016-07-26 23:29:05 -03:00
Alexander Alekhin
9ad0dcb57f Merge pull request #6987 from tomoaki0705:fixTypoCalib3d 2016-07-26 20:15:45 +00:00
Julien Dehos
e072fa8121 fix a bug in MergeDebevec (modify input times) 2016-07-26 18:01:36 +02:00
Matthew Self
72672c293f Make goodFeaturesToTrack() return deterministic results
When using OCL, the results of goodFeaturesToTrack() vary slightly from
run to run. This appears to be because the order of the results from
the findCorners kernel depends on thread execution and the sorting
function that is used at the end to rank the features only enforces are
partial sort order.

This does not materially impact the quality of the results, but it
makes it hard to build regression tests and generally introduces noise
into the system that should be avoided.

An easy fix is to change the sort function to enforce a total sort on
the features, even in cases where the match quality is exactly the same
for two features.
2016-07-25 21:17:54 -07:00
Tomoaki Teshima
ce66de8e3d calib3d: fix typo 2016-07-26 12:56:10 +09:00
Oskari Vinko
31fb82176d Corrected tutorial grammar and sentences 2016-07-25 20:25:38 +02:00
Alexander Alekhin
52444bf8d0 Merge pull request #6982 from tfauck:master 2016-07-25 11:39:10 +00:00
Thierry Fauck
0df9cbc954 Non existent definition of _FPU_EXTENDED definition prevent compilation when WITH_CUDA set
Non  existence of _FPU_EXTENDED definition on powerpc64 (like it is for apple and arm)
    prevent compilation when WITH_CUDA is set. Adding powerpc64 as case to not use these
    definitions

        modifié:         modules/cudalegacy/test/TestHaarCascadeApplication.cpp
        modifié:         modules/cudalegacy/test/test_precomp.hpp

Signed-off-by: Thierry Fauck <tfauck@free.fr>
2016-07-25 11:30:50 +02:00
Alexander Alekhin
23fd32056e Merge pull request #6980 from tomoaki0705:fixNanUndeclared2 2016-07-25 08:09:19 +00:00
Tomoaki Teshima
891c83ff35 fix build error
* NAN is not defined on some platform
  * follow the comment on PR
2016-07-25 15:42:09 +09:00
Alexander Alekhin
1001b05def Merge pull request #6975 from tomoaki0705:fixNanUndeclared 2016-07-24 16:53:01 +00:00
Tomoaki Teshima
70dcd107d0 follow the comment
* test build on VS2012
2016-07-24 23:34:12 +09:00
Alexander Alekhin
941090861e Merge pull request #6976 from theg4sh:linux-window-mouse-wheel-support 2016-07-24 10:11:39 +00:00
Alexandr Kondratev
d394d26b46 highgui: window QT+OpenGL mouse wheel support, build fix 2016-07-23 18:06:46 +03:00
Tomoaki Teshima
4423a5edad fix build error
* NAN is not defined on some platform
2016-07-23 23:11:57 +09:00
Прун Виктор
fa42a1cfc2 fix calib3d changes in #6836 plus some others 2016-07-22 19:02:53 +03:00
Alexander Alekhin
df9120768d Merge pull request #6929 from catree:hitrate_doc 2016-07-22 13:19:35 +00:00
Alexander Alekhin
5f33d0c75b Merge pull request #6968 from tomoaki0705:addDocsCudaRequirement 2016-07-22 12:56:52 +00:00
Tomoaki Teshima
531b8e2320 add note of minimum requirement of CUDA 2016-07-22 07:04:37 +09:00
Vadim Pisarevsky
80951bd091 Merge pull request #6966 from theg4sh:linux-window-mouse-wheel-support 2016-07-21 21:22:02 +00:00
Vadim Pisarevsky
134154ec6d Merge pull request #6963 from ilya-lavrenov:vec2i_fs 2016-07-21 20:55:05 +00:00
Alexandr Kondratev
ecfabd7aac Merge branch 'master' of https://github.com/Itseez/opencv into linux-window-mouse-wheel-support 2016-07-21 18:16:41 +03:00
Alexandr Kondratev
13aef2c0cf highgui: window_QT mouse wheel support 2016-07-21 18:13:42 +03:00
Alexandr Kondratev
82e4e1816f highgui: removed excessed variable orient in window_gtk 2016-07-21 17:51:19 +03:00
Ilya Lavrenov
313f54bc39 read/write vec2i from/to filestorage 2016-07-21 10:58:49 +03:00
Sergei Nosov
b3d55489d3 fix compiler warning 2016-07-21 10:57:58 +03:00
Vadim Pisarevsky
371096493c Merge pull request #6962 from alalek:fix_build_log_macro 2016-07-21 07:40:35 +00:00
Vadim Pisarevsky
6b09ada5d4 Merge pull request #6899 from alalek:ffmpeg_update 2016-07-21 07:31:11 +00:00
Vadim Pisarevsky
167a4e6592 Merge pull request #6942 from alalek:fix_android_pack 2016-07-21 07:30:15 +00:00
Vadim Pisarevsky
1fc655a58f Merge pull request #6964 from tomoaki0705:fixTypoImgproc 2016-07-21 07:27:48 +00:00
Your Name
440ba2e4a7 Passing Disparity Shift as a parameter. 2016-07-20 22:57:55 -03:00
Tomoaki Teshima
57d1591957 imgproc: fix typo
* indent line
2016-07-21 06:42:11 +09:00
Alexander Alekhin
daf1879a2e test: ffmpeg: change resolution for H264 test 2016-07-21 00:20:18 +03:00
Alexander Alekhin
2acfb263bb Merge pull request #6910 from ilya-lavrenov:clone 2016-07-20 15:32:22 +00:00
Alexander Alekhin
60676dbbe8 fix build: move LOG macro from stitching public headers 2016-07-20 18:10:26 +03:00
Alexander Alekhin
2ec63e4dd1 fix android pack build 2016-07-20 16:49:57 +03:00
Vadim Pisarevsky
c4cc54e5da Merge pull request #6953 from ilya-lavrenov:arithm 2016-07-20 13:42:30 +00:00
Vadim Pisarevsky
cc5c5f7da9 Merge pull request #6795 from tomoaki0705:accelerateBilateralFilterNeon 2016-07-20 13:19:06 +00:00
Vadim Pisarevsky
a455858dd9 Merge pull request #6878 from alalek:canny_custom_gradient 2016-07-20 13:16:53 +00:00
Vadim Pisarevsky
848c66babd Merge pull request #6879 from savuor:fix/RNG_corrupts_stack 2016-07-20 13:13:40 +00:00
MYLS
8a65e73bfd add SANITY_CHECK_NOTHING() to perf_test 2016-07-20 20:18:16 +08:00
Ilya Lavrenov
71cbd6f02e fixed bug #5775 2016-07-20 11:38:15 +03:00
Tomoaki Teshima
b436f4b995 accelerate bilateralFilter using NEON
* clean up some lines
2016-07-20 08:28:49 +09:00
Leonardo Brás
0e9c8e2dd5 'resolves' 6898
I have seen that you can input a Mat_<float> on StereoBM, but the value seems the same as CV_16S.
I changed it so, only if you input a Mat_<float> it makes use of a previously truncated 4 bits, giving more resolution to Disparity Matrix. (The algorithm stays the same, it's not more precise).
If any other input Mat is given, it changes nothing.
2016-07-19 20:11:41 -03:00
Vadim Pisarevsky
b34272f8a2 Merge pull request #6787 from theg4sh:linux-window-mouse-wheel-support 2016-07-19 19:06:03 +00:00
Vadim Pisarevsky
abbc988fb5 Merge pull request #6812 from aleksandaratanasov:master 2016-07-19 17:21:09 +00:00
Alexander Alekhin
6d65f7a261 Merge pull request #6954 from ilya-lavrenov:typo 2016-07-19 16:25:26 +00:00
Vadim Pisarevsky
705e776f09 Merge pull request #6816 from phunsukwangdu:devbranch1 2016-07-19 15:50:11 +00:00
Vadim Pisarevsky
b0cc495698 Merge pull request #6822 from saedrna:master 2016-07-19 15:37:31 +00:00
Rostislav Vasilikhin
96edb270a6 fixed memory corruption when normal dist. params have less channels than target matrix; test added 2016-07-19 17:26:39 +03:00
Alexander Alekhin
e20a93f7d6 imgproc test: Canny with custom gradient 2016-07-19 17:15:36 +03:00
Alexander Alekhin
575de89ee2 imgproc: Canny: enable IPP & OpenCL optimization code path 2016-07-19 17:15:36 +03:00
Alexander Alekhin
460b1dc2fa imgproc: Canny with custom gradient 2016-07-19 17:15:36 +03:00
MYLS
27b924e99e remove CHECK from performance test 2016-07-19 22:06:21 +08:00
Sergei Nosov
d06b8c4ea9 add test for #6836 2016-07-19 17:05:30 +03:00
Alexander Alekhin
a2921fdede Merge pull request #6951 from kurenai:fix_macro 2016-07-19 14:05:17 +00:00
Ilya Lavrenov
6c42ad5b90 fixed typo 2016-07-19 16:18:48 +03:00
MYLS
cf2d6f6721 solve errors and warnings
Modified performance test and solve a problem caused by an enum type.
2016-07-19 21:18:41 +08:00
Vadim Pisarevsky
6d9c6e9c7a Merge pull request #6805 from sergarrido:sergarrido-fix-useextrinsicguess 2016-07-19 12:52:59 +00:00
Vadim Pisarevsky
5d3860703d Merge pull request #6895 from mshabunin:check-6851 2016-07-19 12:11:23 +00:00
MYLS
78ca5ddd45 solve errors and warnings 2016-07-19 19:56:57 +08:00
Alexander Alekhin
22919c39ad Merge pull request #6950 from tomoaki0705:fixMf16cBuildError 2016-07-19 11:53:28 +00:00
kurenai
2dec662ebf Fix error when compiling with clang 2016-07-19 18:05:07 +08:00
Tomoaki Teshima
d5179b8218 let the test Video_AccSquared.accuracy pass on linux x64 debug 2016-07-19 18:29:37 +09:00
catree
5ee61219c8 Add bib reference for overall hitrate and max false alarm rate formulas in train cascade tutorial.
Remove useless backslash.
2016-07-19 10:58:33 +02:00
Maksim Shabunin
644c0dd5f4 Merge pull request #6940 from andy-held:cuda_pyrlk_static_const_init 2016-07-19 08:47:57 +00:00
catree
42d5b1fb3b Re-add peopledetect.cpp sample. 2016-07-19 10:42:47 +02:00
Ilya Lavrenov
87ae4e0564 fixed clone of empty matrix 2016-07-19 11:31:53 +03:00
MYLS
0823ec0ef0 modified performance test
For faster test
2016-07-19 16:11:20 +08:00
MYLS
617df09143 Modify Base64 functions and add test and documentation
Major changes:

- modify the Base64 functions to compatible with `cvWriteRawData` and so
on.
- add a Base64 flag for FileStorage and outputs raw data in Base64
automatically.
- complete all  testing and documentation.
2016-07-19 15:54:38 +08:00
Vadim Pisarevsky
744f907815 Merge pull request #6941 from alalek:backport_6932 2016-07-18 21:16:35 +00:00
Vadim Pisarevsky
ce05d6cb89 Merge pull request #6773 from acinader:add-mask-to-match-template-demo 2016-07-18 21:14:19 +00:00
Vadim Pisarevsky
26bf5b5de3 Merge pull request #6797 from tomoaki0705:featureSIMDHog 2016-07-18 18:34:21 +00:00
Vadim Pisarevsky
1e17ffe9ac Merge pull request #6839 from thierrylamarre:better_png_transparency 2016-07-18 18:24:34 +00:00
Vadim Pisarevsky
0d7c16b5fd Merge pull request #6920 from savuor:fix2.4/RNG_Corrupts_memory 2016-07-18 18:16:27 +00:00
Vadim Pisarevsky
34d68edd1a Merge pull request #6924 from K-Shinotsuka:issue3 2016-07-18 18:16:02 +00:00
Vadim Pisarevsky
b6f21a6cac Merge pull request #6813 from mshabunin:gdcm-cmake-search 2016-07-18 16:00:43 +00:00
Vadim Pisarevsky
48b747903b Merge pull request #6830 from tomoaki0705:featureSupportFp16 2016-07-18 15:56:00 +00:00
Vadim Pisarevsky
a86a5c798b Merge pull request #6836 from vicproon:rectify_correct_principal_point 2016-07-18 15:53:35 +00:00
Vadim Pisarevsky
b28194addc Merge pull request #6860 from IshankGulati:svm-error-message 2016-07-18 15:44:40 +00:00
Vadim Pisarevsky
77f9bb7b76 Merge pull request #6831 from bobpaulin:master 2016-07-18 15:24:35 +00:00
Vadim Pisarevsky
d62b0bd363 Merge pull request #6849 from alcinos:optflow_interface 2016-07-18 15:05:13 +00:00
Vadim Pisarevsky
4da91f9e6d Merge pull request #6861 from teng88:patch-1 2016-07-18 14:43:23 +00:00
Alexander Alekhin
89c9e7c2e6 Merge pull request #6928 from K-Shinotsuka:issue4 2016-07-18 13:51:55 +00:00
Alexander Alekhin
b747633584 Merge pull request #6915 from arrybn:bugs_4515_6544_tests 2016-07-18 13:46:48 +00:00
Philippe FOUBERT
d99821aa44 Resolves issue #6931 2016-07-18 16:25:03 +03:00
Alexander Alekhin
55d0945149 Merge pull request #6932 from philippefoubert:bugfix_issue_6931 2016-07-18 13:23:56 +00:00
Andreas Franek
13d1ee10be replaced static const members with static functions for msvc
cpmpatability
2016-07-18 14:41:55 +02:00
Maksim Shabunin
0015a09987 Merge pull request #6827 from jtkb:cmake-maven-release 2016-07-18 08:56:26 +00:00
Maksim Shabunin
36f1881925 Merge pull request #6934 from catree:hitrate_doc_2.4 2016-07-18 08:45:59 +00:00
Maksim Shabunin
070f0f8445 Merge pull request #6936 from catree:fix_NAryMatIterator_code_example 2016-07-18 08:38:49 +00:00
Maksim Shabunin
bc6d5cc113 Merge pull request #6885 from alalek:migration2.4 2016-07-18 07:50:03 +00:00
Maksim Shabunin
474868a892 Merge pull request #6884 from alalek:migration 2016-07-18 07:49:38 +00:00
Maksim Shabunin
1efa7f4d27 Merge pull request #6911 from ilya-lavrenov:push_back 2016-07-18 07:33:12 +00:00
arybnikov
2deda0e868 Added tests for issues ##4515, 6544 2016-07-18 10:01:13 +03:00
k-shinotsuka
a25dba001d improve SymmRowSmallVec_8u32s(). 2016-07-18 13:58:11 +09:00
catree
7f64f31f66 Fix NAryMatIterator code example. 2016-07-17 23:21:15 +02:00
catree
87d06eab82 Add bib reference for overall hitrate and false alarm rate for the train cascade user guide (OpenCV 2.4). 2016-07-17 23:06:20 +02:00
Philippe FOUBERT
d9a56f6590 Resolves issue #6931 2016-07-17 12:22:37 +02:00
k-shinotsuka
6f8695c178 improve RowVec_8u32s(). 2016-07-17 18:35:34 +09:00
Rostislav Vasilikhin
7b2ef647aa fixed memory corruption when normal dist. params have less channels than target matrix; test added 2016-07-16 14:38:28 +03:00
Alexander Alekhin
69c4e84dad Merge pull request #6918 from jet47:gpu-opengl-sample-build 2016-07-15 16:52:42 +00:00
Alexander Alekhin
5e4d3559be Merge pull request #6917 from jet47:gpu-rotate-sanity-test 2016-07-15 16:16:25 +00:00
Maksim Shabunin
464aa5e555 Merge pull request #6803 from alalek:issue_6720 2016-07-15 13:58:39 +00:00
Arthur Cinader
bd7c21d83e Fix explanation to refelect how matching currently works. 2016-07-15 09:57:12 -04:00
Alexander Alekhin
bfb4ebfa03 Merge pull request #6916 from ilya-lavrenov:qt5 2016-07-15 13:43:33 +00:00
Alexander Alekhin
99b0845cd5 ffmpeg windows wrapper 2.7.1=>3.1.1, openh264 1.4.0=>1.5.0, vpx 1.5.0 2016-07-15 16:31:57 +03:00
Alexander Alekhin
0e6aa189cb Merge pull request #6905 from alalek:ffmpeg_fix_get_fps 2016-07-15 12:58:19 +00:00
Maksim Shabunin
91d80d0309 Merge pull request #6798 from tomoaki0705:featureSSEvideoAcc 2016-07-15 12:31:18 +00:00
Maksim Shabunin
63d8290491 Merge pull request #6779 from alalek:python_dynamic_lookup 2016-07-15 12:28:30 +00:00
Vladislav Vinogradov
9f3b1f7e50 use HAVE_OPENGL instead of WITH_OPENGL for GPU opengl sample
in this case the sample will not be built if OpenGL is not found
2016-07-15 15:14:56 +03:00
Vladislav Vinogradov
9e65216108 set threshold to 1 in sanity test for GPU rotate on 8UC1
to fix difference with CUDA 8.0 results
2016-07-15 15:11:36 +03:00
Ilya Lavrenov
957bf1452c added some tests for push_back 2016-07-15 14:48:22 +03:00
Ilya Lavrenov
3bf16da92d added condition for Qt5 2016-07-15 14:01:36 +03:00
MYLS
a9b4cdd36f Merge branch 'master' of https://github.com/wiryls/opencv 2016-07-15 18:46:07 +08:00
MYLS
75b93b17ee Merge remote-tracking branch 'refs/remotes/opencv/master' 2016-07-15 18:44:45 +08:00
Maksim Shabunin
2d964f800d Merge pull request #6909 from jet47:fix-gpu-examples-compilation 2016-07-15 09:08:21 +00:00
Maksim Shabunin
b0fa477614 Merge pull request #6908 from ilya-lavrenov:reduce 2016-07-15 09:07:56 +00:00
Maksim Shabunin
154d61edf9 Merge pull request #6907 from ilya-lavrenov:typo 2016-07-15 09:07:19 +00:00
Maksim Shabunin
9e7124127f Merge pull request #6906 from jet47:goodFeaturesToTrack-maxCorners-docs 2016-07-15 09:06:55 +00:00
Maksim Shabunin
b542914057 Merge pull request #6904 from ilya-lavrenov:minmaxloc 2016-07-15 09:06:15 +00:00
Tomoaki Teshima
3c2f7ecc97 speed up accumulate, accumulateSquare, accumulateProduct and accumulateWeighted using SIMD
* use SSE and/or AVX based on configuration
  * revise the test to verify the implementation
2016-07-15 08:09:24 +09:00
Alexander Alekhin
f3494647c5 Merge pull request #6762 from maff91:master 2016-07-14 16:17:03 +00:00
Maksim Shabunin
fc890bd941 Merge pull request #6815 from smigielski:fix_6605 2016-07-14 14:36:45 +00:00
Maksim Shabunin
f695d4f04b Merge pull request #6903 from jet47:cuda-stream-thread-safety-notes 2016-07-14 14:29:08 +00:00
Ilya Lavrenov
0af3947468 added note about cv::reduce output type for MIN/MAX 2016-07-14 17:22:08 +03:00
Vladislav Vinogradov
033c01afe2 fix video_reader GPU sample compilation after latest changes in master 2016-07-14 16:18:43 +03:00
thierry
ea911d34c6 remove 2-channel png encoder/decoder support 2016-07-14 14:58:05 +02:00
Ilya Lavrenov
c634e39299 removed extra semicolon 2016-07-14 15:50:35 +03:00
Vladislav Vinogradov
1c8b1b2d2b add note about "maxCorners <= 0" case in goodFeaturesToTrack 2016-07-14 15:48:08 +03:00
Alexander Alekhin
9bda0546f8 Merge pull request #6769 from andy-held:cuda_optflow_error_calc 2016-07-14 12:24:24 +00:00
Alexander Alekhin
df5d51f1c0 Merge pull request #6900 from mshabunin:fix-python-hal 2016-07-14 12:23:05 +00:00
thierry
d40e46bc9b Merge branch 'master' into better_png_transparency
* master: (468 commits)
  added suppression for TBB valgrind issue
  update CUDA architecture flags initialization
  increase minimal supported CUDA toolkit to 6.5
  check the CPU flag correctly
  opencv_visualization: check cmdline args
  provide better error messages
  stop search of markers in Exif reader to prevent infinite loop
  Fix calibration fail on python with CALIB_THIN_PRISM_MODEL flag
  clarify CUDA arithm operations usage with mask
  fixed empty image condition in resize
  fixed memory leak in flann tests
  fisheye: add CALIB_FIX_PRINCIPAL_POINT
  get/put: more type-safety and code unification using templates
  py_tutorials: fix cv2.findContours return val
  imgproc: speed up threshold of 64F version using NEON and SSE   * use NEON under aarch64 only   * check 64F version correctly
  bigdata: add test, resolve split/merge issue
  Improved Carotene library linear resize evaluation precision and enabled it as HAL implementation.
  persistence: fixing crash with space-only values
  Removed unnecessary check for Android API level and unused flags.
  Fix for median blur of 2-channel images
  ...
2016-07-14 14:05:16 +02:00
Alexander Alekhin
998c43ffea videoio: ffmpeg: fix get_fps() implementation 2016-07-14 15:00:54 +03:00
Ilya Lavrenov
c4b57d0ded disable ippiMinMaxIndx_32f_C1R usage since it crashes on Nans 2016-07-14 14:52:58 +03:00
Maksim Shabunin
bb41df9d5f Merge pull request #6901 from ilya-lavrenov:valgrind-tbb-suppression 2016-07-14 11:46:37 +00:00
Maksim Shabunin
a00f0c44ae Merge pull request #6821 from sturkmen72:TickMeter_class_addition 2016-07-14 11:40:46 +00:00
Maksim Shabunin
7d007d212c Merge pull request #6828 from paroj:cmatvals_cpp 2016-07-14 11:31:48 +00:00
Maksim Shabunin
79f8e516b8 Merge pull request #6891 from snosov1:fix-5311 2016-07-14 11:25:58 +00:00
Vladislav Vinogradov
bfd6ae77f5 Add note that cv::cuda::Stream class is not thread safe 2016-07-14 14:20:37 +03:00
Maksim Shabunin
4d053405cf Merge pull request #6809 from K-Shinotsuka:master 2016-07-14 09:37:53 +00:00
Maksim Shabunin
07b18b0e8a Merge pull request #6863 from SorcererX:patch-1 2016-07-14 09:34:13 +00:00
Ilya Lavrenov
9e8d060314 added suppression for TBB valgrind issue 2016-07-14 12:16:52 +03:00
Maksim Shabunin
f698bc1cc2 Fixes header filtering for python bindings generator 2016-07-13 19:49:38 +03:00
Alexander Alekhin
3e77731f7e Merge pull request #6824 from dozyc:tapi_hog_sample 2016-07-13 15:18:14 +00:00
Alexander Alekhin
525e04cfcc Merge pull request #6794 from jet47:cuda-modules-fixes 2016-07-13 15:13:55 +00:00
Maksim Shabunin
95da5ec245 Restored check chessboard parameters 2016-07-13 16:03:47 +03:00
Maksim Shabunin
3bfe76e24c Ported PR #4187 to master 2016-07-13 15:46:48 +03:00
Maksim Shabunin
b000663a88 Cleanup 2016-07-13 15:45:48 +03:00
Alexander Alekhin
e871045b46 Merge pull request #6896 from jet47:cuda-arch-update 2016-07-13 12:26:52 +00:00
Alexander Alekhin
9c92f65c0b Merge pull request #6808 from sturkmen72:patch-14 2016-07-13 11:54:11 +00:00
Alexander Alekhin
a9353ad2ec Merge pull request #6880 from berak:fix_opencv_visualization 2016-07-13 11:51:29 +00:00
Alexander Alekhin
53f4eaa7a7 Merge pull request #6892 from ioxp:fsSpace 2016-07-13 11:46:50 +00:00
Alexander Alekhin
6c4b634cfe Merge pull request #6814 from tomoaki0705:featureThreshold64fSimd 2016-07-13 11:45:28 +00:00
Vladislav Vinogradov
d76f258aeb update CUDA architecture flags initialization
* remove obsolete paths
* add Pascal arch support
2016-07-13 13:03:16 +03:00
Vladislav Vinogradov
112903c2bd increase minimal supported CUDA toolkit to 6.5 2016-07-13 13:02:13 +03:00
Maksim Shabunin
8215d20dbf fixup! Fixed several merge issues 2016-07-13 12:11:44 +03:00
Maksim Shabunin
2a350b11dd Fixed several merge issues 2016-07-13 11:48:28 +03:00
Tomoaki Teshima
9fca953e62 check the CPU flag correctly 2016-07-13 07:34:49 +09:00
Kerry Billingham
b2dd128ec5 Creation of Maven POM project and documentation.
This commit introduces a POM.xml file to allow the build of OpenCV and Java bundles using Maven.

An additonal directory has been created  'platforms/maven' to contain the POM and scripts used during the build process. An additional Markdown file is included to give instructions on how to build with Maven.
2016-07-12 21:59:12 +01:00
berak
20b9ff4ff6 opencv_visualization: check cmdline args 2016-07-12 19:40:46 +02:00
Alexander Alekhin
f75f894d73 Merge pull request #6889 from ilya-lavrenov:exif 2016-07-12 15:12:19 +00:00
Sergei Nosov
dce310e03c provide better error messages 2016-07-12 18:03:28 +03:00
Alexander Alekhin
3c1a002dab Merge pull request #6883 from ilya-lavrenov:resize 2016-07-12 14:35:25 +00:00
Alexander Alekhin
5e94243222 Merge pull request #6887 from sovrasov:calib_dist_coeffs_check 2016-07-12 14:34:19 +00:00
Alexander Alekhin
07ef396fbb Merge pull request #6886 from ilya-lavrenov:cuda_docs 2016-07-12 13:53:08 +00:00
Ilya Lavrenov
91d8405e52 stop search of markers in Exif reader to prevent infinite loop 2016-07-12 16:01:12 +03:00
Oliver Schreer
74b83cfce5 Modified and improved the method for chessboard detection. It is now faster and detects chessboards under difficult lighting condition as well as when the chessboard has strong out of plane rotations 2016-07-12 15:50:49 +03:00
Vladislav Sovrasov
ee9a42e9cd Fix calibration fail on python with CALIB_THIN_PRISM_MODEL flag 2016-07-12 15:30:02 +03:00
Alexander Alekhin
3590c3c48e Merge pull request #6882 from ilya-lavrenov:flann 2016-07-12 10:49:17 +00:00
Ilya Lavrenov
491b6543da clarify CUDA arithm operations usage with mask 2016-07-12 13:32:58 +03:00
Alexander Alekhin
1f26e73478 ffmpeg: try to load ffmpeg wrapper dll from the current module directory 2016-07-12 13:29:36 +03:00
Ilya Lavrenov
5bc10ef796 fixed empty image condition in resize 2016-07-12 13:23:19 +03:00
Alexander Alekhin
bb5e25ba7c migration: github.com/opencv/opencv 2016-07-12 12:54:33 +03:00
Alexander Alekhin
ddc0b42bc3 migration: github.com/opencv/opencv 2016-07-12 12:51:12 +03:00
Maksim Shabunin
6c6badb6a6 Merge pull request #6818 from Dikay900:template_patch 2016-07-12 09:35:22 +00:00
Ilya Lavrenov
bcc9010630 fixed memory leak in flann tests 2016-07-12 11:53:51 +03:00
Arthur Cinader
0ed250cb5d Implement PR feedback:
1. Explain grayscale input still read as three channel
2. Fix typo
3. Add more details to image match explanation to include the use of masks
2016-07-11 15:21:47 -04:00
Alexander Alekhin
02aabcca87 Merge pull request #6829 from paroj:fixpp_fe 2016-07-11 16:34:37 +00:00
Alexander Alekhin
39acd4a3fd Merge pull request #6866 from alalek:gnu_toolchain 2016-07-11 16:32:23 +00:00
Pavel Rojtberg
c1b90a1c22 fisheye: add CALIB_FIX_PRINCIPAL_POINT 2016-07-11 16:16:37 +02:00
Alexander Alekhin
a6b33c3590 Merge pull request #6846 from mbarnach:6086-cuda-initialization 2016-07-11 14:01:51 +00:00
Alexander Alekhin
7176c1327e Merge pull request #6850 from alalek:bigdata_test 2016-07-11 14:01:06 +00:00
Alexander Alekhin
9b3d65c5e4 Merge pull request #6867 from alalek:fix_lapack 2016-07-11 14:00:22 +00:00
Alexander Alekhin
f9ab93bf0f Merge pull request #6876 from janstarzy:jni-as-template-redone 2016-07-11 13:06:00 +00:00
Alexander Alekhin
c48e237dd0 Merge pull request #6874 from berak:fix_py_tutorials 2016-07-11 10:51:26 +00:00
Alexander Alekhin
88da03722f Merge pull request #6786 from terfendail:median_fix 2016-07-11 10:02:43 +00:00
Alexander Alekhin
9ed1474340 Merge pull request #6790 from terfendail:linearresize_accuracy 2016-07-11 10:02:06 +00:00
Alexander Alekhin
88e3d07178 Merge pull request #6791 from terfendail:carotene4android_buildfix 2016-07-11 09:57:49 +00:00
Alexander Alekhin
c8693f01a3 Merge pull request #6792 from paroj:jaccard_distance 2016-07-11 09:57:20 +00:00
Jan Starzynski
479f933970 get/put: more type-safety and code unification using templates 2016-07-11 09:27:59 +02:00
berak
e233f7d199 py_tutorials: fix cv2.findContours return val 2016-07-10 11:17:00 +02:00
Tomoaki Teshima
1095076d7f imgproc: speed up threshold of 64F version using NEON and SSE
* use NEON under aarch64 only
  * check 64F version correctly
2016-07-09 17:05:29 +09:00
Tomoaki Teshima
59fabb2767 use NEON as same as SSE 2016-07-09 16:53:01 +09:00
Andrey Pavlenko
d06bdd5bf6 Merge pull request #6771 from sovrasov:log_doc_fix 2016-07-08 15:20:42 +00:00
Andrey Pavlenko
67a7826da3 Merge pull request #6782 from LaurentBerger:I6780 2016-07-08 15:18:22 +00:00
Andrey Pavlenko
dcaac98569 Merge pull request #6775 from janstarzy:histo-ipp-fix 2016-07-08 15:15:17 +00:00
Alexander Alekhin
5f269d08b4 bigdata: add test, resolve split/merge issue 2016-07-08 18:05:53 +03:00
Maksim Shabunin
f3bd508e6d GDCM: several improvements
- fixed width and height order
- removed unused methods
- simplified signature matching
- rewrote pixel format matching in more compact form
- added dimensions number check (only 2 is allowed)
- added target buffer size check
- added debug messages in all failing points
2016-07-08 16:08:55 +03:00
Maksim Shabunin
0fd0acf2e3 GDCM: modified compilation scheme
- renamed source files
- guard the contents - always include
2016-07-08 16:08:55 +03:00
look4pritam
6f22f49c02 Grassroots DiCoM i.e. GDCM based DICOM image reader is added. 2016-07-08 16:08:55 +03:00
Vitaly Tuzov
04c7d03188 Improved Carotene library linear resize evaluation precision and enabled it as HAL implementation. 2016-07-08 14:47:30 +03:00
Philipp Hasper
00112bbe10 persistence: fixing crash with space-only values 2016-07-08 12:41:05 +02:00
Vitaly Tuzov
e3f5bbd217 Removed unnecessary check for Android API level and unused flags. 2016-07-08 13:31:26 +03:00
Alexander Alekhin
627e2b15b3 Merge pull request #6770 from ealbuz:master 2016-07-08 09:49:09 +00:00
Vitaly Tuzov
c61f7e5334 Fix for median blur of 2-channel images 2016-07-08 12:03:28 +03:00
Alexander Alekhin
630406e006 Merge pull request #6785 from alalek:android_native_level 2016-07-07 15:48:01 +00:00
Alexander Alekhin
3e649895e5 android: increase default native API level 8=>9 2016-07-07 15:57:59 +03:00
Alexander Alekhin
c0fe374490 cmake: python, allow dynamic symbols lookup from libpython.so 2016-07-07 14:23:35 +03:00
LaurentBerger
62a87ce38c Issue 6780 2016-07-07 09:29:41 +02:00
Vladislav Vinogradov
4382302a6b fix matrix type for keypoints buffer in CUDA FAST
use CV_32FC1 instead of CV_16SC2 since detectAsync uses CV_32FC1
to reallocate the matrix
2016-07-06 14:27:08 +03:00
Jan Starzynski
7f896643e9 fix for buffer-overflow in IPPCalcHistInvoker::operator() 2016-07-06 09:54:28 +02:00
Arthur Cinader
a6ade2b914 Add the mask to the template matching demo documentation. 2016-07-05 13:20:30 -04:00
Vladislav Sovrasov
a2ec23c112 Update cv::log documentation 2016-07-05 17:28:53 +03:00
Alexandr Kondratev
f5b96eb828 Merge branch 'master' of https://github.com/Itseez/opencv 2016-07-05 13:34:11 +03:00
Alexandr Kondratev
179998a8a2 highgui module: window_QT mouse wheel reuse variable delta instead call evnt->delta() 2016-07-05 12:02:16 +03:00
Elif Albuz
8f91529edf Add Carotene - NVIDIA Hardware-Abstraction-Layer for ARM platforms 2016-07-04 23:56:15 -07:00
Elif Albuz
c65d2a0d86 Add Carotene - NVIDIA Hardware-Abstraction-Layer for ARM platforms 2016-07-04 23:45:07 -07:00
Andrey Pavlenko
688bd28987 Merge pull request #6600 from grochefort:fix_backgroundsubstractormog2 2016-07-04 14:37:24 +00:00
Andreas Franek
8d43e2b945 fixed the cuda optical flow error normalization factor
texture channels were not considered correctly, nor was the cuda texture
normalization
2016-07-04 16:13:31 +02:00
Alexander Alekhin
22682f933a Merge pull request #6760 from alalek:issue_6653 2016-07-04 14:03:05 +00:00
Andrey Pavlenko
56aa03b0e1 Merge pull request #6538 from asmorkalov:libcc_fix 2016-07-04 13:05:34 +00:00
Alexander Alekhin
da69cd08db Merge pull request #6768 from tomoaki0705:fixEstimateAffine3DThreshold 2016-07-04 12:17:16 +00:00
Alexandr Kondratev
4e63bd04e5 highgui module: mouse wheel - modification keys fixed, wheel event value is CV_EVENT_MOUSEWHEEL or CV_EVENT_MOUSEHWHEEL 2016-07-04 15:02:05 +03:00
Alexander Smorkalov
f29fd63f13 Enabled build with LLVM libc++ for Android. 2016-07-04 14:59:41 +03:00
Tomoaki Teshima
0e380ff15d calib3d: compare error and threshold both in square
* resolve #5183
2016-07-04 19:34:47 +09:00
Alexander Alekhin
96919156e7 Merge pull request #6761 from alalek:fix_warnings 2016-07-04 09:52:03 +00:00
Alexandr Kondratev
040409aac5 Merge branch 'master' of https://github.com/Itseez/opencv 2016-07-03 15:54:35 +03:00
Alexandr Kondratev
1f2e159054 highgui module: using event->scroll.delta_{x,y} instead parsing direction and added widget event mask GDK_SMOOTH_SCROLL_MASK for GTK>=3.4 2016-07-03 15:52:59 +03:00
Alexandr Kondratev
7dcac647e5 highgui module: a bit readable onMouse flags mapping 2016-07-03 13:31:25 +03:00
MYLS
b3475cbf32 Merge remote-tracking branch 'refs/remotes/Itseez/master' 2016-07-03 14:57:18 +08:00
MYLS
393cd6242e Merge remote-tracking branch 'refs/remotes/Itseez/master' 2016-07-03 14:17:47 +08:00
Dikay900
61390e407d Rephrase parts of the templates and use comments 2016-07-02 17:33:06 +02:00
Michael Shtutman
3f2ab5d3b5 Fix bug #6682 (Can't change resolution for YUY2 camera with DShow) 2016-07-02 18:10:04 +03:00
Alexander Alekhin
3844ee780c build: fix compiler warnings (GCC 5.3.1) 2016-07-01 20:17:16 +03:00
Alexander Alekhin
7dc5332a92 Merge pull request #6745 from alalek:viz_samples 2016-07-01 15:27:01 +00:00
Alexander Alekhin
8b05a4bf93 cvtColor: fix inplace processing 2016-07-01 17:09:12 +03:00
Andrey Pavlenko
330e4bb48a Merge pull request #6734 from PkLab:doc_videoio_enums 2016-07-01 13:24:05 +00:00
Alexander Alekhin
8865528dc2 Merge pull request #6743 from alalek:libpng_24 2016-07-01 10:27:57 +00:00
Arthur Cinader
2b08f29543 Allow for an optional mask for MatchTemplate_Demo 2016-06-30 17:04:25 -07:00
Alexander Alekhin
ee4f409584 cmake: lapack optimized code requires cblas.h 2016-06-30 20:25:08 +03:00
Alexander Alekhin
b23527bf02 core: fix arguments types for cblas calls 2016-06-30 20:25:08 +03:00
Vadim Pisarevsky
7fea7e0629 Merge pull request #6697 from wiryls:FileStorageBase64 2016-06-30 17:17:03 +00:00
Andrey Pavlenko
e4cd24537e Merge pull request #6740 from tomoaki0705:fixNeonCheckSmooth 2016-06-30 15:47:45 +00:00
Andrey Pavlenko
1432471650 Merge pull request #6750 from Tomin1:simpleblobdetector-fix 2016-06-30 15:23:46 +00:00
Alexander Alekhin
8184535de1 samples: repair viz tutorial 2016-06-30 17:21:31 +03:00
Alexander Alekhin
babaa00ac1 libpng: fix NEON 2016-06-30 16:44:53 +03:00
Alexander Alekhin
7c64e03cc9 libpng: re-apply patch 2016-06-30 16:44:53 +03:00
Alexander Alekhin
882e120a9d update libpng 1.5.27 2016-06-30 16:44:53 +03:00
Alexander Alekhin
5346870920 Merge pull request #6558 from lletourn:master 2016-06-30 13:44:16 +00:00
Alexander Alekhin
639c8fc6d6 Merge pull request #5870 from IshankGulati:VideoCapture-fix 2016-06-30 13:20:51 +00:00
Alexander Alekhin
b7735b3400 Merge pull request #6731 from jokereactive:viz_sample 2016-06-30 12:41:52 +00:00
Maksim Shabunin
4aa9b230b8 Merge pull request #6603 from debjan:patch-1 2016-06-30 11:35:22 +00:00
Alexander Alekhin
8bb8f8dcae Merge pull request #6752 from alalek:backport_6747 2016-06-30 11:26:49 +00:00
Vitaliy Lyudvichenko
c3dc7266d1 Fixing of AutoBuffer::allocate(nsz) method
AutoBuffer::allocate(nsz) didn't work properly when
(sz < nsz < fixed_size). In this case sz remained unchanged.
2016-06-30 13:10:53 +03:00
Alexander Alekhin
e98c1bfb53 Merge pull request #6747 from ludv1x:master 2016-06-30 08:02:19 +00:00
Tomi
9564531ec8 features2d: Added missing SimpleBlob parameters
Added missing SimpleBlobDetector parameters to features2d_init.cpp.
2016-06-30 10:41:03 +03:00
Alexandr Kondratev
81c69ecd16 highgui: window_gtk.cpp directive boolean operations or/and replaced by ||/&& to keep compatible with older systems 2016-06-29 23:01:57 +03:00
Vitaliy Lyudvichenko
930d96f684 Fixing of AutoBuffer::allocate(nsz) method
AutoBuffer::allocate(nsz) didn't work properly when
(sz < nsz < fixed_size). In this case sz remained unchanged.
2016-06-29 19:50:51 +03:00
Alexander Alekhin
69bd6dad1f Merge pull request #6029 from sturkmen72:patch-7 2016-06-29 11:55:09 +00:00
Alexander Alekhin
cb48183d02 Merge pull request #6711 from Dubrzr:vs_compile_cuda_fix 2016-06-29 11:03:47 +00:00
Alexander Alekhin
c7fc9dc42f Merge pull request #6707 from tech2077:master 2016-06-29 11:00:49 +00:00
Tomoaki Teshima
78a5aacb22 make NEON more similart to SSE2 2016-06-29 12:11:10 +09:00
Alexander Alekhin
73e16dbc3f cmake: update arm toolchain 2016-06-28 20:06:59 +03:00
Alexander Alekhin
bbc327aaed Merge pull request #6736 from alalek:cmake_fix_install_path 2016-06-28 16:53:45 +00:00
PkLab.net
adcdab394b Merge branch 'master' of git://github.com/Itseez/opencv into doc_videoio_enums
# Resolved Conflicts:
#	modules/videoio/include/opencv2/videoio.hpp
2016-06-28 16:40:30 +02:00
Alexander Alekhin
c5a8619493 cmake: fix install path
CMake doesn't work with empty paths ("") or paths which contains "./"
2016-06-28 13:29:00 +03:00
Alexander Alekhin
02edfc8df2 Merge pull request #6730 from sturkmen72:patch-16 2016-06-28 05:36:15 +00:00
Alexander Alekhin
6b511751f5 Merge pull request #6619 from Slonegg:openni2_ir_stream 2016-06-28 05:21:25 +00:00
PkLab.net
f274c592e4 Use copydoc for the list of valid property identifier in VideoCapture and VideoWriter docs 2016-06-27 19:17:51 +02:00
PkLab.net
6c3d8abe2c Doxygen documentation for CAP_* enums (using current comments in code) 2016-06-27 19:09:23 +02:00
Dmitry Trifonov
f9e6741807 added support for OpenNI2 IR stream #4366 2016-06-27 10:04:59 -07:00
Alexander Alekhin
86b54a52f0 Merge pull request #6733 from simonhaenisch:simonhaenisch-improve-watershed.py-example 2016-06-27 16:44:24 +00:00
Simon Hänisch
6489d8a96f update watershed.py: check if windows are still open
change the `while` loop to check if the two windows created by this example still exist, stop the program otherwise
2016-06-27 17:03:37 +02:00
Suleyman TURKMEN
e7ec580318 Update imgcodecs.hpp 2016-06-27 16:38:47 +03:00
Alexandr Kondratev
a4e9712006 Compilate switch-case with GTK_SCROLL_SMOOTH since GTK>=3.4 2016-06-27 13:34:41 +03:00
sarthak
43dca117b9 opencv viz bug
removed binary

update
2016-06-27 14:12:55 +05:30
Suleyman TURKMEN
11ca1c95f8 update cpp samples and tutorials 2016-06-26 20:55:00 +03:00
Suleyman TURKMEN
1b22783d46 Update grfmt_png.cpp 2016-06-26 20:03:03 +03:00
Alexandr Kondratev
fd78e2cc6c highgui module: removed unused type_mouse_event mouse_wheel 2016-06-25 00:47:22 +03:00
Alexandr Kondratev
3cbd14d61a pull highgui mouse wheel changes linux into master 2016-06-25 00:42:47 +03:00
Alexandr Kondratev
6020dacc11 highgui module: implemented QT and GTK mouse wheel callback support in linux 2016-06-25 00:18:07 +03:00
MYLS
df5a7c8ee9 build again for OpenCL.
I could not find the cause of the error:

```
C:\builds_ocv\precommit_opencl\opencv\modules\ts\src\ts_perf.cpp(361):
error: The difference between expect_max and actual_max is
8445966.0000002384, which exceeds eps, where

expect_max evaluates to 0.9999997615814209,

actual_max evaluates to 8445967, and

eps evaluates to 1.0000000000000001e-005.

Argument "dst0" has unexpected maximal value
```

Hope this is a false alarm.
2016-06-25 02:24:33 +08:00
MYLS
677d4d20ce fixed an error in the test... 2016-06-25 00:37:13 +08:00
MYLS
959002fb96 solve warnings and errors in test. 2016-06-24 23:41:40 +08:00
MYLS
7c92ee2e6e Split cvWriteRawData_Base64 into three functions
The three new functions:

```cpp
void cvStartWriteRawData_Base64(::CvFileStorage * fs, const char* name,
int len, const char* dt);
void cvWriteRawData_Base64(::CvFileStorage *
fs, const void* _data, int len);
void
cvEndWriteRawData_Base64(::CvFileStorage * fs);
```

Test is also updated. (And it's remarkable that there is a bug in
`cvWriteReadData`.)
2016-06-24 22:27:42 +08:00
Alexander Alekhin
0e436c3fe9 Merge pull request #6721 from alalek:tbb_update 2016-06-24 12:54:55 +00:00
Suleyman TURKMEN
d2bad6febb cv::TickMeter class addition 2016-06-23 19:06:57 +03:00
Vitaly Tuzov
eaec95dcf2 Update TBB 2016-06-23 11:48:48 +03:00
Alexander Alekhin
0ebe387cb2 Merge pull request #6713 from alalek:cmake_install_fix 2016-06-22 20:35:15 +00:00
Alexander Alekhin
f0dc7a25e7 Merge pull request #6712 from alalek:cmake_export_fix 2016-06-22 20:34:46 +00:00
Alexander Alekhin
f57e3ce5f3 cmake: don't use absolute paths with/without CMAKE_INSTALL_PREFIX
CPack can't work with absolute paths.
2016-06-22 16:38:54 +03:00
Alexander Alekhin
09ce987552 cmake: fix export issue
opencv_ts is static internal library and in case of exporting
it requires all static dependencies (include HAL files)
2016-06-22 15:34:46 +03:00
Matthew Skolaut
f861d0d643 merge #ifs in highgui bindings 2016-06-21 17:16:16 -05:00
Alexander Alekhin
a76fd43599 Merge pull request #6709 from alalek:cmake_hal_fix 2016-06-21 19:27:02 +00:00
Julien Dubiel
33ab236ed3 Use CMAKE_LIBRARY_PATH_FLAG variable instead of -L. 2016-06-21 20:00:50 +02:00
Alexander Alekhin
09c2a8b7ad cmake: fix HAL dependencies for core module
Linker dependencies are transitive for non-private
2016-06-21 19:50:32 +03:00
Alexander Alekhin
be38a524a8 Merge pull request #6705 from alalek:fix_hal_imgproc 2016-06-21 16:24:29 +00:00
Alexander Alekhin
61492ea0dc Merge pull request #6708 from alalek:pr6477 2016-06-21 15:38:41 +00:00
Alexander Alekhin
96937bac74 Merge pull request #6581 from mshabunin:hal_mag 2016-06-21 13:16:17 +00:00
Alexander Alekhin
89cd74093e Merge pull request #6704 from alalek:cmake_cmp0042 2016-06-21 10:46:08 +00:00
Matthew Skolaut
7284a77cd3 fix casting warning in python createButton binding 2016-06-20 21:07:24 -05:00
Matthew Skolaut
e8bfb48490 Merge branch 'master' of https://github.com/Itseez/opencv
Added python binding for createButton
2016-06-20 16:24:23 -05:00
Matthew Skolaut
9b959072a2 added python binding for createButton 2016-06-20 16:24:15 -05:00
Alexander Alekhin
2fb670cf09 hal: fix missing include "opencv2/imgproc/hal/interface.h" 2016-06-20 19:25:49 +03:00
Alexander Alekhin
f5306a0740 cmake: change CMP0042 policy value 2016-06-20 18:28:12 +03:00
Alexander Alekhin
4597b94099 Merge pull request #5980 from alalek:cmake_opencv_config 2016-06-20 15:27:43 +00:00
Alexander Alekhin
c6c651212c cmake: refactoring of OpenCVConfig
- removed OpenCV_LIB_DIR* vars (they are broken and not required anymore)
- OpenCVConfig.cmake doesn't contain ANDROID/CUDA code if there is no such support
- removed OpenCV2_INCLUDE_DIRS_CONFIGCMAKE, merged into OpenCV_INCLUDE_DIRS_CONFIGCMAKE
- fix hard-coded relative paths for OpenCV_INSTALL_PATH
- removed OpenCV_TBB_ARCH
- switch OpenCVConfig.cmake into 2-level mode for Android SDK
2016-06-20 15:15:21 +03:00
Alexander Alekhin
7188e6e2ac android: update build scripts 2016-06-20 15:15:21 +03:00
MYLS
29921d055d change the parameter to CvMat and CvMatND
```cpp
cvWriteMat_Base64(::cv::FileStorage & fs, ::cv::String const & name,
::cv::Mat const & mat)
```
becomes:
```cpp
CV_EXPORTS void cvWriteMat_Base64(::CvFileStorage* fs, const char* name,
const ::CvMat* mat);
CV_EXPORTS void
cvWriteMatND_Base64(::CvFileStorage* fs, const char* name, const
::CvMatND* mat);
```
2016-06-20 16:59:58 +08:00
MYLS
9faa2a7fd0 solve warning for IOS
Two test are still needed:

1. Verify the Base64 data.
2. Read an old YML file for compatibility test.
2016-06-19 02:44:39 +08:00
MYLS
958263d245 Solve warnings, and adjusted the test case. 2016-06-19 02:00:32 +08:00
MYLS
882e4221e7 fix errors from test.
Two other test are still needed.

1. Verify the Base64 data.
2. Read an old YML file for compatibility test.
2016-06-19 00:45:51 +08:00
MYLS
d1b097f409 fix most coding style warnings and errors 2016-06-18 23:28:12 +08:00
MYLS
7b1f7c8d8e Add Base64 support for FileStorage
1. Add Base64 support for reading and writing XML\YML file.

The two new functions for writing:

```cpp
void cvWriteRawData_Base64(cv::FileStorage & fs, const void* _data, int
len, const char* dt);
void cvWriteMat_Base64(cv::FileStorage & fs, cv::String const & name,
cv::Mat const & mat);
```

2. Change YML file header form `YAML:1.0` to `YAML 1.0`. (standard
format)

3. Add test for Base64 part.
2016-06-18 22:14:11 +08:00
MYLS
ecd827fc8e Add Base64 support for FileStorage
[GSoC] FileStorage:
Add base64 support for reading and writting XML\YML file.
The two new functions:
```
void cvWriteRawData_Base64(cv::FileStorage & fs, const void* _data, int
len, const char* dt);
void cvWriteMat_Base64(cv::FileStorage & fs, cv::String const & name,
cv::Mat const & mat);
```
2016-06-18 21:40:29 +08:00
Alexander Alekhin
31952fbf1c Merge pull request #6675 from pnordhus:matconstiterator_reference 2016-06-17 10:12:51 +00:00
Alexander Alekhin
bd9cc2dfc6 Merge pull request #6668 from yadavankit:master 2016-06-17 10:11:49 +00:00
Alexander Alekhin
54f190cba3 Merge pull request #6692 from ilya-lavrenov:lintian 2016-06-17 09:44:20 +00:00
Ilya Lavrenov
6677f81779 fixed lintian warnings 2016-06-17 11:00:36 +03:00
Vadim Pisarevsky
547a2d29c3 Merge pull request #6535 from sovrasov:lapack-hal 2016-06-16 20:09:47 +00:00
Vadim Pisarevsky
4142e737b0 Merge pull request #6453 from sovrasov:extend_calibrateCamera 2016-06-16 18:28:49 +00:00
Alexander Alekhin
dafb4b81da Merge pull request #6691 from alalek:cmake_fix_android_samples_2.4 2016-06-16 15:56:33 +00:00
Alexander Alekhin
7fadf570b8 Merge pull request #6690 from alalek:cmake_fix_android_samples 2016-06-16 15:56:19 +00:00
Alexander Alekhin
c6be51eecd cmake: fix JNI configuration problem for Android samples
Some CMake 3.x (2.8.12.2 is fine) provides broken build configurations
with following build error message:
    ld: fatal error: -soname: must take a non-empty argument

Linker command line sample contains this:
"-shared -Wl,-soname, -o"
2016-06-16 16:08:35 +03:00
Alexander Alekhin
aa861520f6 Merge pull request #6689 from ilya-lavrenov:il/fix 2016-06-16 11:39:20 +00:00
Alexander Alekhin
777e1d38ba cmake: fix JNI configuration problem for Android samples
Some CMake 3.x (2.8.12.2 is fine) provides broken build configurations
with following build error message:
    ld: fatal error: -soname: must take a non-empty argument

Linker command line sample contains this:
"-shared -Wl,-soname, -o"
2016-06-16 14:32:07 +03:00
Ilya Lavrenov
e0d64df763 fixed -Wunused-result warning 2016-06-16 12:53:59 +03:00
Tomoaki Teshima
addb15383a fix run time error 2016-06-16 18:14:53 +09:00
Alexander Alekhin
c3456c0754 Merge pull request #6685 from ioxp:dofDocu 2016-06-15 20:43:11 +00:00
Alexander Alekhin
68c63188eb Merge pull request #6683 from alalek:cmake_hal 2016-06-15 17:18:56 +00:00
Philipp Hasper
45bd56e28a rigidTransform: only four DoF
combinations of translation, rotation, and uniform scaling equals four degrees of freedom
2016-06-15 16:41:39 +02:00
Alexander Alekhin
f4ebc504d1 cmake: refactor HAL attaching process 2016-06-15 17:34:30 +03:00
Aleksandar Atanasov
0637ca21dc Update houghlines.py 2016-06-13 09:00:42 +02:00
Aleksandar Atanasov
4fa86dad26 Update houghcircles.py 2016-06-13 09:00:29 +02:00
Aleksandar Atanasov
445349dd7d Same fix as with the houghcircles
Moved second `imshow()` inside the if-statement to prevent error when no lines have been found and the function is called with an empty `cdst`.
2016-06-12 12:55:29 +02:00
Aleksandar Atanasov
c5bbc0353c Added small fix when circles are not detected
I noticed that I missed the fact that `cimg` is used in the second `imshow()` call. Changed the scope of the second function call to be within the if-statement. Otherwise in cases where have not been detected the second `imshow()` will attempt to use `cimg` which will be empty leading to an error.
2016-06-12 12:54:16 +02:00
Philipp Nordhus
4a529cd641 Return reference on iterator indirection/subscript 2016-06-11 15:17:52 +02:00
Ankit Yadav
c62eda023d Fix typo 2016-06-11 17:56:58 +05:30
S. Garrido
e5d12502c5 Fix useExtrinsicGuess in solvePnP 2016-06-10 13:09:32 +01:00
Tomoaki Teshima
87d0c91dcf fix warning of build 2016-06-09 18:24:00 +09:00
Aleksandar Atanasov
25e2e8aa3c Removed trailing spaces at line 32 2016-06-09 07:18:47 +02:00
Tomoaki Teshima
d0a8390963 fix run time error on Mac
* integrate HW version and SW version to same function
2016-06-09 08:41:37 +09:00
Alexander Alekhin
e3844e0f26 Merge pull request #6649 from adamrankin:msmf_crash_fix 2016-06-08 16:30:55 +00:00
Alexander Alekhin
77849d0033 Merge pull request #6654 from asmorkalov:gzip_timestamp 2016-06-08 14:32:45 +00:00
Alexander Smorkalov
9fee699693 Fixed package-contains-timestamped-gzip lintian warning for Debian packages. 2016-06-08 14:18:38 +03:00
Adam Rankin
2577194c70 Correcting return type from videoDevice::findType to be int thus allowing detection of failed device init request 2016-06-07 15:18:40 -04:00
Alexander Alekhin
1b6e02793c Merge pull request #6645 from tomoaki0705:fixTypoEigen 2016-06-07 13:51:30 +00:00
Tomoaki Teshima
fd76ed5c0f fix to support wider compiler
* check compiler more strictly
  * use gcc version of fp16 conversion if it's possible (gcc 4.7 and later)
  * use current SW implementation in other cases
2016-06-07 18:32:47 +09:00
Tomoaki Teshima
6f6eebbcb9 fix warning 2016-06-07 18:31:18 +09:00
Vladislav Sovrasov
46fb46c54e Add an extended version of CalibrateCamera function 2016-06-07 12:31:11 +03:00
Vladislav Sovrasov
055f5c7395 Change names of some internal functions 2016-06-07 10:58:12 +03:00
Tomoaki Teshima
d1c1c01761 fix typo 2016-06-07 14:53:04 +09:00
Tomoaki Teshima
fbfd3158a7 fix corner case when number is small 2016-06-07 08:59:28 +09:00
Tomoaki Teshima
15f8bc6f37 fix cmake
* enable fp16 feature correctly with gcc on x86/x86_64
2016-06-06 21:48:18 +09:00
Maksim Shabunin
532885c12b Merge pull request #6607 from alalek:issue_6604 2016-06-06 09:20:58 +00:00
Maksim Shabunin
89a1e806b7 Merge pull request #6628 from sovrasov:hal_samples_update 2016-06-06 09:18:27 +00:00
Tomoaki Teshima
4239bac4ed fix warning of doc
* update the comment to real header
2016-06-06 18:06:23 +09:00
Tomoaki Teshima
eccf2fa4c3 follow other interface
* remove useHW option
  * update test
2016-06-06 08:56:37 +09:00
k-shinotsuka
43d5988df6 improve to calculate norm 2016-06-05 16:55:02 +09:00
Suleyman TURKMEN
7c5b981c17 Update drawing.cpp 2016-06-05 01:06:55 +03:00
Gilles Rochefort
2717ba735a Fixed BackgroundSubstractorMOG2 ocl implementation. 2016-06-03 22:17:22 +02:00
Vladislav Sovrasov
901e1e4608 Update HAL samples 2016-06-03 11:52:30 +03:00
Vladislav Sovrasov
a2d0cc878c Implement internal HAL for GEMM and matrix decompositions 2016-06-03 10:38:30 +03:00
Louis Letourneau
c03d778ec7 This fixes the seeking in h264 B-Frame enabled video issue. #4890 2016-06-02 11:24:37 -04:00
Susmit
d913463932 Terrible bugs in the tutorial code in py_pose.markdown
There were two bugs that were solved here.Changes were done after extreme testing.
1.replaced cv2.solvePnPRansac() with cv2.solvePnP() previous fc was giving terrible errors.
2.The code was incapable of saving edited pics;Now fixed with little code mods.
2016-06-02 17:47:45 +05:30
Aleksandar Atanasov
14deab252b Fix houghlines.py when no lines found
In the C++ equivalent of this example a check is made whether the vector (here in Python we have a list) actually has any lines in it that is whether the Hough lines function has managed to find any in the given image. This check is missing for the Python example and if no lines are found the application breaks.
2016-06-02 11:00:23 +02:00
Aleksandar Atanasov
cf0df733da Fix houghcircles.py when no circles found
In the C++ equivalent of this example a check is made whether the vector (here in Python we have a list) actually has any circles in it that is whether the Hough circles function has managed to find any in the given image. This check is missing for the Python example and if no circles are found the application breaks.
2016-06-02 10:58:46 +02:00
Aleksandar Atanasov
5d4f22e096 Merge pull request #1 from Itseez/master
Updating own opencv fork to 3.x
2016-06-02 10:53:22 +02:00
Susmit
98dce911ca Update py_calibration.markdown
In the camera calibration code { cv2.cornerSubPix() } will be of no use.In the updated code it is assigned to the (corners2) variable 
which is passed down to { cv2.drawChessboardCorners() }
2016-06-02 01:06:17 +05:30
Alexander Alekhin
e1ba4399e8 Merge pull request #6611 from tomoaki0705:fixPerformanceSplitAarch64 2016-06-01 10:34:33 +00:00
Tomoaki Teshima
070e4d754e let the performance test of split pass on 64bit ARM
* loosen the threshold only under aarch64
  * fix #6610
2016-05-31 23:57:49 +09:00
Alexander Alekhin
d3930cdee1 Merge pull request #6482 from paroj:filestorage_py 2016-05-31 11:53:34 +00:00
Vadim Pisarevsky
a2d8e7fa6e Merge pull request #6485 from vagran:vagran-patch-1 2016-05-31 10:58:18 +00:00
Vadim Pisarevsky
7f9319924b Merge pull request #6537 from Slonegg:opeeni2_multiple_devices 2016-05-31 10:35:44 +00:00
Vadim Pisarevsky
40686415f9 Merge pull request #6593 from bramton:documentation-update 2016-05-31 10:32:18 +00:00
Vadim Pisarevsky
904cfa576c Merge pull request #6597 from sturkmen72:issue_4678 2016-05-31 10:31:15 +00:00
Alexander Alekhin
ff0601cda5 core: prevent changes in 'std' namespace 2016-05-31 13:02:15 +03:00
Maksim Shabunin
1e667de1f3 HAL math interfaces: fastAtan2, magnitude, sqrt, invSqrt, log, exp 2016-05-31 11:54:52 +03:00
Alexander Alekhin
f6fa1cee2b Merge pull request #6008 from amroamroamro:fix_sparse_snippet 2016-05-31 08:19:38 +00:00
Marek Smigielski
ef45005056 Adding support for pointer generation. Fixes #6605 2016-05-31 08:35:50 +02:00
Maksim Shabunin
c344435378 Merge pull request #6602 from berak:patch-1 2016-05-30 14:19:19 +00:00
debjan
7f52a553d4 Update gen_pattern.py
Save method should save, instead trying to run inkview
2016-05-30 10:47:59 +02:00
berak
a2b353d178 Update non_linear_svms.cpp
fix for #6598
2016-05-30 06:56:28 +02:00
Gilles Rochefort
9e53f03968 Fixed BackgroundSubstractorMOG2 in opencv_video.
The number of gaussians involved in a mixture is supposed
to be dynamically adjusted. After being increased, the number
of gaussians can't be reduced anymore.

It seems to be a regression as the legacy code
located in modules/legacy/src/bgfg_gaussmix.cpp allows to reduce
such number of gaussians.
2016-05-29 17:46:33 +02:00
Gilles Rochefort
78de75397e Fixed BackgroundSubstractorMOG2 in opencv_video.
The number of gaussians involved in a mixture is supposed
to be dynamically adjusted. After being increased, the number
of gaussians can't be reduced anymore.

It seems to be a regression as the legacy code
located in modules/legacy/src/bgfg_gaussmix.cpp allows to reduce
such number of gaussians.
2016-05-29 17:25:02 +02:00
Suleyman TURKMEN
e59da10bf1 Update highgui.hpp 2016-05-28 05:25:25 +03:00
Alexander Alekhin
19e79d6727 Merge pull request #6596 from asmorkalov:g++5_abi 2016-05-27 12:44:38 +00:00
Alexander Smorkalov
a8b2b4dba1 Packaging fixes for Ubuntu 16.04. 2016-05-27 13:46:12 +03:00
Bram Ton
dfd5191e8b Minor additions to the documentation. 2016-05-26 16:35:20 +02:00
Maksim Shabunin
eca752368b Merge pull request #6592 from guysoft:fix_6500_fix2 2016-05-26 14:15:15 +00:00
Alexander Alekhin
4547427946 Merge pull request #6589 from tomoaki0705:fixThresh64fTest 2016-05-26 12:44:56 +00:00
Guy Sheffer
0a48b9ae77 Fix #6500 cmake bug that adds D_FORCE_INLINES to NVCC 2016-05-26 13:45:50 +03:00
Maksim Shabunin
60f799ada5 Merge pull request #6583 from mshabunin:doc-warnings-fix 2016-05-26 09:54:26 +00:00
Tomoaki Teshima
bbeac745ca Update test case for 64F version 2016-05-26 08:38:29 +09:00
Maksim Shabunin
cbf2b79e1f Fixed documentation warnings produced by updated doxygen 2016-05-25 18:04:32 +03:00
Pavel Rojtberg
bf688da50b FileStorage: add simplified API for bindings
at least it is possible to read/ write calibration files. Fixes #4282.

Also add CPP method for writing comments.
2016-05-25 16:01:55 +02:00
Vadim Pisarevsky
0cb1e96472 Merge pull request #6546 from atinfinity:pullreq/160517-threshold-64F 2016-05-25 13:19:50 +00:00
Vadim Pisarevsky
0fc26f80d7 Merge pull request #6547 from mshabunin:python-vector-pair-int-double 2016-05-25 13:17:15 +00:00
Vadim Pisarevsky
90b844792d Merge pull request #6548 from fnorf:master 2016-05-25 13:16:07 +00:00
Vadim Pisarevsky
98c9d47537 Merge pull request #6551 from mshabunin:fix-old-cmake 2016-05-25 13:13:50 +00:00
Maksim Shabunin
a191c043ae Merge pull request #6573 from dharezlak:patch-1 2016-05-24 15:28:27 +00:00
Maksim Shabunin
64a5126ff8 Merge pull request #6018 from sturkmen72:patch-2 2016-05-23 11:57:26 +00:00
dharezlak
308b47ce58 Improved Java wrapper generation
While generating Java JNI wrappers package names with an underscore (`_`) character where not properly escaped according to https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/design.html#resolving_native_method_names (see also: https://github.com/Itseez/opencv_contrib/issues/652).

This fix replaces all the occurrences of `_` with `_1` resulting in proper JNI method names.
2016-05-23 11:13:18 +02:00
Maksim Shabunin
c393a7a98f Merge pull request #6564 from jlguardi:ml_load_empty_ptr 2016-05-23 08:41:05 +00:00
Maksim Shabunin
5c54360fb9 Merge pull request #6565 from jlguardi:ann_64f_bug 2016-05-23 08:39:25 +00:00
Maksim Shabunin
e2939f7788 Merge pull request #6570 from sturkmen72:patch-14 2016-05-23 08:36:16 +00:00
Tomoaki Teshima
b2ad7cd9c0 add feature to convert FP32(float) to FP16(half)
* check compiler support
  * check HW support before executing
  * add test doing round trip conversion from / to FP32
  * treat array correctly if size is not multiple of 4
  * add declaration to prevent warning
  * make it possible to enable fp16 on 32bit ARM
  * let the conversion possible on non-supported HW, too.
  * add test using both HW and SW implementation
2016-05-21 21:31:33 +09:00
Suleyman TURKMEN
c6e6d4c822 Update pca.cpp 2016-05-21 14:23:45 +03:00
Suleyman TURKMEN
abab67b574 Update imgproc.hpp
update documentation of calcBackProject() calcHist() compareHist()
2016-05-21 14:08:14 +03:00
Alexander Alekhin
60dc8bcf8e Merge pull request #6554 from CSBVision:patch-1 2016-05-20 19:42:15 +00:00
Alexander Alekhin
b07944df23 Merge pull request #6561 from tomoaki0705:fixMulSpectrumAarch64 2016-05-20 19:39:09 +00:00
Alexander Alekhin
a0a8acadb7 Merge pull request #6559 from OzgrCn:cuda-ORB-useProvidedKeypoints 2016-05-20 19:38:31 +00:00
Jose Luis Guardiola
a812989436 Fixed #6563: Incorrect management for invalid files/filestorage/filenode in ml module 2016-05-20 13:18:02 +02:00
Jose Luis Guardiola
2bb520e277 Fixed #6562: Incorrect CV_64F management in ANN 2016-05-20 13:16:59 +02:00
Özgür Can
4951543441 Fix issue #6473
Enable "useProvidedKeypoints" flag on cuda::ORB's detectAndCompute function in order to able to describe provided keypoints.

* additional author : Ender Tunç <endertunc@yahoo.com>

resolves #6473

 * Enable "useProvidedKeypoints" flag on cuda::ORB's detectAndCompute function in order to able to describe provided keypoints.

   Update for using 'const' reference to avoid array copy on each iteration.

resolves #6473

	Update for 'const' reference to avoid array copy on each iteration.
2016-05-20 13:19:14 +03:00
Maksim Shabunin
16f4baa3f6 Merge pull request #6498 from berak:python_size_t 2016-05-20 09:45:52 +00:00
Tomoaki Teshima
bfcb40ad77 fix Core_MulSpectrum test on 64bit ARM + release mode
* fix issue #6536
  * increase threshold in particular tests due to the difference of fmsub and fsub
2016-05-20 18:25:32 +09:00
DozyC
6c4aae98f7 tapi examples - Removing defaults from all command line switches accessed with has() 2016-05-19 23:27:05 -07:00
Han Hu
e646f9d2f1 Fix subpixel problem of akaze.
This is found in the original akaze repo. Previous sub pixel localization method assumes the coordinate (0, 0) is the up-left corner of the up-left pixel. But as far as I know, opencv uses the center of the up-left corner, in this case it should be done in this way.

35aeb83a71
db3dc22981
2016-05-20 11:45:46 +08:00
CSBVision
d72625d506 neural_network.cpp added 2016-05-19 15:40:42 +02:00
Maksim Shabunin
d043a61897 Restored cmake 2.8.7 support 2016-05-18 13:20:21 +03:00
Maksim Shabunin
c3d1f94ee6 Merge pull request #6446 from kevin-coder:bugfix_6445 2016-05-18 09:40:26 +00:00
Maksim Shabunin
2124cb1192 Merge pull request #6545 from alalek:backport_6541 2016-05-18 09:39:48 +00:00
atinfinity
1f1464c925 remove unnecessary cast 2016-05-18 08:32:29 +09:00
Hannes
66549414dd fixed "tot_error" to "mean_error" & nicer whitespace 2016-05-17 20:00:28 +02:00
Hannes
3b2a194c30 fixed "corners2" to "corners" & nicer whitespace 2016-05-17 19:36:32 +02:00
atinfinity
ef0931be44 fixed compilation warning 2016-05-18 00:34:51 +09:00
Maksim Shabunin
8011be2810 Python bindings: added std::vector< std::pair< int, double > > type read support 2016-05-17 17:26:27 +03:00
atinfinity
6930325847 Added test case of cv::threshold(CV_64F) 2016-05-17 22:57:05 +09:00
atinfinity
e4f207c4b4 Changed cv::threshold() to support CV_64F 2016-05-17 22:56:03 +09:00
Alexander Alekhin
764a1f5947 Merge pull request #6543 from tomoaki0705:cudaThresholdMultiChannels 2016-05-16 13:18:01 +00:00
Maksim Shabunin
3092a0982a Merge pull request #6541 from mshabunin:disable-pch-for-gcc6 2016-05-16 13:12:23 +00:00
Maksim Shabunin
fb598bb76a Disabled PCH support for gcc >= 6.0.0
Command line generation routine uses "-isystem" to include headers outside of "<opencv>/modules" folder, but GCC 6 does not work when passed "-isystem /usr/include" option.
2016-05-16 15:00:16 +03:00
Tomoaki Teshima
b6a093fba1 accept multiple channels image for threshold on cuda
* modify test, too
2016-05-16 06:45:35 +09:00
Maksim Shabunin
a0fdc91a14 Disabled PCH support for gcc >= 6.0.0
Command line generation routine uses "-isystem" to include headers outside of "<opencv>/modules" folder, but GCC 6 does not work when passed "-isystem /usr/include" option.
2016-05-13 13:32:09 +03:00
Maksim Shabunin
d6b8563530 Merge pull request #6460 from m039:fix/add_extra_modules_path_to_build_sdk 2016-05-13 09:01:46 +00:00
Maksim Shabunin
925d8c1dec Merge pull request #6522 from tomoaki0705:fixVSqrtAarch64 2016-05-13 09:00:12 +00:00
Dmitry Trifonov
688ebd8960 add support for multiple OpenNI2 devices 2016-05-12 18:12:51 -07:00
Dmitry Mozgin
03e4b7552e Added --extra_modules_path to build_sdk.py 2016-05-12 12:36:42 +03:00
Tomoaki Teshima
7077d1de63 fix hal_intrin test on 64bit ARM
* fix issue 6521
  * use correct comparison
2016-05-12 18:30:09 +09:00
Alexander Alekhin
72ec643129 Merge pull request #6483 from StevenEWright:patch-1 2016-05-11 10:41:09 +00:00
Alexander Alekhin
79134b6ae6 Merge pull request #6354 from StevenPuttemans:add_model_visualisation_tool 2016-05-11 08:38:11 +00:00
StevenPuttemans
02fe93a399 add a cascade classifier model visualisation tool for master branch 2016-05-11 08:56:42 +02:00
DozyC
3db19c046b Fix command line argument handling, fixes #6525 2016-05-10 17:20:59 -07:00
Alexander Smorkalov
af64ecdf25 Merge pull request #6510 from jet47:cuda-8.0-build-fix 2016-05-06 10:07:28 +00:00
Vladislav Vinogradov
10896129b3 GraphCut deprecated in CUDA 7.5 and removed in 8.0 2016-05-06 11:37:32 +03:00
Alexander Alekhin
855c058d6e Merge pull request #6489 from serval2412:master 2016-05-03 13:43:39 +00:00
berak
11e563fd5d python: support for size_t args (default value) 2016-05-03 09:50:08 +02:00
Julien Nabet
a29c814bd8 cppcheck: fix some reports
All of these: (performance) Prefer prefix ++/-- operators for non-primitive types.
[modules/calib3d/src/fundam.cpp:1049] -> [modules/calib3d/src/fundam.cpp:1049]: (style) Same expression on both sides of '&&'.
2016-04-29 15:41:39 +02:00
Artyom Lebedev
8ceac4b73b Update fisheye.cpp
Fix for inconsistent asserts in cv::fisheye::initUndistortRectifyMap() which prevents from passing empty matrices in debug build (which is allowed according to the code bellow the asserts and the docs).
2016-04-28 12:50:09 +03:00
Steven E Wright
39f7eccdb0 Fixes minor typos. 2016-04-27 18:02:49 -07:00
Pavel Rojtberg
8ed1945ccd calibrationMatrixValues: consider principalPoint in FOV computation
The FOV depends on the principal point location. Use formula of
viz::Camera.
2016-04-27 14:47:52 +02:00
Pavel Rojtberg
86959310f9 calibrationMatrixValues: bind C++ function in C instead of vice versa 2016-04-27 11:39:19 +02:00
Alexander Alekhin
6e5e5d87df Merge pull request #6448 from alalek:merge-2.4 2016-04-25 16:56:51 +00:00
Vadim Pisarevsky
5ed4e1b887 Merge pull request #6459 from eliao:Fix6457 2016-04-25 13:07:51 +00:00
Vadim Pisarevsky
df6eb101e1 Merge pull request #6467 from ohnozzy:Doc-for-ocl-Kernel-Run 2016-04-25 13:07:34 +00:00
Vadim Pisarevsky
e587721d1c Merge pull request #6422 from iclemens:master 2016-04-25 13:06:42 +00:00
Vadim Pisarevsky
8cfddcfeb7 Merge pull request #6454 from paroj:fisheye_py 2016-04-25 12:54:44 +00:00
Vadim Pisarevsky
681fd7f214 Merge pull request #6455 from belgraviton:bugfix_5953 2016-04-25 12:50:45 +00:00
Vadim Pisarevsky
25e0c12274 Merge pull request #6458 from eliao:Fix6456 2016-04-25 12:49:16 +00:00
Vadim Pisarevsky
f4e00bd60f Merge pull request #6463 from ohnozzy:ocl-linearpolar-and-logpolar 2016-04-25 12:42:40 +00:00
Vadim Pisarevsky
cef45bd2ad Merge pull request #6364 from sovrasov:interactive_calibration_app 2016-04-25 12:39:56 +00:00
Vadim Pisarevsky
904381c602 Merge pull request #6020 from mshabunin:hal_dxt 2016-04-25 11:37:18 +00:00
Pavel Rojtberg
ccadad4222 fisheye: allow using transposed image and object point arrays 2016-04-25 11:16:26 +02:00
Pavel Rojtberg
8d4cebe077 fisheye: create rvecs, tvecs before writing 2016-04-25 11:16:26 +02:00
Vladislav Sovrasov
5a0c04409b Add interactive calibration app 2016-04-25 11:58:19 +03:00
ohnozzy
d66ed313cb Add Comment
Add documentation for Kernel::run
2016-04-25 11:30:12 +08:00
ohnozzy
db9f611767 Add OpenCL support to linearPolar & logPolar
Add OpenCL  support to linearPolar & logPolar.
The OpenCL code use float instead of double, so that it does not require
cl_khr_fp64 extension, with slight precision lost.

Add explicit conversion

Add explicit conversion from double to float to eliminate warning during
compilation.
2016-04-24 08:37:56 +08:00
Eric Liao
f87b175a19 Fix 6457
Allow configuration of the square size in stereo_calib.
2016-04-22 14:49:43 -07:00
Eric Liao
d3aaf8acf3 Change hardcoded relative path for instrinsics file to current path, matching the extrinsics file.
https://github.com/Itseez/opencv/issues/6456
2016-04-22 14:14:25 -07:00
Vadzim Piatrou
43f854bc5f fixing CLAHE crash with pixels value > 12 bit 2016-04-22 18:55:22 +03:00
Alexander Alekhin
67a734ce73 Merge branch '2.4' into master
Commits:
67fe57a add fixed video
db0ae2c Restore 2.4 source branch for bug fix 6317.
97ac59c Fix a memory leak indirectly caused by cvDestroyWindow
eb40afa Add a workaround for FFmpeg's color conversion accessing past the end of the buffer
421fcf9 Rearrange CvVideoWriter_FFMPEG::writeFrame for better readability
912592d Remove "INSTALL_NAME_DIR lib" target property
bb1c2d7 fix bug on border at pyrUp
2016-04-21 20:15:08 +03:00
Bob Paulin
bb8faec885 #6443 Cast maxscale from double to float for scale calculation. 2016-04-21 07:47:13 -05:00
Zhenqing, Hu
94a9e16943 Fix bug 6445
Root cause: when calling imread to read the pgm file, when returning with success reading file, the destructor will free the resource which used by memcpy, but in the code, the resource calculation was not correct, therefore, it will cause memory corruption during resource free.
2016-04-21 14:39:55 +08:00
Bob Paulin
b973b73ae7 Add -maxscale parameter to limit the amount sample images can scale in background images 2016-04-20 21:53:52 -05:00
Alexander Alekhin
59975db6a4 Merge pull request #6441 from asmorkalov:version++ 2016-04-20 14:21:19 +00:00
Alexander Alekhin
ec2ff7f0c0 Merge branch '2.4.12.x-prep' into 2.4 2016-04-20 16:26:12 +03:00
Alexander Alekhin
5d038686b1 Merge pull request #6401 from StevenPuttemans:add_model_visualisation_tool_2.4 2016-04-20 13:24:25 +00:00
Alexander Smorkalov
6084901610 OpenCV version++. 2016-04-20 16:03:47 +03:00
Maksim Shabunin
ec63343f34 Merge pull request #6420 from ioxp:foreachDoc 2016-04-20 11:55:03 +00:00
Alexander Alekhin
9ebe29a8f1 Merge pull request #6433 from schenker:master 2016-04-19 16:06:35 +00:00
Alexander Alekhin
e58c28974b Merge pull request #6431 from StevenPuttemans:add_fixed_video_2.4 2016-04-19 14:19:41 +00:00
Alexander Alekhin
1b4bd6a905 Merge pull request #6432 from kevin-coder:bugfix_6317_Restore_2.4 2016-04-19 13:32:44 +00:00
StevenPuttemans
67fe57a0a3 add fixed video 2016-04-19 15:30:49 +02:00
Thomas Schenker
76ced14b3b fix typo 2016-04-19 15:09:27 +02:00
Maksim Shabunin
5a938309c1 More compilation warnings fixed 2016-04-19 16:08:48 +03:00
Maksim Shabunin
11378fcb17 Fixed compiation problems 2016-04-19 14:50:07 +03:00
Kevin, Hu
db0ae2ca50 Restore 2.4 source branch for bug fix 6317. 2016-04-19 19:27:42 +08:00
Alexander Alekhin
289b6ff2a5 Merge pull request #6393 from paroj:v4l_exposure 2016-04-18 15:14:21 +00:00
Alexander Alekhin
9e9165c25e Merge pull request #5516 from AVshokurov:master 2016-04-18 15:13:14 +00:00
Alexander Alekhin
de164b0ccf Merge pull request #6421 from alalek:backport_6417 2016-04-18 15:12:17 +00:00
Maksim Shabunin
5e9192287d Added HAL cvtColor interface 2016-04-18 16:34:25 +03:00
Ivar Clemens
3287ab386c Fixed typo in BRISK feature detector. 2016-04-18 13:04:04 +01:00
Alexander Alekhin
d02f17c39d Merge pull request #6397 from ioxp:androidCamLog 2016-04-18 11:56:18 +00:00
Suleyman TURKMEN
194f1beae8 fix for writing 16-bit jpeg2000 2016-04-18 14:51:55 +03:00
Philipp Hasper
c52759432d Fixing doc for cv::Mat::forEach
image.forEachWithPosition does not exist
2016-04-18 13:51:07 +02:00
Alexander Alekhin
08761f5fb5 Merge pull request #6410 from alalek:issue_6403 2016-04-18 11:43:14 +00:00
Alexander Alekhin
68b7323b4e Merge pull request #6417 from sturkmen72:patch-14 2016-04-18 10:35:28 +00:00
Alexander Alekhin
c02d89bf2d Merge pull request #6408 from dtmoodie:InputOutputArray_constructor_fix 2016-04-18 10:34:43 +00:00
Alexander Alekhin
a513f482c0 Merge pull request #6406 from ohnozzy:Bug-Fix-for-Issue-6377 2016-04-18 10:29:29 +00:00
Alexander Alekhin
9393a0c5bb cmake: don't use -isystem for opencv_contrib paths 2016-04-18 12:48:14 +03:00
Maksim Shabunin
809c159e11 Merge pull request #6414 from mshabunin:fix-macosx-warnings 2016-04-17 22:11:57 +00:00
Maksim Shabunin
ba3b1de93f Updates for XCode 7.3 2016-04-17 20:21:29 +03:00
Alexander Alekhin
169b5e9fde Merge pull request #6359 from alalek:videocapture_exceptions 2016-04-17 09:30:43 +00:00
Suleyman TURKMEN
98239664f6 fix for writing 16-bit jpeg2000 2016-04-17 00:37:28 +03:00
Maksim Shabunin
3bd6912e01 Merge pull request #6415 from mshabunin:fix-xcode-warnings-24 2016-04-16 06:39:00 +00:00
Maksim Shabunin
1a41ed2fda Updates for XCode 7.3 2016-04-15 21:56:50 +03:00
Dan
e9461d3feb templated std::vector<T> constructor was being called instead of const std::vector<cv::cuda::GpuMat>. 2016-04-14 15:50:24 -04:00
Alexander Alekhin
0df901b389 Merge pull request #6404 from solosuper:bugfix/issue6315 2016-04-14 14:27:59 +00:00
Alexander Alekhin
ccff20328d Merge pull request #6407 from StevenPuttemans:fix_ts_perf_warnings 2016-04-14 14:27:27 +00:00
Alexander Alekhin
ac32450c38 Merge pull request #6405 from StevenPuttemans:fix_gstreamer_cap_linux 2016-04-14 14:27:12 +00:00
StevenPuttemans
88c0d64b4e fixing gstreamer cap 2016-04-14 14:16:05 +02:00
StevenPuttemans
c34bb0ed03 remove warnings generated during TS module tests 2016-04-14 13:48:11 +02:00
ohnozzy
9be6b4f2d1 Bug Fix for 6377
Rewrite linearPolar & logPolar so that they do not depend on the
deprecated API CvMat. Issue 6377 is resolved in this way because the two
routines do not convert UMat to CvMat anymore.
2016-04-14 19:39:02 +08:00
solosuper
372890f1d7 fix #6315 2016-04-14 11:57:49 +02:00
StevenPuttemans
9d71c19939 add visualisation tool for 2.4 branch 2016-04-14 11:33:37 +02:00
Maksim Shabunin
fc5e32c7ac Merge pull request #6305 from rishirajsurti:master 2016-04-14 08:42:40 +00:00
rishirajsurti
4a9170ba42 Thresholding Tutorial using inRange function on a video 2016-04-14 11:55:52 +05:30
Alexander Alekhin
5b73f3a316 Merge pull request #6373 from terfendail:vt/stereobm_valgrind 2016-04-13 13:38:53 +00:00
Maksim Shabunin
ed508dc8ed Merge pull request #6399 from mshabunin:fix-flann-memleak 2016-04-13 11:34:58 +00:00
Alexander Alekhin
fc55e54aa1 Merge pull request #6318 from paroj:gst_cap_props 2016-04-13 10:05:40 +00:00
Maksim Shabunin
98763528ab Merge pull request #6382 from StevenPuttemans:update_annotation_tool 2016-04-13 10:05:26 +00:00
Maksim Shabunin
96d747f030 Merge pull request #6384 from StevenPuttemans:update_annotation_tool_2.4 2016-04-13 10:02:56 +00:00
Maksim Shabunin
b99d010977 Fixed memory leak in flann KMeansIndex 2016-04-13 12:08:42 +03:00
StevenPuttemans
b922d49a28 vectorize process + enable early quitting/storage + enable delete annotion option 2016-04-13 10:20:18 +02:00
Maksim Shabunin
49b4af1e5c Merge pull request #6395 from Tauranis:master 2016-04-13 07:53:33 +00:00
Maksim Shabunin
d8629b0fa4 Merge pull request #6335 from themightyoarfish:canny_kernel_sz_fix 2016-04-13 07:52:05 +00:00
Maksim Shabunin
fc9f7cc925 Merge pull request #6375 from ohnozzy:Bug-Fix-for-Issue-6288 2016-04-13 07:51:33 +00:00
Philipp Hasper
cc7a1a2ab7 Deactivated two noisy camera-retrieval log messages in android
They were issued for every frame retrieved - even in a release build.
2016-04-13 09:17:33 +02:00
StevenPuttemans
5164c4ba31 vectorize process + enable early quitting/storage + enable delete annotation option 2016-04-13 09:10:24 +02:00
Tauranis
edb6a0e889 Bug fix for MLP predict for small values to avoid nan responses. 2016-04-12 15:59:32 -03:00
Alexander Alekhin
9744073b95 videoio: give chance for all enabled backends
"Eat" unexpected backend exceptions
2016-04-12 20:05:21 +03:00
Maksim Shabunin
36477fdefa Merge pull request #6344 from anatolix:kalmanpyfix 2016-04-12 15:55:55 +00:00
Maksim Shabunin
ee9f88902c Merge pull request #6352 from fraserharris:patch-1 2016-04-12 15:23:43 +00:00
Maksim Shabunin
8f6e102331 Merge pull request #6345 from eduardohenriquearnold:master 2016-04-12 15:22:32 +00:00
Vitaly Tuzov
13858cd561 Cost estimation boundaries description updated 2016-04-12 17:31:12 +03:00
Vitaly Tuzov
772d9689e9 Backport of StereoBM uninitialized memory access problem fix from master branch 2016-04-12 17:27:16 +03:00
ohnozzy
9dd962ca1a Bug Fix for Issue 6288
Added 2 inline functions in persistence.hpp
So that the '>>' operator works correctly for std::Vector<KeyPoint> and
std::Vector<DMatch>
2016-04-12 21:40:50 +08:00
Maksim Shabunin
1307bb1d03 Merge pull request #6314 from mvukad:bugfix_dtreeswrite 2016-04-12 13:26:25 +00:00
Alexander Alekhin
2b29db860c Merge pull request #6391 from virtuald:v4l-device-name 2016-04-12 12:57:21 +00:00
Pavel Rojtberg
91678ff828 cap_v4l: allow manually controlling exposure 2016-04-12 12:10:54 +02:00
Maksim Shabunin
ff3bb9f4e6 Merge pull request #6383 from alalek:backport_6381 2016-04-12 08:40:01 +00:00
Maksim Shabunin
e90b697cb0 Merge pull request #6386 from mshabunin:fix-python-test-issue 2016-04-12 08:29:44 +00:00
Dustin Spicuzza
e489f29d0f v4l/libv4l: allow opening device by name
- Allows using non-default device names such as /dev/v4l/by-path/pci-0000:00:1d.0-usb-0:1.1:1.0-video-index0
2016-04-12 01:25:34 -04:00
Alexander Alekhin
2f0676fb88 Merge pull request #6298 from andy-held:master 2016-04-11 17:19:11 +00:00
Maksim Shabunin
70bc268c1a Fixed problem with nonfree python test: could not find local test images 2016-04-11 18:45:14 +03:00
Andreas Franek
1b3a967223 Enable directly writing jpeg-encoded streams with GStreamer
CvVideoWriter_GStreamer assumes a JPEG encoded stream if the height of
the given frame size is 1.
2016-04-11 17:10:57 +02:00
Philipp Hasper
b6d8c9d990 operator<< handles keys starting with underscore 2016-04-11 12:43:58 +03:00
Alexander Alekhin
78286f3a44 Merge pull request #6381 from ioxp:persistenceFix 2016-04-11 09:40:09 +00:00
Philipp Hasper
47c4ee974a operator<< handles keys starting with underscore 2016-04-11 09:55:33 +02:00
Maksim Shabunin
233612efd7 Reworked HAL dft/dct interface, added replacement documentation 2016-04-08 16:03:51 +03:00
Maksim Shabunin
f40d701427 DFT: renamed HAL functions 2016-04-08 11:19:28 +03:00
Maksim Shabunin
15783cf668 Always use hal::dft in crossCorr function 2016-04-08 11:19:28 +03:00
Maksim Shabunin
008abd28fd Extracted HAL interfaces for DFT/DCT, added new test 2016-04-08 11:19:28 +03:00
Vitaly Tuzov
a7ce9a176b Fixed uninitialized memory errors in stereoBM 2016-04-07 23:58:17 +03:00
mvukad
695e33b25b Fix missing format when writing Algorithm-based objects
Added a writeFormat() method to Algorithm which must be called by the
write() method of derived classes.
2016-04-07 13:49:42 -07:00
Maksim Shabunin
5877debb6f HAL resize, warpAffine, warpPerspective interface
- added HAL documentation support
- added documentation to HAL replacement interface
- updated several HAL functions in imgproc module
2016-04-07 18:47:24 +03:00
Alexander Alekhin
06ea0aa02b Merge pull request #6367 from shengyu7697:fix_quote 2016-04-06 11:17:35 +00:00
shengyu
2d41321ca0 fix quote 2016-04-06 14:31:06 +08:00
Alexander Alekhin
7783836fff Merge pull request #6265 from huang-qiao:master 2016-04-06 04:51:59 +00:00
qiao
a7fe73f284 fix OpenCV_CONFIG_PATH get null value after CMake 2.8.11
syntax of cmake "get_filename_component" changed after version 2.8.11

for cmake version < 2.8.11
  get_filename_component(<VAR> <FileName> PATH [CACHE])

for cmake version >= 2.8.11
  get_filename_component(<VAR> <FileName> DIRECTORY [CACHE])

Update OpenCVConfig.cmake

Update OpenCVConfig.cmake.in
2016-04-06 11:33:53 +08:00
Alexander Alekhin
52ba3778e3 Merge pull request #6363 from alalek:ffmpeg_fix_timeout_24 2016-04-05 16:29:15 +00:00
Alexander Alekhin
c7b6353a3c Merge pull request #6365 from terfendail:vt/nonlocal_testdata 2016-04-05 15:25:15 +00:00
Alexander Alekhin
1f7fea9092 Merge pull request #6244 from dreifachstein:topic-cmake-install 2016-04-05 15:23:55 +00:00
Vitaly Tuzov
34b3d31f54 Fix for nonlocal data requirement in test2.py 2016-04-05 16:47:29 +03:00
Alexander Alekhin
6f139b4f8e ffmpeg: interrupt callback fix
backport from master
2016-04-05 14:19:44 +03:00
Alexander Alekhin
7d4a8bc437 Merge pull request #6358 from alalek:ffmpeg_fix_timeout 2016-04-05 11:07:00 +00:00
Alexander Alekhin
7d9a480597 ffmpeg: interrupt callback fix 2016-04-04 13:17:04 +03:00
Vadim Pisarevsky
46d218bcec Merge pull request #6312 from KnockSoftware:split-float-epsilon 2016-04-03 23:10:10 +00:00
Maksim Shabunin
0c068768a5 Merge pull request #6351 from mshabunin:fix_java_moments 2016-04-01 09:19:09 +00:00
Maksim Shabunin
fbbe75895a Merge pull request #6353 from shengyu7697:fix_right_quote 2016-04-01 09:18:41 +00:00
shengyu
21513caf3f missing right quote 2016-04-01 11:03:50 +08:00
Fraser Harris
0634808bf3 Added description of the AR model 2016-03-31 17:57:55 -07:00
Alexander Alekhin
873884aa47 Merge pull request #6346 from filipsladek:box_filter_32FC1 2016-03-31 17:06:52 +00:00
Alexander Alekhin
ab3fb8b2f8 Merge pull request #6340 from BloodAxe:parallel_logistic_regression 2016-03-31 17:06:20 +00:00
Maksim Shabunin
a5af69de6a Java wrapper for moments: do not truncate values in set method 2016-03-31 12:57:10 +03:00
filipsladek
a821fde44e add performance test for CV_32FC1 2016-03-31 09:05:02 +02:00
Alexander Alekhin
a056c9b113 Merge pull request #6329 from paroj:window_gui_cpp 2016-03-30 14:34:55 +00:00
filipsladek
f635381662 add testcase for CV_32FC1 2016-03-30 10:38:22 +02:00
filipsladek
493ac1df37 code style 2016-03-29 22:44:03 +02:00
filipsladek
9c3f790edb Box filter implemented for CV_32FC1 2016-03-29 22:30:49 +02:00
Eduardo Arnold
d046602ea4 Enforced DecisionFunction vector indexes to be saved on SVM save/load methods 2016-03-29 16:35:27 -03:00
Anatoly Orlov
1740218ee0 small platform compatability fix for ESC key 2016-03-29 20:02:35 +03:00
Alexander Alekhin
86a725933a Merge pull request #6343 from terfendail:vt/python_rng_seed_backport 2016-03-29 16:06:27 +00:00
Anatoly Orlov
2be805ce29 kalman.py was broken totally
1. Following condition is True on each iteration becuase -1 % 0xFF is 255 not -1

code = cv2.waitKey(100) % 0x100
if code != -1:
   break

this were resetting point position on each cycle not on key press as intended

2. Previous small bug were masking serious bug with matrix operation on matrices of incorrect size.
   As the result on 2nd iteration of internal cycle program has crushed.

   I have fixed it too, matrix operation was taken from examples/cpp/kalman.cpp where it looks like
   randn( processNoise, Scalar(0), Scalar::all(sqrt(KF.processNoiseCov.at<float>(0, 0))));
   which is something totally different from previous code here.

   Example behave as it should now, i.e. point moving by circle trajectory as in C++ example.
2016-03-29 18:27:35 +03:00
Vitaly Tuzov
64f02aa72d Backport of setRNGSeed implementation and python test randomness fix 2016-03-29 18:05:28 +03:00
Alexander Alekhin
ff0d115800 Merge pull request #6332 from sovrasov:python_rng_seed 2016-03-29 14:23:26 +00:00
Alexander Alekhin
12a8f5486d Merge pull request #6341 from SpecLad:destroy-leak 2016-03-29 12:36:51 +00:00
Roman Donchenko
97ac59cb73 Fix a memory leak indirectly caused by cvDestroyWindow 2016-03-29 14:06:05 +03:00
Eugene Khvedchenya
ee92a36123 Added parallel implementation of compute_gradient method. 2016-03-29 11:09:54 +03:00
Vladislav Sovrasov
72ed4173df Change setRNGSeed implementaion 2016-03-29 10:54:42 +03:00
Evan Heidtmann
0712bccf52 Fix epsilon comparison when splitting 2016-03-28 14:16:32 -07:00
Прун Виктор
93ff1fb2f2 Correct image borders and principal point computation in cv::stereoRectify 2016-03-28 15:59:18 +03:00
themightyoarfish
68d97502fe Error message for wrong kernel size was insufficient.
When setting a wrong kernel size, the error message only tells the user that it
must be odd, however the conditions for rejection include values > 7 which must
be communicated. Without that, the message would be incorrect and confusing if
the user is unaware that only values 3, 5, 7 are accepted.
2016-03-28 14:06:55 +02:00
Vadim Pisarevsky
1e1dc1429f Merge pull request #6321 from mshabunin:hal_cmake 2016-03-27 08:06:24 +00:00
Vadim Pisarevsky
481473eb12 Merge pull request #6326 from sovrasov:python_samples_update 2016-03-27 08:03:28 +00:00
Alexander Alekhin
ee123b8a9e Merge pull request #6311 from peters:master 2016-03-26 19:55:17 +00:00
Vladislav Sovrasov
362d52a3cb Fix doxygen warnings 2016-03-25 16:34:45 +03:00
Vladislav Sovrasov
a490b64e9b Add function setRNGSeed and seed setup in python tests 2016-03-25 16:17:58 +03:00
Alexander Alekhin
05384f05cc Merge pull request #6313 from amannababanana:master 2016-03-25 11:31:17 +00:00
Maksim Shabunin
50edaae06c Merge pull request #6322 from berak:fix_linux_eclipse_tutorial 2016-03-25 07:39:19 +00:00
Pavel Rojtberg
0ac31a0bd7 highgui: add CV_GUI_* flags to enum in cpp so they appear in bindings 2016-03-24 23:58:47 +01:00
Alexander Smorkalov
762965897a Merge pull request #6320 from terfendail:vt/pytestarm64 2016-03-24 17:16:52 +00:00
Vladislav Sovrasov
1f8fd5382c Replace of some synthetic scenes in python samples 2016-03-24 20:05:26 +03:00
berak
0b389b24f6 fix changed libraries in eclipse tutorial 2016-03-24 16:09:14 +01:00
Maksim Shabunin
79ffaa8ce9 Fixed cutom_hal.hpp file generation 2016-03-24 17:39:16 +03:00
Maksim Shabunin
727743809e Using find_package to import custom HAL library 2016-03-24 17:05:54 +03:00
Vitaly Tuzov
ea3746bd15 Made texture flow python test less strict to fix it on AARCH64 2016-03-23 20:07:42 +03:00
Pavel Rojtberg
9dc14b3efc cap_gst: inspect sink instead of videoconvert to find out properties
videoconvert might not be present on a manual pipeline, but appsink must
be.
2016-03-23 16:24:10 +01:00
Vadim Pisarevsky
e792ee89de Merge pull request #6243 from mshabunin:hal_morph 2016-03-23 13:09:19 +00:00
Vadim Pisarevsky
e547916e88 Merge pull request #6285 from sovrasov:python_tests_cleanup 2016-03-23 13:07:00 +00:00
Lucas Solomon
d2d5d32fe0 remove trailing whitespace 2016-03-22 22:31:16 -07:00
Lucas Solomon
688b4d9d7a return 0 from VideoCapture::read() when cannot connect to camera 2016-03-22 19:03:28 -07:00
Peter Rekdal Sunde
278747ba45 Add support for ffmpeg 3.0. 2016-03-22 22:52:35 +01:00
Alexander Smorkalov
ef2a376baf Merge pull request #6297 from terfendail:vt/pytestarm 2016-03-21 15:01:04 +00:00
Maksim Shabunin
dc8bb23a7d Merge pull request #6287 from StevenPuttemans:add_num_features_info_2.4 2016-03-21 14:09:21 +00:00
Maksim Shabunin
fd1b66b37d Merge pull request #6286 from StevenPuttemans:add_num_features_info 2016-03-21 14:08:49 +00:00
Maksim Shabunin
26416343c4 Merge pull request #6300 from berak:fix_akaze_sample 2016-03-21 14:01:17 +00:00
Maksim Shabunin
f3127521f3 Merge pull request #6214 from vonnieda:java_features2d 2016-03-21 11:51:11 +00:00
Alexander Alekhin
a4e35d83ff Merge pull request #6267 from dtmoodie:issue_5918 2016-03-21 09:37:11 +00:00
Maksim Shabunin
3b6190dfad Merge pull request #6150 from lvv:fix-6149-applColorMap 2016-03-21 09:20:52 +00:00
Maksim Shabunin
83379695a0 HAL interface for morphology operations 2016-03-21 09:32:06 +03:00
Leonid Volnitsky
bebab8d647 fix: 6149 (through CV_Error on wrong image type) 2016-03-19 19:57:05 +02:00
berak
e0c65499fd remove opencv_contrib dependancy from planar_tracking.cpp 2016-03-19 10:29:22 +01:00
Xiaolei Yu
40eb613bbf Make install paths relative to CMAKE_INSTALL_PREFIX 2016-03-19 16:41:51 +08:00
Vitaly Tuzov
24361733e4 Fixed face detection python test 2016-03-18 17:44:45 +03:00
Alexander Alekhin
4e479d58f8 Merge pull request #6290 from dtmoodie:thrust_allocator_usage_pr 2016-03-18 12:14:20 +00:00
Vladislav Sovrasov
fd61978795 Add goodfeatures python test and cleanup in test directory 2016-03-18 11:16:08 +03:00
Dan
da189ce1e0 Fixed regression in cv::VideoCapture with gstreamer back end that prevented viewing of rtsp streams. 2016-03-17 13:03:48 -04:00
StevenPuttemans
2a0a27d3f2 add cascade classifier info - total number of unique features passed to boosting process 2016-03-17 13:34:01 +01:00
StevenPuttemans
b5fbb2b1c8 add cascade classifier info - total number of unique features passed to boosting process 2016-03-17 13:33:11 +01:00
Alexander Smorkalov
b8ce65bec8 Merge pull request #6279 from terfendail:vt/pythontest_data 2016-03-17 12:27:12 +00:00
Alexander Alekhin
2f4e38c831 Merge pull request #6283 from jlubawy:vfw-surface4-fix 2016-03-17 11:08:12 +00:00
Vitaly Tuzov
96903dc4ad Test data necessary for python samples added to test package.
Test launch script updated to run new tests as well.
2016-03-17 11:38:40 +03:00
Alexander Smorkalov
da669569e1 Merge pull request #6281 from SpecLad:videowriter-oob 2016-03-17 08:09:13 +00:00
Josh Lubawy
1bd8bcbdd9 Remove cstdio debug 2016-03-17 01:00:49 -07:00
Josh Lubawy
f715e5b0b2 Add support for YUV 4:2:0 NV12 frame format in VFW camera capture 2016-03-16 23:38:17 -07:00
Alexander Alekhin
00ea7fe99c Merge pull request #6273 from Bleach665:vs2010_mser_sampl 2016-03-16 21:32:41 +00:00
Roman Donchenko
eb40afa26a Add a workaround for FFmpeg's color conversion accessing past the end of the buffer
I delete the LIBAVFORMAT_BUILD < 5231 branch, because I couldn't even find FFmpeg with
such a small build number, let alone test with it.
2016-03-16 20:04:33 +03:00
Bleach666
93e50dabcd fix build detect_mser sample in vc2010 2016-03-16 16:51:20 +02:00
Alexander Alekhin
d6060bbb7f Merge pull request #6270 from robbertkl:patch-2 2016-03-16 13:50:03 +00:00
Alexander Alekhin
08d5ab577c Merge pull request #6274 from Bleach665:cmake_policy_0020 2016-03-16 13:49:32 +00:00
Roman Donchenko
421fcf9e35 Rearrange CvVideoWriter_FFMPEG::writeFrame for better readability 2016-03-16 16:28:59 +03:00
Alexander Smorkalov
d142c05d61 Merge pull request #6276 from SpecLad:bp-3813 2016-03-16 11:41:27 +00:00
Bleach666
150a9e8e14 suppress warning while generating solution in cmake 2016-03-16 13:12:44 +02:00
Robbert Klarenbeek
81b11ee463 Replace deprecated malloc.h 2016-03-16 11:37:27 +01:00
Alexander Alekhin
74490399db Merge pull request #6268 from robbertkl:patch-1 2016-03-16 09:59:36 +00:00
Roman Donchenko
9a5d7f1a0b Backport PR #3813 to 2.4
It has already been partially backported by #6199; this commit completes
the backport.
2016-03-16 12:34:41 +03:00
Robbert Klarenbeek
dd510e1de9 Fix incompatibility with some C++11 implementations 2016-03-15 17:21:05 +01:00
Dan
1d21493302 Merge branch 'issue_6251' of http://github.com/dtmoodie/opencv into thrust_allocator_usage_pr 2016-03-15 11:18:41 -04:00
Dan
a21ede9452 Thrust allocator usage. 2016-03-15 11:14:47 -04:00
Dan
7a934f9ee0 Compatibility and bug fixes. 2016-03-15 11:14:42 -04:00
Dan
a8ca560684 Fixed more missing async calls. 2016-03-15 11:14:42 -04:00
Dan
79ecefb51f Implemented async calls. 2016-03-15 11:14:41 -04:00
Alexander Alekhin
97d8ca3464 Merge pull request #6266 from gongzg:master 2016-03-15 12:51:20 +00:00
Zhigang Gong
0b08d2559e fix potential race condition in canny.cl.
See the below code snippet:

while(l_counter != 0)
{
    int mod = l_counter % LOCAL_TOTAL;
    int pix_per_thr = l_counter / LOCAL_TOTAL + ((lid < mod) ? 1 : 0);

    for (int i = 0; i < pix_per_thr; ++i)
    {
        int index = atomic_dec(&l_counter) - 1;
        ....
    }
    ....
    barrier(CLK_LOCAL_MEM_FENCE);
}

If we don't put a barrier before the for loop, then there is a possiblity
that some work item enter this loop but the others are not, the the l_counter
will be reduced in the for loop and may be changed to zero, and the other
work items may can't enter the while loop. If this happens, it breaks the
barrier's rule which requires all the work items reach the same barrier.
And it may hang the GPU depends on the implementation of opencl platform.

This issue is raised at:
https://github.com/Itseez/opencv/issues/5175

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
2016-03-15 19:11:15 +08:00
Alexander Alekhin
947307baae Merge pull request #6261 from dtmoodie:issue_6251 2016-03-15 07:51:24 +00:00
Dan
42c36c0c80 Linux bug fix for ThrustAllocator. 2016-03-14 11:09:52 -04:00
Alexander Alekhin
7783206934 Merge pull request #6259 from polevoy-d-v:move_sematics_fix 2016-03-14 14:46:21 +00:00
Alexander Alekhin
5517ea0adb Merge pull request #6255 from delftswa2016:fix-5002 2016-03-14 14:46:06 +00:00
Прун Виктор
a90a576d76 fixed incorrect behaviour of move semantics for cv::Ptr, cv::Mat, cv::UMat in case when rvalue-reference references to *this. 2016-03-14 16:10:23 +03:00
Alexander Alekhin
695a430007 Merge pull request #6254 from berak:patch-2 2016-03-14 11:27:55 +00:00
Alexander Alekhin
708761b219 Merge pull request #6253 from berak:patch-1 2016-03-14 11:27:11 +00:00
Alexander Alekhin
4f9e1a9a58 Merge pull request #6249 from sturkmen72:patch-15 2016-03-14 11:26:51 +00:00
Alexander Alekhin
9d49cef29e Merge pull request #6245 from delftswa2016:fix-for-issue-4375 2016-03-14 11:26:33 +00:00
Alexander Alekhin
cc3433f349 Merge pull request #6045 from matthieu-ft:master 2016-03-14 11:25:23 +00:00
renu285
45f9d32866 Removed older libraries pointing to 2.4 in eclipse tutorial docs 2016-03-14 12:09:56 +01:00
berak
79ac072e6c train_svmsgd.cpp : float response
responses must be float, else we trigger an assertion in line 150
2016-03-14 08:09:36 +01:00
berak
4555f9ac25 svmsgd.cpp, fix #6248
add a cast to double, to make vs compilers happy
2016-03-14 08:02:09 +01:00
Suleyman TURKMEN
826b5a2ef1 Update lda.cpp
typo correction
2016-03-13 21:11:34 +02:00
shruthikashyap
1fbc6ab05d Adding the syntax and usage for cv2.undistortPoints(). 2016-03-13 13:32:24 +01:00
Vadim Pisarevsky
fbc221d334 Merge pull request #6096 from mnoskova:mn/SVMSGD_to_opencv3_0 2016-03-12 17:16:35 +00:00
Vadim Pisarevsky
cd1426ba8d Merge pull request #6025 from sovrasov:new_python_tests 2016-03-12 17:11:19 +00:00
Vadim Pisarevsky
c186f424c5 Merge pull request #6119 from mshabunin:hal_filter2d 2016-03-12 17:08:10 +00:00
Vadim Pisarevsky
c9db05de22 Merge pull request #6137 from dtmoodie:thrust_allocator 2016-03-12 17:07:03 +00:00
Vadim Pisarevsky
bad09e5f58 Merge pull request #6206 from alalek:polar_fix 2016-03-12 16:40:35 +00:00
Vadim Pisarevsky
93c4dfb16d Merge pull request #6236 from alalek:backport_6232 2016-03-12 16:38:56 +00:00
Vadim Pisarevsky
da82acda6b Merge pull request #6241 from cbalint13:agast 2016-03-12 16:38:39 +00:00
Balint Cristian
f819323296 Fix AGAST keypoint declared size. 2016-03-12 16:49:14 +02:00
Alexander Alekhin
52b9207105 Merge pull request #6237 from mshabunin:fix-vtk-on-2.4 2016-03-11 14:20:16 +00:00
Maksim Shabunin
d2e451e877 Ported VTK cmake detection from master branch 2016-03-11 16:25:47 +03:00
Alexander Alekhin
c41dc915fd Merge pull request #6232 from piotr-semenov:semenovp_fixes 2016-03-11 12:23:41 +00:00
Piotr Semenov
00e91fd3d0 Fix that corrects the OpenCV's random access iterator distance: d(x,y) = -d(y,x) 2016-03-11 15:20:36 +03:00
Alexander Alekhin
afc62f076a Merge pull request #6234 from asmorkalov:as/deb_version_check 2016-03-11 10:06:25 +00:00
Alexander Smorkalov
9c4204b89e Added check if debian package version matches version from version.hpp 2016-03-11 11:59:15 +03:00
Alexander Alekhin
bcca213b88 Merge pull request #6224 from alalek:fix_java_binary 2016-03-10 17:03:43 +00:00
Maksim Shabunin
508c382673 Merge pull request #6208 from alalek:templates 2016-03-10 11:35:30 +00:00
Maksim Shabunin
3afb5a6006 Merge pull request #6171 from terfendail:vt/new_python_tests_backport 2016-03-10 09:09:32 +00:00
Piotr Semenov
108ddc199a Fix that corrects the OpenCV's random access iterator distance: d(x,y) = -d(y,x) 2016-03-10 11:58:32 +03:00
Maksim Shabunin
7e44faf635 Merge pull request #6228 from wangguoqin1001:2.4 2016-03-10 08:10:19 +00:00
WANG Guoqin
8cfc87cf01 MacOSX / QTKit capture: trying to fix invalid timer call 2016-03-10 02:49:10 +08:00
Alexander Alekhin
a7d28f3b1f Merge pull request #6217 from krrishnarraj:master 2016-03-09 09:42:17 +00:00
Alexander Alekhin
cbd0ee21d5 revert: java bindings become CMake modules (loadable plugins)
This reverts part of commit 0db10a3052
2016-03-09 12:13:46 +03:00
Vladislav Sovrasov
e2434ab7c3 Use AKAZE detector instead of ORB in feature_homography test 2016-03-09 11:37:25 +03:00
Matthieu FT
78475a47a5 fix: bg substraction for float images with OpenCL 2016-03-07 16:23:05 +01:00
Krishnaraj Bhat
9b8013d193 gcc6: fix misleading indentation warning
cosmetic changes to fix this warning.
real bugs not found
2016-03-07 17:06:16 +05:30
Jason von Nieda
f4b502dd03 Adds supports for the majority of features2d to the Java wrappers:
* Adds the main features2d header to the parse list for the generator.
* Removes the manual definition of drawKeypoints and drawMatches since these are now included in the main header.
* Updates the generator to ignore SimpleBlobDetector, FlannBasedMatcher and DescriptorMatcher as these cause conflicts with the generator. This is okay since these were not previously included in the distribution anyway, so no harm is done.
2016-03-07 00:14:53 -08:00
Alexander Alekhin
2144afd836 move GitHub templates into .github folder 2016-03-04 14:20:25 +03:00
Alexander Alekhin
9ebbfc7bdb Merge pull request #6207 from StevenPuttemans:fix_annotation 2016-03-04 11:02:20 +00:00
StevenPuttemans
b47f2600cd missing break statement 2016-03-04 09:41:13 +01:00
Alexander Alekhin
ea049e147d Merge pull request #6199 from alalek:ffmpeg_backport 2016-03-03 17:25:33 +00:00
Alexander Alekhin
05a68fd82b Merge pull request #6118 from Emoters:hotfix/planar_tutorial_fixes 2016-03-03 17:24:08 +00:00
Alexander Alekhin
eeec404b9a Merge pull request #6144 from Dikay900:patch-2 2016-03-03 17:23:00 +00:00
Alexander Alekhin
e587c24f9e Merge pull request #6145 from Dikay900:patch-3 2016-03-03 17:17:25 +00:00
Alexander Alekhin
8266903ee9 Merge pull request #6205 from Aravind-Suresh:vs-za-option-bug-fix 2016-03-03 16:23:47 +00:00
Alexander Alekhin
ec66a3700f logPolar/linearPolar: more accurate processing near zero angle slice 2016-03-03 19:08:08 +03:00
Maksim Shabunin
98fff4a601 Added separate hal::SepFilter2D class 2016-03-03 18:56:12 +03:00
Maksim Shabunin
17cd1dac06 HAL Filter2D interface: Updated according to comments 2016-03-03 18:56:12 +03:00
Maksim Shabunin
85b2c2ae58 Fixed build with older standalone IPP versions 2016-03-03 18:56:12 +03:00
Maksim Shabunin
8414c6518f Fixed build with older ippicv 2016-03-03 18:56:12 +03:00
Maksim Shabunin
27abd4d3a3 Filter2D HAL interface 2016-03-03 18:56:12 +03:00
Alexander Alekhin
275bfcf99c fix logPolar/linearPolar 2016-03-03 18:33:11 +03:00
aravind
dccbf50059 Fixed VS 2010 and option Za bug. 2016-03-03 18:01:05 +05:30
Alexander Alekhin
60f73eee7e Merge pull request #6204 from alalek:minor_fix_break 2016-03-03 12:07:16 +00:00
Philip
7842c0d792 add link to http://answers.opencv.org for questions 2016-03-03 12:40:16 +01:00
Alexander Alekhin
88a33a4e4f Merge pull request #6201 from paroj:gst_noconvert 2016-03-03 11:36:05 +00:00
Alexander Alekhin
c1f3c41bab apps: add missed 'break' 2016-03-03 14:23:59 +03:00
Vitaly Tuzov
d29eb2938c Calibration test temporary disabled 2016-03-03 13:38:08 +03:00
Vladislav Sovrasov
22b028b64b Fix warnings in python3 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
e4fed417d2 Add segmentation and object tracking python tests 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
0c6e09f060 Changes in facedetect test 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
87fc75c6d7 Improvements in tests, bugfix in digits_video sample 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
4e3a6328ba Fixes in calibration and camshift tests 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
54c07ba0ff Add 2 new tests, bugfixed in old tests 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
86868176a2 Fix py3 comatibility 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
e90dc20361 Update letter_recog sample to current version of opencv interfaces 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
d579f08093 Fix mouse control in asift and find_obj samples 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
3a51cae208 Fix rectangle selection in some of python samples 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
cb7cc81653 Add dft python test, fix platform depended result in morphology test 2016-03-03 11:06:21 +03:00
Vladislav Sovrasov
aaa43dc84f Add morphology python test, fix python3 compabtibility in kmeans test 2016-03-03 11:06:20 +03:00
Vladislav Sovrasov
56571561b4 Add k-means python test, fix loading images in calibration test 2016-03-03 11:06:20 +03:00
Vladislav Sovrasov
5625d79508 Fix loading images in python tests 2016-03-03 11:06:20 +03:00
Vladislav Sovrasov
ab4d375349 Add new tests on python 2016-03-03 11:06:20 +03:00
Pavel Rojtberg
ff77f4d9ef GStreamer: allow reading raw MJPEG data 2016-03-02 17:31:20 +01:00
Alexander Alekhin
a61b19b524 backport ffmpeg fixes 2016-03-02 18:42:53 +03:00
Alexander Alekhin
bc6ed1467b Merge pull request #6193 from trombipeti:Fix_#6192 2016-03-02 15:19:01 +00:00
Vadim Pisarevsky
7f4a1bcac7 Merge pull request #6160 from paroj:fe_distort 2016-03-02 13:34:32 +00:00
Vadim Pisarevsky
77f54e0f3e Merge pull request #6161 from mshabunin:fix-mac-sliders 2016-03-02 13:33:45 +00:00
Vadim Pisarevsky
5e631d5cd7 Merge pull request #6194 from eladj:subdiv2d_documentation 2016-03-02 13:31:43 +00:00
Elad Joseph
238b47dfce Added param documentation
Added param description to remove doxygen warning
2016-03-02 08:55:53 +02:00
Elad Joseph
2234016a22 Added Subdiv2D class documentation
Added documentation to the Subdiv2D documentation, based on the previous
C API.
2016-03-01 23:08:48 +02:00
Péter Trombitás
410eb30c26 Fix for #6192 (Mismatching delete) 2016-03-01 21:40:05 +01:00
Alexander Alekhin
cb012010c6 Merge pull request #6190 from berak:fix_ml_python_tutorial 2016-03-01 14:05:42 +00:00
berak
fa1426f123 fix python ml tutorials 2016-02-29 22:37:59 +01:00
Elad Joseph
34b8f1d595 Merge remote-tracking branch 'refs/remotes/Itseez/master' 2016-02-29 21:48:30 +02:00
Alexander Alekhin
318671d9b5 Merge pull request #6148 from Aravind-Suresh:cv-cuda-reduce-bug-fix 2016-02-29 19:07:05 +00:00
Alexander Alekhin
7600757d07 Merge pull request #6181 from delftswa2016:fix-for-issue-6146 2016-02-29 15:13:39 +00:00
Alexander Alekhin
cd1aef77ea Merge pull request #6174 from alalek:fix_python_msvs 2016-02-29 11:51:34 +00:00
shruthikashyap
d64b35f11d Fix for issue 6146 and some grammar corrections 2016-02-27 23:26:23 +01:00
shruthikashyap
23ba94140e Fix for issue 6146 2016-02-27 23:16:52 +01:00
aravind
f4f1561781 Fixed cv::cuda::reduce bug. 2016-02-27 08:30:10 +05:30
Alexander Alekhin
d2e5f90f32 cmake: fix cv2.lib conflict for python2/3 bindings (MSVS) 2016-02-26 17:08:07 +03:00
Marina Noskova
3f0a51bda1 Fixed documentation. 2016-02-26 14:40:23 +03:00
Vitaly Tuzov
25b4d8a1b5 Added images necessary for tests 2016-02-26 12:42:35 +03:00
Vitaly Tuzov
aaa30dc5b6 Make some tests less strict due to improvement of related algorithms in master branch 2016-02-26 12:42:35 +03:00
Vitaly Tuzov
e0f426f78b Backport of new python tests from master branch(PR https://github.com/Itseez/opencv/pull/6025).
At the moment tests requre samples/data copied to source location from master branch.
2016-02-26 12:42:18 +03:00
Marina Noskova
53711ec29d Deleted default value for parameters in docs.
Added some asserts.
2016-02-25 19:12:54 +03:00
Marina Noskova
d484893839 Deleted functions makeTrainData() and makeTestData() in test_svmsgd.cpp.
Added function makeData() in test_svmsgd.cpp.
2016-02-25 16:57:03 +03:00
Marina Noskova
74c87a26a5 Delete function areClassesEmpty(). 2016-02-25 15:31:07 +03:00
Alexander Alekhin
81f21e6e6c Merge pull request #6139 from ioxp:master 2016-02-25 11:41:49 +00:00
Alexander Alekhin
171541777e Merge pull request #6166 from mshabunin:fix-exif-fds-leak 2016-02-25 11:11:28 +00:00
Maksim Shabunin
3a92371b60 EXIF reader: fixed file descriptor leak in case of broken tags 2016-02-25 12:19:11 +03:00
Maksim Shabunin
3cc234588a Added build warnings in case of macro definition conflicts 2016-02-25 11:51:02 +03:00
Maksim Shabunin
ee2f8d006f Cocoa backend: added checks before accessing sliders dictionary 2016-02-25 11:51:01 +03:00
Pavel Rojtberg
bb605279b6 clarify how to use fisheye::distortPoints 2016-02-24 16:18:13 +01:00
Marina Noskova
068677ad50 Fixed documentation. 2016-02-24 14:41:51 +03:00
Marina Noskova
9d9a5bbbfd Fixed documentation. 2016-02-24 13:33:43 +03:00
Marina Noskova
f3c4a6aab8 Rename parameters lambda, gamma0 and c. 2016-02-24 13:22:07 +03:00
Philip
7ff93600b8 Create a Pull Request template
In addition to the Issue template which is far more important i would like to add this so issues will get closed after merging related PRs rather than being reliant on the reviewer.
If someone want to add something here feel free.
2016-02-19 14:29:59 +01:00
Philip
74ee9ac572 Add an Issue template for new issues
Since we've got a new feature here on github i would like to use it to get all relevant information into the reported issues.
https://help.github.com/articles/creating-an-issue-template-for-your-repository/

I started a file but i would like to hear some other options about what to add.

add "steps to reproduce" if no code example is applicable

change to comments from alalek
2016-02-19 14:08:58 +01:00
Alexander Alekhin
177aef05b6 Merge pull request #6141 from Aravind-Suresh:fisheye-documentation-fix 2016-02-19 07:29:19 +00:00
Dan
95608b1b84 free -> deallocate 2016-02-18 15:05:13 -05:00
aravind
7ad849718c Fixed Fisheye Camera model documentation. 2016-02-19 01:17:39 +05:30
Philipp Hasper
3f1eeba39d findHomography sets output mask to all zeros in case of no inlier 2016-02-18 17:58:28 +01:00
Alexander Alekhin
46662ccd99 Merge pull request #6136 from mbarnach:6135-Fix-upperbody_xml_in_cuda 2016-02-18 13:20:45 +00:00
Mathieu Barnachon
9a44e92193 Fix the missing - in file. 2016-02-18 11:28:41 +01:00
Dan
c0e34934c8 Merge branch 'thrust_allocator' of https://github.com/dtmoodie/opencv 2016-02-18 00:43:18 -05:00
Dan
da93a5527d Thrust allocator for temporary storage used with thrust algorithms. 2016-02-18 00:23:20 -05:00
Alexander Alekhin
06ea7094f5 Merge pull request #6129 from mzajko:xi_new_param 2016-02-17 15:47:59 +00:00
Marian Zajko
e55a053d71 ximea new param
- added CAP_PROP_XI_SENSOR_BOARD_TEMP parameter
- added acquisition resetting for paramters that require it
2016-02-17 11:18:49 +01:00
Alexander Alekhin
2549bafe4f Merge pull request #6121 from mshabunin:fix-check-imencode-exif 2016-02-17 00:45:49 +00:00
Maksim Shabunin
03d6d2041a Merge pull request #6113 from rahulchhabra07:patch-1 2016-02-16 09:04:38 +00:00
Maksim Shabunin
a54870aace Added filename emptyness check to the Exif reader, fixes 6120 2016-02-16 11:37:36 +03:00
Alexander Alekhin
8c591ebd77 Merge pull request #6060 from alalek:fix_opencl_opengl_sharing_6052 2016-02-16 07:10:02 +00:00
Alexander Alekhin
8a09d95eab Merge pull request #6106 from ilya-lavrenov:compilation-warning 2016-02-15 15:12:49 +00:00
Maksim Shabunin
d1a2c73228 Merge pull request #6090 from alalek:feature_6089 2016-02-15 14:17:15 +00:00
Maksim Shabunin
1aeff45631 Merge pull request #6103 from mshabunin:add-get-samples 2016-02-15 13:11:28 +00:00
Maksim Shabunin
8c29380471 Merge pull request #6105 from mshabunin:tutorial-folder-correction 2016-02-15 13:10:45 +00:00
Marina Noskova
02cd8cf039 Deleted illegal type values. 2016-02-15 15:09:59 +03:00
Eric Zavesky
77fa8d9d5a - fix windows-based warnings for type casts 2016-02-15 05:37:54 -06:00
Marina Noskova
ff54952769 Corrected spelling mistakes 2016-02-15 14:35:36 +03:00
Eric Zavesky
335f7e7916 - trim whitespace, as required by build machine 2016-02-15 05:33:37 -06:00
Eric Zavesky
d7e57f2152 - fix typo from last minute change 2016-02-15 04:54:59 -06:00
Eric Zavesky
4c5af4f361 - add ROI selection, allow device input, use BB for area exclusion
- previously BB was ignored for first frame, now masks analysis area
  - also allow real-time feedback of processing
2016-02-15 04:27:28 -06:00
Eric Zavesky
4546139844 - remove zero threshold that prevents ORB from finding any local features 2016-02-15 04:26:03 -06:00
Maksim Shabunin
28dd315ef3 Merge pull request #6104 from alalek:issue_6102 2016-02-15 09:59:35 +00:00
Alexander Alekhin
84bf7680c7 Merge pull request #6100 from alalek:fix_5934 2016-02-15 02:52:07 +00:00
Rahul Chhabra
232f564011 Update imgproc.hpp
In reference to Issue #6110, the order of markerType and color is changed.
2016-02-14 10:18:14 +05:30
Ilya Lavrenov
068769263e fixed compilation warning 2016-02-12 18:12:20 +03:00
Maksim Shabunin
6c0c0466c6 Tutorials: moved Megamind.avi files to samples/data folder 2016-02-12 13:44:14 +03:00
Maksim Shabunin
359acc0d33 Tutorials: moved imgcodecs and videoio tutorials to separate pages 2016-02-12 13:35:46 +03:00
Alexander Alekhin
f48cda2f95 test: initialize test data in test_umat.cpp (6102) 2016-02-12 13:15:15 +03:00
Maksim Shabunin
54abb83c82 ml: moved getTestSamples implementation to src 2016-02-12 12:32:26 +03:00
ahb
15793b1301 add TestData::getTestSamples() 2016-02-12 12:11:10 +03:00
Alexander Alekhin
80102b76f9 Merge pull request #6074 from alalek:ffmpeg_interrupt_callback_compatibility 2016-02-11 15:00:52 +00:00
Josep Bosch
5384a2205a Adapted estimateNewCameraMatrix to make it work with pincushion-like distortion. 2016-02-11 11:27:43 +01:00
Alexander Alekhin
b2ca10a81f cmake: fix find_library() for bzip2 2016-02-11 12:57:10 +03:00
Alexander Alekhin
c7bdbef504 ocl: fix OpenGL sharing detection (6052)
Apple OpenCL framework hasn't OpenGL sharing extension
2016-02-11 12:46:22 +03:00
Alexander Alekhin
87bbaa2c27 ocl: OpenCL headers are located in "CL" subfolder (3rdparty/include) 2016-02-11 12:44:45 +03:00
Alexander Alekhin
2c4ed7f8a5 Merge pull request #6051 from mshabunin:fix-cap-qtkit 2016-02-10 17:35:20 +00:00
Alexander Alekhin
5efadcb335 Merge pull request #6042 from Dmitry-Me:reduceVariablesScope 2016-02-10 17:33:43 +00:00
Alexander Alekhin
8ac96eecd2 Merge pull request #6073 from alalek:fix_5897 2016-02-10 17:33:12 +00:00
Marina Noskova
5496dedd6a Fixed warnings. 2016-02-10 19:46:24 +03:00
Marina Noskova
0307dd19fd Minor fix in declaration of SVMSGD::setOptimalParameters 2016-02-10 18:21:45 +03:00
Marina Noskova
617dd5db5b Fixed doc/opencv.bib 2016-02-10 17:57:36 +03:00
Marina Noskova
c522172367 Fixed small bug in SVMSGD::clear(). 2016-02-10 16:59:12 +03:00
Marina Noskova
05353a1492 Removed trailing whitespaces 2016-02-10 16:59:12 +03:00
Marina Noskova
41c0a38344 Fixed test samples for tests with different borders
Added new test (separating two points)
2016-02-10 16:59:12 +03:00
Marina Noskova
bfdca05f25 Added margin type, added tests with different scales of features.
Also fixed documentation, refactored sample.
2016-02-10 16:59:12 +03:00
Marina Noskova
acd74037b3 Increasing the dimension of features space in the SVMSGD::train function. 2016-02-10 16:59:11 +03:00
Marina Noskova
40bf97c6d1 Refactored SVMSGD class 2016-02-10 16:56:14 +03:00
joao.faro
a2f0963d66 SVMSGD class added 2016-02-10 16:53:15 +03:00
Mathieu Barnachon
6a0d3b3e42 Called after setDevice.
Wrap in a cudaSafeCall.
2016-02-09 14:40:09 +01:00
Alexander Alekhin
b529b37d06 Merge pull request #6032 from mzajko:ximea_getprop_update 2016-02-09 12:07:17 +00:00
Alexander Alekhin
9ac35173e3 cmake: remove non-ascii symbols 2016-02-09 14:44:05 +03:00
Alexander Alekhin
1dac67f013 cmake: add version control revision info for extra modules 2016-02-09 14:39:05 +03:00
Alexander Alekhin
de8b3ee231 cmake: add timestamp into build info log (6089) 2016-02-09 14:39:04 +03:00
Marian Zajko
c21657336b ximea interface update
- fixed getProperty call definition
- added new parameter defitions

removed whitespaces

Reworked enumerators to keep values from previous commit

ximea enums fixes

- fixed whitespaces issue
- fixed duplicate enum values error

ximea enum definitions update

- fixed videioio.hpp code style
- fixed ABI violation in enums
- added new parameter handlers to cpp

XIMEA setProperty update

Added acquisition resetting to buffer size adjustment parameters.
2016-02-09 10:36:22 +01:00
Nikolay Polyarniy
46e08d34dd T-API python support implemented:
- cv2.UMat implemented - python thin wrapper for UMat
 - no implicit copy from GPU to Host done, resulting UMat can be passed to next function without overhead
 - cv2.UMat.get() - to fetch data to Host
 - new tests covers: ORB, BFMatcher, goodFeaturesToTrack, calcOpticalFlowPyrLK
2016-02-09 12:33:07 +03:00
Alexander Alekhin
e4dc479e95 Merge pull request #6088 from mshabunin:fix-exif-parsing 2016-02-08 16:01:07 +00:00
Alexander Alekhin
afdcfccdae Merge pull request #6082 from alekcac:alekcac-readme-changes 2016-02-08 15:57:55 +00:00
Maksim Shabunin
21e9edd1a3 Merge pull request #6083 from alekcac:alekcac-removed-gittip-link-in-2.4 2016-02-08 15:32:41 +00:00
Maksim Shabunin
7ba9b4fd1a Merge pull request #6085 from StevenPuttemans:add_at_matrix_info 2016-02-08 15:30:17 +00:00
Maksim Shabunin
112aa49104 ExifReader::getFormat : check buffer length before accessing, fixes 6059 2016-02-08 17:14:55 +03:00
Steven Puttemans
cd96df1407 Update mat.hpp 2016-02-08 13:26:06 +01:00
Mathieu Barnachon
b030ac0433 Ensure the Cuda context is initialized correctly as long as the setDevice is not called in a multi-thread environment. 2016-02-08 13:17:08 +01:00
Steven Puttemans
a70c54f2c5 Added suggestions from PR6068
As discussed here: https://github.com/Itseez/opencv/pull/6068#issuecomment-180797723
2016-02-08 10:20:08 +01:00
Alexander Shishkov
544824ffc1 Removed gittip link
This project is dead from the 1st September last year
2016-02-08 11:07:58 +03:00
Alexander Shishkov
4f5497837a Removed gittip link
This project is dead from 1st September last year
2016-02-08 11:04:19 +03:00
Alexander Alekhin
f9f5313670 Merge pull request #6075 from pranavg189:master 2016-02-07 09:41:29 +00:00
Pranav Ganorkar
4a5ed70175 removed dirname variable 2016-02-07 03:09:21 +05:30
Alexander Alekhin
c09b6000c6 ffmpeg: compatibility guard for interrupt callback feature 2016-02-06 15:20:36 +03:00
Alexander Alekhin
c10c8db97d cmake: skip checks for host paths on cross-compilation (5897) 2016-02-06 15:19:28 +03:00
Alexander Alekhin
e04f372083 Merge pull request #6068 from StevenPuttemans:add_at_matrix_info 2016-02-05 14:03:22 +00:00
Alexander Alekhin
0e909aa676 Merge pull request #6067 from StevenPuttemans:adapt_cmake 2016-02-05 12:51:00 +00:00
StevenPuttemans
873399705d add clarification on the acces paramter of the at operator 2016-02-05 13:21:40 +01:00
StevenPuttemans
6cdf3116c4 deactivate build options by default that are not supposed the be ON by default 2016-02-05 11:01:21 +01:00
Alexander Alekhin
b148ef2b1f Merge pull request #6053 from peters:master 2016-02-04 19:33:20 +00:00
Peter Rekdal Sunde
da48061910 Add interrupt callback with default timeout of 30s. Fixes #5730.
Fix docs build failure by re-indenting with spaces instead of tabs.

Trailing whitespace fixes. http://pullrequest.opencv.org/buildbot/builders/precommit_docs/builds/5152/steps/whitespace/logs/stdio

mingw build fix.
2016-02-04 18:09:14 +01:00
Alexander Alekhin
b2d44663fd Merge pull request #6058 from sturkmen72:documentation_fix_cv_repeate 2016-02-04 15:14:02 +00:00
Alexander Alekhin
ea8f9b032f Merge pull request #6062 from StevenPuttemans:fix_cascade_detect 2016-02-04 14:04:53 +00:00
StevenPuttemans
89df7923a7 revert PR 5362 2016-02-04 13:20:21 +01:00
Vadim Pisarevsky
56c89e0a98 Merge pull request #6014 from alalek:fix_5991 2016-02-04 09:54:27 +00:00
Vadim Pisarevsky
dabce70325 Merge pull request #6057 from alalek:fix_opencl_load_threadsafe 2016-02-04 09:31:36 +00:00
Suleyman TURKMEN
194b865daf update documentation of cv::repeat 2016-02-03 23:36:30 +02:00
Alexander Alekhin
7e472fbf68 ocl: thread-safe OpenCL loading (6056) 2016-02-03 18:30:40 +03:00
Alexander Alekhin
6f51dd1258 Merge pull request #6009 from patricksnape:flann_python_fix 2016-02-02 16:03:54 +00:00
Maksim Shabunin
a2bda99921 MacOSX / QTKit capture: trying to fix invalid timer call 2016-02-02 14:30:37 +03:00
Alexander Alekhin
35014a9742 Merge pull request #6048 from philippefoubert:ximea_bugfix 2016-02-02 07:25:34 +00:00
Alexander Alekhin
d6e2097435 Merge pull request #6037 from atinfinity:pullreq/160130-enable-nvcuvid-2.4 2016-02-02 07:09:20 +00:00
Alexander Alekhin
e0baa02193 Merge pull request #6036 from atinfinity:pullreq/160130-enable-nvcuvid 2016-02-02 07:08:49 +00:00
Philippe FOUBERT
43a1874e33 Bug correction:
The "CvCaptureCAM_XIMEA::getProperty" method had not the same signature as "CvCapture::getProperty" so it was not called when we use the "VideoCapture::get" method (the "const" specifier was missing).
2016-02-01 19:19:52 +01:00
atinfinity
cf43790a27 added cmakedefine to cmake/templates/cvconfig.h.in 2016-02-01 21:15:28 +09:00
atinfinity
db6e095fcc added cmakedefine to cmake/templates/cvconfig.h.in 2016-02-01 20:59:11 +09:00
Dmitry-Me
bf604f1780 Reduce variables scope 2016-02-01 11:10:13 +03:00
atinfinity
69eaa89e22 fixed to use NVCUVID in 'cudacodec' module. 2016-01-31 01:56:45 +09:00
atinfinity
ed8368fed7 fixed to use NVCUVID in 'cudacodec' module. 2016-01-31 01:28:15 +09:00
Alexander Alekhin
a4692a0da5 Merge pull request #6035 from ogreen:master 2016-01-30 08:23:00 +00:00
Oded Green
1a0282df21 CUDA median filtering using histograms 2016-01-29 20:05:40 -05:00
Alexander Alekhin
4894aac50d Merge pull request #6012 from mzajko:xi_cmake_update 2016-01-29 09:41:42 +00:00
alcinos
e22b838af8 Wrap SparseOptFlow class around PyrLK optical flow computation 2016-01-29 01:47:51 +01:00
alcinos
9b70c44f00 Adding interface for Sparse flow computation 2016-01-28 20:03:28 +01:00
alcinos
6e3b90de9b Add static creator for TVL1 optical flow class 2016-01-28 20:03:28 +01:00
alcinos
be4312ec3d Wrap DenseOptFlow class around Farneback optical flow computation 2016-01-28 20:03:27 +01:00
Alexander Alekhin
2978a16c85 core: preserve sizes values (fixes #5991)
_sizes can point to internal structure which is destroyed
by release() call
2016-01-26 14:11:53 +03:00
Alexander Alekhin
96f5a930f4 test: regression 5991 2016-01-26 14:11:53 +03:00
Marian Zajko
a387d6fa26 - removed whitespaces 2016-01-25 13:13:13 +01:00
Marian Zajko
34c006fcc4 Fixed ximea cmake settings
Fixed ximea cmake settings for 32bit win build and linux.
2016-01-25 11:05:55 +01:00
Patrick Snape
05cfe28612 Fix parsing of training vecs for FlannBasedMatcher
FlannBasedMatcher::add is overloaded, but the style of parsing the
InputArrayOfArrays does not match the style from
DescriptorMatcher::add. The issue is that InputArrayOfArrays
must be properly marshalled so that the data can be read
correctly. In this case, the method expects the training
descriptors to be either a vector of matrices or a single matrix
(as is shown in DescriptorMatcher::add). These code
replicates that for the case of the FlannBasedMatcher::add.

In fact, a similar commit to this was added by 26d9a7c but was
ultimately not accepted in #4111. This is likely due to the
fact that the input arrays were not parsed properly and the
case of a single matrix was being improperly handled. I believe
this commit to be correct given the logic from
DescriptorMatcher::add.
2016-01-23 15:58:16 +00:00
Patrick Snape
2f5ea3437e Update indentation to match rest of file
Very cosmetic, but was analyzing code and just wanted to make it
consistent.
2016-01-23 15:57:46 +00:00
Amro
c35b00a97e fix code snippet showing how to use SparseMat
generate indices within the size limit (modulo)
2016-01-23 17:28:49 +02:00
Alexander Alekhin
e835878661 Merge pull request #6006 from mleotta:fix-install-name-dir 2016-01-23 06:41:51 +00:00
Matt Leotta
912592de4c Remove "INSTALL_NAME_DIR lib" target property
The INSTALL_NAME_DIR property of a target specifies how a dynamic library should
be found on OS X.  If INSTALL_NAME_DIR is not specified the loader will search
relative to the standard search paths.  If specified it should either be
an absolute path or relative path prefixed with either @executable_path,
@load_path, or @rpath.  Specifying "lib" does not make sense here and
causes linking error as documented here:

http://answers.opencv.org/question/4134/cmake-install_name_tool-absolute-path-for-library-on-mac-osx/

and here

http://stackoverflow.com/questions/26978806/dyld-library-not-loaded-lib-libopencv-core-3-0-dylib-reason-image-not-found

This patch removes INSTALL_NAME_DIR everywhere it is set to "lib".
An alternate solution would be to set an absolute path like
"${CMAKE_INSTALL_PREFIX}/lib" or relative path like
"@executable_path/../lib".  However, if there is not specific need for
specifying a path, it is probably best left unset.
2016-01-21 16:07:56 -05:00
Alexander Alekhin
85793d0138 Merge pull request #6001 from terfendail:pyrsegmentation_valgrind 2016-01-21 15:03:46 +00:00
Alexander Alekhin
a57b03c356 Merge pull request #5993 from asmorkalov:linitian_signed_packages 2016-01-21 15:03:31 +00:00
Alexander Smorkalov
5a5378b3bf Added lintian overrides for package signature entry. 2016-01-21 17:04:28 +03:00
Maksim Shabunin
1cd3c6f364 Merge pull request #6000 from alalek:fix_python_detection 2016-01-21 11:30:58 +00:00
Alexander Alekhin
c5531a7a2f Merge pull request #5985 from Entodi:patch-1 2016-01-21 10:02:55 +00:00
Vitaly Tuzov
f01f1bc5e6 Fixed "Conditional jump or move depends on uninitialised value(s)" valgrind issue due to wrong pointer recalculation for zero level of pyramid. 2016-01-21 12:54:08 +03:00
Alexander Alekhin
75b709328e Merge pull request #5994 from alalek:fix_include_opencv 2016-01-21 05:17:36 +00:00
Alexander Alekhin
85c7190e41 Merge pull request #5995 from alalek:fix_include_opencv_24 2016-01-21 05:16:37 +00:00
Alexander Alekhin
5c8907c0e1 Merge pull request #5992 from ejoebstl:master 2016-01-20 16:31:41 +00:00
Alexander Alekhin
9bee835dac cmake: fix python detection 2016-01-20 19:01:00 +03:00
Alexander Alekhin
f2e4bec925 Merge pull request #5996 from ElenaGvozdeva:pyrUp_fix 2016-01-20 15:50:59 +00:00
emiswelt
b6c5936704 Removed trailing whitespace.
Note: Force push to force a re-run of build tests. The previous tests
failed in an unrelated module. I assume it's a bug that occured
randomly.
2016-01-20 12:04:42 +00:00
Alexander Alekhin
4a8d1147c2 include available modules only 2016-01-20 13:14:20 +03:00
Alexander Alekhin
24bbdeb0c8 include available modules only 2016-01-20 13:07:46 +03:00
Elena Gvozdeva
bb1c2d71a8 fix bug on border at pyrUp 2016-01-20 13:07:07 +03:00
emiswelt
cc3b2f6197 Added a helpful comment on the scale parameter of the spherical
warper.
2016-01-19 15:39:07 +00:00
Vadim Pisarevsky
347ffbb0eb Merge pull request #5983 from pra85:patch-1 2016-01-19 10:51:21 +00:00
Vadim Pisarevsky
be565c2235 Merge pull request #5984 from terfendail:2.4 2016-01-19 10:49:56 +00:00
thierry
bdb9cf4d47 fix inversed grayscale conditional 2016-01-18 17:56:26 +01:00
thierry
1b5352688f better png transparency handling 2016-01-18 16:10:02 +01:00
Alexander Fedorov
474c53ac71 Fixed parser for img1_filename and img2_filename.
Without fixes after 68 line (img1_filename = parser.get<std::string>(0);) OpenCV Error:
./stereo_matching im0.png im1.png --max-disparity=16 --blocksize=17

OpenCV Error: Bad argument (undeclared position 0 requested) in getByIndex, file /home/entodi/opencv/modules/core/src/command_line_parser.cpp, line 169
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/entodi/opencv/modules/core/src/command_line_parser.cpp:169: error: (-5) undeclared position 0 requested in function getByIndex
2016-01-18 15:34:41 +03:00
Alexander Alekhin
3f8d5be56f Merge pull request #5971 from AlexeyAB:correct_lighting_3d_reconstruct 2016-01-18 10:05:45 +00:00
Alexander Alekhin
8203b82f86 Merge pull request #5981 from IshankGulati:feature_homography 2016-01-18 10:05:14 +00:00
Vitaly Tuzov
389f176a67 Removed ioctl calls to query for VIDIOC_G_INPUT and VIDIOC_ENUMINPUT since information returned by the calls is never used.
Fixed icvCaptureFromCAM_V4L return value in case of V4L2 camera initialization failure.
2016-01-18 12:54:53 +03:00
Prayag Verma
9a783d2a8e Update license year range to 2016 2016-01-18 10:11:01 +05:30
Maksim Shabunin
68eab8ea00 Merge pull request #5884 from alalek:cmake_vars 2016-01-17 09:43:17 +00:00
Ishank gulati
5312db93b4 added equality 2016-01-17 09:46:23 +05:30
Alexander Alekhin
64057965f5 Merge pull request #5979 from alalek:world_disable_pch 2016-01-15 17:28:48 +00:00
Alexander Alekhin
ec1e1c6fe9 Merge pull request #5976 from alalek:fix_cmake_opencl 2016-01-15 16:52:47 +00:00
Alexander Alekhin
c75f9c80c7 cmake: turn off precompiled headers in case of opencv_world builds 2016-01-15 19:43:24 +03:00
Alexander Alekhin
5c21ca2697 Merge pull request #5975 from terfendail:2.4 2016-01-15 11:45:10 +00:00
Alexander Alekhin
8f37a3a37c cmake: make ocv_cmake_dump_vars() case insensitive 2016-01-15 14:38:25 +03:00
Alexander Alekhin
9cd6731894 cmake: add DEBUG_PRE/DEBUG_POST commands handling
Useful for debug purposes:
    cmake -DDEBUG_POST="ocv_cmake_dump_vars(CUDA)" .
    cmake -DCMAKE_PRE="ocv_cmake_dump_vars(\"OPENCL|opencl\")" .
2016-01-15 14:36:03 +03:00
Alexander Alekhin
9d4ee2f54d cmake: added generation of CMakeVars.txt
related: #5845
2016-01-15 13:54:28 +03:00
Alexander Alekhin
c35ddcba1a cmake: refactor OpenCL detection, allow custom configurations 2016-01-15 13:05:16 +03:00
Vitaly Tuzov
4f5d585184 Update call to Tegra optimized morphology filtering 2016-01-15 11:48:29 +03:00
Alexander Alekhin
243c513eea Merge pull request #5969 from alalek:fix_cuda_world 2016-01-15 06:57:19 +00:00
AlexeyAB
fcbb57a63f Added ability to disable lighting in the viz-module.
When I reconstructed the 3D scene I want to show it as viz::WMesh with an initial value of lighting. For this I disable lighting and shadows:
cv::viz::Viz3d viz_3d_window("3D");
viz_3d_window.setRenderingProperty("mesh", cv::viz::LIGHTING, 0);

Most of the examples show the 3D reconstruction using the point cloud, but using  the mesh one part of it creates a shadow on other parts of it if lighting ON.
Using a 3D mesh with disabled lighting gives the most realistic picture of the reconstructed 3D scene.
2016-01-14 19:02:18 +03:00
Alexander Alekhin
df89e76fb1 Merge pull request #5922 from DarwinsBuddy:fix_no_py_load_svm_bug 2016-01-14 14:44:27 +00:00
Alexander Alekhin
bc46682b28 Merge pull request #5893 from dtmoodie:vtk 2016-01-14 14:44:07 +00:00
Alexander Alekhin
c8ff7a4867 build: fix opencv_world with CUDA 2016-01-14 17:23:55 +03:00
Alexander Alekhin
c3ad8af42a Merge pull request #5968 from alalek:fix_5967 2016-01-14 13:18:38 +00:00
Alexander Alekhin
cb0b2bd1af Merge pull request #5965 from amroamroamro:fix_concentric_spheres 2016-01-14 12:09:25 +00:00
Alexander Alekhin
a1d7e38adb Merge pull request #5964 from amroamroamro:fix_lr 2016-01-14 12:08:53 +00:00
Alexander Alekhin
0655a2dc20 Merge pull request #5963 from KeySecure:master 2016-01-14 12:08:28 +00:00
Alexander Alekhin
d6134a0089 Merge pull request #5962 from BinMatrix:patch-4 2016-01-14 12:08:06 +00:00
Alexander Alekhin
cda8e449ec Merge pull request #5954 from smidm:patch-1 2016-01-14 12:07:37 +00:00
Alexander Alekhin
7494fa33c6 Merge pull request #5923 from powderluv:master 2016-01-14 12:07:02 +00:00
Alexander Alekhin
c7ccde69a8 fix TLS implementation (closes #5967) 2016-01-14 14:38:37 +03:00
Amro
47cdb041f2 fix assignment of class labels
by using the indices from the sorted distance vector of pairs.
2016-01-14 02:56:34 +02:00
Amro
542f2b2e3c clean up code for train and predict methods of LR 2016-01-13 20:47:07 +02:00
Amro
e67178c696 fix LR predict with raw output in 2-class case
In case of binary class, pred_m is initialized as zero vector and later
returned when raw outputs are requested, but it is never filled.
2016-01-13 19:48:21 +02:00
Alexander Alekhin
3d2fc6c2fd Merge pull request #5952 from alalek:ffmpeg_alloc_buffer 2016-01-13 17:31:32 +00:00
KeySecure
e6ac2ca3c9 make Xcode 7.2 happy. 2016-01-13 20:19:19 +08:00
BinMatrix
c7481c55f7 Fix the mouse bug and the problem of collapse 2016-01-13 19:04:17 +08:00
Alexander Alekhin
e3690db4bd Merge pull request #5949 from akarsakov:fixed_solvePnPRansac_input_handling 2016-01-12 17:58:07 +00:00
Alexander Alekhin
5a998335a6 Merge pull request #5943 from alalek:regression_5908 2016-01-12 17:15:15 +00:00
Matěj Šmíd
3e176bbfa0 fisheye documentation typo 2016-01-12 16:33:34 +01:00
Alexander Alekhin
285eb0a539 videoio ffmpeg: fix buffer allocation for unaligned frame sizes 2016-01-12 17:57:43 +03:00
Alexander Karsakov
e784ea7178 Fixed getSubset method to support Nx3 1-channel matrices as input (3xN 1-channel matrices doesn't supported at all). 2016-01-12 13:26:17 +03:00
Alexander Karsakov
0c9c7d5f3b Added test for checking that solvePnPRansac accepts vector<Point3f> and Nx3 1-channel or 1xN/Nx1 3-channel matrices as input. 2016-01-12 12:13:28 +03:00
Alexander Alekhin
70cb17bf64 Merge pull request #5947 from takacsd:patch-2 2016-01-12 08:09:20 +00:00
Alexander Alekhin
c01fd16291 Merge pull request #5946 from takacsd:patch-1 2016-01-12 08:08:58 +00:00
Alexander Alekhin
49d3e39bc4 test: added regression test for convexityDefects (#5908) 2016-01-11 19:47:36 +03:00
takacsd
1e0928633d Add missing implementation to one of the Mat_<_Tp> constructor. (#5945) 2016-01-11 16:11:50 +01:00
takacsd
537d1322b4 Add missing implementation to one of the Mat_<_Tp> constructor. (#5945) 2016-01-11 16:05:22 +01:00
Alexander Alekhin
7a62a8213b Merge pull request #5914 from LaurentBerger:I5908 2016-01-11 13:00:17 +00:00
Alexander Alekhin
43033f0b1d ts: move PARAM_TEST_CASE and GET_PARAM into ts.hpp 2016-01-11 15:36:52 +03:00
Alexander Alekhin
ec466ed1e0 Merge pull request #5936 from ejoebstl:master 2016-01-11 11:13:06 +00:00
Alexander Alekhin
8a803865cf Merge pull request #5942 from akarsakov:fix_memcpy_empty_vector 2016-01-11 11:12:31 +00:00
Alexander Alekhin
22acd964cb Merge pull request #5924 from Photonomie:release/3.1.0-patched 2016-01-11 11:11:45 +00:00
Alexander Alekhin
a8b27ae303 Merge pull request #5910 from rokm:cuda-warnings 2016-01-11 11:11:27 +00:00
Christoph Spörk
3f172731b2 added wrapped load function for python as suggested by gat3way 2016-01-11 10:59:15 +01:00
Alexander Karsakov
6e22020dad Fixed pnpTask: don't copy inliers vector in case it's empty. 2016-01-11 11:39:18 +03:00
Emanuel Jöbstl
4e469f2866 Changed parameter order in documentation
Changed parameter order in documentation of findEssentialMat, because threshold and probability were switched.
2016-01-08 14:46:17 +00:00
Kai Hugo Hustoft Endresen
551b5d3e1a StereoSGBM.cpp - use SSE2 for pass 2 using MODE_HH
With a test image set of 2800x1400 bytes on a Intel Core i7 5960X this improves runtime of MODE_HH with about 10%. (this particular replaced code segment is approx 3 times faster than the non-SSE2 variant). I was able to reduce runtime by 130 ms by this simple fix.

The second part of the SSE2 optimized part could probably be optimized further by using shift SSE2 operations, but I imagine this would improve performance 10-20 ms at best.
2016-01-08 00:32:52 +01:00
Christoph Spörk
66eda72f66 fixed a doxygen issue 2016-01-07 08:19:06 +01:00
Christoph Spörk
6c8bc6a25b fixed ABI incompatibilities as proposed by alalek
related to issue 4969
fixes issue 5891
fixes issue 5922
2016-01-07 08:00:01 +01:00
Pierre Dulac
262a52f306 Enable NEON for the arm64 architecture too
and fix the compilation for iOS in the same time
2016-01-05 15:34:39 +01:00
Anush Elangovan
3405a865c4 Add LLVM c++_static c++_shared STL targets
The Android NDK would be moving to Clang as its default compiler
in the future. This patch allows OpenCV to build with the default
c++_shared / c++_static

TEST=Builds OpenCV with -DANDROID_TOOLCHAIN_NAME=
aarch64-linux-android-clang3.6 -DANDROID_STL=c++_shared
2016-01-04 20:48:16 -08:00
Christoph Spörk
a7aa198b4c fixing issue #4969 of Itseez/opencv.
Someone forgot to wrap the load function for SVMs in the
corresponding ml python module. Fixed that.
2016-01-04 15:47:26 +01:00
Alexander Alekhin
345678770b Merge pull request #5771 from dtmoodie:pyrlk 2016-01-04 14:28:31 +00:00
Alexander Alekhin
430e2f205e Merge pull request #5916 from berak:NormalBayesClassifier_bulk_prediction 2016-01-04 14:25:53 +00:00
berak
5afd0e211e ml: fix NormalBayesClassifier bulk prediction(#5911) 2016-01-04 11:47:08 +01:00
Alexander Alekhin
fade402899 Merge pull request #5861 from alalek:fix_pkgconfig 2016-01-04 06:58:19 +00:00
Alexander Alekhin
1e4ad333a1 Merge pull request #5906 from berak:fix_marker 2016-01-04 05:31:00 +00:00
Alexander Alekhin
c06eaf83da Merge pull request #5904 from GregoryMorse:master 2016-01-04 05:30:28 +00:00
Alexander Alekhin
290b4d61b5 Merge pull request #5902 from alalek:fix_gpu_samples 2016-01-04 05:29:57 +00:00
Alexander Alekhin
76c9714516 Merge pull request #5883 from alalek:fix_5876 2016-01-04 05:28:41 +00:00
Alexander Alekhin
512e73db89 Merge pull request #5881 from alalek:fix_5878 2016-01-04 05:27:37 +00:00
Alexander Alekhin
9012ff4711 Merge pull request #5880 from alalek:fix_5863 2016-01-04 05:27:22 +00:00
Alexander Alekhin
f9e2b036a5 Merge pull request #5873 from paroj:cpprodrigues 2016-01-04 05:27:00 +00:00
LaurentBerger
8531e6d9fc May be it can solve issue 5908 2016-01-02 21:06:51 +01:00
Rok Mandeljc
029dfbc89d opencv_core: CUDA: check if __CUDA_ARCH__ is defined before comparing it
Changed statements of type "#if __CUDA_ARCH__ >= 200" to
"#if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 200" in order to
avoid warnings about __CUDA_ARCH__ being undefined.
2016-01-01 23:48:57 +01:00
berak
2d1cb14e61 fix cv::MARKER_TRIANGLE_UP 2016-01-01 10:10:01 +01:00
Gregory Morse
5427ede6a1 WinRT consistency 2015-12-31 14:31:26 +01:00
Alexander Alekhin
cdb9c60dcb gpu samples: fix REMOVE_ITEM error 2015-12-31 02:24:54 +03:00
Dan Moodie
66738d748f Modified sparse pyrlk optical flow to allow input of an image pyramid which thus allows caching of image pyramids on successive calls.
Added unsigned char support for 1, 3, 4 channel images.
2015-12-29 10:48:14 -05:00
Dan Moodie
64a57f7c38 Support for opengl2 in vtk 7.1 2015-12-28 14:04:02 -05:00
Ishank gulati
24da1ba3dc added videoio docs and tutorials 2015-12-26 10:48:01 +05:30
Alexander Alekhin
17e4d33b0e added regression test for #5876 2015-12-25 16:16:34 +03:00
Pavel Rojtberg
4db6d9986d also port Rodrigues in Affine to Matx expressions
so results are numerically equivalent
2015-12-25 13:47:10 +01:00
Alexander Alekhin
6997d423c8 fix normalize in case of inplace operations
fixes #5876
2015-12-25 15:33:06 +03:00
HMM@T430s-x64
6b4d4a85b5 solve videoio/src/cap_mjpeg_decoder.cpp compiling problem using VS 2008
fixes #5878
2015-12-25 13:57:26 +03:00
Alexander Alekhin
3d85e7ac0d features2d agast: clear in/out keypoints container
fixes #5863
2015-12-25 13:49:24 +03:00
Pavel Rojtberg
ac481e6174 calib3d: port Rodrigues to cpp primitives 2015-12-24 21:34:34 +01:00
Alexander Alekhin
8d79285d02 Merge pull request #5840 from paroj:v4ldefault 2015-12-24 10:08:59 +00:00
Alexander Alekhin
5fa64235b1 Merge pull request #5860 from Dikay900:patch-1 2015-12-24 09:08:06 +00:00
Alexander Alekhin
f91ada572a Merge pull request #5858 from mshabunin:fix-arm-cross-warnings 2015-12-24 09:07:29 +00:00
Teng Cao
25b044e6c3 fix a bug in updateTrainingSet
In case fillPassedSamples find zero passed negatives and leafFA is achieved, function updateTrainingSet will return false and print misleading information, this PR fix the case.
2015-12-24 10:26:42 +08:00
Ishank gulati
e607a85df6 png-image-compatibility 2015-12-23 23:37:32 +05:30
Alexander Alekhin
f7c8f74ac1 Merge pull request #5869 from atinfinity:pullreq/151223-FindTBB-VS2015-2.4 2015-12-23 16:16:57 +00:00
Alexander Alekhin
9c58741dba Merge pull request #5868 from atinfinity:pullreq/151223-FindTBB-VS2015 2015-12-23 16:16:31 +00:00
Alexander Alekhin
a4aeba37fb Merge pull request #5866 from Dikay900:patch-2 2015-12-23 16:14:53 +00:00
Alexander Alekhin
8c545c055d Merge pull request #5865 from Dikay900:fix_matcopy_shape 2015-12-23 16:14:36 +00:00
Alexander Alekhin
f26d0c5857 Merge pull request #5856 from Dikay900:fix_rgb2luv_doc 2015-12-23 16:14:06 +00:00
atinfinity
d16723f493 changed to find TBB library(VS2015) 2015-12-23 23:45:33 +09:00
atinfinity
c4e80952ce changed to find TBB library(VS2015) 2015-12-23 23:43:01 +09:00
Pavel Rojtberg
b3bbe7704d add jaccardDistance measure for rectangle overlap
computes the complement of the Jaccard Index as described in
https://en.wikipedia.org/wiki/Jaccard_index. For rectangles this reduces
to computing the intersection over the union.
2015-12-23 13:12:45 +01:00
Philip
1ba2286c6d fix uninitialized matrix in EM::predict fixes #5443
fixes #5443
2015-12-23 11:19:48 +01:00
Dikay900
bb78b01ace fix mat copy in shape
fixes #5643
2015-12-23 10:48:36 +01:00
Dikay900
a7d3e30404 fix probably copy paste like error in rgb2luv doc
fixes #5689
2015-12-22 22:45:51 +01:00
Alexander Alekhin
178ed63e1a Merge pull request #5846 from mshabunin:backports-3 2015-12-22 17:31:20 +00:00
Alexander Alekhin
f550ddb3fd Merge pull request #5854 from Dikay900:em_predict_fix 2015-12-22 15:15:53 +00:00
Alexander Alekhin
24dbb43c09 pkg-config: modules list contains only OpenCV modules (fixes #5852) 2015-12-22 17:28:38 +03:00
Philip
e85b23573b [master] Fixed PCH warning during ARM crosscompilation
#5858 for master
2015-12-22 15:24:02 +01:00
Maksim Shabunin
46edb54ac3 Fixed PCH warning during ARM crosscompilation 2015-12-22 15:58:39 +03:00
Ishank gulati
9636b5e821 reduce k_fold parameter 2015-12-22 15:47:11 +05:30
Dikay900
4f3b58d1e7 fix reshape call not being an inplace method
fixes #5853 #4740
2015-12-21 21:10:35 +01:00
Alexander Alekhin
afdbd855ee Merge pull request #5843 from jia-kai:disable-dlopen-opencl 2015-12-21 15:47:15 +00:00
Alexander Alekhin
923632272f Merge pull request #5848 from IshankGulati:broken-link-fix 2015-12-21 15:46:41 +00:00
Maksim Shabunin
7cb78451d1 Backported several changes from master branch:
- #3771 - inline round on ARM
- #5633 - documentation for MSER
- #5666 - run.py fixes
2015-12-21 18:20:37 +03:00
Ishank gulati
fb63cbb74b path to videocapture-get changed 2015-12-21 19:30:37 +05:30
Alexander Alekhin
4cfe2b4dea Merge tag '3.1.0'
OpenCV 3.1.0
2015-12-21 14:24:46 +03:00
jiakai
22599a2812 define g_haveOpenCL only when HAVE_OPENCL is set 2015-12-21 16:42:38 +08:00
jiakai
387214a3c5 do not open libopencl by dlopen if HAVE_OPENCL is not set 2015-12-21 12:04:00 +08:00
Pavel Rojtberg
96654f0084 make sure cap_v4l is used by default on Linux
cap_v4l is better maintained and generally the code is in
better shape than cap_libv4l.
2015-12-20 01:19:48 +01:00
Alexander Smorkalov
2897da037e Merge pull request #5763 from ilya-lavrenov:lintian 2015-12-16 11:27:59 +00:00
Ilya Lavrenov
4fa14f75b8 suppress lintian warning in opencv.pc 2015-12-09 13:47:09 +03:00
Vadim Pisarevsky
0886f6fe62 Merge pull request #5733 from teng88:patch-3 2015-12-07 10:08:23 +00:00
Teng Cao
07a58c47cb Update cascadeclassifier.cpp
minor fix since predict() returun int
2015-12-02 17:31:17 +08:00
yigitsoy
16a3773a34 Fix inlier assignment in Hungarian algorithm
While checking whether a match is a real match, the index of the corresponding column (row) for a row (column) is checked. The limit should be the number of the real columns (rows) for a given row (column).
2015-11-03 15:37:49 +01:00
Anton V. Shokurov
b9b40a73ba Exposure and autofocus properties fixed/added.
Exposure can now be manually controlled (implemented only in libv4l).
Will work only with a kernel version >= 4.5.
Autofocus can be enabled/disabled.
2015-10-28 07:37:51 -04:00
Alexander Smorkalov
8e40becab1 Debian packages with legacy C headers added to list of conflicts, relpaces, etc.
(cherry picked from commit e245aed6bb)
2015-10-26 10:56:34 +03:00
Alexander Alekhin
60eda6f25c export simple libs from OPENCV_LINKER_LIBS (fix #5541)
(cherry picked from commit 937a096bf1)
2015-10-26 10:55:38 +03:00
Alexander Smorkalov
2e78a3e5e9 Fixed samples build with nonfree.
(cherry picked from commit 341e7b3be2)
2015-10-26 10:55:24 +03:00
Alexander Smorkalov
966d35a9fb Made samples build independent from nonfree module.
(cherry picked from commit bba8c0beac)
2015-10-26 10:55:14 +03:00
Alexander Smorkalov
42447a7610 Set of lintain warning fixes for -samples debian package.
(cherry picked from commit ff00220302)
2015-10-26 10:55:00 +03:00
Aaron Simmons
ca50969c2b brining over fix in master (#4140) for libz import on 64-bit android
(cherry picked from commit 55a9fdf051)
2015-10-26 10:54:44 +03:00
a-andre
2d3e170370 install opencv2/highgui.hpp header
(cherry picked from commit d16fb30512)
2015-10-26 10:54:29 +03:00
Alexander Smorkalov
8a37fc8223 Added missing copyright headers.
(cherry picked from commit 408107ce6d)
2015-10-26 10:53:52 +03:00
Alexander Smorkalov
a5c20f8592 Debian formatted copyright file added to all debian packages.
(cherry picked from commit 9d24b3c3b0)
2015-10-26 10:53:38 +03:00
Ilya Lavrenov
96a2edb375 delete video readers
(cherry picked from commit 0d5b739d35)
2015-10-26 10:53:23 +03:00
Ilya Lavrenov
15b313ce4b fixed memory leak in findHomography tests
(cherry picked from commit ec5244a73a)
2015-10-26 10:52:57 +03:00
Alexander Smorkalov
1ea6568951 Fixed wrong-name-for-changelog-of-native-package warning for deb packages.
(cherry picked from commit cb1dc7cb6e)
2015-10-26 10:51:22 +03:00
Ilya Lavrenov
56654ae360 added some property setting and getting
(cherry picked from commit 75fcedf0ed)
2015-10-26 10:50:00 +03:00
Ilya Lavrenov
9a3e53e738 repaired GStreamer 0.10 version
(cherry picked from commit c19ed39a78)
2015-10-26 10:49:43 +03:00
Ilya Lavrenov
2243bfa181 repaired gstreamer camera capture:
1. Enabled property retrieval: height, width, FPS
2. Fixed issue when isOpened returns always true even for non-existing devices
3. Ability to work with non-0 device. Camera capture index is taken into account

(cherry picked from commit dbd7912b88)
2015-10-26 10:49:32 +03:00
robertxwu
33cd7f38a8 re-submit
(cherry picked from commit 4a68cc1675)
2015-10-26 10:49:02 +03:00
Hajo Nils Krabbenhöft
2fc0ce5c24 buffer_size should be in bytes, not bits
(cherry picked from commit 7825cbeb7d)
2015-10-26 10:46:33 +03:00
Hajo Nils Krabbenhöft
c5d009d6c4 fix crash for large BW tif images
(cherry picked from commit d38fee7599)
2015-10-26 10:46:23 +03:00
Roman Donchenko
7d28541bbe test2.py: fail if a downloaded image can't be decoded
(cherry picked from commit 56f17e4921)
2015-10-26 10:45:22 +03:00
Alexander Smorkalov
e6f3f3c029 OpenCV version++. 2015-09-17 14:02:36 +03:00
Ilya Lavrenov
7746d9b7cc fix for corrent modules dependencies
(cherry picked from commit 1c3d83df54)
2015-09-17 13:45:08 +03:00
Vladislav Vinogradov
3494d640df add extra checks to data_step_down to prevent out-of-border access
(cherry picked from commit 3ef067cc65)
2015-09-17 13:44:56 +03:00
Vladislav Vinogradov
c22cc67ba8 revert previous change in gpu::StereoBeliefPropogation
(cherry picked from commit f903192c17)
2015-09-17 13:44:33 +03:00
Vladislav Vinogradov
558054a53d fix for gpu::StereoBeliefPropogation:
use continuous memory for internal buffers

(cherry picked from commit e2a9df408f)
2015-09-17 13:44:17 +03:00
Elena Shipunova
c7b471f10f do not proceed with removing zero-length slice
(cherry picked from commit 036c3b4e6d)
2015-09-17 13:43:54 +03:00
Ilya Lavrenov
f4ffcae8d9 initialize padding of CvString with zeros
(cherry picked from commit 7b1eb3af7b)
2015-09-17 13:43:37 +03:00
Ilya Lavrenov
0422054aa1 fixed warnings in gpu module
(cherry picked from commit 6a05939e1c)
2015-09-17 13:41:51 +03:00
Ilya Lavrenov
a81f0a5123 fixed uninitialized memory writing/reading in flann
(cherry picked from commit 3934d61de7)
2015-09-17 13:41:31 +03:00
Ilya Lavrenov
c36582d2df fixed memory leak in flann index
(cherry picked from commit 32d7c1950a)
2015-09-17 13:41:16 +03:00
Ilya Lavrenov
d50c07e303 fixed "Conditional jump or move depends on uninitialised value(s)" in GBD
(cherry picked from commit 887736bcd4)
2015-09-17 13:41:03 +03:00
Ilya Lavrenov
54693b3fa7 fixed memory leak in GBTrees
(cherry picked from commit 1b8c2589c0)
2015-09-17 13:40:50 +03:00
Ilya Lavrenov
3c3bc123fc release filestorage before exception
(cherry picked from commit 3a1bb93340)
2015-09-17 13:40:36 +03:00
Ilya Lavrenov
ac33cd688c fixed memory leak in ANN
(cherry picked from commit dfb49097e3)
2015-09-17 13:40:14 +03:00
Ilya Lavrenov
b5e42d8cc1 fixed memory leak in ml module
(cherry picked from commit d7bb1025f3)
2015-09-17 13:40:02 +03:00
Ilya Lavrenov
7e4e8921bc fixed memory leak in descriptor regression tests 2015-09-17 13:39:44 +03:00
Ilya Lavrenov
6dcd455ac4 fixed memory leaks in modules/features2d/test/test_nearestneighbors.cpp 2015-09-17 13:39:34 +03:00
Vladislav Vinogradov
1d58e1a14a fix potential out-of-border access in gpu StereoBeliefPropagation 2015-09-17 13:39:17 +03:00
Roman Donchenko
d122510c4f Only conflict with packages corresponding to modules that are built 2015-09-17 13:39:03 +03:00
Roman Donchenko
6613d14261 Add missing packages to the Debian conflict list
And refactor the code to make sure that the dev and runtime package lists are
in sync.
2015-09-17 13:38:52 +03:00
a-andre
a14e524b32 fix documentation builder warnings 2015-09-17 13:38:25 +03:00
a-andre
226ff93917 install new headers like "opencv2/core.hpp" 2015-09-17 13:38:11 +03:00
Ilya Lavrenov
d28e6c9b36 fixed memory leak caused by illegal memory access
(cherry picked from commit 4722b2d0e5)
2015-09-17 13:37:52 +03:00
Ilya Lavrenov
c16f465ff5 fixed "Conditional jump or move depends on uninitialised value" warning
(cherry picked from commit f100cdb6d4)
2015-09-17 13:37:38 +03:00
Roman Donchenko
3231c2f995 NearestNeighborTest: use ts->get_rng() instead of (implicit) theRNG()
This ensures that test data is not dependent on the order the tests are
executed in.

(cherry picked from commit 1245cd1752)
2015-09-17 13:37:26 +03:00
Ilya Lavrenov
16bcc30e42 typo
(cherry picked from commit 793bdaada7)
2015-09-17 13:37:12 +03:00
Ilya Lavrenov
69c50e0181 fixed typo
(cherry picked from commit 370d1ff21a)
2015-09-17 13:37:02 +03:00
Ilya Lavrenov
486c40f578 fixed uninitialized values warning in bad arg test class
(cherry picked from commit 47cee8715b)
2015-09-17 13:36:51 +03:00
Ilya Lavrenov
08e38e9ff9 fixed memory leaks in warpAffine tests
(cherry picked from commit b70e27e076)
2015-09-17 13:36:35 +03:00
Ilya Lavrenov
ba3b902da7 fixed memory leaks in floodfill tests
(cherry picked from commit d1b882ddcf)
2015-09-17 13:36:24 +03:00
Ilya Lavrenov
bf94e6a91c fixed memory leaks in cvtyuv tests
(cherry picked from commit b2489d31d6)
2015-09-17 13:36:14 +03:00
Ilya Lavrenov
ecc53dd7a4 fixed memory leak in core ds tests
(cherry picked from commit 7719da9552)
2015-09-17 13:35:51 +03:00
Ilya Lavrenov
fc0e0239b8 fixed valgrind warning in polylines
(cherry picked from commit 855765986e)
2015-09-17 13:35:25 +03:00
Suleyman TURKMEN
3f3e6ba739 Update min_enclosing_triangle.cpp 2015-09-11 16:41:22 +03:00
Alexander Smorkalov
d0210f510e OpenCV version++. 2015-08-14 16:43:10 +03:00
3437 changed files with 644068 additions and 174441 deletions

2
.gitattributes vendored
View File

@@ -31,6 +31,8 @@
*.py text
*.qrc text
*.qss text
*.rc text
*.rc.in text
*.S text
*.sbt text
*.scala text

30
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,30 @@
<!--
If you have a question rather than reporting a bug please go to http://answers.opencv.org where you get much faster responses.
If you need further assistance please read [How To Contribute](https://github.com/opencv/opencv/wiki/How_to_contribute).
This is a template helping you to create an issue which can be processed as quickly as possible. This is the bug reporting section for the OpenCV library.
-->
##### System information (version)
<!-- Example
- OpenCV => 3.1
- Operating System / Platform => Windows 64 Bit
- Compiler => Visual Studio 2015
-->
- OpenCV => :grey_question:
- Operating System / Platform => :grey_question:
- Compiler => :grey_question:
##### Detailed description
<!-- your description -->
##### Steps to reproduce
<!-- to add code example fence it with triple backticks and optional file extension
```.cpp
// C++ code example
```
or attach as .txt or .zip file
-->

9
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,9 @@
<!-- Please use this line to close one or multiple issues when this pullrequest gets merged
You can add another line right under the first one:
resolves #1234
resolves #1235
-->
### This pullrequest changes
<!-- Please describe what your pullrequest is changing -->

9
.gitignore vendored
View File

@@ -1,10 +1,11 @@
# ignore dot files/directories
.*
!.gitignore
*.autosave
*.pyc
*.user
*~
.*.swp
.DS_Store
.sw[a-z]
Thumbs.db
tags
tegra/
@@ -17,8 +18,6 @@ bin/
*.rule
*.tmp
*/debug
*/CMakeFiles
CMakeCache.txt
*.suo
*.log
*.tlog

View File

@@ -1,2 +0,0 @@
[tgit]
icon = doc/opencv.ico

8
3rdparty/carotene/.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
# Gedit temp files
*~
# Qt Creator file
*.user
# MacOS-specific (Desktop Services Store)
.DS_Store

40
3rdparty/carotene/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,40 @@
cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project(Carotene)
set(CAROTENE_NS "carotene" CACHE STRING "Namespace for Carotene definitions")
set(CAROTENE_INCLUDE_DIR include)
set(CAROTENE_SOURCE_DIR src)
file(GLOB_RECURSE carotene_headers RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "${CAROTENE_INCLUDE_DIR}/*.hpp")
file(GLOB_RECURSE carotene_sources RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "${CAROTENE_SOURCE_DIR}/*.cpp"
"${CAROTENE_SOURCE_DIR}/*.hpp")
include_directories(${CAROTENE_INCLUDE_DIR})
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_CXX_FLAGS "-fvisibility=hidden ${CMAKE_CXX_FLAGS}")
# allow more inlines - these parameters improve performance for:
# - matchTemplate about 5-10%
# - goodFeaturesToTrack 10-20%
# - cornerHarris 30% for some cases
set_source_files_properties(${carotene_sources} COMPILE_FLAGS "--param ipcp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
endif()
add_library(carotene_objs OBJECT
${carotene_headers}
${carotene_sources}
)
if(NOT CAROTENE_NS STREQUAL "carotene")
target_compile_definitions(carotene_objs PUBLIC "-DCAROTENE_NS=${CAROTENE_NS}")
endif()
if(WITH_NEON)
target_compile_definitions(carotene_objs PRIVATE "-DWITH_NEON")
endif()
add_library(carotene STATIC EXCLUDE_FROM_ALL "$<TARGET_OBJECTS:carotene_objs>")

2
3rdparty/carotene/README.md vendored Normal file
View File

@@ -0,0 +1,2 @@
This is Carotene, a low-level library containing optimized CPU routines
that are useful for computer vision algorithms.

111
3rdparty/carotene/hal/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,111 @@
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
set(TEGRA_HAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(CAROTENE_DIR "${TEGRA_HAL_DIR}/../")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
set(ARM TRUE)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64.*|AARCH64.*")
set(AARCH64 TRUE)
endif()
set(TEGRA_COMPILER_FLAGS "")
if(CMAKE_COMPILER_IS_GNUCXX)
# Generate unwind information even for functions that can't throw/propagate exceptions.
# This lets debuggers and such get non-broken backtraces for such functions, even without debugging symbols.
list(APPEND TEGRA_COMPILER_FLAGS -funwind-tables)
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
if(X86 OR ARMEABI_V6 OR (MIPS AND ANDROID_COMPILER_VERSION VERSION_LESS "4.6"))
list(APPEND TEGRA_COMPILER_FLAGS -fweb -fwrapv -frename-registers -fsched-stalled-insns-dep=100 -fsched-stalled-insns=2)
elseif(CMAKE_COMPILER_IS_CLANGCXX)
list(APPEND TEGRA_COMPILER_FLAGS -fwrapv)
else()
list(APPEND TEGRA_COMPILER_FLAGS -fweb -fwrapv -frename-registers -fsched2-use-superblocks -fsched2-use-traces
-fsched-stalled-insns-dep=100 -fsched-stalled-insns=2)
endif()
if((ANDROID_COMPILER_IS_CLANG OR NOT ANDROID_COMPILER_VERSION VERSION_LESS "4.7") AND ANDROID_NDK_RELEASE STRGREATER "r8d" )
list(APPEND TEGRA_COMPILER_FLAGS -fgraphite -fgraphite-identity -floop-block -floop-flatten -floop-interchange
-floop-strip-mine -floop-parallelize-all -ftree-loop-linear)
endif()
endif()
string(REPLACE ";" " " TEGRA_COMPILER_FLAGS "${TEGRA_COMPILER_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEGRA_COMPILER_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEGRA_COMPILER_FLAGS}")
if(ARMEABI_V7A)
if (CMAKE_COMPILER_IS_GNUCXX)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-tree-vectorize" )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-tree-vectorize" )
endif()
endif()
if(WITH_LOGS)
add_definitions(-DHAVE_LOGS)
endif()
set(CAROTENE_NS "carotene_o4t" CACHE STRING "" FORCE)
function(compile_carotene)
if(ENABLE_NEON)
set(WITH_NEON ON)
endif()
add_subdirectory("${CAROTENE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/carotene")
if(ARM OR AARCH64)
if(CMAKE_BUILD_TYPE)
set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
endif()
check_cxx_compiler_flag("-mfpu=neon" CXX_HAS_MFPU_NEON)
check_c_compiler_flag("-mfpu=neon" C_HAS_MFPU_NEON)
if(${CXX_HAS_MFPU_NEON} AND ${C_HAS_MFPU_NEON} AND NOT "${CMAKE_CXX_FLAGS} " MATCHES "-mfpu=neon[^ ]*")
get_target_property(old_flags "carotene_objs" COMPILE_FLAGS)
if(old_flags)
set_target_properties("carotene_objs" PROPERTIES COMPILE_FLAGS "${old_flags} -mfpu=neon")
else()
set_target_properties("carotene_objs" PROPERTIES COMPILE_FLAGS "-mfpu=neon")
endif()
endif()
endif()
endfunction()
compile_carotene()
include_directories("${CAROTENE_DIR}/include")
get_target_property(carotene_defs carotene_objs INTERFACE_COMPILE_DEFINITIONS)
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${carotene_defs})
if (CMAKE_COMPILER_IS_GNUCXX)
# allow more inlines - these parameters improve performance for:
# matchTemplate about 5-10%
# goodFeaturesToTrack 10-20%
# cornerHarris 30% for some cases
set_source_files_properties(impl.cpp $<TARGET_OBJECTS:carotene_objs> COMPILE_FLAGS "--param ipcp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
# set_source_files_properties(impl.cpp $<TARGET_OBJECTS:carotene_objs> COMPILE_FLAGS "--param ipcp-unit-growth=100000 --param inline-unit-growth=100000 --param large-stack-frame-growth=5000")
endif()
add_library(tegra_hal STATIC $<TARGET_OBJECTS:carotene_objs>)
set_target_properties(tegra_hal PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH})
set(OPENCV_SRC_DIR "${CMAKE_SOURCE_DIR}")
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(tegra_hal EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
target_include_directories(tegra_hal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${OPENCV_SRC_DIR}/modules/core/include)
set(CAROTENE_HAL_VERSION "0.0.1" PARENT_SCOPE)
set(CAROTENE_HAL_LIBRARIES "tegra_hal" PARENT_SCOPE)
set(CAROTENE_HAL_HEADERS "carotene/tegra_hal.hpp" PARENT_SCOPE)
set(CAROTENE_HAL_INCLUDE_DIRS "${CMAKE_BINARY_DIR}" PARENT_SCOPE)
configure_file("tegra_hal.hpp" "${CMAKE_BINARY_DIR}/carotene/tegra_hal.hpp" COPYONLY)
configure_file("${CAROTENE_DIR}/include/carotene/definitions.hpp" "${CMAKE_BINARY_DIR}/carotene/definitions.hpp" COPYONLY)
configure_file("${CAROTENE_DIR}/include/carotene/functions.hpp" "${CMAKE_BINARY_DIR}/carotene/functions.hpp" COPYONLY)
configure_file("${CAROTENE_DIR}/include/carotene/types.hpp" "${CMAKE_BINARY_DIR}/carotene/types.hpp" COPYONLY)

1851
3rdparty/carotene/hal/tegra_hal.hpp vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,47 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_DEFINITIONS_HPP
#define CAROTENE_DEFINITIONS_HPP
#ifndef CAROTENE_NS
#define CAROTENE_NS carotene
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,125 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_TYPES_HPP
#define CAROTENE_TYPES_HPP
#include <carotene/definitions.hpp>
#include <stdint.h>
#include <cstddef>
#ifndef UINT32_MAX
#define UINT32_MAX (4294967295U)
#endif
namespace CAROTENE_NS {
using std::size_t;
using std::ptrdiff_t;
typedef int8_t s8;
typedef uint8_t u8;
typedef int16_t s16;
typedef uint16_t u16;
typedef int32_t s32;
typedef uint32_t u32;
typedef float f32;
typedef int64_t s64;
typedef uint64_t u64;
typedef double f64;
typedef ptrdiff_t stride_t;
enum CONVERT_POLICY
{
CONVERT_POLICY_WRAP,
CONVERT_POLICY_SATURATE
};
enum BORDER_MODE
{
BORDER_MODE_UNDEFINED,
BORDER_MODE_CONSTANT,
BORDER_MODE_REPLICATE,
BORDER_MODE_REFLECT,
BORDER_MODE_REFLECT101,
BORDER_MODE_WRAP
};
enum FLIP_MODE
{
FLIP_HORIZONTAL_MODE = 1,
FLIP_VERTICAL_MODE = 2,
FLIP_BOTH_MODE = FLIP_HORIZONTAL_MODE | FLIP_VERTICAL_MODE
};
enum COLOR_SPACE
{
COLOR_SPACE_BT601,
COLOR_SPACE_BT709
};
struct Size2D {
Size2D() : width(0), height(0) {}
Size2D(size_t width_, size_t height_) : width(width_), height(height_) {}
size_t width;
size_t height;
inline size_t total() const
{
return width * height;
}
};
struct Margin {
Margin() : left(0), right(0), top(0), bottom(0) {}
Margin(size_t left_, size_t right_, size_t top_, size_t bottom_)
: left(left_), right(right_), top(top_), bottom(bottom_) {}
// these are measured in elements
size_t left, right, top, bottom;
};
struct KeypointStore {
virtual void push(f32 kpX, f32 kpY, f32 kpSize, f32 kpAngle=-1, f32 kpResponse=0, s32 kpOctave=0, s32 kpClass_id=-1) = 0;
virtual ~KeypointStore() {};
};
}
#endif

241
3rdparty/carotene/src/absdiff.cpp vendored Normal file
View File

@@ -0,0 +1,241 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <algorithm>
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <typename T>
struct AbsDiff
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vabdq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vabd(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = src0[0] >= src1[0] ? src0[0] - src1[0] : src1[0] - src0[0];
}
};
template <typename T>
struct AbsDiffSigned
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
typename internal::VecTraits<T>::vec128 v_min = internal::vminq(v_src0, v_src1);
typename internal::VecTraits<T>::vec128 v_max = internal::vmaxq(v_src0, v_src1);
v_dst = internal::vqsubq(v_max, v_min);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
typename internal::VecTraits<T>::vec64 v_min = internal::vmin(v_src0, v_src1);
typename internal::VecTraits<T>::vec64 v_max = internal::vmax(v_src0, v_src1);
v_dst = internal::vqsub(v_max, v_min);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = internal::saturate_cast<T>(src0[0] >= src1[0] ? (s64)src0[0] - src1[0] : (s64)src1[0] - src0[0]);
}
};
} // namespace
#endif
void absDiff(const Size2D &size,
const u8 *src0Base, ptrdiff_t src0Stride,
const u8 *src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiff<u8>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void absDiff(const Size2D &size,
const u16 *src0Base, ptrdiff_t src0Stride,
const u16 *src1Base, ptrdiff_t src1Stride,
u16 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiff<u16>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void absDiff(const Size2D &size,
const s8 *src0Base, ptrdiff_t src0Stride,
const s8 *src1Base, ptrdiff_t src1Stride,
s8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiffSigned<s8>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void absDiff(const Size2D &size,
const s16 *src0Base, ptrdiff_t src0Stride,
const s16 *src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiffSigned<s16>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void absDiff(const Size2D &size,
const s32 *src0Base, ptrdiff_t src0Stride,
const s32 *src1Base, ptrdiff_t src1Stride,
s32 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiffSigned<s32>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void absDiff(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, AbsDiff<f32>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

408
3rdparty/carotene/src/accumulate.cpp vendored Normal file
View File

@@ -0,0 +1,408 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
#include <cstring>
namespace CAROTENE_NS {
void accumulate(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
s16 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8* src = internal::getRowPtr(srcBase, srcStride, i);
s16* dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
internal::prefetch(dst + j);
uint8x16_t v_src = vld1q_u8(src + j);
int16x8_t v_dst0 = vld1q_s16(dst + j);
int16x8_t v_dst1 = vld1q_s16(dst + j + 8);
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src)));
int16x8_t v_src1 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src)));
v_dst0 = vqaddq_s16(v_dst0, v_src0);
v_dst1 = vqaddq_s16(v_dst1, v_src1);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
uint8x8_t v_src = vld1_u8(src + j);
int16x8_t v_src16 = vreinterpretq_s16_u16(vmovl_u8(v_src));
int16x8_t v_dst = vld1q_s16(dst + j);
v_dst = vqaddq_s16(v_dst, v_src16);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = internal::saturate_cast<s16>(src[j] + dst[j]);
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
#endif
}
#ifdef CAROTENE_NEON
namespace {
template <int shift>
void accumulateSquareConst(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
s16 *dstBase, ptrdiff_t dstStride)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8* src = internal::getRowPtr(srcBase, srcStride, i);
s16* dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
internal::prefetch(dst + j);
uint8x16_t v_src = vld1q_u8(src + j);
int16x8_t v_dst0 = vld1q_s16(dst + j), v_dst1 = vld1q_s16(dst + j + 8);
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src)));
int16x8_t v_src1 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src)));
int16x4_t v_srclo = vget_low_s16(v_src0), v_srchi = vget_high_s16(v_src0);
v_dst0 = vcombine_s16(vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srclo, v_srclo), shift), vget_low_s16(v_dst0))),
vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srchi, v_srchi), shift), vget_high_s16(v_dst0))));
v_srclo = vget_low_s16(v_src1);
v_srchi = vget_high_s16(v_src1);
v_dst1 = vcombine_s16(vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srclo, v_srclo), shift), vget_low_s16(v_dst1))),
vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srchi, v_srchi), shift), vget_high_s16(v_dst1))));
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src + j)));
int16x8_t v_dst = vld1q_s16(dst + j);
int16x4_t v_srclo = vget_low_s16(v_src), v_srchi = vget_high_s16(v_src);
v_dst = vcombine_s16(vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srclo, v_srclo), shift), vget_low_s16(v_dst))),
vqmovn_s32(vaddw_s16(vshrq_n_s32(vmull_s16(v_srchi, v_srchi), shift), vget_high_s16(v_dst))));
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
{
s32 srcVal = src[j];
dst[j] = internal::saturate_cast<s16>(dst[j] + ((srcVal * srcVal) >> shift));
}
}
}
template <>
void accumulateSquareConst<0>(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
s16 *dstBase, ptrdiff_t dstStride)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8* src = internal::getRowPtr(srcBase, srcStride, i);
s16* dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
internal::prefetch(dst + j);
uint8x16_t v_src = vld1q_u8(src + j);
int16x8_t v_dst0 = vld1q_s16(dst + j), v_dst1 = vld1q_s16(dst + j + 8);
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src)));
int16x8_t v_src1 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src)));
int16x4_t v_srclo = vget_low_s16(v_src0), v_srchi = vget_high_s16(v_src0);
v_dst0 = vcombine_s16(vqmovn_s32(vaddw_s16(vmull_s16(v_srclo, v_srclo), vget_low_s16(v_dst0))),
vqmovn_s32(vaddw_s16(vmull_s16(v_srchi, v_srchi), vget_high_s16(v_dst0))));
v_srclo = vget_low_s16(v_src1);
v_srchi = vget_high_s16(v_src1);
v_dst1 = vcombine_s16(vqmovn_s32(vaddw_s16(vmull_s16(v_srclo, v_srclo), vget_low_s16(v_dst1))),
vqmovn_s32(vaddw_s16(vmull_s16(v_srchi, v_srchi), vget_high_s16(v_dst1))));
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src + j)));
int16x8_t v_dst = vld1q_s16(dst + j);
int16x4_t v_srclo = vget_low_s16(v_src), v_srchi = vget_high_s16(v_src);
v_dst = vcombine_s16(vqmovn_s32(vaddw_s16(vmull_s16(v_srclo, v_srclo), vget_low_s16(v_dst))),
vqmovn_s32(vaddw_s16(vmull_s16(v_srchi, v_srchi), vget_high_s16(v_dst))));
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
{
s32 srcVal = src[j];
dst[j] = internal::saturate_cast<s16>(dst[j] + srcVal * srcVal);
}
}
}
typedef void (* accumulateSquareConstFunc)(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
s16 *dstBase, ptrdiff_t dstStride);
} // namespace
#endif
void accumulateSquare(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
s16 *dstBase, ptrdiff_t dstStride,
u32 shift)
{
if (shift >= 16)
{
for (size_t i = 0; i < size.height; ++i)
{
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
std::memset(dst, 0, sizeof(s16) * size.width);
}
return;
}
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
// this ugly contruction is needed to avoid:
// /usr/lib/gcc/arm-linux-gnueabihf/4.8/include/arm_neon.h:3581:59: error: argument must be a constant
// return (int16x8_t)__builtin_neon_vshr_nv8hi (__a, __b, 1);
accumulateSquareConstFunc funcs[16] =
{
accumulateSquareConst<0>,
accumulateSquareConst<1>,
accumulateSquareConst<2>,
accumulateSquareConst<3>,
accumulateSquareConst<4>,
accumulateSquareConst<5>,
accumulateSquareConst<6>,
accumulateSquareConst<7>,
accumulateSquareConst<8>,
accumulateSquareConst<9>,
accumulateSquareConst<10>,
accumulateSquareConst<11>,
accumulateSquareConst<12>,
accumulateSquareConst<13>,
accumulateSquareConst<14>,
accumulateSquareConst<15>
}, func = funcs[shift];
func(size, srcBase, srcStride, dstBase, dstStride);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)shift;
#endif
}
#ifdef CAROTENE_NEON
namespace {
struct AccumulateWeightedHalf
{
typedef u8 type;
void operator() (const uint8x16_t & v_src0, const uint8x16_t & v_src1,
uint8x16_t & v_dst) const
{
v_dst = vhaddq_u8(v_src0, v_src1);
}
void operator() (const uint8x8_t & v_src0, const uint8x8_t & v_src1,
uint8x8_t & v_dst) const
{
v_dst = vhadd_u8(v_src0, v_src1);
}
void operator() (const u8 * src0, const u8 * src1, u8 * dst) const
{
dst[0] = ((u16)(src0[0]) + src1[0]) >> 1;
}
};
struct AccumulateWeighted
{
typedef u8 type;
float alpha, beta;
float32x4_t v_alpha, v_beta;
explicit AccumulateWeighted(float _alpha) :
alpha(_alpha), beta(1 - _alpha)
{
v_alpha = vdupq_n_f32(alpha);
v_beta = vdupq_n_f32(beta);
}
void operator() (const uint8x16_t & v_src0, const uint8x16_t & v_src1,
uint8x16_t & v_dst) const
{
uint16x8_t v_src0_p = vmovl_u8(vget_low_u8(v_src0));
uint16x8_t v_src1_p = vmovl_u8(vget_low_u8(v_src1));
float32x4_t v_dst0f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src1_p))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src0_p))));
float32x4_t v_dst1f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src1_p))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src0_p))));
uint16x8_t v_dst0 = vcombine_u16(vmovn_u32(vcvtq_u32_f32(v_dst0f)),
vmovn_u32(vcvtq_u32_f32(v_dst1f)));
v_src0_p = vmovl_u8(vget_high_u8(v_src0));
v_src1_p = vmovl_u8(vget_high_u8(v_src1));
v_dst0f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src1_p))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src0_p))));
v_dst1f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src1_p))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src0_p))));
uint16x8_t v_dst1 = vcombine_u16(vmovn_u32(vcvtq_u32_f32(v_dst0f)),
vmovn_u32(vcvtq_u32_f32(v_dst1f)));
v_dst = vcombine_u8(vmovn_u16(v_dst0), vmovn_u16(v_dst1));
}
void operator() (const uint8x8_t & _v_src0, const uint8x8_t & _v_src1,
uint8x8_t & v_dst) const
{
uint16x8_t v_src0 = vmovl_u8(_v_src0), v_src1 = vmovl_u8(_v_src1);
float32x4_t v_dst0f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src1))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_low_u16(v_src0))));
float32x4_t v_dst1f = vmlaq_f32(vmulq_f32(vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src1))), v_beta),
v_alpha, vcvtq_f32_u32(vmovl_u16(vget_high_u16(v_src0))));
uint16x8_t _v_dst = vcombine_u16(vmovn_u32(vcvtq_u32_f32(v_dst0f)),
vmovn_u32(vcvtq_u32_f32(v_dst1f)));
v_dst = vmovn_u16(_v_dst);
}
void operator() (const u8 * src0, const u8 * src1, u8 * dst) const
{
dst[0] = beta * src1[0] + alpha * src0[0];
}
};
} // namespace
#endif
void accumulateWeighted(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
u8 *dstBase, ptrdiff_t dstStride,
f32 alpha)
{
if (alpha == 0.0f)
return;
if (alpha == 1.0f)
{
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
std::memcpy(dst, src, sizeof(u8) * size.width);
}
return;
}
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
// in this case we can use the following scheme:
// dst[p] = (src[p] + dst[p]) >> 1
// which is faster
if (alpha == 0.5f)
{
internal::vtransform(size,
srcBase, srcStride,
dstBase, dstStride,
dstBase, dstStride,
AccumulateWeightedHalf());
return;
}
internal::vtransform(size,
srcBase, srcStride,
dstBase, dstStride,
dstBase, dstStride,
AccumulateWeighted(alpha));
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)alpha;
#endif
}
} //namespace CAROTENE_NS

475
3rdparty/carotene/src/add.cpp vendored Normal file
View File

@@ -0,0 +1,475 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <typename T, typename WT>
struct AddWrap
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vaddq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vadd(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = (T)((WT)src0[0] + (WT)src1[0]);
}
};
template <typename T, typename WT>
struct AddSaturate
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vqaddq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vqadd(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = internal::saturate_cast<T>((WT)src0[0] + (WT)src1[0]);
}
};
} // namespace
#endif
void add(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<u8, u16>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<u8, u16>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const s8 * src0Base, ptrdiff_t src0Stride,
const s8 * src1Base, ptrdiff_t src1Stride,
s8 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<s8, s16>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<s8, s16>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const u8 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
u16 * dst = internal::getRowPtr((u16 *)dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw32; j += 32)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src00 = vld1q_u8(src0 + j), v_src01 = vld1q_u8(src0 + j + 16);
uint8x16_t v_src10 = vld1q_u8(src1 + j), v_src11 = vld1q_u8(src1 + j + 16);
vst1q_u16(dst + j, vaddl_u8(vget_low_u8(v_src00), vget_low_u8(v_src10)));
vst1q_u16(dst + j + 8, vaddl_u8(vget_high_u8(v_src00), vget_high_u8(v_src10)));
vst1q_u16(dst + j + 16, vaddl_u8(vget_low_u8(v_src01), vget_low_u8(v_src11)));
vst1q_u16(dst + j + 24, vaddl_u8(vget_high_u8(v_src01), vget_high_u8(v_src11)));
}
for (; j < roiw8; j += 8)
{
uint8x8_t v_src0 = vld1_u8(src0 + j);
uint8x8_t v_src1 = vld1_u8(src1 + j);
vst1q_u16(dst + j, vaddl_u8(v_src0, v_src1));
}
for (; j < size.width; j++)
dst[j] = (u16)src0[j] + (u16)src1[j];
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void add(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const s16 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (policy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src0 = vld1q_u8(src0 + j);
int16x8_t v_src00 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src0)));
int16x8_t v_src01 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src0)));
int16x8_t v_src10 = vld1q_s16(src1 + j), v_src11 = vld1q_s16(src1 + j + 8);
int16x8_t v_dst0 = vqaddq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vqaddq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src0 + j)));
int16x8_t v_src1 = vld1q_s16(src1 + j);
int16x8_t v_dst = vqaddq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = internal::saturate_cast<s16>((s32)src0[j] + (s32)src1[j]);
}
else
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src0 = vld1q_u8(src0 + j);
int16x8_t v_src00 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src0)));
int16x8_t v_src01 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src0)));
int16x8_t v_src10 = vld1q_s16(src1 + j), v_src11 = vld1q_s16(src1 + j + 8);
int16x8_t v_dst0 = vaddq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vaddq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src0 + j)));
int16x8_t v_src1 = vld1q_s16(src1 + j);
int16x8_t v_dst = vaddq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = (s16)((s32)src0[j] + (s32)src1[j]);
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<s16, s32>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<s16, s32>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const u16 * src0Base, ptrdiff_t src0Stride,
const u16 * src1Base, ptrdiff_t src1Stride,
u16 * dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<u16, u32>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<u16, u32>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const s32 * src0Base, ptrdiff_t src0Stride,
const s32 * src1Base, ptrdiff_t src1Stride,
s32 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<s32, s64>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<s32, s64>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const u32 * src0Base, ptrdiff_t src0Stride,
const u32 * src1Base, ptrdiff_t src1Stride,
u32 * dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddSaturate<u32, u64>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<u32, u64>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void add(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
AddWrap<f32, f32>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

265
3rdparty/carotene/src/add_weighted.cpp vendored Normal file
View File

@@ -0,0 +1,265 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
using namespace internal;
template <typename T> struct TypeTraits;
template <> struct TypeTraits< u8> { typedef u16 wide; typedef u8 unsign; typedef uint8x16_t vec128; };
template <> struct TypeTraits< s8> { typedef s16 wide; typedef u8 unsign; typedef int8x16_t vec128; };
template <> struct TypeTraits<u16> { typedef u32 wide; typedef u8 narrow; typedef u16 unsign; typedef uint16x8_t vec128; };
template <> struct TypeTraits<s16> { typedef s32 wide; typedef s8 narrow; typedef u16 unsign; typedef int16x8_t vec128; };
template <> struct TypeTraits<u32> { typedef u64 wide; typedef u16 narrow; typedef u32 unsign; typedef uint32x4_t vec128; };
template <> struct TypeTraits<s32> { typedef s64 wide; typedef s16 narrow; typedef u32 unsign; typedef int32x4_t vec128; };
template <> struct TypeTraits<f32> { typedef f64 wide; typedef float32x4_t vec128; };
template <typename T> struct wAdd
{
typedef T type;
f32 alpha, beta, gamma;
typedef typename TypeTraits<T>::wide wtype;
wAdd<wtype> wideAdd;
wAdd(f32 _alpha, f32 _beta, f32 _gamma):
alpha(_alpha), beta(_beta), gamma(_gamma),
wideAdd(_alpha, _beta, _gamma) {}
void operator() (const typename VecTraits<T>::vec128 & v_src0,
const typename VecTraits<T>::vec128 & v_src1,
typename VecTraits<T>::vec128 & v_dst) const
{
typename VecTraits<wtype>::vec128 vrl, vrh;
wideAdd(vmovl( vget_low(v_src0)), vmovl( vget_low(v_src1)), vrl);
wideAdd(vmovl(vget_high(v_src0)), vmovl(vget_high(v_src1)), vrh);
v_dst = vcombine(vqmovn(vrl), vqmovn(vrh));
}
void operator() (const typename VecTraits<T>::vec64 & v_src0,
const typename VecTraits<T>::vec64 & v_src1,
typename VecTraits<T>::vec64 & v_dst) const
{
typename VecTraits<wtype>::vec128 vr;
wideAdd(vmovl(v_src0), vmovl(v_src1), vr);
v_dst = vqmovn(vr);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = saturate_cast<T>(alpha*src0[0] + beta*src1[0] + gamma);
}
};
template <> struct wAdd<s32>
{
typedef s32 type;
f32 alpha, beta, gamma;
float32x4_t valpha, vbeta, vgamma;
wAdd(f32 _alpha, f32 _beta, f32 _gamma):
alpha(_alpha), beta(_beta), gamma(_gamma)
{
valpha = vdupq_n_f32(_alpha);
vbeta = vdupq_n_f32(_beta);
vgamma = vdupq_n_f32(_gamma + 0.5);
}
void operator() (const typename VecTraits<s32>::vec128 & v_src0,
const typename VecTraits<s32>::vec128 & v_src1,
typename VecTraits<s32>::vec128 & v_dst) const
{
float32x4_t vs1 = vcvtq_f32_s32(v_src0);
float32x4_t vs2 = vcvtq_f32_s32(v_src1);
vs1 = vmlaq_f32(vgamma, vs1, valpha);
vs1 = vmlaq_f32(vs1, vs2, vbeta);
v_dst = vcvtq_s32_f32(vs1);
}
void operator() (const typename VecTraits<s32>::vec64 & v_src0,
const typename VecTraits<s32>::vec64 & v_src1,
typename VecTraits<s32>::vec64 & v_dst) const
{
float32x2_t vs1 = vcvt_f32_s32(v_src0);
float32x2_t vs2 = vcvt_f32_s32(v_src1);
vs1 = vmla_f32(vget_low(vgamma), vs1, vget_low(valpha));
vs1 = vmla_f32(vs1, vs2, vget_low(vbeta));
v_dst = vcvt_s32_f32(vs1);
}
void operator() (const s32 * src0, const s32 * src1, s32 * dst) const
{
dst[0] = saturate_cast<s32>(alpha*src0[0] + beta*src1[0] + gamma);
}
};
template <> struct wAdd<u32>
{
typedef u32 type;
f32 alpha, beta, gamma;
float32x4_t valpha, vbeta, vgamma;
wAdd(f32 _alpha, f32 _beta, f32 _gamma):
alpha(_alpha), beta(_beta), gamma(_gamma)
{
valpha = vdupq_n_f32(_alpha);
vbeta = vdupq_n_f32(_beta);
vgamma = vdupq_n_f32(_gamma + 0.5);
}
void operator() (const typename VecTraits<u32>::vec128 & v_src0,
const typename VecTraits<u32>::vec128 & v_src1,
typename VecTraits<u32>::vec128 & v_dst) const
{
float32x4_t vs1 = vcvtq_f32_u32(v_src0);
float32x4_t vs2 = vcvtq_f32_u32(v_src1);
vs1 = vmlaq_f32(vgamma, vs1, valpha);
vs1 = vmlaq_f32(vs1, vs2, vbeta);
v_dst = vcvtq_u32_f32(vs1);
}
void operator() (const typename VecTraits<u32>::vec64 & v_src0,
const typename VecTraits<u32>::vec64 & v_src1,
typename VecTraits<u32>::vec64 & v_dst) const
{
float32x2_t vs1 = vcvt_f32_u32(v_src0);
float32x2_t vs2 = vcvt_f32_u32(v_src1);
vs1 = vmla_f32(vget_low(vgamma), vs1, vget_low(valpha));
vs1 = vmla_f32(vs1, vs2, vget_low(vbeta));
v_dst = vcvt_u32_f32(vs1);
}
void operator() (const u32 * src0, const u32 * src1, u32 * dst) const
{
dst[0] = saturate_cast<u32>(alpha*src0[0] + beta*src1[0] + gamma);
}
};
template <> struct wAdd<f32>
{
typedef f32 type;
f32 alpha, beta, gamma;
float32x4_t valpha, vbeta, vgamma;
wAdd(f32 _alpha, f32 _beta, f32 _gamma):
alpha(_alpha), beta(_beta), gamma(_gamma)
{
valpha = vdupq_n_f32(_alpha);
vbeta = vdupq_n_f32(_beta);
vgamma = vdupq_n_f32(_gamma + 0.5);
}
void operator() (const typename VecTraits<f32>::vec128 & v_src0,
const typename VecTraits<f32>::vec128 & v_src1,
typename VecTraits<f32>::vec128 & v_dst) const
{
float32x4_t vs1 = vmlaq_f32(vgamma, v_src0, valpha);
v_dst = vmlaq_f32(vs1, v_src1, vbeta);
}
void operator() (const typename VecTraits<f32>::vec64 & v_src0,
const typename VecTraits<f32>::vec64 & v_src1,
typename VecTraits<f32>::vec64 & v_dst) const
{
float32x2_t vs1 = vmla_f32(vget_low(vgamma), v_src0, vget_low(valpha));
v_dst = vmla_f32(vs1, v_src1, vget_low(vbeta));
}
void operator() (const f32 * src0, const f32 * src1, f32 * dst) const
{
dst[0] = alpha*src0[0] + beta*src1[0] + gamma;
}
};
} // namespace
#define IMPL_ADDWEIGHTED(type) \
void addWeighted(const Size2D &size, \
const type * src0Base, ptrdiff_t src0Stride, \
const type * src1Base, ptrdiff_t src1Stride, \
type * dstBase, ptrdiff_t dstStride, \
f32 alpha, f32 beta, f32 gamma) \
{ \
internal::assertSupportedConfiguration(); \
wAdd<type> wgtAdd(alpha, \
beta, \
gamma); \
internal::vtransform(size, \
src0Base, src0Stride, \
src1Base, src1Stride, \
dstBase, dstStride, \
wgtAdd); \
}
#else
#define IMPL_ADDWEIGHTED(type) \
void addWeighted(const Size2D &, \
const type *, ptrdiff_t, \
const type *, ptrdiff_t, \
type *, ptrdiff_t, \
f32, f32, f32) \
{ \
internal::assertSupportedConfiguration(); \
}
#endif
IMPL_ADDWEIGHTED(u8)
IMPL_ADDWEIGHTED(s8)
IMPL_ADDWEIGHTED(u16)
IMPL_ADDWEIGHTED(s16)
IMPL_ADDWEIGHTED(u32)
IMPL_ADDWEIGHTED(s32)
IMPL_ADDWEIGHTED(f32)
} // namespace CAROTENE_NS

225
3rdparty/carotene/src/bitwise.cpp vendored Normal file
View File

@@ -0,0 +1,225 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
struct BitwiseAnd
{
typedef u8 type;
void operator() (const uint8x16_t & v_src0, const uint8x16_t & v_src1,
uint8x16_t & v_dst) const
{
v_dst = vandq_u8(v_src0, v_src1);
}
void operator() (const uint8x8_t & v_src0, const uint8x8_t & v_src1,
uint8x8_t & v_dst) const
{
v_dst = vand_u8(v_src0, v_src1);
}
void operator() (const u8 * src0, const u8 * src1, u8 * dst) const
{
dst[0] = src0[0] & src1[0];
}
};
struct BitwiseOr
{
typedef u8 type;
void operator() (const uint8x16_t & v_src0, const uint8x16_t & v_src1,
uint8x16_t & v_dst) const
{
v_dst = vorrq_u8(v_src0, v_src1);
}
void operator() (const uint8x8_t & v_src0, const uint8x8_t & v_src1,
uint8x8_t & v_dst) const
{
v_dst = vorr_u8(v_src0, v_src1);
}
void operator() (const u8 * src0, const u8 * src1, u8 * dst) const
{
dst[0] = src0[0] | src1[0];
}
};
struct BitwiseXor
{
typedef u8 type;
void operator() (const uint8x16_t & v_src0, const uint8x16_t & v_src1,
uint8x16_t & v_dst) const
{
v_dst = veorq_u8(v_src0, v_src1);
}
void operator() (const uint8x8_t & v_src0, const uint8x8_t & v_src1,
uint8x8_t & v_dst) const
{
v_dst = veor_u8(v_src0, v_src1);
}
void operator() (const u8 * src0, const u8 * src1, u8 * dst) const
{
dst[0] = src0[0] ^ src1[0];
}
};
#endif
void bitwiseNot(const Size2D &size,
const u8 *srcBase, ptrdiff_t srcStride,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8* src = internal::getRowPtr(srcBase, srcStride, i);
u8* dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw32; j += 32)
{
internal::prefetch(src + j);
uint8x16_t v_src0 = vld1q_u8(src + j), v_src1 = vld1q_u8(src + j + 16);
uint8x16_t v_dst0 = vmvnq_u8(v_src0), v_dst1 = vmvnq_u8(v_src1);
vst1q_u8(dst + j, v_dst0);
vst1q_u8(dst + j + 16, v_dst1);
}
for (; j < roiw8; j += 8)
{
uint8x8_t v_src = vld1_u8(src + j);
uint8x8_t v_dst = vmvn_u8(v_src);
vst1_u8(dst + j, v_dst);
}
for (; j < size.width; j++)
{
dst[j] = ~src[j];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
#endif
}
void bitwiseAnd(const Size2D &size,
const u8 *src0Base, ptrdiff_t src0Stride,
const u8 *src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, BitwiseAnd());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void bitwiseOr(const Size2D &size,
const u8 *src0Base, ptrdiff_t src0Stride,
const u8 *src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, BitwiseOr());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void bitwiseXor(const Size2D &size,
const u8 *src0Base, ptrdiff_t src0Stride,
const u8 *src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride, BitwiseXor());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

1337
3rdparty/carotene/src/blur.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

773
3rdparty/carotene/src/canny.cpp vendored Normal file
View File

@@ -0,0 +1,773 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "saturate_cast.hpp"
#include <vector>
#include <cstring>
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
struct RowFilter3x3Canny
{
inline RowFilter3x3Canny(const ptrdiff_t borderxl, const ptrdiff_t borderxr)
{
vfmask = vreinterpret_u8_u64(vmov_n_u64(borderxl ? 0x0000FFffFFffFFffULL : 0x0100FFffFFffFFffULL));
vtmask = vreinterpret_u8_u64(vmov_n_u64(borderxr ? 0x0707060504030201ULL : 0x0706050403020100ULL));
lookLeft = offsetk - borderxl;
lookRight = offsetk - borderxr;
}
inline void operator()(const u8* src, s16* dstx, s16* dsty, ptrdiff_t width)
{
uint8x8_t l = vtbl1_u8(vld1_u8(src - lookLeft), vfmask);
ptrdiff_t i = 0;
for (; i < width - 8 + lookRight; i += 8)
{
internal::prefetch(src + i);
uint8x8_t l18u = vld1_u8(src + i + 1);
uint8x8_t l2 = l18u;
uint8x8_t l0 = vext_u8(l, l18u, 6);
int16x8_t l1x2 = vreinterpretq_s16_u16(vshll_n_u8(vext_u8(l, l18u, 7), 1));
l = l18u;
int16x8_t l02 = vreinterpretq_s16_u16(vaddl_u8(l2, l0));
int16x8_t ldx = vreinterpretq_s16_u16(vsubl_u8(l2, l0));
int16x8_t ldy = vaddq_s16(l02, l1x2);
vst1q_s16(dstx + i, ldx);
vst1q_s16(dsty + i, ldy);
}
//tail
if (lookRight == 0 || i != width)
{
uint8x8_t tail0 = vld1_u8(src + (width - 9));//can't get left 1 pixel another way if width==8*k+1
uint8x8_t tail2 = vtbl1_u8(vld1_u8(src + (width - 8 + lookRight)), vtmask);
uint8x8_t tail1 = vext_u8(vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(tail0), 8*6)), tail2, 7);
int16x8_t tail02 = vreinterpretq_s16_u16(vaddl_u8(tail2, tail0));
int16x8_t tail1x2 = vreinterpretq_s16_u16(vshll_n_u8(tail1, 1));
int16x8_t taildx = vreinterpretq_s16_u16(vsubl_u8(tail2, tail0));
int16x8_t taildy = vqaddq_s16(tail02, tail1x2);
vst1q_s16(dstx + (width - 8), taildx);
vst1q_s16(dsty + (width - 8), taildy);
}
}
uint8x8_t vfmask;
uint8x8_t vtmask;
enum { offsetk = 1};
ptrdiff_t lookLeft;
ptrdiff_t lookRight;
};
template <bool L2gradient>
inline void ColFilter3x3Canny(const s16* src0, const s16* src1, const s16* src2, s16* dstx, s16* dsty, s32* mag, ptrdiff_t width)
{
ptrdiff_t j = 0;
for (; j <= width - 8; j += 8)
{
ColFilter3x3CannyL1Loop:
int16x8_t line0x = vld1q_s16(src0 + j);
int16x8_t line1x = vld1q_s16(src1 + j);
int16x8_t line2x = vld1q_s16(src2 + j);
int16x8_t line0y = vld1q_s16(src0 + j + width);
int16x8_t line2y = vld1q_s16(src2 + j + width);
int16x8_t l02 = vaddq_s16(line0x, line2x);
int16x8_t l1x2 = vshlq_n_s16(line1x, 1);
int16x8_t dy = vsubq_s16(line2y, line0y);
int16x8_t dx = vaddq_s16(l1x2, l02);
int16x8_t dya = vabsq_s16(dy);
int16x8_t dxa = vabsq_s16(dx);
int16x8_t norm = vaddq_s16(dya, dxa);
int32x4_t normh = vmovl_s16(vget_high_s16(norm));
int32x4_t norml = vmovl_s16(vget_low_s16(norm));
vst1q_s16(dsty + j, dy);
vst1q_s16(dstx + j, dx);
vst1q_s32(mag + j + 4, normh);
vst1q_s32(mag + j, norml);
}
if (j != width)
{
j = width - 8;
goto ColFilter3x3CannyL1Loop;
}
}
template <>
inline void ColFilter3x3Canny<true>(const s16* src0, const s16* src1, const s16* src2, s16* dstx, s16* dsty, s32* mag, ptrdiff_t width)
{
ptrdiff_t j = 0;
for (; j <= width - 8; j += 8)
{
ColFilter3x3CannyL2Loop:
int16x8_t line0x = vld1q_s16(src0 + j);
int16x8_t line1x = vld1q_s16(src1 + j);
int16x8_t line2x = vld1q_s16(src2 + j);
int16x8_t line0y = vld1q_s16(src0 + j + width);
int16x8_t line2y = vld1q_s16(src2 + j + width);
int16x8_t l02 = vaddq_s16(line0x, line2x);
int16x8_t l1x2 = vshlq_n_s16(line1x, 1);
int16x8_t dy = vsubq_s16(line2y, line0y);
int16x8_t dx = vaddq_s16(l1x2, l02);
int32x4_t norml = vmull_s16(vget_low_s16(dx), vget_low_s16(dx));
int32x4_t normh = vmull_s16(vget_high_s16(dy), vget_high_s16(dy));
norml = vmlal_s16(norml, vget_low_s16(dy), vget_low_s16(dy));
normh = vmlal_s16(normh, vget_high_s16(dx), vget_high_s16(dx));
vst1q_s16(dsty + j, dy);
vst1q_s16(dstx + j, dx);
vst1q_s32(mag + j, norml);
vst1q_s32(mag + j + 4, normh);
}
if (j != width)
{
j = width - 8;
goto ColFilter3x3CannyL2Loop;
}
}
template <bool L2gradient>
inline void NormCanny(const ptrdiff_t colscn, s16* _dx, s16* _dy, s32* _norm)
{
ptrdiff_t j = 0;
if (colscn >= 8)
{
int16x8_t vx = vld1q_s16(_dx);
int16x8_t vy = vld1q_s16(_dy);
for (; j <= colscn - 16; j+=8)
{
internal::prefetch(_dx);
internal::prefetch(_dy);
int16x8_t vx2 = vld1q_s16(_dx + j + 8);
int16x8_t vy2 = vld1q_s16(_dy + j + 8);
int16x8_t vabsx = vabsq_s16(vx);
int16x8_t vabsy = vabsq_s16(vy);
int16x8_t norm = vaddq_s16(vabsx, vabsy);
int32x4_t normh = vmovl_s16(vget_high_s16(norm));
int32x4_t norml = vmovl_s16(vget_low_s16(norm));
vst1q_s32(_norm + j + 4, normh);
vst1q_s32(_norm + j + 0, norml);
vx = vx2;
vy = vy2;
}
int16x8_t vabsx = vabsq_s16(vx);
int16x8_t vabsy = vabsq_s16(vy);
int16x8_t norm = vaddq_s16(vabsx, vabsy);
int32x4_t normh = vmovl_s16(vget_high_s16(norm));
int32x4_t norml = vmovl_s16(vget_low_s16(norm));
vst1q_s32(_norm + j + 4, normh);
vst1q_s32(_norm + j + 0, norml);
}
for (; j < colscn; j++)
_norm[j] = std::abs(s32(_dx[j])) + std::abs(s32(_dy[j]));
}
template <>
inline void NormCanny<true>(const ptrdiff_t colscn, s16* _dx, s16* _dy, s32* _norm)
{
ptrdiff_t j = 0;
if (colscn >= 8)
{
int16x8_t vx = vld1q_s16(_dx);
int16x8_t vy = vld1q_s16(_dy);
for (; j <= colscn - 16; j+=8)
{
internal::prefetch(_dx);
internal::prefetch(_dy);
int16x8_t vxnext = vld1q_s16(_dx + j + 8);
int16x8_t vynext = vld1q_s16(_dy + j + 8);
int32x4_t norml = vmull_s16(vget_low_s16(vx), vget_low_s16(vx));
int32x4_t normh = vmull_s16(vget_high_s16(vy), vget_high_s16(vy));
norml = vmlal_s16(norml, vget_low_s16(vy), vget_low_s16(vy));
normh = vmlal_s16(normh, vget_high_s16(vx), vget_high_s16(vx));
vst1q_s32(_norm + j + 0, norml);
vst1q_s32(_norm + j + 4, normh);
vx = vxnext;
vy = vynext;
}
int32x4_t norml = vmull_s16(vget_low_s16(vx), vget_low_s16(vx));
int32x4_t normh = vmull_s16(vget_high_s16(vy), vget_high_s16(vy));
norml = vmlal_s16(norml, vget_low_s16(vy), vget_low_s16(vy));
normh = vmlal_s16(normh, vget_high_s16(vx), vget_high_s16(vx));
vst1q_s32(_norm + j + 0, norml);
vst1q_s32(_norm + j + 4, normh);
}
for (; j < colscn; j++)
_norm[j] = s32(_dx[j])*_dx[j] + s32(_dy[j])*_dy[j];
}
template <bool L2gradient>
inline void prepareThresh(f64 low_thresh, f64 high_thresh,
s32 &low, s32 &high)
{
if (low_thresh > high_thresh)
std::swap(low_thresh, high_thresh);
#if defined __GNUC__
low = (s32)low_thresh;
high = (s32)high_thresh;
low -= (low > low_thresh);
high -= (high > high_thresh);
#else
low = internal::round(low_thresh);
high = internal::round(high_thresh);
f32 ldiff = (f32)(low_thresh - low);
f32 hdiff = (f32)(high_thresh - high);
low -= (ldiff < 0);
high -= (hdiff < 0);
#endif
}
template <>
inline void prepareThresh<true>(f64 low_thresh, f64 high_thresh,
s32 &low, s32 &high)
{
if (low_thresh > high_thresh)
std::swap(low_thresh, high_thresh);
if (low_thresh > 0) low_thresh *= low_thresh;
if (high_thresh > 0) high_thresh *= high_thresh;
#if defined __GNUC__
low = (s32)low_thresh;
high = (s32)high_thresh;
low -= (low > low_thresh);
high -= (high > high_thresh);
#else
low = internal::round(low_thresh);
high = internal::round(high_thresh);
f32 ldiff = (f32)(low_thresh - low);
f32 hdiff = (f32)(high_thresh - high);
low -= (ldiff < 0);
high -= (hdiff < 0);
#endif
}
template <bool L2gradient, bool externalSobel>
struct _normEstimator
{
ptrdiff_t magstep;
ptrdiff_t dxOffset;
ptrdiff_t dyOffset;
ptrdiff_t shxOffset;
ptrdiff_t shyOffset;
std::vector<u8> buffer;
const ptrdiff_t offsetk;
ptrdiff_t borderyt, borderyb;
RowFilter3x3Canny sobelRow;
inline _normEstimator(const Size2D &size, s32, Margin borderMargin,
ptrdiff_t &mapstep, s32** mag_buf, u8* &map):
offsetk(1),
sobelRow(std::max<ptrdiff_t>(0, offsetk - (ptrdiff_t)borderMargin.left),
std::max<ptrdiff_t>(0, offsetk - (ptrdiff_t)borderMargin.right))
{
mapstep = size.width + 2;
magstep = size.width + 2 + size.width * (4 * sizeof(s16)/sizeof(s32));
dxOffset = mapstep * sizeof(s32)/sizeof(s16);
dyOffset = dxOffset + size.width * 1;
shxOffset = dxOffset + size.width * 2;
shyOffset = dxOffset + size.width * 3;
buffer.resize( (size.width+2)*(size.height+2) + magstep*3*sizeof(s32) );
mag_buf[0] = (s32*)&buffer[0];
mag_buf[1] = mag_buf[0] + magstep;
mag_buf[2] = mag_buf[1] + magstep;
memset(mag_buf[0], 0, mapstep * sizeof(s32));
map = (u8*)(mag_buf[2] + magstep);
memset(map, 1, mapstep);
memset(map + mapstep*(size.height + 1), 1, mapstep);
borderyt = std::max<ptrdiff_t>(0, offsetk - (ptrdiff_t)borderMargin.top);
borderyb = std::max<ptrdiff_t>(0, offsetk - (ptrdiff_t)borderMargin.bottom);
}
inline void firstRow(const Size2D &size, s32,
const u8 *srcBase, ptrdiff_t srcStride,
s16*, ptrdiff_t,
s16*, ptrdiff_t,
s32** mag_buf)
{
//sobelH row #0
const u8* _src = internal::getRowPtr(srcBase, srcStride, 0);
sobelRow(_src, ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[0]) + shyOffset, size.width);
//sobelH row #1
_src = internal::getRowPtr(srcBase, srcStride, 1);
sobelRow(_src, ((s16*)mag_buf[1]) + shxOffset, ((s16*)mag_buf[1]) + shyOffset, size.width);
mag_buf[1][0] = mag_buf[1][size.width+1] = 0;
if (borderyt == 0)
{
//sobelH row #-1
_src = internal::getRowPtr(srcBase, srcStride, -1);
sobelRow(_src, ((s16*)mag_buf[2]) + shxOffset, ((s16*)mag_buf[2]) + shyOffset, size.width);
ColFilter3x3Canny<L2gradient>( ((s16*)mag_buf[2]) + shxOffset, ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[1]) + shxOffset,
((s16*)mag_buf[1]) + dxOffset, ((s16*)mag_buf[1]) + dyOffset, mag_buf[1] + 1, size.width);
}
else
{
ColFilter3x3Canny<L2gradient>( ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[1]) + shxOffset,
((s16*)mag_buf[1]) + dxOffset, ((s16*)mag_buf[1]) + dyOffset, mag_buf[1] + 1, size.width);
}
}
inline void nextRow(const Size2D &size, s32,
const u8 *srcBase, ptrdiff_t srcStride,
s16*, ptrdiff_t,
s16*, ptrdiff_t,
const ptrdiff_t &mapstep, s32** mag_buf,
size_t i, const s16* &_x, const s16* &_y)
{
mag_buf[2][0] = mag_buf[2][size.width+1] = 0;
if (i < size.height - borderyb)
{
const u8* _src = internal::getRowPtr(srcBase, srcStride, i+1);
//sobelH row #i+1
sobelRow(_src, ((s16*)mag_buf[2]) + shxOffset, ((s16*)mag_buf[2]) + shyOffset, size.width);
ColFilter3x3Canny<L2gradient>( ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[1]) + shxOffset, ((s16*)mag_buf[2]) + shxOffset,
((s16*)mag_buf[2]) + dxOffset, ((s16*)mag_buf[2]) + dyOffset, mag_buf[2] + 1, size.width);
}
else if (i < size.height)
{
ColFilter3x3Canny<L2gradient>( ((s16*)mag_buf[0]) + shxOffset, ((s16*)mag_buf[1]) + shxOffset, ((s16*)mag_buf[1]) + shxOffset,
((s16*)mag_buf[2]) + dxOffset, ((s16*)mag_buf[2]) + dyOffset, mag_buf[2] + 1, size.width);
}
else
memset(mag_buf[2], 0, mapstep*sizeof(s32));
_x = ((s16*)mag_buf[1]) + dxOffset;
_y = ((s16*)mag_buf[1]) + dyOffset;
}
};
template <bool L2gradient>
struct _normEstimator<L2gradient, true>
{
std::vector<u8> buffer;
inline _normEstimator(const Size2D &size, s32 cn, Margin,
ptrdiff_t &mapstep, s32** mag_buf, u8* &map)
{
mapstep = size.width + 2;
buffer.resize( (size.width+2)*(size.height+2) + cn*mapstep*3*sizeof(s32) );
mag_buf[0] = (s32*)&buffer[0];
mag_buf[1] = mag_buf[0] + mapstep*cn;
mag_buf[2] = mag_buf[1] + mapstep*cn;
memset(mag_buf[0], 0, /* cn* */mapstep * sizeof(s32));
map = (u8*)(mag_buf[2] + mapstep*cn);
memset(map, 1, mapstep);
memset(map + mapstep*(size.height + 1), 1, mapstep);
}
inline void firstRow(const Size2D &size, s32 cn,
const u8 *, ptrdiff_t,
s16* dxBase, ptrdiff_t dxStride,
s16* dyBase, ptrdiff_t dyStride,
s32** mag_buf)
{
s32* _norm = mag_buf[1] + 1;
s16* _dx = internal::getRowPtr(dxBase, dxStride, 0);
s16* _dy = internal::getRowPtr(dyBase, dyStride, 0);
NormCanny<L2gradient>(size.width*cn, _dx, _dy, _norm);
if(cn > 1)
{
for(size_t j = 0, jn = 0; j < size.width; ++j, jn += cn)
{
size_t maxIdx = jn;
for(s32 k = 1; k < cn; ++k)
if(_norm[jn + k] > _norm[maxIdx]) maxIdx = jn + k;
_norm[j] = _norm[maxIdx];
_dx[j] = _dx[maxIdx];
_dy[j] = _dy[maxIdx];
}
}
_norm[-1] = _norm[size.width] = 0;
}
inline void nextRow(const Size2D &size, s32 cn,
const u8 *, ptrdiff_t,
s16* dxBase, ptrdiff_t dxStride,
s16* dyBase, ptrdiff_t dyStride,
const ptrdiff_t &mapstep, s32** mag_buf,
size_t i, const s16* &_x, const s16* &_y)
{
s32* _norm = mag_buf[(i > 0) + 1] + 1;
if (i < size.height)
{
s16* _dx = internal::getRowPtr(dxBase, dxStride, i);
s16* _dy = internal::getRowPtr(dyBase, dyStride, i);
NormCanny<L2gradient>(size.width*cn, _dx, _dy, _norm);
if(cn > 1)
{
for(size_t j = 0, jn = 0; j < size.width; ++j, jn += cn)
{
size_t maxIdx = jn;
for(s32 k = 1; k < cn; ++k)
if(_norm[jn + k] > _norm[maxIdx]) maxIdx = jn + k;
_norm[j] = _norm[maxIdx];
_dx[j] = _dx[maxIdx];
_dy[j] = _dy[maxIdx];
}
}
_norm[-1] = _norm[size.width] = 0;
}
else
memset(_norm-1, 0, /* cn* */mapstep*sizeof(s32));
_x = internal::getRowPtr(dxBase, dxStride, i-1);
_y = internal::getRowPtr(dyBase, dyStride, i-1);
}
};
template <bool L2gradient, bool externalSobel>
inline void Canny3x3(const Size2D &size, s32 cn,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
s16 * dxBase, ptrdiff_t dxStride,
s16 * dyBase, ptrdiff_t dyStride,
f64 low_thresh, f64 high_thresh,
Margin borderMargin)
{
s32 low, high;
prepareThresh<L2gradient>(low_thresh, high_thresh, low, high);
ptrdiff_t mapstep;
s32* mag_buf[3];
u8* map;
_normEstimator<L2gradient, externalSobel> normEstimator(size, cn, borderMargin, mapstep, mag_buf, map);
size_t maxsize = std::max<size_t>( 1u << 10, size.width * size.height / 10 );
std::vector<u8*> stack( maxsize );
u8 **stack_top = &stack[0];
u8 **stack_bottom = &stack[0];
/* sector numbers
(Top-Left Origin)
1 2 3
* * *
* * *
0*******0
* * *
* * *
3 2 1
*/
#define CANNY_PUSH(d) *(d) = u8(2), *stack_top++ = (d)
#define CANNY_POP(d) (d) = *--stack_top
//i == 0
normEstimator.firstRow(size, cn, srcBase, srcStride, dxBase, dxStride, dyBase, dyStride, mag_buf);
// calculate magnitude and angle of gradient, perform non-maxima supression.
// fill the map with one of the following values:
// 0 - the pixel might belong to an edge
// 1 - the pixel can not belong to an edge
// 2 - the pixel does belong to an edge
for (size_t i = 1; i <= size.height; i++)
{
const s16 *_x, *_y;
normEstimator.nextRow(size, cn, srcBase, srcStride, dxBase, dxStride, dyBase, dyStride, mapstep, mag_buf, i, _x, _y);
u8* _map = map + mapstep*i + 1;
_map[-1] = _map[size.width] = 1;
s32* _mag = mag_buf[1] + 1; // take the central row
ptrdiff_t magstep1 = mag_buf[2] - mag_buf[1];
ptrdiff_t magstep2 = mag_buf[0] - mag_buf[1];
if ((stack_top - stack_bottom) + size.width > maxsize)
{
ptrdiff_t sz = (ptrdiff_t)(stack_top - stack_bottom);
maxsize = maxsize * 3/2;
stack.resize(maxsize);
stack_bottom = &stack[0];
stack_top = stack_bottom + sz;
}
s32 prev_flag = 0;
for (ptrdiff_t j = 0; j < (ptrdiff_t)size.width; j++)
{
#define CANNY_SHIFT 15
const s32 TG22 = (s32)(0.4142135623730950488016887242097*(1<<CANNY_SHIFT) + 0.5);
s32 m = _mag[j];
if (m > low)
{
s32 xs = _x[j];
s32 ys = _y[j];
s32 x = abs(xs);
s32 y = abs(ys) << CANNY_SHIFT;
s32 tg22x = x * TG22;
if (y < tg22x)
{
if (m > _mag[j-1] && m >= _mag[j+1]) goto __push;
}
else
{
s32 tg67x = tg22x + (x << (CANNY_SHIFT+1));
if (y > tg67x)
{
if (m > _mag[j+magstep2] && m >= _mag[j+magstep1]) goto __push;
}
else
{
s32 s = (xs ^ ys) < 0 ? -1 : 1;
if(m > _mag[j+magstep2-s] && m > _mag[j+magstep1+s]) goto __push;
}
}
}
prev_flag = 0;
_map[j] = u8(1);
continue;
__push:
if (!prev_flag && m > high && _map[j-mapstep] != 2)
{
CANNY_PUSH(_map + j);
prev_flag = 1;
}
else
_map[j] = 0;
}
// scroll the ring buffer
_mag = mag_buf[0];
mag_buf[0] = mag_buf[1];
mag_buf[1] = mag_buf[2];
mag_buf[2] = _mag;
}
// now track the edges (hysteresis thresholding)
while (stack_top > stack_bottom)
{
u8* m;
if ((size_t)(stack_top - stack_bottom) + 8u > maxsize)
{
ptrdiff_t sz = (ptrdiff_t)(stack_top - stack_bottom);
maxsize = maxsize * 3/2;
stack.resize(maxsize);
stack_bottom = &stack[0];
stack_top = stack_bottom + sz;
}
CANNY_POP(m);
if (!m[-1]) CANNY_PUSH(m - 1);
if (!m[1]) CANNY_PUSH(m + 1);
if (!m[-mapstep-1]) CANNY_PUSH(m - mapstep - 1);
if (!m[-mapstep]) CANNY_PUSH(m - mapstep);
if (!m[-mapstep+1]) CANNY_PUSH(m - mapstep + 1);
if (!m[mapstep-1]) CANNY_PUSH(m + mapstep - 1);
if (!m[mapstep]) CANNY_PUSH(m + mapstep);
if (!m[mapstep+1]) CANNY_PUSH(m + mapstep + 1);
}
// the final pass, form the final image
uint8x16_t v2 = vmovq_n_u8(2);
const u8* ptrmap = map + mapstep + 1;
for (size_t i = 0; i < size.height; i++, ptrmap += mapstep)
{
u8* _dst = internal::getRowPtr(dstBase, dstStride, i);
ptrdiff_t j = 0;
for (; j < (ptrdiff_t)size.width - 16; j += 16)
{
internal::prefetch(ptrmap);
uint8x16_t vmap = vld1q_u8(ptrmap + j);
uint8x16_t vdst = vceqq_u8(vmap, v2);
vst1q_u8(_dst+j, vdst);
}
for (; j < (ptrdiff_t)size.width; j++)
_dst[j] = (u8)-(ptrmap[j] >> 1);
}
}
} // namespace
#endif
bool isCanny3x3Supported(const Size2D &size)
{
return isSupportedConfiguration() &&
size.height >= 2 && size.width >= 9;
}
void Canny3x3L1(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
f64 low_thresh, f64 high_thresh,
Margin borderMargin)
{
internal::assertSupportedConfiguration(isCanny3x3Supported(size));
#ifdef CAROTENE_NEON
Canny3x3<false, false>(size, 1,
srcBase, srcStride,
dstBase, dstStride,
NULL, 0,
NULL, 0,
low_thresh, high_thresh,
borderMargin);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)low_thresh;
(void)high_thresh;
(void)borderMargin;
#endif
}
void Canny3x3L2(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
f64 low_thresh, f64 high_thresh,
Margin borderMargin)
{
internal::assertSupportedConfiguration(isCanny3x3Supported(size));
#ifdef CAROTENE_NEON
Canny3x3<true, false>(size, 1,
srcBase, srcStride,
dstBase, dstStride,
NULL, 0,
NULL, 0,
low_thresh, high_thresh,
borderMargin);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)low_thresh;
(void)high_thresh;
(void)borderMargin;
#endif
}
void Canny3x3L1(const Size2D &size, s32 cn,
s16 * dxBase, ptrdiff_t dxStride,
s16 * dyBase, ptrdiff_t dyStride,
u8 * dstBase, ptrdiff_t dstStride,
f64 low_thresh, f64 high_thresh)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Canny3x3<false, true>(size, cn,
NULL, 0,
dstBase, dstStride,
dxBase, dxStride,
dyBase, dyStride,
low_thresh, high_thresh,
Margin());
#else
(void)size;
(void)cn;
(void)dstBase;
(void)dstStride;
(void)dxBase;
(void)dxStride;
(void)dyBase;
(void)dyStride;
(void)low_thresh;
(void)high_thresh;
#endif
}
void Canny3x3L2(const Size2D &size, s32 cn,
s16 * dxBase, ptrdiff_t dxStride,
s16 * dyBase, ptrdiff_t dyStride,
u8 * dstBase, ptrdiff_t dstStride,
f64 low_thresh, f64 high_thresh)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Canny3x3<true, true>(size, cn,
NULL, 0,
dstBase, dstStride,
dxBase, dxStride,
dyBase, dyStride,
low_thresh, high_thresh,
Margin());
#else
(void)size;
(void)cn;
(void)dstBase;
(void)dstStride;
(void)dxBase;
(void)dxStride;
(void)dyBase;
(void)dyStride;
(void)low_thresh;
(void)high_thresh;
#endif
}
} // namespace CAROTENE_NS

View File

@@ -0,0 +1,486 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
void extract2(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
u32 coi)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
#ifndef __ANDROID__
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
#endif
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0u; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t sj = 0u, dj = 0u;
#ifndef __ANDROID__
for (; dj < roiw32; sj += 64, dj += 32)
{
internal::prefetch(src + sj);
uint8x16x2_t v_src = vld2q_u8(src + sj);
vst1q_u8(dst + dj, v_src.val[coi]);
v_src = vld2q_u8(src + sj + 32);
vst1q_u8(dst + dj + 16, v_src.val[coi]);
}
#endif
for (; dj < roiw8; sj += 16, dj += 8)
{
uint8x8x2_t v_src = vld2_u8(src + sj);
vst1_u8(dst + dj, v_src.val[coi]);
}
for (; dj < size.width; sj += 2, ++dj)
{
dst[dj] = src[sj + coi];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)coi;
#endif
}
void extract3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
u32 coi)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
#ifndef __ANDROID__
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
#endif
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0u; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t sj = 0u, dj = 0u;
#ifndef __ANDROID__
for (; dj < roiw32; sj += 96, dj += 32)
{
internal::prefetch(src + sj);
uint8x16x3_t v_src = vld3q_u8(src + sj);
vst1q_u8(dst + dj, v_src.val[coi]);
v_src = vld3q_u8(src + sj + 48);
vst1q_u8(dst + dj + 16, v_src.val[coi]);
}
#endif
for (; dj < roiw8; sj += 24, dj += 8)
{
uint8x8x3_t v_src = vld3_u8(src + sj);
vst1_u8(dst + dj, v_src.val[coi]);
}
for (; dj < size.width; sj += 3, ++dj)
{
dst[dj] = src[sj + coi];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)coi;
#endif
}
void extract4(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
u32 coi)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
#ifndef __ANDROID__
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
#endif
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0u; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t sj = 0u, dj = 0u;
#ifndef __ANDROID__
for (; dj < roiw32; sj += 128, dj += 32)
{
internal::prefetch(src + sj);
uint8x16x4_t v_src = vld4q_u8(src + sj);
vst1q_u8(dst + dj, v_src.val[coi]);
v_src = vld4q_u8(src + sj + 64);
vst1q_u8(dst + dj + 16, v_src.val[coi]);
}
#endif
for (; dj < roiw8; sj += 32, dj += 8)
{
uint8x8x4_t v_src = vld4_u8(src + sj);
vst1_u8(dst + dj, v_src.val[coi]);
}
for (; dj < size.width; sj += 4, ++dj)
{
dst[dj] = src[sj + coi];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)coi;
#endif
}
#define FILL_LINES2(macro,type) \
macro##_LINE(type,0) \
macro##_LINE(type,1)
#define FILL_LINES3(macro,type) \
FILL_LINES2(macro,type) \
macro##_LINE(type,2)
#define FILL_LINES4(macro,type) \
FILL_LINES3(macro,type) \
macro##_LINE(type,3)
#define FARG_LINE(type, n) , type * dst##n##Base, ptrdiff_t dst##n##Stride
#ifdef CAROTENE_NEON
#define VROW_LINE(type, n) type * dst##n = internal::getRowPtr(dst##n##Base, dst##n##Stride, i);
#define VST1Q_LINE(type, n) vst1q_##type(dst##n + dj, v_src.val[n]);
#define VST1_LINE(type, n) vst1_##type(dst##n + dj, v_src.val[n]);
#define SST_LINE(type, n) dst##n[dj] = src[sj + n];
#define MUL2(val) (val << 1)
#define MUL3(val) (MUL2(val) + val)
#define MUL4(val) (val << 2)
#define CONTDST2 srcStride == dst0Stride && \
srcStride == dst1Stride &&
#define CONTDST3 srcStride == dst0Stride && \
srcStride == dst1Stride && \
srcStride == dst2Stride &&
#define CONTDST4 srcStride == dst0Stride && \
srcStride == dst1Stride && \
srcStride == dst2Stride && \
srcStride == dst3Stride &&
#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
#define SPLIT_ASM2(sgn, bits) __asm__ ( \
"vld2." #bits " {d0, d2}, [%[in0]] \n\t" \
"vld2." #bits " {d1, d3}, [%[in1]] \n\t" \
"vst1." #bits " {d0-d1}, [%[out0]] \n\t" \
"vst1." #bits " {d2-d3}, [%[out1]] \n\t" \
: \
: [out0] "r" (dst0 + dj), [out1] "r" (dst1 + dj), \
[in0] "r" (src + sj), [in1] "r" (src + sj + MUL2(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3" \
);
#define SPLIT_ASM3(sgn, bits) __asm__ ( \
"vld3." #bits " {d0, d2, d4}, [%[in0]] \n\t" \
"vld3." #bits " {d1, d3, d5}, [%[in1]] \n\t" \
"vst1." #bits " {d0-d1}, [%[out0]] \n\t" \
"vst1." #bits " {d2-d3}, [%[out1]] \n\t" \
"vst1." #bits " {d4-d5}, [%[out2]] \n\t" \
: \
: [out0] "r" (dst0 + dj), [out1] "r" (dst1 + dj), [out2] "r" (dst2 + dj), \
[in0] "r" (src + sj), [in1] "r" (src + sj + MUL3(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3","d4","d5" \
);
#define SPLIT_ASM4(sgn, bits) __asm__ ( \
"vld4." #bits " {d0, d2, d4, d6}, [%[in0]] \n\t" \
"vld4." #bits " {d1, d3, d5, d7}, [%[in1]] \n\t" \
"vst1." #bits " {d0-d1}, [%[out0]] \n\t" \
"vst1." #bits " {d2-d3}, [%[out1]] \n\t" \
"vst1." #bits " {d4-d5}, [%[out2]] \n\t" \
"vst1." #bits " {d6-d7}, [%[out3]] \n\t" \
: \
: [out0] "r" (dst0 + dj), [out1] "r" (dst1 + dj), [out2] "r" (dst2 + dj), [out3] "r" (dst3 + dj), \
[in0] "r" (src + sj), [in1] "r" (src + sj + MUL4(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3","d4","d5","d6","d7" \
);
#define SPLIT_QUAD(sgn, bits, n) { \
internal::prefetch(src + sj); \
SPLIT_ASM##n(sgn, bits) \
}
#else
#define SPLIT_QUAD(sgn, bits, n) { \
internal::prefetch(src + sj); \
vec128 v_src = vld##n##q_##sgn##bits(src + sj); \
FILL_LINES##n(VST1Q, sgn##bits) \
}
#endif
#define SPLIT(sgn,bits,n) void split##n(const Size2D &_size, \
const sgn##bits * srcBase, ptrdiff_t srcStride \
FILL_LINES##n(FARG, sgn##bits) ) \
{ \
internal::assertSupportedConfiguration(); \
Size2D size(_size); \
if (CONTDST##n \
dst0Stride == (ptrdiff_t)(size.width)) \
{ \
size.width *= size.height; \
size.height = 1; \
} \
typedef internal::VecTraits<sgn##bits, n>::vec128 vec128; \
size_t roiw16 = size.width >= (16/sizeof(sgn##bits)-1) ? size.width - (16/sizeof(sgn##bits)-1) : 0; \
typedef internal::VecTraits<sgn##bits, n>::vec64 vec64; \
size_t roiw8 = size.width >= (8/sizeof(sgn##bits)-1) ? size.width - (8/sizeof(sgn##bits)-1) : 0; \
\
for (size_t i = 0u; i < size.height; ++i) \
{ \
const sgn##bits * src = internal::getRowPtr(srcBase, srcStride, i); \
FILL_LINES##n(VROW, sgn##bits) \
size_t sj = 0u, dj = 0u; \
\
for (; dj < roiw16; sj += MUL##n(16)/sizeof(sgn##bits), dj += 16/sizeof(sgn##bits)) \
SPLIT_QUAD(sgn, bits, n) \
\
if (dj < roiw8) \
{ \
vec64 v_src = vld##n##_##sgn##bits(src + sj); \
FILL_LINES##n(VST1, sgn##bits) \
sj += MUL##n(8)/sizeof(sgn##bits); \
dj += 8/sizeof(sgn##bits); \
} \
\
for (; dj < size.width; sj += n, ++dj) \
{ \
FILL_LINES##n(SST, sgn##bits) \
} \
} \
}
#define SPLIT64(sgn,n) void split##n(const Size2D &_size, \
const sgn##64 * srcBase, ptrdiff_t srcStride \
FILL_LINES##n(FARG, sgn##64) ) \
{ \
internal::assertSupportedConfiguration(); \
Size2D size(_size); \
if (CONTDST##n \
dst0Stride == (ptrdiff_t)(size.width)) \
{ \
size.width *= size.height; \
size.height = 1; \
} \
typedef internal::VecTraits<sgn##64, n>::vec64 vec64; \
\
for (size_t i = 0u; i < size.height; ++i) \
{ \
const sgn##64 * src = internal::getRowPtr(srcBase, srcStride, i); \
FILL_LINES##n(VROW, sgn##64) \
size_t sj = 0u, dj = 0u; \
\
for (; dj < size.width; sj += n, ++dj) \
{ \
vec64 v_src = vld##n##_##sgn##64(src + sj); \
FILL_LINES##n(VST1, sgn##64) \
} \
} \
}
#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
#define ALPHA_QUAD(sgn, bits) { \
internal::prefetch(src + sj); \
__asm__ ( \
"vld4." #bits " {d0, d2, d4, d6}, [%[in0]] \n\t" \
"vld4." #bits " {d1, d3, d5, d7}, [%[in1]] \n\t" \
"vst3." #bits " {d0, d2, d4}, [%[out3_1]] \n\t" \
"vst3." #bits " {d1, d3, d5}, [%[out3_2]] \n\t" \
"vst1." #bits " {d6-d7}, [%[out1]] \n\t" \
: \
: [out3_1] "r" (dst3 + d3j), [out3_2] "r" (dst3 + d3j + 24/sizeof(sgn##bits)), [out1] "r" (dst1 + d1j), \
[in0] "r" (src + sj), [in1] "r" (src + sj + 32/sizeof(sgn##bits)) \
: "d0","d1","d2","d3","d4","d5","d6","d7" \
); \
}
#else
#define ALPHA_QUAD(sgn, bits) { \
internal::prefetch(src + sj); \
union { vec128_4 v4; vec128_3 v3; } vals; \
vals.v4 = vld4q_##sgn##bits(src + sj); \
vst3q_##sgn##bits(dst3 + d3j, vals.v3); \
vst1q_##sgn##bits(dst1 + d1j, vals.v4.val[3]); \
}
#endif
#define SPLIT4ALPHA(sgn,bits) void split4(const Size2D &_size, \
const sgn##bits * srcBase, ptrdiff_t srcStride, \
sgn##bits * dst3Base, ptrdiff_t dst3Stride, \
sgn##bits * dst1Base, ptrdiff_t dst1Stride) \
{ \
internal::assertSupportedConfiguration(); \
Size2D size(_size); \
if (srcStride == dst3Stride && \
srcStride == dst1Stride && \
srcStride == (ptrdiff_t)(size.width)) \
{ \
size.width *= size.height; \
size.height = 1; \
} \
typedef internal::VecTraits<sgn##bits, 4>::vec128 vec128_4; \
typedef internal::VecTraits<sgn##bits, 3>::vec128 vec128_3; \
size_t roiw16 = size.width >= (16/sizeof(sgn##bits)-1) ? size.width - (16/sizeof(sgn##bits)-1) : 0; \
typedef internal::VecTraits<sgn##bits, 4>::vec64 vec64_4; \
typedef internal::VecTraits<sgn##bits, 3>::vec64 vec64_3; \
size_t roiw8 = size.width >= (8/sizeof(sgn##bits)-1) ? size.width - (8/sizeof(sgn##bits)-1) : 0; \
\
for (size_t i = 0u; i < size.height; ++i) \
{ \
const sgn##bits * src = internal::getRowPtr(srcBase, srcStride, i); \
sgn##bits * dst3 = internal::getRowPtr(dst3Base, dst3Stride, i); \
sgn##bits * dst1 = internal::getRowPtr(dst1Base, dst1Stride, i); \
size_t sj = 0u, d3j = 0u, d1j = 0u; \
\
for (; d1j < roiw16; sj += MUL4(16)/sizeof(sgn##bits), d3j += MUL3(16)/sizeof(sgn##bits), \
d1j += 16/sizeof(sgn##bits)) \
ALPHA_QUAD(sgn, bits) \
\
if (d1j < roiw8) \
{ \
union { vec64_4 v4; vec64_3 v3; } vals; \
vals.v4 = vld4_##sgn##bits(src + sj); \
vst3_u8(dst3 + d3j, vals.v3); \
vst1_u8(dst1 + d1j, vals.v4.val[3]); \
sj += MUL4(8)/sizeof(sgn##bits); \
d3j += MUL3(8)/sizeof(sgn##bits); \
d1j += 8/sizeof(sgn##bits); \
} \
\
for (; d1j < size.width; sj += 4, d3j += 3, ++d1j) \
{ \
dst3[d3j+0] = src[sj + 0]; \
dst3[d3j+1] = src[sj + 1]; \
dst3[d3j+2] = src[sj + 2]; \
dst1[d1j] = src[sj + 3]; \
} \
} \
}
#else
#define VOID_LINE(type, n) (void)dst##n##Base; (void)dst##n##Stride;
#define SPLIT(sgn,bits,n) void split##n(const Size2D &size, \
const sgn##bits * srcBase, ptrdiff_t srcStride \
FILL_LINES##n(FARG, sgn##bits) ) \
{ \
internal::assertSupportedConfiguration(); \
(void)size; \
(void)srcBase; \
(void)srcStride; \
FILL_LINES##n(VOID, sgn##bits) \
}
#define SPLIT64(sgn,n) SPLIT(sgn,64,n)
#define SPLIT4ALPHA(sgn,bits) void split4(const Size2D &size, \
const sgn##bits * srcBase, ptrdiff_t srcStride, \
sgn##bits * dst3Base, ptrdiff_t dst3Stride, \
sgn##bits * dst1Base, ptrdiff_t dst1Stride) \
{ \
internal::assertSupportedConfiguration(); \
(void)size; \
(void)srcBase; \
(void)srcStride; \
(void)dst3Base; \
(void)dst3Stride; \
(void)dst1Base; \
(void)dst1Stride; \
}
#endif //CAROTENE_NEON
SPLIT(u, 8,2)
SPLIT(u, 8,3)
SPLIT(u, 8,4)
SPLIT(u,16,2)
SPLIT(u,16,3)
SPLIT(u,16,4)
SPLIT(s,32,2)
SPLIT(s,32,3)
SPLIT(s,32,4)
SPLIT64(s, 2)
SPLIT64(s, 3)
SPLIT64(s, 4)
SPLIT4ALPHA(u,8)
} // namespace CAROTENE_NS

View File

@@ -0,0 +1,389 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#define FILL_LINES2(macro,type) \
macro##_LINE(type,0) \
macro##_LINE(type,1)
#define FILL_LINES3(macro,type) \
FILL_LINES2(macro,type) \
macro##_LINE(type,2)
#define FILL_LINES4(macro,type) \
FILL_LINES3(macro,type) \
macro##_LINE(type,3)
#define FARG_LINE(type, n) , const type * src##n##Base, ptrdiff_t src##n##Stride
#ifdef CAROTENE_NEON
#define VROW_LINE(type, n) const type * src##n = internal::getRowPtr(src##n##Base, src##n##Stride, i);
#define PREF_LINE(type, n) internal::prefetch(src##n + sj);
#define VLD1Q_LINE(type, n) v_dst.val[n] = vld1q_##type(src##n + sj);
#define PRLD_LINE(type, n) internal::prefetch(src##n + sj); v_dst.val[n] = vld1q_##type(src##n + sj);
#define VLD1_LINE(type, n) v_dst.val[n] = vld1_##type(src##n + sj);
#define SLD_LINE(type, n) dst[dj + n] = src##n[sj];
#define MUL2(val) (val << 1)
#define MUL3(val) (MUL2(val) + val)
#define MUL4(val) (val << 2)
#define CONTSRC2 dstStride == src0Stride && \
dstStride == src1Stride &&
#define CONTSRC3 dstStride == src0Stride && \
dstStride == src1Stride && \
dstStride == src2Stride &&
#define CONTSRC4 dstStride == src0Stride && \
dstStride == src1Stride && \
dstStride == src2Stride && \
dstStride == src3Stride &&
#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
#define MERGE_ASM2(sgn, bits) __asm__ ( \
"vld1." #bits " {d0-d1}, [%[in0]] \n\t" \
"vld1." #bits " {d2-d3}, [%[in1]] \n\t" \
"vst2." #bits " {d0, d2}, [%[out0]] \n\t" \
"vst2." #bits " {d1, d3}, [%[out1]] \n\t" \
: \
: [in0] "r" (src0 + sj), [in1] "r" (src1 + sj), \
[out0] "r" (dst + dj), [out1] "r" (dst + dj + MUL2(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3" \
);
#define MERGE_ASM3(sgn, bits) __asm__ ( \
"vld1." #bits " {d0-d1}, [%[in0]] \n\t" \
"vld1." #bits " {d2-d3}, [%[in1]] \n\t" \
"vld1." #bits " {d4-d5}, [%[in2]] \n\t" \
"vst3." #bits " {d0, d2, d4}, [%[out0]] \n\t" \
"vst3." #bits " {d1, d3, d5}, [%[out1]] \n\t" \
: \
: [in0] "r" (src0 + sj), [in1] "r" (src1 + sj), [in2] "r" (src2 + sj), \
[out0] "r" (dst + dj), [out1] "r" (dst + dj + MUL3(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3","d4","d5" \
);
#define MERGE_ASM4(sgn, bits) __asm__ ( \
"vld1." #bits " {d0-d1}, [%[in0]] \n\t" \
"vld1." #bits " {d2-d3}, [%[in1]] \n\t" \
"vld1." #bits " {d4-d5}, [%[in2]] \n\t" \
"vld1." #bits " {d6-d7}, [%[in3]] \n\t" \
"vst4." #bits " {d0, d2, d4, d6}, [%[out0]] \n\t" \
"vst4." #bits " {d1, d3, d5, d7}, [%[out1]] \n\t" \
: \
: [in0] "r" (src0 + sj), [in1] "r" (src1 + sj), [in2] "r" (src2 + sj), [in3] "r" (src3 + sj), \
[out0] "r" (dst + dj), [out1] "r" (dst + dj + MUL4(8)/sizeof(sgn##bits)) \
: "d0","d1","d2","d3","d4","d5","d6","d7" \
);
#define MERGE_QUAD(sgn, bits, n) { \
FILL_LINES##n(PREF, sgn##bits) \
MERGE_ASM##n(sgn, bits) \
}
#else
#define MERGE_QUAD(sgn, bits, n) { \
vec128 v_dst; \
/*FILL_LINES##n(PREF, sgn##bits) \
FILL_LINES##n(VLD1Q, sgn##bits)*/ \
FILL_LINES##n(PRLD, sgn##bits) \
vst##n##q_##sgn##bits(dst + dj, v_dst); \
}
#endif
#define COMBINE(sgn,bits,n) void combine##n(const Size2D &_size \
FILL_LINES##n(FARG, sgn##bits), \
sgn##bits * dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
Size2D size(_size); \
if (CONTSRC##n \
dstStride == (ptrdiff_t)(size.width)) \
{ \
size.width *= size.height; \
size.height = 1; \
} \
typedef internal::VecTraits<sgn##bits, n>::vec128 vec128; \
size_t roiw16 = size.width >= (16/sizeof(sgn##bits) - 1) ? size.width - (16/sizeof(sgn##bits) - 1) : 0; \
typedef internal::VecTraits<sgn##bits, n>::vec64 vec64; \
size_t roiw8 = size.width >= (8/sizeof(sgn##bits) - 1) ? size.width - (8/sizeof(sgn##bits) - 1) : 0; \
\
for (size_t i = 0u; i < size.height; ++i) \
{ \
FILL_LINES##n(VROW, sgn##bits) \
sgn##bits * dst = internal::getRowPtr(dstBase, dstStride, i); \
size_t sj = 0u, dj = 0u; \
\
for (; sj < roiw16; sj += 16/sizeof(sgn##bits), dj += MUL##n(16)/sizeof(sgn##bits)) \
MERGE_QUAD(sgn, bits, n) \
\
if ( sj < roiw8 ) \
{ \
vec64 v_dst; \
FILL_LINES##n(VLD1, sgn##bits) \
vst##n##_##sgn##bits(dst + dj, v_dst); \
sj += 8/sizeof(sgn##bits); dj += MUL##n(8)/sizeof(sgn##bits); \
} \
\
for (; sj < size.width; ++sj, dj += n) \
{ \
FILL_LINES##n(SLD, sgn##bits) \
} \
} \
}
#define COMBINE64(sgn,n) void combine##n(const Size2D &_size \
FILL_LINES##n(FARG, sgn##64), \
sgn##64 * dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
Size2D size(_size); \
if (CONTSRC##n \
dstStride == (ptrdiff_t)(size.width)) \
{ \
size.width *= size.height; \
size.height = 1; \
} \
typedef internal::VecTraits<sgn##64, n>::vec64 vec64; \
\
for (size_t i = 0u; i < size.height; ++i) \
{ \
FILL_LINES##n(VROW, sgn##64) \
sgn##64 * dst = internal::getRowPtr(dstBase, dstStride, i); \
size_t sj = 0u, dj = 0u; \
\
for (; sj < size.width; ++sj, dj += n) \
{ \
vec64 v_dst; \
FILL_LINES##n(VLD1, sgn##64) \
vst##n##_##sgn##64(dst + dj, v_dst); \
/*FILL_LINES##n(SLD, sgn##64)*/ \
} \
} \
}
#else
#define VOID_LINE(type, n) (void)src##n##Base; (void)src##n##Stride;
#define COMBINE(sgn,bits,n) void combine##n(const Size2D &size \
FILL_LINES##n(FARG, sgn##bits), \
sgn##bits * dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
(void)size; \
FILL_LINES##n(VOID, sgn##bits) \
(void)dstBase; \
(void)dstStride; \
}
#define COMBINE64(sgn,n) COMBINE(sgn,64,n)
#endif //CAROTENE_NEON
COMBINE(u, 8,2)
COMBINE(u, 8,3)
COMBINE(u, 8,4)
COMBINE(u,16,2)
COMBINE(u,16,3)
COMBINE(u,16,4)
COMBINE(s,32,2)
COMBINE(s,32,3)
COMBINE(s,32,4)
COMBINE64(s, 2)
COMBINE64(s, 3)
COMBINE64(s, 4)
void combineYUYV(const Size2D &size,
const u8 * srcyBase, ptrdiff_t srcyStride,
const u8 * srcuBase, ptrdiff_t srcuStride,
const u8 * srcvBase, ptrdiff_t srcvStride,
u8 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
#ifndef __ANDROID__
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
#endif
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0u; i < size.height; i += 1)
{
const u8 * srcy = internal::getRowPtr(srcyBase, srcyStride, i);
const u8 * srcu = internal::getRowPtr(srcuBase, srcuStride, i);
const u8 * srcv = internal::getRowPtr(srcvBase, srcvStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t syj = 0u, sj = 0u, dj = 0u;
#ifndef __ANDROID__
for (; sj < roiw32; sj += 32, syj += 64, dj += 128)
{
internal::prefetch(srcy + syj);
internal::prefetch(srcu + sj);
internal::prefetch(srcv + sj);
uint8x16x2_t v_y = vld2q_u8(srcy + syj);
uint8x16x4_t v_dst;
v_dst.val[0] = v_y.val[0];
v_dst.val[1] = vld1q_u8(srcu + sj);
v_dst.val[2] = v_y.val[1];
v_dst.val[3] = vld1q_u8(srcv + sj);
vst4q_u8(dst + dj, v_dst);
v_y = vld2q_u8(srcy + syj + 32);
v_dst.val[0] = v_y.val[0];
v_dst.val[1] = vld1q_u8(srcu + sj + 16);
v_dst.val[2] = v_y.val[1];
v_dst.val[3] = vld1q_u8(srcv + sj + 16);
vst4q_u8(dst + dj + 64, v_dst);
}
#endif
for (; sj < roiw8; sj += 8, syj += 16, dj += 32)
{
uint8x8x2_t v_y = vld2_u8(srcy + syj);
uint8x8x4_t v_dst;
v_dst.val[0] = v_y.val[0];
v_dst.val[1] = vld1_u8(srcu + sj);
v_dst.val[2] = v_y.val[1];
v_dst.val[3] = vld1_u8(srcv + sj);
vst4_u8(dst + dj, v_dst);
}
for (; sj < size.width; ++sj, syj += 2, dj += 4)
{
dst[dj] = srcy[syj];
dst[dj + 1] = srcu[sj];
dst[dj + 2] = srcy[syj + 1];
dst[dj + 3] = srcv[sj];
}
}
#else
(void)size;
(void)srcyBase;
(void)srcyStride;
(void)srcuBase;
(void)srcuStride;
(void)srcvBase;
(void)srcvStride;
(void)dstBase;
(void)dstStride;
#endif
}
void combineUYVY(const Size2D &size,
const u8 * srcyBase, ptrdiff_t srcyStride,
const u8 * srcuBase, ptrdiff_t srcuStride,
const u8 * srcvBase, ptrdiff_t srcvStride,
u8 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
#ifndef __ANDROID__
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
#endif
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0u; i < size.height; ++i)
{
const u8 * srcy = internal::getRowPtr(srcyBase, srcyStride, i);
const u8 * srcu = internal::getRowPtr(srcuBase, srcuStride, i);
const u8 * srcv = internal::getRowPtr(srcvBase, srcvStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t syj = 0u, sj = 0u, dj = 0u;
#ifndef __ANDROID__
for (; sj < roiw32; sj += 32, syj += 64, dj += 128)
{
internal::prefetch(srcy + syj);
internal::prefetch(srcu + sj);
internal::prefetch(srcv + sj);
uint8x16x2_t v_y = vld2q_u8(srcy + syj);
uint8x16x4_t v_dst;
v_dst.val[0] = vld1q_u8(srcu + sj);
v_dst.val[1] = v_y.val[0];
v_dst.val[2] = vld1q_u8(srcv + sj);
v_dst.val[3] = v_y.val[1];
vst4q_u8(dst + dj, v_dst);
v_y = vld2q_u8(srcy + syj + 32);
v_dst.val[0] = vld1q_u8(srcu + sj + 16);
v_dst.val[1] = v_y.val[0];
v_dst.val[2] = vld1q_u8(srcv + sj + 16);
v_dst.val[3] = v_y.val[1];
vst4q_u8(dst + dj + 64, v_dst);
}
#endif
for (; sj < roiw8; sj += 8, syj += 16, dj += 32)
{
uint8x8x2_t v_y = vld2_u8(srcy + syj);
uint8x8x4_t v_dst;
v_dst.val[0] = vld1_u8(srcu + sj);
v_dst.val[1] = v_y.val[0];
v_dst.val[2] = vld1_u8(srcv + sj);
v_dst.val[3] = v_y.val[1];
vst4_u8(dst + dj, v_dst);
}
for (; sj < size.width; ++sj, syj += 2, dj += 4)
{
dst[dj] = srcu[sj];
dst[dj + 1] = srcy[syj];
dst[dj + 2] = srcv[sj];
dst[dj + 3] = srcy[syj + 1];
}
}
#else
(void)size;
(void)srcyBase;
(void)srcyStride;
(void)srcuBase;
(void)srcuStride;
(void)srcvBase;
(void)srcvStride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

340
3rdparty/carotene/src/cmp.cpp vendored Normal file
View File

@@ -0,0 +1,340 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
inline void vnst(u8* dst, uint8x16_t v1, uint8x16_t v2) { vst1q_u8(dst, v1); vst1q_u8(dst+16, v2); }
inline void vnst(u8* dst, uint16x8_t v1, uint16x8_t v2) { vst1q_u8(dst, vcombine_u8(vmovn_u16(v1), vmovn_u16(v2))); }
inline void vnst(u8* dst, uint32x4_t v1, uint32x4_t v2) { vst1_u8(dst, vmovn_u16(vcombine_u16(vmovn_u32(v1), vmovn_u32(v2)))); }
template <typename Op, int elsize> struct vtail
{
static inline void compare(const typename Op::type * src0, const typename Op::type * src1,
u8 * dst, const Op & op,
size_t &x, size_t width)
{
//do nothing since there couldn't be enough data
(void)src0;
(void)src1;
(void)dst;
(void)op;
(void)x;
(void)width;
}
};
template <typename Op> struct vtail<Op, 2>
{
static inline void compare(const typename Op::type * src0, const typename Op::type * src1,
u8 * dst, const Op & op,
size_t &x, size_t width)
{
typedef typename Op::type type;
typedef typename internal::VecTraits<type>::vec128 vec128;
typedef typename internal::VecTraits<type>::unsign::vec128 uvec128;
//There no more than 15 elements in the tail, so we could handle 8 element vector only once
if( x + 8 < width)
{
vec128 v_src0, v_src1;
uvec128 v_dst;
v_src0 = internal::vld1q(src0 + x);
v_src1 = internal::vld1q(src1 + x);
op(v_src0, v_src1, v_dst);
internal::vst1(dst + x, internal::vmovn(v_dst));
x+=8;
}
}
};
template <typename Op> struct vtail<Op, 1>
{
static inline void compare(const typename Op::type * src0, const typename Op::type * src1,
u8 * dst, const Op & op,
size_t &x, size_t width)
{
typedef typename Op::type type;
typedef typename internal::VecTraits<type>::vec128 vec128;
typedef typename internal::VecTraits<type>::unsign::vec128 uvec128;
typedef typename internal::VecTraits<type>::vec64 vec64;
typedef typename internal::VecTraits<type>::unsign::vec64 uvec64;
//There no more than 31 elements in the tail, so we could handle once 16+8 or 16 or 8 elements
if( x + 16 < width)
{
vec128 v_src0, v_src1;
uvec128 v_dst;
v_src0 = internal::vld1q(src0 + x);
v_src1 = internal::vld1q(src1 + x);
op(v_src0, v_src1, v_dst);
internal::vst1q(dst + x, v_dst);
x+=16;
}
if( x + 8 < width)
{
vec64 v_src0, v_src1;
uvec64 v_dst;
v_src0 = internal::vld1(src0 + x);
v_src1 = internal::vld1(src1 + x);
op(v_src0, v_src1, v_dst);
internal::vst1(dst + x, v_dst);
x+=8;
}
}
};
template <typename Op>
void vcompare(Size2D size,
const typename Op::type * src0Base, ptrdiff_t src0Stride,
const typename Op::type * src1Base, ptrdiff_t src1Stride,
u8 * dstBase, ptrdiff_t dstStride, const Op & op)
{
typedef typename Op::type type;
typedef typename internal::VecTraits<type>::vec128 vec128;
typedef typename internal::VecTraits<type>::unsign::vec128 uvec128;
if (src0Stride == src1Stride && src0Stride == dstStride &&
src0Stride == (ptrdiff_t)(size.width * sizeof(type)))
{
size.width *= size.height;
size.height = 1;
}
const u32 step_base = 32 / sizeof(type);
size_t roiw_base = size.width >= (step_base - 1) ? size.width - step_base + 1 : 0;
for (size_t y = 0; y < size.height; ++y)
{
const type * src0 = internal::getRowPtr(src0Base, src0Stride, y);
const type * src1 = internal::getRowPtr(src1Base, src1Stride, y);
u8 * dst = internal::getRowPtr(dstBase, dstStride, y);
size_t x = 0;
for( ; x < roiw_base; x += step_base )
{
internal::prefetch(src0 + x);
internal::prefetch(src1 + x);
vec128 v_src00 = internal::vld1q(src0 + x), v_src01 = internal::vld1q(src0 + x + 16 / sizeof(type));
vec128 v_src10 = internal::vld1q(src1 + x), v_src11 = internal::vld1q(src1 + x + 16 / sizeof(type));
uvec128 v_dst0;
uvec128 v_dst1;
op(v_src00, v_src10, v_dst0);
op(v_src01, v_src11, v_dst1);
vnst(dst + x, v_dst0, v_dst1);
}
vtail<Op, sizeof(type)>::compare(src0, src1, dst, op, x, size.width);
for (; x < size.width; ++x)
{
op(src0 + x, src1 + x, dst + x);
}
}
}
template<typename T>
struct OpCmpEQ
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0, const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::unsign::vec128 & v_dst) const
{
v_dst = internal::vceqq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0, const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::unsign::vec64 & v_dst) const
{
v_dst = internal::vceq(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, u8 * dst) const
{
dst[0] = src0[0] == src1[0] ? 255 : 0;
}
};
template<typename T>
struct OpCmpNE
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0, const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::unsign::vec128 & v_dst) const
{
v_dst = internal::vmvnq(internal::vceqq(v_src0, v_src1));
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0, const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::unsign::vec64 & v_dst) const
{
v_dst = internal::vmvn(internal::vceq(v_src0, v_src1));
}
void operator() (const T * src0, const T * src1, u8 * dst) const
{
dst[0] = src0[0] == src1[0] ? 0 : 255;
}
};
template<typename T>
struct OpCmpGT
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0, const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::unsign::vec128 & v_dst) const
{
v_dst = internal::vcgtq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0, const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::unsign::vec64 & v_dst) const
{
v_dst = internal::vcgt(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, u8 * dst) const
{
dst[0] = src0[0] > src1[0] ? 255 : 0;
}
};
template<typename T>
struct OpCmpGE
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0, const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::unsign::vec128 & v_dst) const
{
v_dst = internal::vcgeq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0, const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::unsign::vec64 & v_dst) const
{
v_dst = internal::vcge(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, u8 * dst) const
{
dst[0] = src0[0] >= src1[0] ? 255 : 0;
}
};
}
#define IMPL_CMPOP(op, type) \
void cmp##op(const Size2D &size, \
const type * src0Base, ptrdiff_t src0Stride, \
const type * src1Base, ptrdiff_t src1Stride, \
u8 *dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
vcompare(size, \
src0Base, src0Stride, \
src1Base, src1Stride, \
dstBase, dstStride, \
OpCmp##op<type>()); \
}
#else
#define IMPL_CMPOP(op, type) \
void cmp##op(const Size2D &size, \
const type * src0Base, ptrdiff_t src0Stride, \
const type * src1Base, ptrdiff_t src1Stride, \
u8 *dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
(void)size; \
(void)src0Base; \
(void)src0Stride; \
(void)src1Base; \
(void)src1Stride; \
(void)dstBase; \
(void)dstStride; \
}
#endif
IMPL_CMPOP(EQ, u8)
IMPL_CMPOP(EQ, s8)
IMPL_CMPOP(EQ, u16)
IMPL_CMPOP(EQ, s16)
IMPL_CMPOP(EQ, u32)
IMPL_CMPOP(EQ, s32)
IMPL_CMPOP(EQ, f32)
IMPL_CMPOP(NE, u8)
IMPL_CMPOP(NE, s8)
IMPL_CMPOP(NE, u16)
IMPL_CMPOP(NE, s16)
IMPL_CMPOP(NE, u32)
IMPL_CMPOP(NE, s32)
IMPL_CMPOP(NE, f32)
IMPL_CMPOP(GT, u8)
IMPL_CMPOP(GT, s8)
IMPL_CMPOP(GT, u16)
IMPL_CMPOP(GT, s16)
IMPL_CMPOP(GT, u32)
IMPL_CMPOP(GT, s32)
IMPL_CMPOP(GT, f32)
IMPL_CMPOP(GE, u8)
IMPL_CMPOP(GE, s8)
IMPL_CMPOP(GE, u16)
IMPL_CMPOP(GE, s16)
IMPL_CMPOP(GE, u32)
IMPL_CMPOP(GE, s32)
IMPL_CMPOP(GE, f32)
} // namespace CAROTENE_NS

2846
3rdparty/carotene/src/colorconvert.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

108
3rdparty/carotene/src/common.cpp vendored Normal file
View File

@@ -0,0 +1,108 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <cstdlib>
#include <iostream>
#include "common.hpp"
namespace CAROTENE_NS {
bool isSupportedConfiguration()
{
#ifdef CAROTENE_NEON
return true;
#else
return false;
#endif
}
namespace internal {
void assertSupportedConfiguration(bool parametersSupported)
{
if (!isSupportedConfiguration()) {
std::cerr << "internal error: attempted to use an unavailable function" << std::endl;
std::abort();
}
if (!parametersSupported) {
std::cerr << "internal error: attempted to use a function with unsupported parameters" << std::endl;
std::abort();
}
}
ptrdiff_t borderInterpolate(ptrdiff_t _p, size_t _len, BORDER_MODE borderType, size_t startMargin, size_t endMargin)
{
ptrdiff_t p = _p + (ptrdiff_t)startMargin;
size_t len = _len + startMargin + endMargin;
if( (size_t)p < len )
return _p;
else if( borderType == BORDER_MODE_REPLICATE )
p = p < 0 ? 0 : (ptrdiff_t)len - 1;
else if( borderType == BORDER_MODE_REFLECT || borderType == BORDER_MODE_REFLECT101 )
{
s32 delta = borderType == BORDER_MODE_REFLECT101;
if( len == 1 )
return 0;
do
{
if( p < 0 )
p = -p - 1 + delta;
else
p = (ptrdiff_t)len - 1 - (p - (ptrdiff_t)len) - delta;
}
while( (size_t)p >= len );
}
else if( borderType == BORDER_MODE_WRAP )
{
if( p < 0 )
p -= ((p-(ptrdiff_t)len+1)/(ptrdiff_t)len)*(ptrdiff_t)len;
if( p >= (ptrdiff_t)len )
p %= (ptrdiff_t)len;
}
else if( borderType == BORDER_MODE_CONSTANT )
p = -1;
else
internal::assertSupportedConfiguration(false);
return p - (ptrdiff_t)startMargin;
}
} // namespace internal
} // namespace CAROTENE_NS

97
3rdparty/carotene/src/common.hpp vendored Normal file
View File

@@ -0,0 +1,97 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_SRC_COMMON_HPP
#define CAROTENE_SRC_COMMON_HPP
#include <cstddef>
#include <cstdlib>
#include <algorithm>
#if defined WITH_NEON && (defined __ARM_NEON__ || defined __ARM_NEON)
#define CAROTENE_NEON
#endif
#ifdef CAROTENE_NEON
#include <arm_neon.h>
#include "intrinsics.hpp"
#endif
#include <carotene/functions.hpp>
#include "saturate_cast.hpp"
namespace CAROTENE_NS { namespace internal {
inline void prefetch(const void *ptr, size_t offset = 32*10)
{
#if defined __GNUC__
__builtin_prefetch(reinterpret_cast<const char*>(ptr) + offset);
#elif defined _MSC_VER && defined CAROTENE_NEON
__prefetch(reinterpret_cast<const char*>(ptr) + offset);
#else
(void)ptr;
(void)offset;
#endif
}
template <typename T>
inline T *getRowPtr(T *base, ptrdiff_t stride, size_t row)
{
char *baseRaw = const_cast<char *>(reinterpret_cast<const char *>(base));
return reinterpret_cast<T *>(baseRaw + ptrdiff_t(row) * stride);
}
void assertSupportedConfiguration(bool parametersSupported = true);
ptrdiff_t borderInterpolate(ptrdiff_t _p, size_t _len, BORDER_MODE borderType, size_t startMargin = 0, size_t endMargin = 0);
/*!
* Aligns pointer by the certain number of bytes
*
* This small inline function aligns the pointer by the certain number of bytes by shifting
* it forward by 0 or a positive offset.
*/
template<typename T> inline T* alignPtr(T* ptr, size_t n=sizeof(T))
{
return (T*)(((size_t)ptr + n-1) & -n);
}
}}
#endif

1331
3rdparty/carotene/src/convert.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

399
3rdparty/carotene/src/convert_depth.cpp vendored Normal file
View File

@@ -0,0 +1,399 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <cstring>
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <int shift>
void lshiftConst(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
uint8x16_t v_src = vld1q_u8(src + j);
int16x8_t v_dst0 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src)));
int16x8_t v_dst1 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src)));
vst1q_s16(dst + j, vshlq_n_s16(v_dst0, shift));
vst1q_s16(dst + j + 8, vshlq_n_s16(v_dst1, shift));
}
for (; j < roiw8; j += 8)
{
int16x8_t v_dst = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src + j)));
vst1q_s16(dst + j, vshlq_n_s16(v_dst, shift));
}
for (; j < size.width; j++)
{
dst[j] = ((s16)src[j] << shift);
}
}
}
template <>
void lshiftConst<0>(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
uint8x16_t v_src = vld1q_u8(src + j);
int16x8_t v_dst0 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src)));
int16x8_t v_dst1 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src)));
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_dst = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src + j)));
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
{
dst[j] = (s16)src[j];
}
}
}
template <int shift>
void rshiftConst(const Size2D &size,
const s16 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
CONVERT_POLICY cpolicy)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (cpolicy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vshrq_n_s16(vld1q_s16(src + j), shift),
v_src1 = vshrq_n_s16(vld1q_s16(src + j + 8), shift);
uint8x16_t v_dst = vcombine_u8(vqmovun_s16(v_src0),
vqmovun_s16(v_src1));
vst1q_u8(dst + j, v_dst);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vshrq_n_s16(vld1q_s16(src + j), shift);
vst1_u8(dst + j, vqmovun_s16(v_src));
}
for (; j < size.width; j++)
{
dst[j] = internal::saturate_cast<u8>((src[j] >> shift));
}
}
else // CONVERT_POLICY_WRAP
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vshrq_n_s16(vld1q_s16(src + j), shift),
v_src1 = vshrq_n_s16(vld1q_s16(src + j + 8), shift);
int8x16_t v_dst = vcombine_s8(vmovn_s16(v_src0),
vmovn_s16(v_src1));
vst1q_u8(dst + j, vreinterpretq_u8_s8(v_dst));
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vshrq_n_s16(vld1q_s16(src + j), shift);
vst1_u8(dst + j, vreinterpret_u8_s8(vmovn_s16(v_src)));
}
for (; j < size.width; j++)
{
dst[j] = (u8)((src[j] >> shift));
}
}
}
}
template <>
void rshiftConst<0>(const Size2D &size,
const s16 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
CONVERT_POLICY cpolicy)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (cpolicy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vld1q_s16(src + j), v_src1 = vld1q_s16(src + j + 8);
uint8x16_t v_dst = vcombine_u8(vqmovun_s16(v_src0), vqmovun_s16(v_src1));
vst1q_u8(dst + j, v_dst);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vld1q_s16(src + j);
vst1_u8(dst + j, vqmovun_s16(v_src));
}
for (; j < size.width; j++)
{
dst[j] = internal::saturate_cast<u8>(src[j]);
}
}
else // CONVERT_POLICY_WRAP
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vld1q_s16(src + j), v_src1 = vld1q_s16(src + j + 8);
int8x16_t v_dst = vcombine_s8(vmovn_s16(v_src0), vmovn_s16(v_src1));
vst1q_u8(dst + j, vreinterpretq_u8_s8(v_dst));
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vld1q_s16(src + j);
vst1_u8(dst + j, vreinterpret_u8_s8(vmovn_s16(v_src)));
}
for (; j < size.width; j++)
{
dst[j] = (u8)src[j];
}
}
}
}
typedef void (* lshiftConstFunc)(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride);
typedef void (* rshiftConstFunc)(const Size2D &size,
const s16 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
CONVERT_POLICY cpolicy);
} // namespace
#endif
void lshift(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
u32 shift)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (shift >= 16u)
{
for (size_t i = 0; i < size.height; ++i)
{
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
std::memset(dst, 0, sizeof(s16) * size.width);
}
return;
}
// this ugly contruction is needed to avoid:
// /usr/lib/gcc/arm-linux-gnueabihf/4.8/include/arm_neon.h:3581:59: error: argument must be a constant
// return (int16x8_t)__builtin_neon_vshl_nv8hi (__a, __b, 1);
lshiftConstFunc funcs[16] =
{
lshiftConst<0>,
lshiftConst<1>,
lshiftConst<2>,
lshiftConst<3>,
lshiftConst<4>,
lshiftConst<5>,
lshiftConst<6>,
lshiftConst<7>,
lshiftConst<8>,
lshiftConst<9>,
lshiftConst<10>,
lshiftConst<11>,
lshiftConst<12>,
lshiftConst<13>,
lshiftConst<14>,
lshiftConst<15>
}, func = funcs[shift];
func(size, srcBase, srcStride, dstBase, dstStride);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)shift;
#endif
}
void rshift(const Size2D &size,
const s16 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
u32 shift, CONVERT_POLICY cpolicy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (shift >= 16)
{
if (cpolicy == CONVERT_POLICY_WRAP)
{
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
int16x8_t v_zero = vdupq_n_s16(0);
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src = internal::getRowPtr(srcBase, srcStride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vld1q_s16(src + j), v_src1 = vld1q_s16(src + j + 8);
uint8x16_t v_dst = vcombine_u8(vmovn_u16(vcltq_s16(v_src0, v_zero)),
vmovn_u16(vcltq_s16(v_src1, v_zero)));
vst1q_u8(dst + j, v_dst);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src = vld1q_s16(src + j);
vst1_u8(dst + j, vmovn_u16(vcltq_s16(v_src, v_zero)));
}
for (; j < size.width; j++)
{
dst[j] = src[j] >= 0 ? 0 : 255;
}
}
}
else
{
for (size_t i = 0; i < size.height; ++i)
{
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
std::memset(dst, 0, sizeof(u8) * size.width);
}
}
return;
}
// this ugly contruction is needed to avoid:
// /usr/lib/gcc/arm-linux-gnueabihf/4.8/include/arm_neon.h:3581:59: error: argument must be a constant
// return (int16x8_t)__builtin_neon_vshr_nv8hi (__a, __b, 1);
rshiftConstFunc funcs[16] =
{
rshiftConst<0>,
rshiftConst<1>,
rshiftConst<2>,
rshiftConst<3>,
rshiftConst<4>,
rshiftConst<5>,
rshiftConst<6>,
rshiftConst<7>,
rshiftConst<8>,
rshiftConst<9>,
rshiftConst<10>,
rshiftConst<11>,
rshiftConst<12>,
rshiftConst<13>,
rshiftConst<14>,
rshiftConst<15>
}, func = funcs[shift];
func(size, srcBase, srcStride, dstBase, dstStride, cpolicy);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)shift;
(void)cpolicy;
#endif
}
} // namespace CAROTENE_NS

2498
3rdparty/carotene/src/convert_scale.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

340
3rdparty/carotene/src/convolution.cpp vendored Normal file
View File

@@ -0,0 +1,340 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "saturate_cast.hpp"
namespace CAROTENE_NS {
bool isConvolutionSupported(const Size2D &size, const Size2D &ksize,
BORDER_MODE border)
{
return isSupportedConfiguration() && size.width >= 8 &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REPLICATE) &&
(ksize.width == 3) && (ksize.height == 3);
}
#ifdef CAROTENE_NEON
namespace {
template <int shift>
int32x4_t vshrq_s32(int32x4_t value)
{
return vshrq_n_s32(value, shift);
}
template <>
int32x4_t vshrq_s32<0>(int32x4_t value)
{
return value;
}
} // namespace
typedef int32x4_t (* vshrq_s32_func)(int32x4_t value);
#endif
void convolution(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue,
const Size2D & ksize, s16 * kernelBase, u32 scale)
{
internal::assertSupportedConfiguration(isConvolutionSupported(size, ksize, border));
#ifdef CAROTENE_NEON
const uint8x8_t v_zero_u8 = vdup_n_u8(0);
const uint8x8_t v_border = vdup_n_u8(borderValue);
const int32x4_t v_zero_s32 = vdupq_n_s32(0);
uint8x8_t tprev[3] = { v_zero_u8, v_zero_u8, v_zero_u8 },
tcurr[3] = { v_zero_u8, v_zero_u8, v_zero_u8 },
tnext[3] = { v_zero_u8, v_zero_u8, v_zero_u8 };
uint8x8_t t0 = v_zero_u8, t1 = v_zero_u8, t2 = v_zero_u8;
ptrdiff_t width = (ptrdiff_t)size.width, height = (ptrdiff_t)size.height;
static const vshrq_s32_func vshrq_s32_a[33] =
{
vshrq_s32<0>,
vshrq_s32<1>,
vshrq_s32<2>,
vshrq_s32<3>,
vshrq_s32<4>,
vshrq_s32<5>,
vshrq_s32<6>,
vshrq_s32<7>,
vshrq_s32<8>,
vshrq_s32<9>,
vshrq_s32<10>,
vshrq_s32<11>,
vshrq_s32<12>,
vshrq_s32<13>,
vshrq_s32<14>,
vshrq_s32<15>,
vshrq_s32<16>,
vshrq_s32<17>,
vshrq_s32<18>,
vshrq_s32<19>,
vshrq_s32<20>,
vshrq_s32<21>,
vshrq_s32<22>,
vshrq_s32<23>,
vshrq_s32<24>,
vshrq_s32<25>,
vshrq_s32<26>,
vshrq_s32<27>,
vshrq_s32<28>,
vshrq_s32<29>,
vshrq_s32<30>,
vshrq_s32<31>,
vshrq_s32<32>
};
vshrq_s32_func vshrq_s32_p = vshrq_s32_a[scale];
for (ptrdiff_t y = 0; y < height; ++y)
{
const u8 * srow0 = y == 0 && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::max<ptrdiff_t>(y - 1, 0));
const u8 * srow1 = internal::getRowPtr(srcBase, srcStride, y);
const u8 * srow2 = y + 1 == height && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::min(y + 1, height - 1));
u8 * drow = internal::getRowPtr(dstBase, dstStride, y);
u8 prevx[3] = { 0, 0, 0 },
currx[3] = { 0, 0, 0 },
nextx[3] = { 0, 0, 0 };
ptrdiff_t x = 0;
const ptrdiff_t bwidth = y + 2 < height ? width : (width - 8);
// perform vertical convolution
for ( ; x <= bwidth; x += 8)
{
internal::prefetch(srow0 + x);
internal::prefetch(srow1 + x);
internal::prefetch(srow2 + x);
uint8x8_t x0 = !srow0 ? v_border : vld1_u8(srow0 + x);
uint8x8_t x1 = vld1_u8(srow1 + x);
uint8x8_t x2 = !srow2 ? v_border : vld1_u8(srow2 + x);
// calculate values for plain CPU part below if needed
if (x + 8 >= bwidth)
{
ptrdiff_t x3 = x == width ? width - 1 : x;
ptrdiff_t x4 = border == BORDER_MODE_CONSTANT ? x3 - 1 : std::max<ptrdiff_t>(x3 - 1, 0);
if (border == BORDER_MODE_CONSTANT && x4 < 0)
prevx[0] = prevx[1] = prevx[2] = borderValue;
else
{
prevx[0] = srow0 ? srow0[x4] : borderValue;
prevx[1] = srow1[x4] ;
prevx[2] = srow2 ? srow2[x4] : borderValue;
}
currx[0] = srow0 ? srow0[x3] : borderValue;
currx[1] = srow1[x3] ;
currx[2] = srow2 ? srow2[x3] : borderValue;
}
// make shift
if (x)
{
tprev[0] = tcurr[0];
tcurr[0] = tnext[0];
tprev[1] = tcurr[1];
tcurr[1] = tnext[1];
tprev[2] = tcurr[2];
tcurr[2] = tnext[2];
}
tnext[0] = x0;
tnext[1] = x1;
tnext[2] = x2;
// make extrapolation for the first elements
if (!x)
{
// make border
if (border == BORDER_MODE_CONSTANT)
tcurr[0] = tcurr[1] = tcurr[2] = v_border;
else if (border == BORDER_MODE_REPLICATE)
{
tcurr[0] = vdup_n_u8(vget_lane_u8(tnext[0], 0));
tcurr[1] = vdup_n_u8(vget_lane_u8(tnext[1], 0));
tcurr[2] = vdup_n_u8(vget_lane_u8(tnext[2], 0));
}
continue;
}
int32x4_t v_dst0 = v_zero_s32, v_dst1 = v_zero_s32;
{
// combine 3 "shifted" vectors
t0 = vext_u8(tprev[0], tcurr[0], 7);
t1 = tcurr[0];
t2 = vext_u8(tcurr[0], tnext[0], 1);
int16x8_t t0_16s = vreinterpretq_s16_u16(vmovl_u8(t0));
int16x8_t t1_16s = vreinterpretq_s16_u16(vmovl_u8(t1));
int16x8_t t2_16s = vreinterpretq_s16_u16(vmovl_u8(t2));
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t0_16s), kernelBase[8]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t1_16s), kernelBase[7]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t2_16s), kernelBase[6]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t0_16s), kernelBase[8]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t1_16s), kernelBase[7]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t2_16s), kernelBase[6]);
}
{
// combine 3 "shifted" vectors
t0 = vext_u8(tprev[1], tcurr[1], 7);
t1 = tcurr[1];
t2 = vext_u8(tcurr[1], tnext[1], 1);
int16x8_t t0_16s = vreinterpretq_s16_u16(vmovl_u8(t0));
int16x8_t t1_16s = vreinterpretq_s16_u16(vmovl_u8(t1));
int16x8_t t2_16s = vreinterpretq_s16_u16(vmovl_u8(t2));
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t0_16s), kernelBase[5]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t1_16s), kernelBase[4]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t2_16s), kernelBase[3]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t0_16s), kernelBase[5]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t1_16s), kernelBase[4]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t2_16s), kernelBase[3]);
}
{
// combine 3 "shifted" vectors
t0 = vext_u8(tprev[2], tcurr[2], 7);
t1 = tcurr[2];
t2 = vext_u8(tcurr[2], tnext[2], 1);
int16x8_t t0_16s = vreinterpretq_s16_u16(vmovl_u8(t0));
int16x8_t t1_16s = vreinterpretq_s16_u16(vmovl_u8(t1));
int16x8_t t2_16s = vreinterpretq_s16_u16(vmovl_u8(t2));
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t0_16s), kernelBase[2]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t1_16s), kernelBase[1]);
v_dst0 = vmlal_n_s16(v_dst0, vget_low_s16(t2_16s), kernelBase[0]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t0_16s), kernelBase[2]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t1_16s), kernelBase[1]);
v_dst1 = vmlal_n_s16(v_dst1, vget_high_s16(t2_16s), kernelBase[0]);
}
// make scale
v_dst0 = vshrq_s32_p(v_dst0);
v_dst1 = vshrq_s32_p(v_dst1);
// and add them
vst1_u8(drow + x - 8, vqmovn_u16(vcombine_u16(vqmovun_s32(v_dst0),
vqmovun_s32(v_dst1))));
}
x -= 8;
if (x == width)
--x;
for ( ; x < width; ++x)
{
// make extrapolation for the last elements
if (x + 1 >= width)
{
if (border == BORDER_MODE_CONSTANT)
{
nextx[0] = borderValue;
nextx[1] = borderValue;
nextx[2] = borderValue;
}
else if (border == BORDER_MODE_REPLICATE)
{
nextx[0] = srow0[x];
nextx[1] = srow1[x];
nextx[2] = srow2[x];
}
}
else
{
nextx[0] = srow0 ? srow0[x + 1] : borderValue;
nextx[1] = srow1[x + 1] ;
nextx[2] = srow2 ? srow2[x + 1] : borderValue;
}
s32 val = 0;
for (s32 _y = 0; _y < 3; ++_y)
val += prevx[_y] * kernelBase[(2 - _y) * 3 + 2] +
currx[_y] * kernelBase[(2 - _y) * 3 + 1] +
nextx[_y] * kernelBase[(2 - _y) * 3 + 0];
drow[x] = internal::saturate_cast<u8>(val >> scale);
// make shift
prevx[0] = currx[0];
currx[0] = nextx[0];
prevx[1] = currx[1];
currx[1] = nextx[1];
prevx[2] = currx[2];
currx[2] = nextx[2];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
(void)ksize;
(void)kernelBase;
(void)scale;
#endif
}
} // namespace CAROTENE_NS

430
3rdparty/carotene/src/count_nonzero.cpp vendored Normal file
View File

@@ -0,0 +1,430 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <limits>
namespace CAROTENE_NS {
s32 countNonZero(const Size2D &_size,
const u8 * srcBase, ptrdiff_t srcStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
size_t roiw16 = size.width & ~15u;
s32 result = 0;
for(size_t k = 0; k < size.height; ++k)
{
const u8* src = internal::getRowPtr( srcBase, srcStride, k);
size_t i = 0;
#define COUNTNONZERO8U_BLOCK_SIZE (16*255)
uint8x16_t vc1 = vmovq_n_u8(1);
for (; i < roiw16;)
{
size_t lim = std::min(i + COUNTNONZERO8U_BLOCK_SIZE, size.width) - 16;
uint8x16_t vs = vmovq_n_u8(0);
for (; i <= lim; i+= 16)
{
internal::prefetch(src + i);
uint8x16_t vln = vld1q_u8(src + i);
uint8x16_t vnz = vminq_u8(vln, vc1);
vs = vaddq_u8(vs, vnz);
}
uint32x4_t vs4 = vpaddlq_u16(vpaddlq_u8(vs));
uint32x2_t vs2 = vadd_u32(vget_low_u32(vs4), vget_high_u32(vs4));
s32 s[2];
vst1_u32((u32*)s, vs2);
if (s[0] < 0 || s[1] < 0)//saturate in case of overflow ~ 2GB of non-zeros...
{
return 0x7fFFffFF;
}
result += (s[0] += s[1]);
if (s[0] < 0 || result < 0)
{
return 0x7fFFffFF;
}
}
for (; i < size.width; i++)
result += (src[i] != 0)?1:0;
if (result < 0)//saturate in case of overflow ~ 2GB of non-zeros...
{
return 0x7fFFffFF;
}
}
return result;
#else
(void)_size;
(void)srcBase;
(void)srcStride;
return 0;
#endif
}
s32 countNonZero(const Size2D &_size,
const u16 * srcBase, ptrdiff_t srcStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
size_t roiw8 = size.width & ~7u;
s32 result = 0;
for(size_t k = 0; k < size.height; ++k)
{
const u16* src = internal::getRowPtr( srcBase, srcStride, k);
size_t i = 0;
#define COUNTNONZERO16U_BLOCK_SIZE (8*(256*256-1))
uint16x8_t vc1 = vmovq_n_u16(1);
for (; i < roiw8;)
{
size_t lim = std::min(i + COUNTNONZERO16U_BLOCK_SIZE, size.width) - 8;
uint16x8_t vs = vmovq_n_u16(0);
for (; i <= lim; i+= 8)
{
internal::prefetch(src + i);
uint16x8_t vln = vld1q_u16(src + i);
uint16x8_t vnz = vminq_u16(vln, vc1);
vs = vaddq_u16(vs, vnz);
}
uint32x4_t vs4 = vpaddlq_u16(vs);
uint32x2_t vs2 = vadd_u32(vget_low_u32(vs4), vget_high_u32(vs4));
s32 s[2];
vst1_u32((u32*)s, vs2);
if (s[0] < 0 || s[1] < 0)//saturate in case of overflow ~ 4GB of non-zeros...
{
return 0x7fFFffFF;
}
result += (s[0] += s[1]);
if (s[0] < 0 || result < 0)
{
return 0x7fFFffFF;
}
}
for (; i < size.width; i++)
result += (src[i] != 0)?1:0;
if (result < 0)//saturate in case of overflow ~ 4GB of non-zeros...
{
return 0x7fFFffFF;
}
}
return result;
#else
(void)_size;
(void)srcBase;
(void)srcStride;
return 0;
#endif
}
s32 countNonZero(const Size2D &_size,
const s32 * srcBase, ptrdiff_t srcStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
size_t roiw4 = size.width & ~3u;
s32 result = 0;
for(size_t k = 0; k < size.height; ++k)
{
const u32* src = (const u32*)internal::getRowPtr( srcBase, srcStride, k);
u32 i = 0;
uint32x4_t vc1 = vmovq_n_u32(1);
uint32x4_t vs = vmovq_n_u32(0);
for (; i < roiw4; i += 4 )
{
internal::prefetch(src + i);
uint32x4_t vln = vld1q_u32(src + i);
uint32x4_t vnz = vminq_u32(vln, vc1);
vs = vqaddq_u32(vs, vnz);
}
uint32x2_t vs2 = vqadd_u32(vget_low_u32(vs), vget_high_u32(vs));
s32 s[2];
vst1_u32((u32*)s, vs2);
if (s[0] < 0 || s[1] < 0)//saturate in case of overflow ~ 8GB of non-zeros...
{
return 0x7fFFffFF;
}
result += (s[0] += s[1]);
if (s[0] < 0 || result < 0)
{
return 0x7fFFffFF;
}
for (; i < size.width; i++)
result += (src[i] != 0)?1:0;
if (result < 0)//saturate in case of overflow ~ 8GB of non-zeros...
{
return 0x7fFFffFF;
}
}
return result;
#else
(void)_size;
(void)srcBase;
(void)srcStride;
return 0;
#endif
}
s32 countNonZero(const Size2D &_size,
const f32 * srcBase, ptrdiff_t srcStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
size_t roiw4 = size.width & ~3u;
s32 result = 0;
for(size_t k = 0; k < size.height; ++k)
{
const f32* src = internal::getRowPtr( srcBase, srcStride, k);
size_t i = 0;
float32x4_t vc0 = vmovq_n_f32(0);
int32x4_t vs = vmovq_n_s32(0);
for (; i < roiw4; i += 4 )
{
internal::prefetch(src + i);
float32x4_t vln = vld1q_f32(src + i);
int32x4_t vnz = vreinterpretq_s32_u32(vmvnq_u32(vceqq_f32(vln, vc0)));
vs = vqaddq_s32(vs, vnz);
}
int32x2_t vs2 = vqneg_s32(vqadd_s32(vget_low_s32(vs), vget_high_s32(vs)));
int s[2];
vst1_s32(s, vs2);
result += (s[0] += s[1]);
if (s[0] < 0 || result < 0)//case of overflow ~ 8GB of non-zeros...
{
return 0x7fFFffFF;
}
for (; i < size.width; i++)
result += (src[i] < std::numeric_limits<float>::min() && src[i] > -std::numeric_limits<float>::min())?0:1;
if (result < 0)
{
return 0x7fFFffFF;
}
}
return result;
#else
(void)_size;
(void)srcBase;
(void)srcStride;
return 0;
#endif
}
s32 countNonZero(const Size2D &_size,
const f64 * srcBase, ptrdiff_t srcStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
size_t roiw8 = size.width & ~7u;
size_t roiw4 = size.width & ~3u;
size_t roiw2 = size.width & ~1u;
uint64x2_t vmask1 = vdupq_n_u64(0x7fFFffFFffFFffFFULL); //will treat denormals as non-zero
uint32x4_t vc0 = vmovq_n_u32(0);
s32 result = 0;
for(size_t k = 0; k < size.height; ++k)
{
const f64* src = internal::getRowPtr( srcBase, srcStride, k);
size_t i = 0;
int32x2_t vs1 = vmov_n_s32(0);
int32x2_t vs2 = vmov_n_s32(0);
int32x2_t vs3 = vmov_n_s32(0);
int32x2_t vs4 = vmov_n_s32(0);
for (; i < roiw8; i += 8 )
{
internal::prefetch(src + i + 6);
uint64x2_t vln1 = vld1q_u64((const u64*)(src + i));
uint64x2_t vln2 = vld1q_u64((const u64*)(src + i + 2));
uint64x2_t vln3 = vld1q_u64((const u64*)(src + i + 4));
uint64x2_t vln4 = vld1q_u64((const u64*)(src + i + 6));
uint64x2_t vm1 = vandq_u64(vln1, vmask1);
uint64x2_t vm2 = vandq_u64(vln2, vmask1);
uint64x2_t vm3 = vandq_u64(vln3, vmask1);
uint64x2_t vm4 = vandq_u64(vln4, vmask1);
uint32x4_t vequ1 = vceqq_u32(vreinterpretq_u32_u64(vm1), vc0);
uint32x4_t vequ2 = vceqq_u32(vreinterpretq_u32_u64(vm2), vc0);
uint32x4_t vequ3 = vceqq_u32(vreinterpretq_u32_u64(vm3), vc0);
uint32x4_t vequ4 = vceqq_u32(vreinterpretq_u32_u64(vm4), vc0);
uint32x4_t vlx1 = vmvnq_u32(vequ1);
uint32x4_t vlx2 = vmvnq_u32(vequ2);
uint32x4_t vlx3 = vmvnq_u32(vequ3);
uint32x4_t vlx4 = vmvnq_u32(vequ4);
int32x2_t vnz1 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx1), vget_high_u32(vlx1)));
int32x2_t vnz2 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx2), vget_high_u32(vlx2)));
int32x2_t vnz3 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx3), vget_high_u32(vlx3)));
int32x2_t vnz4 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx4), vget_high_u32(vlx4)));
vs1 = vqadd_s32(vs1, vnz1);
vs2 = vqadd_s32(vs2, vnz2);
vs3 = vqadd_s32(vs3, vnz3);
vs4 = vqadd_s32(vs4, vnz4);
}
if (i < roiw4)
{
internal::prefetch(src + i + 2);
uint64x2_t vln1 = vld1q_u64((const u64*)(src + i));
uint64x2_t vln2 = vld1q_u64((const u64*)(src + i + 2));
uint64x2_t vm1 = vandq_u64(vln1, vmask1);
uint64x2_t vm2 = vandq_u64(vln2, vmask1);
uint32x4_t vequ1 = vceqq_u32(vreinterpretq_u32_u64(vm1), vc0);
uint32x4_t vequ2 = vceqq_u32(vreinterpretq_u32_u64(vm2), vc0);
uint32x4_t vlx1 = vmvnq_u32(vequ1);
uint32x4_t vlx2 = vmvnq_u32(vequ2);
int32x2_t vnz1 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx1), vget_high_u32(vlx1)));
int32x2_t vnz2 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx2), vget_high_u32(vlx2)));
vs1 = vqadd_s32(vs1, vnz1);
vs2 = vqadd_s32(vs2, vnz2);
i += 4;
}
if (i < roiw2)
{
internal::prefetch(src + i);
uint64x2_t vln1 = vld1q_u64((const u64*)(src + i));
uint64x2_t vm1 = vandq_u64(vln1, vmask1);
uint32x4_t vequ1 = vceqq_u32(vreinterpretq_u32_u64(vm1), vc0);
uint32x4_t vlx1 = vmvnq_u32(vequ1);
int32x2_t vnz1 = vreinterpret_s32_u32(vpmax_u32(vget_low_u32(vlx1), vget_high_u32(vlx1)));
vs1 = vqadd_s32(vs1, vnz1);
i += 2;
}
vs1 = vqadd_s32(vs1, vs2);
vs3 = vqadd_s32(vs3, vs4);
vs1 = vqadd_s32(vs1, vs3);
int32x2_t vsneg = vqneg_s32(vs1);
s32 s[2];
vst1_s32(s, vsneg);
result += (s[0] += s[1]);
if (s[0] < 0 || result < 0)//case of overflow ~ 16GB of non-zeros...
{
return 0x7fFFffFF;
}
for (; i < size.width; i++)
result += (src[i] < std::numeric_limits<double>::min() && src[i] > -std::numeric_limits<double>::min())?0:1;
if (result < 0)
{
return 0x7fFFffFF;
}
}
return result;
#else
(void)_size;
(void)srcBase;
(void)srcStride;
return 0;
#endif
}
} // namespace CAROTENE_NS

708
3rdparty/carotene/src/div.cpp vendored Normal file
View File

@@ -0,0 +1,708 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2016, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
#include <cstring>
#include <cfloat>
#include <cmath>
#include <limits>
namespace CAROTENE_NS {
namespace {
#ifdef CAROTENE_NEON
inline float32x4_t vroundq(const float32x4_t& v)
{
const int32x4_t signMask = vdupq_n_s32(1 << 31), half = vreinterpretq_s32_f32(vdupq_n_f32(0.5f));
float32x4_t v_addition = vreinterpretq_f32_s32(vorrq_s32(half, vandq_s32(signMask, vreinterpretq_s32_f32(v))));
return vaddq_f32(v, v_addition);
}
template <typename T>
inline T divSaturateQ(const T &v1, const T &v2, const float scale)
{
return internal::vcombine(internal::vqmovn(divSaturateQ(internal::vmovl(internal::vget_low(v1)),
internal::vmovl(internal::vget_low(v2)), scale)),
internal::vqmovn(divSaturateQ(internal::vmovl(internal::vget_high(v1)),
internal::vmovl(internal::vget_high(v2)), scale))
);
}
template <>
inline int32x4_t divSaturateQ<int32x4_t>(const int32x4_t &v1, const int32x4_t &v2, const float scale)
{ return vcvtq_s32_f32(vroundq(vmulq_f32(vmulq_n_f32(vcvtq_f32_s32(v1), scale), internal::vrecpq_f32(vcvtq_f32_s32(v2))))); }
template <>
inline uint32x4_t divSaturateQ<uint32x4_t>(const uint32x4_t &v1, const uint32x4_t &v2, const float scale)
{ return vcvtq_u32_f32(vroundq(vmulq_f32(vmulq_n_f32(vcvtq_f32_u32(v1), scale), internal::vrecpq_f32(vcvtq_f32_u32(v2))))); }
inline float32x2_t vround(const float32x2_t& v)
{
const int32x2_t signMask = vdup_n_s32(1 << 31), half = vreinterpret_s32_f32(vdup_n_f32(0.5f));
float32x2_t v_addition = vreinterpret_f32_s32(vorr_s32(half, vand_s32(signMask, vreinterpret_s32_f32(v))));
return vadd_f32(v, v_addition);
}
template <typename T>
inline T divSaturate(const T &v1, const T &v2, const float scale)
{
return internal::vqmovn(divSaturateQ(internal::vmovl(v1), internal::vmovl(v2), scale));
}
template <>
inline int32x2_t divSaturate<int32x2_t>(const int32x2_t &v1, const int32x2_t &v2, const float scale)
{ return vcvt_s32_f32(vround(vmul_f32(vmul_n_f32(vcvt_f32_s32(v1), scale), internal::vrecp_f32(vcvt_f32_s32(v2))))); }
template <>
inline uint32x2_t divSaturate<uint32x2_t>(const uint32x2_t &v1, const uint32x2_t &v2, const float scale)
{ return vcvt_u32_f32(vround(vmul_f32(vmul_n_f32(vcvt_f32_u32(v1), scale), internal::vrecp_f32(vcvt_f32_u32(v2))))); }
template <typename T>
inline T divWrapQ(const T &v1, const T &v2, const float scale)
{
return internal::vcombine(internal::vmovn(divWrapQ(internal::vmovl(internal::vget_low(v1)),
internal::vmovl(internal::vget_low(v2)), scale)),
internal::vmovn(divWrapQ(internal::vmovl(internal::vget_high(v1)),
internal::vmovl(internal::vget_high(v2)), scale))
);
}
template <>
inline int32x4_t divWrapQ<int32x4_t>(const int32x4_t &v1, const int32x4_t &v2, const float scale)
{ return vcvtq_s32_f32(vmulq_f32(vmulq_n_f32(vcvtq_f32_s32(v1), scale), internal::vrecpq_f32(vcvtq_f32_s32(v2)))); }
template <>
inline uint32x4_t divWrapQ<uint32x4_t>(const uint32x4_t &v1, const uint32x4_t &v2, const float scale)
{ return vcvtq_u32_f32(vmulq_f32(vmulq_n_f32(vcvtq_f32_u32(v1), scale), internal::vrecpq_f32(vcvtq_f32_u32(v2)))); }
template <typename T>
inline T divWrap(const T &v1, const T &v2, const float scale)
{
return internal::vmovn(divWrapQ(internal::vmovl(v1), internal::vmovl(v2), scale));
}
template <>
inline int32x2_t divWrap<int32x2_t>(const int32x2_t &v1, const int32x2_t &v2, const float scale)
{ return vcvt_s32_f32(vmul_f32(vmul_n_f32(vcvt_f32_s32(v1), scale), internal::vrecp_f32(vcvt_f32_s32(v2)))); }
template <>
inline uint32x2_t divWrap<uint32x2_t>(const uint32x2_t &v1, const uint32x2_t &v2, const float scale)
{ return vcvt_u32_f32(vmul_f32(vmul_n_f32(vcvt_f32_u32(v1), scale), internal::vrecp_f32(vcvt_f32_u32(v2)))); }
inline uint8x16_t vtstq(const uint8x16_t & v0, const uint8x16_t & v1) { return vtstq_u8 (v0, v1); }
inline uint16x8_t vtstq(const uint16x8_t & v0, const uint16x8_t & v1) { return vtstq_u16(v0, v1); }
inline uint32x4_t vtstq(const uint32x4_t & v0, const uint32x4_t & v1) { return vtstq_u32(v0, v1); }
inline int8x16_t vtstq(const int8x16_t & v0, const int8x16_t & v1) { return vreinterpretq_s8_u8 (vtstq_s8 (v0, v1)); }
inline int16x8_t vtstq(const int16x8_t & v0, const int16x8_t & v1) { return vreinterpretq_s16_u16(vtstq_s16(v0, v1)); }
inline int32x4_t vtstq(const int32x4_t & v0, const int32x4_t & v1) { return vreinterpretq_s32_u32(vtstq_s32(v0, v1)); }
inline uint8x8_t vtst(const uint8x8_t & v0, const uint8x8_t & v1) { return vtst_u8 (v0, v1); }
inline uint16x4_t vtst(const uint16x4_t & v0, const uint16x4_t & v1) { return vtst_u16(v0, v1); }
inline uint32x2_t vtst(const uint32x2_t & v0, const uint32x2_t & v1) { return vtst_u32(v0, v1); }
inline int8x8_t vtst(const int8x8_t & v0, const int8x8_t & v1) { return vreinterpret_s8_u8 (vtst_s8 (v0, v1)); }
inline int16x4_t vtst(const int16x4_t & v0, const int16x4_t & v1) { return vreinterpret_s16_u16(vtst_s16(v0, v1)); }
inline int32x2_t vtst(const int32x2_t & v0, const int32x2_t & v1) { return vreinterpret_s32_u32(vtst_s32(v0, v1)); }
#endif
template <typename T>
void div(const Size2D &size,
const T * src0Base, ptrdiff_t src0Stride,
const T * src1Base, ptrdiff_t src1Stride,
T * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
typedef typename internal::VecTraits<T>::vec128 vec128;
typedef typename internal::VecTraits<T>::vec64 vec64;
if (scale == 0.0f ||
(std::numeric_limits<T>::is_integer &&
(scale * std::numeric_limits<T>::max()) < 1.0f &&
(scale * std::numeric_limits<T>::max()) > -1.0f))
{
for (size_t y = 0; y < size.height; ++y)
{
T * dst = internal::getRowPtr(dstBase, dstStride, y);
std::memset(dst, 0, sizeof(T) * size.width);
}
return;
}
const size_t step128 = 16 / sizeof(T);
size_t roiw128 = size.width >= (step128 - 1) ? size.width - step128 + 1 : 0;
const size_t step64 = 8 / sizeof(T);
size_t roiw64 = size.width >= (step64 - 1) ? size.width - step64 + 1 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const T * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const T * src1 = internal::getRowPtr(src1Base, src1Stride, i);
T * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (cpolicy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw128; j += step128)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
vec128 v_src0 = internal::vld1q(src0 + j);
vec128 v_src1 = internal::vld1q(src1 + j);
vec128 v_mask = vtstq(v_src1,v_src1);
internal::vst1q(dst + j, internal::vandq(v_mask, divSaturateQ(v_src0, v_src1, scale)));
}
for (; j < roiw64; j += step64)
{
vec64 v_src0 = internal::vld1(src0 + j);
vec64 v_src1 = internal::vld1(src1 + j);
vec64 v_mask = vtst(v_src1,v_src1);
internal::vst1(dst + j, internal::vand(v_mask,divSaturate(v_src0, v_src1, scale)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? internal::saturate_cast<T>(scale * src0[j] / src1[j]) : 0;
}
}
else // CONVERT_POLICY_WRAP
{
for (; j < roiw128; j += step128)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
vec128 v_src0 = internal::vld1q(src0 + j);
vec128 v_src1 = internal::vld1q(src1 + j);
vec128 v_mask = vtstq(v_src1,v_src1);
internal::vst1q(dst + j, internal::vandq(v_mask, divWrapQ(v_src0, v_src1, scale)));
}
for (; j < roiw64; j += step64)
{
vec64 v_src0 = internal::vld1(src0 + j);
vec64 v_src1 = internal::vld1(src1 + j);
vec64 v_mask = vtst(v_src1,v_src1);
internal::vst1(dst + j, internal::vand(v_mask,divWrap(v_src0, v_src1, scale)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? (T)((s32)trunc(scale * src0[j] / src1[j])) : 0;
}
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)cpolicy;
(void)scale;
#endif
}
#ifdef CAROTENE_NEON
template <typename T>
inline T recipSaturateQ(const T &v2, const float scale)
{
return internal::vcombine(internal::vqmovn(recipSaturateQ(internal::vmovl(internal::vget_low(v2)), scale)),
internal::vqmovn(recipSaturateQ(internal::vmovl(internal::vget_high(v2)), scale))
);
}
template <>
inline int32x4_t recipSaturateQ<int32x4_t>(const int32x4_t &v2, const float scale)
{ return vcvtq_s32_f32(vmulq_n_f32(internal::vrecpq_f32(vcvtq_f32_s32(v2)), scale)); }
template <>
inline uint32x4_t recipSaturateQ<uint32x4_t>(const uint32x4_t &v2, const float scale)
{ return vcvtq_u32_f32(vmulq_n_f32(internal::vrecpq_f32(vcvtq_f32_u32(v2)), scale)); }
template <typename T>
inline T recipSaturate(const T &v2, const float scale)
{
return internal::vqmovn(recipSaturateQ(internal::vmovl(v2), scale));
}
template <>
inline int32x2_t recipSaturate<int32x2_t>(const int32x2_t &v2, const float scale)
{ return vcvt_s32_f32(vmul_n_f32(internal::vrecp_f32(vcvt_f32_s32(v2)), scale)); }
template <>
inline uint32x2_t recipSaturate<uint32x2_t>(const uint32x2_t &v2, const float scale)
{ return vcvt_u32_f32(vmul_n_f32(internal::vrecp_f32(vcvt_f32_u32(v2)), scale)); }
template <typename T>
inline T recipWrapQ(const T &v2, const float scale)
{
return internal::vcombine(internal::vmovn(recipWrapQ(internal::vmovl(internal::vget_low(v2)), scale)),
internal::vmovn(recipWrapQ(internal::vmovl(internal::vget_high(v2)), scale))
);
}
template <>
inline int32x4_t recipWrapQ<int32x4_t>(const int32x4_t &v2, const float scale)
{ return vcvtq_s32_f32(vmulq_n_f32(internal::vrecpq_f32(vcvtq_f32_s32(v2)), scale)); }
template <>
inline uint32x4_t recipWrapQ<uint32x4_t>(const uint32x4_t &v2, const float scale)
{ return vcvtq_u32_f32(vmulq_n_f32(internal::vrecpq_f32(vcvtq_f32_u32(v2)), scale)); }
template <typename T>
inline T recipWrap(const T &v2, const float scale)
{
return internal::vmovn(recipWrapQ(internal::vmovl(v2), scale));
}
template <>
inline int32x2_t recipWrap<int32x2_t>(const int32x2_t &v2, const float scale)
{ return vcvt_s32_f32(vmul_n_f32(internal::vrecp_f32(vcvt_f32_s32(v2)), scale)); }
template <>
inline uint32x2_t recipWrap<uint32x2_t>(const uint32x2_t &v2, const float scale)
{ return vcvt_u32_f32(vmul_n_f32(internal::vrecp_f32(vcvt_f32_u32(v2)), scale)); }
#endif
template <typename T>
void recip(const Size2D &size,
const T * src1Base, ptrdiff_t src1Stride,
T * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
typedef typename internal::VecTraits<T>::vec128 vec128;
typedef typename internal::VecTraits<T>::vec64 vec64;
if (scale == 0.0f ||
(std::numeric_limits<T>::is_integer &&
scale < 1.0f &&
scale > -1.0f))
{
for (size_t y = 0; y < size.height; ++y)
{
T * dst = internal::getRowPtr(dstBase, dstStride, y);
std::memset(dst, 0, sizeof(T) * size.width);
}
return;
}
const size_t step128 = 16 / sizeof(T);
size_t roiw128 = size.width >= (step128 - 1) ? size.width - step128 + 1 : 0;
const size_t step64 = 8 / sizeof(T);
size_t roiw64 = size.width >= (step64 - 1) ? size.width - step64 + 1 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const T * src1 = internal::getRowPtr(src1Base, src1Stride, i);
T * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (cpolicy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw128; j += step128)
{
internal::prefetch(src1 + j);
vec128 v_src1 = internal::vld1q(src1 + j);
vec128 v_mask = vtstq(v_src1,v_src1);
internal::vst1q(dst + j, internal::vandq(v_mask, recipSaturateQ(v_src1, scale)));
}
for (; j < roiw64; j += step64)
{
vec64 v_src1 = internal::vld1(src1 + j);
vec64 v_mask = vtst(v_src1,v_src1);
internal::vst1(dst + j, internal::vand(v_mask, recipSaturate(v_src1, scale)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? internal::saturate_cast<T>(scale / src1[j]) : 0;
}
}
else // CONVERT_POLICY_WRAP
{
for (; j < roiw128; j += step128)
{
internal::prefetch(src1 + j);
vec128 v_src1 = internal::vld1q(src1 + j);
vec128 v_mask = vtstq(v_src1,v_src1);
internal::vst1q(dst + j, internal::vandq(v_mask, recipWrapQ(v_src1, scale)));
}
for (; j < roiw64; j += step64)
{
vec64 v_src1 = internal::vld1(src1 + j);
vec64 v_mask = vtst(v_src1,v_src1);
internal::vst1(dst + j, internal::vand(v_mask, recipWrap(v_src1, scale)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? (T)((s32)trunc(scale / src1[j])) : 0;
}
}
}
#else
(void)size;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)cpolicy;
(void)scale;
#endif
}
}
void div(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
u8 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
div<u8>(size, src0Base, src0Stride, src1Base, src1Stride, dstBase, dstStride, scale, cpolicy);
}
void div(const Size2D &size,
const s8 * src0Base, ptrdiff_t src0Stride,
const s8 * src1Base, ptrdiff_t src1Stride,
s8 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
div<s8>(size, src0Base, src0Stride, src1Base, src1Stride, dstBase, dstStride, scale, cpolicy);
}
void div(const Size2D &size,
const u16 * src0Base, ptrdiff_t src0Stride,
const u16 * src1Base, ptrdiff_t src1Stride,
u16 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
div<u16>(size, src0Base, src0Stride, src1Base, src1Stride, dstBase, dstStride, scale, cpolicy);
}
void div(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
div<s16>(size, src0Base, src0Stride, src1Base, src1Stride, dstBase, dstStride, scale, cpolicy);
}
void div(const Size2D &size,
const s32 * src0Base, ptrdiff_t src0Stride,
const s32 * src1Base, ptrdiff_t src1Stride,
s32 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
div<s32>(size, src0Base, src0Stride, src1Base, src1Stride, dstBase, dstStride, scale, cpolicy);
}
void div(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 * dstBase, ptrdiff_t dstStride,
f32 scale)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (scale == 0.0f)
{
for (size_t y = 0; y < size.height; ++y)
{
f32 * dst = internal::getRowPtr(dstBase, dstStride, y);
std::memset(dst, 0, sizeof(f32) * size.width);
}
return;
}
float32x4_t v_zero = vdupq_n_f32(0.0f);
size_t roiw128 = size.width >= 3 ? size.width - 3 : 0;
size_t roiw64 = size.width >= 1 ? size.width - 1 : 0;
if (std::fabs(scale - 1.0f) < FLT_EPSILON)
{
for (size_t i = 0; i < size.height; ++i)
{
const f32 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const f32 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw128; j += 4)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
float32x4_t v_src0 = vld1q_f32(src0 + j);
float32x4_t v_src1 = vld1q_f32(src1 + j);
uint32x4_t v_mask = vceqq_f32(v_src1,v_zero);
vst1q_f32(dst + j, vreinterpretq_f32_u32(vbicq_u32(
vreinterpretq_u32_f32(vmulq_f32(v_src0, internal::vrecpq_f32(v_src1))), v_mask)));
}
for (; j < roiw64; j += 2)
{
float32x2_t v_src0 = vld1_f32(src0 + j);
float32x2_t v_src1 = vld1_f32(src1 + j);
uint32x2_t v_mask = vceq_f32(v_src1,vget_low_f32(v_zero));
vst1_f32(dst + j, vreinterpret_f32_u32(vbic_u32(
vreinterpret_u32_f32(vmul_f32(v_src0, internal::vrecp_f32(v_src1))), v_mask)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? src0[j] / src1[j] : 0.0f;
}
}
}
else
{
for (size_t i = 0; i < size.height; ++i)
{
const f32 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const f32 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw128; j += 4)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
float32x4_t v_src0 = vld1q_f32(src0 + j);
float32x4_t v_src1 = vld1q_f32(src1 + j);
uint32x4_t v_mask = vceqq_f32(v_src1,v_zero);
vst1q_f32(dst + j, vreinterpretq_f32_u32(vbicq_u32(
vreinterpretq_u32_f32(vmulq_f32(vmulq_n_f32(v_src0, scale),
internal::vrecpq_f32(v_src1))), v_mask)));
}
for (; j < roiw64; j += 2)
{
float32x2_t v_src0 = vld1_f32(src0 + j);
float32x2_t v_src1 = vld1_f32(src1 + j);
uint32x2_t v_mask = vceq_f32(v_src1,vget_low_f32(v_zero));
vst1_f32(dst + j, vreinterpret_f32_u32(vbic_u32(
vreinterpret_u32_f32(vmul_f32(vmul_n_f32(v_src0, scale),
internal::vrecp_f32(v_src1))), v_mask)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? src0[j] * scale / src1[j] : 0.0f;
}
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)scale;
#endif
}
void reciprocal(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
recip<u8>(size, srcBase, srcStride, dstBase, dstStride, scale, cpolicy);
}
void reciprocal(const Size2D &size,
const s8 * srcBase, ptrdiff_t srcStride,
s8 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
recip<s8>(size, srcBase, srcStride, dstBase, dstStride, scale, cpolicy);
}
void reciprocal(const Size2D &size,
const u16 * srcBase, ptrdiff_t srcStride,
u16 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
recip<u16>(size, srcBase, srcStride, dstBase, dstStride, scale, cpolicy);
}
void reciprocal(const Size2D &size,
const s16 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
recip<s16>(size, srcBase, srcStride, dstBase, dstStride, scale, cpolicy);
}
void reciprocal(const Size2D &size,
const s32 * srcBase, ptrdiff_t srcStride,
s32 * dstBase, ptrdiff_t dstStride,
f32 scale,
CONVERT_POLICY cpolicy)
{
recip<s32>(size, srcBase, srcStride, dstBase, dstStride, scale, cpolicy);
}
void reciprocal(const Size2D &size,
const f32 * srcBase, ptrdiff_t srcStride,
f32 * dstBase, ptrdiff_t dstStride,
f32 scale)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (scale == 0.0f)
{
for (size_t y = 0; y < size.height; ++y)
{
f32 * dst = internal::getRowPtr(dstBase, dstStride, y);
std::memset(dst, 0, sizeof(f32) * size.width);
}
return;
}
float32x4_t v_zero = vdupq_n_f32(0.0f);
size_t roiw128 = size.width >= 3 ? size.width - 3 : 0;
size_t roiw64 = size.width >= 1 ? size.width - 1 : 0;
if (std::fabs(scale - 1.0f) < FLT_EPSILON)
{
for (size_t i = 0; i < size.height; ++i)
{
const f32 * src1 = internal::getRowPtr(srcBase, srcStride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw128; j += 4)
{
internal::prefetch(src1 + j);
float32x4_t v_src1 = vld1q_f32(src1 + j);
uint32x4_t v_mask = vceqq_f32(v_src1,v_zero);
vst1q_f32(dst + j, vreinterpretq_f32_u32(vbicq_u32(
vreinterpretq_u32_f32(internal::vrecpq_f32(v_src1)), v_mask)));
}
for (; j < roiw64; j += 2)
{
float32x2_t v_src1 = vld1_f32(src1 + j);
uint32x2_t v_mask = vceq_f32(v_src1,vget_low_f32(v_zero));
vst1_f32(dst + j, vreinterpret_f32_u32(vbic_u32(
vreinterpret_u32_f32(internal::vrecp_f32(v_src1)), v_mask)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? 1.0f / src1[j] : 0;
}
}
}
else
{
for (size_t i = 0; i < size.height; ++i)
{
const f32 * src1 = internal::getRowPtr(srcBase, srcStride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw128; j += 4)
{
internal::prefetch(src1 + j);
float32x4_t v_src1 = vld1q_f32(src1 + j);
uint32x4_t v_mask = vceqq_f32(v_src1,v_zero);
vst1q_f32(dst + j, vreinterpretq_f32_u32(vbicq_u32(
vreinterpretq_u32_f32(vmulq_n_f32(internal::vrecpq_f32(v_src1),
scale)),v_mask)));
}
for (; j < roiw64; j += 2)
{
float32x2_t v_src1 = vld1_f32(src1 + j);
uint32x2_t v_mask = vceq_f32(v_src1,vget_low_f32(v_zero));
vst1_f32(dst + j, vreinterpret_f32_u32(vbic_u32(
vreinterpret_u32_f32(vmul_n_f32(internal::vrecp_f32(v_src1),
scale)), v_mask)));
}
for (; j < size.width; j++)
{
dst[j] = src1[j] ? scale / src1[j] : 0;
}
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)scale;
#endif
}
} // namespace CAROTENE_NS

260
3rdparty/carotene/src/dot_product.cpp vendored Normal file
View File

@@ -0,0 +1,260 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
namespace CAROTENE_NS {
f64 dotProduct(const Size2D &_size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (src0Stride == src1Stride &&
src0Stride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
// It is possible to accumulate up to 66051 uchar multiplication results in uint32 without overflow
// We process 16 elements and accumulate two new elements per step. So we could handle 66051/2*16 elements
#define DOT_UINT_BLOCKSIZE 66050*8
f64 result = 0.0;
for (size_t row = 0; row < size.height; ++row)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, row);
const u8 * src1 = internal::getRowPtr(src1Base, src1Stride, row);
size_t i = 0;
uint64x2_t ws = vmovq_n_u64(0);
while(i + 16 <= size.width)
{
size_t lim = std::min(i + DOT_UINT_BLOCKSIZE, size.width) - 16;
uint32x4_t s1 = vmovq_n_u32(0);
uint32x4_t s2 = vmovq_n_u32(0);
for (; i <= lim; i += 16)
{
internal::prefetch(src0 + i);
internal::prefetch(src1 + i);
uint8x16_t vs1 = vld1q_u8(src0 + i);
uint8x16_t vs2 = vld1q_u8(src1 + i);
uint16x8_t vdot1 = vmull_u8(vget_low_u8(vs1), vget_low_u8(vs2));
uint16x8_t vdot2 = vmull_u8(vget_high_u8(vs1), vget_high_u8(vs2));
s1 = vpadalq_u16(s1, vdot1);
s2 = vpadalq_u16(s2, vdot2);
}
ws = vpadalq_u32(ws, s1);
ws = vpadalq_u32(ws, s2);
}
if(i + 8 <= size.width)
{
uint8x8_t vs1 = vld1_u8(src0 + i);
uint8x8_t vs2 = vld1_u8(src1 + i);
ws = vpadalq_u32(ws, vpaddlq_u16(vmull_u8(vs1, vs2)));
i += 8;
}
result += (double)vget_lane_u64(vadd_u64(vget_low_u64(ws), vget_high_u64(ws)), 0);
for (; i < size.width; ++i)
result += s32(src0[i]) * s32(src1[i]);
}
return result;
#else
(void)_size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
return 0;
#endif
}
f64 dotProduct(const Size2D &_size,
const s8 * src0Base, ptrdiff_t src0Stride,
const s8 * src1Base, ptrdiff_t src1Stride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (src0Stride == src1Stride &&
src0Stride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
// It is possible to accumulate up to 131071 schar multiplication results in sint32 without overflow
// We process 16 elements and accumulate two new elements per step. So we could handle 131071/2*16 elements
#define DOT_INT_BLOCKSIZE 131070*8
f64 result = 0.0;
for (size_t row = 0; row < size.height; ++row)
{
const s8 * src0 = internal::getRowPtr(src0Base, src0Stride, row);
const s8 * src1 = internal::getRowPtr(src1Base, src1Stride, row);
size_t i = 0;
int64x2_t ws = vmovq_n_s64(0);
while(i + 16 <= size.width)
{
size_t lim = std::min(i + DOT_UINT_BLOCKSIZE, size.width) - 16;
int32x4_t s1 = vmovq_n_s32(0);
int32x4_t s2 = vmovq_n_s32(0);
for (; i <= lim; i += 16)
{
internal::prefetch(src0 + i);
internal::prefetch(src1 + i);
int8x16_t vs1 = vld1q_s8(src0 + i);
int8x16_t vs2 = vld1q_s8(src1 + i);
int16x8_t vdot1 = vmull_s8(vget_low_s8(vs1), vget_low_s8(vs2));
int16x8_t vdot2 = vmull_s8(vget_high_s8(vs1), vget_high_s8(vs2));
s1 = vpadalq_s16(s1, vdot1);
s2 = vpadalq_s16(s2, vdot2);
}
ws = vpadalq_s32(ws, s1);
ws = vpadalq_s32(ws, s2);
}
if(i + 8 <= size.width)
{
int8x8_t vs1 = vld1_s8(src0 + i);
int8x8_t vs2 = vld1_s8(src1 + i);
ws = vpadalq_s32(ws, vpaddlq_s16(vmull_s8(vs1, vs2)));
i += 8;
}
result += (double)vget_lane_s64(vadd_s64(vget_low_s64(ws), vget_high_s64(ws)), 0);
for (; i < size.width; ++i)
result += s32(src0[i]) * s32(src1[i]);
}
return result;
#else
(void)_size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
return 0;
#endif
}
f64 dotProduct(const Size2D &_size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
Size2D size(_size);
if (src0Stride == src1Stride &&
src0Stride == (ptrdiff_t)(size.width * sizeof(f32)))
{
size.width *= size.height;
size.height = 1;
}
#define DOT_FLOAT_BLOCKSIZE (1 << 13)
f64 result = 0.0;
for (size_t row = 0; row < size.height; ++row)
{
const f32 * src0 = internal::getRowPtr(src0Base, src0Stride, row);
const f32 * src1 = internal::getRowPtr(src1Base, src1Stride, row);
size_t i = 0;
while(i + 4 <= size.width)
{
size_t lim = std::min(i + DOT_FLOAT_BLOCKSIZE, size.width) - 4;
float32x4_t v_sum = vdupq_n_f32(0.0f);
for( ; i <= lim; i += 4 )
{
internal::prefetch(src0 + i);
internal::prefetch(src1 + i);
v_sum = vmlaq_f32(v_sum, vld1q_f32(src0 + i), vld1q_f32(src1 + i));
}
float32x2_t vres = vpadd_f32(vget_low_f32(v_sum),vget_high_f32(v_sum));
result += vget_lane_f32(vres, 0) + vget_lane_f32(vres, 1);
}
if(i + 2 <= size.width)
{
float32x2_t vres = vmul_f32(vld1_f32(src0 + i), vld1_f32(src1 + i));
result += vget_lane_f32(vres, 0) + vget_lane_f32(vres, 1);
i += 2;
}
for (; i < size.width; ++i)
result += src0[i] * src1[i];
}
return result;
#else
(void)_size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
return 0;
#endif
}
} // namespace CAROTENE_NS

428
3rdparty/carotene/src/fast.cpp vendored Normal file
View File

@@ -0,0 +1,428 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
/* This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten.
Below is the original copyright and the references */
/*
Copyright (c) 2006, 2008 Edward Rosten
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
*Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
*Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
*Neither the name of the University of Cambridge nor the names of
its contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
The references are:
* Machine learning for high-speed corner detection,
E. Rosten and T. Drummond, ECCV 2006
* Faster and better: A machine learning approach to corner detection
E. Rosten, R. Porter and T. Drummond, PAMI, 2009
*/
#include "common.hpp"
#include <vector>
#include <cstring>
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace
{
void makeOffsets(ptrdiff_t pixel[], ptrdiff_t row_stride)
{
pixel[0] = 0 + row_stride * 3;
pixel[1] = 1 + row_stride * 3;
pixel[2] = 2 + row_stride * 2;
pixel[3] = 3 + row_stride * 1;
pixel[4] = 3 + row_stride * 0;
pixel[5] = 3 + row_stride * -1;
pixel[6] = 2 + row_stride * -2;
pixel[7] = 1 + row_stride * -3;
pixel[8] = 0 + row_stride * -3;
pixel[9] = -1 + row_stride * -3;
pixel[10] = -2 + row_stride * -2;
pixel[11] = -3 + row_stride * -1;
pixel[12] = -3 + row_stride * 0;
pixel[13] = -3 + row_stride * 1;
pixel[14] = -2 + row_stride * 2;
pixel[15] = -1 + row_stride * 3;
}
u8 cornerScore(const u8* ptr, const ptrdiff_t pixel[])
{
const s32 K = 8, N = 16 + K + 1;
s32 k, v = ptr[0];
s16 d[(N + 7) & ~7];
for( k = 0; k < N; k++ )
d[k] = (s16)(v - ptr[pixel[k]]);
int16x8_t q0 = vdupq_n_s16((s16)(-1000));
int16x8_t q1 = vdupq_n_s16((s16)(1000));
int16x8_t d0_7 = vld1q_s16(d + 0);
int16x8_t d8_15 = vld1q_s16(d + 8);
int16x8_t d16_23 = vld1q_s16(d + 16);
int16x8_t d24 = vld1q_s16(d + 24);
//k == 0
int16x8_t v0k0 = vextq_s16(d0_7, d8_15, 1);
int16x8_t v1k0 = vextq_s16(d0_7, d8_15, 2);
int16x8_t ak0 = vminq_s16(v0k0, v1k0);
int16x8_t bk0 = vmaxq_s16(v0k0, v1k0);
v0k0 = vextq_s16(d0_7, d8_15, 3);
ak0 = vminq_s16(ak0, v0k0);
bk0 = vmaxq_s16(bk0, v0k0);
v1k0 = vextq_s16(d0_7, d8_15, 4);
ak0 = vminq_s16(ak0, v1k0);
bk0 = vmaxq_s16(bk0, v1k0);
v0k0 = vextq_s16(d0_7, d8_15, 5);
ak0 = vminq_s16(ak0, v0k0);
bk0 = vmaxq_s16(bk0, v0k0);
v1k0 = vextq_s16(d0_7, d8_15, 6);
ak0 = vminq_s16(ak0, v1k0);
bk0 = vmaxq_s16(bk0, v1k0);
v0k0 = vextq_s16(d0_7, d8_15, 7);
ak0 = vminq_s16(ak0, v0k0);
bk0 = vmaxq_s16(bk0, v0k0);
ak0 = vminq_s16(ak0, d8_15);
bk0 = vmaxq_s16(bk0, d8_15);
q0 = vmaxq_s16(q0, vminq_s16(ak0, d0_7));
q1 = vminq_s16(q1, vmaxq_s16(bk0, d0_7));
v1k0 = vextq_s16(d8_15, d16_23, 1);
q0 = vmaxq_s16(q0, vminq_s16(ak0, v1k0));
q1 = vminq_s16(q1, vmaxq_s16(bk0, v1k0));
//k == 8
int16x8_t v0k8 = v1k0;
int16x8_t v1k8 = vextq_s16(d8_15, d16_23, 2);
int16x8_t ak8 = vminq_s16(v0k8, v1k8);
int16x8_t bk8 = vmaxq_s16(v0k8, v1k8);
v0k8 = vextq_s16(d8_15, d16_23, 3);
ak8 = vminq_s16(ak8, v0k8);
bk8 = vmaxq_s16(bk8, v0k8);
v1k8 = vextq_s16(d8_15, d16_23, 4);
ak8 = vminq_s16(ak8, v1k8);
bk8 = vmaxq_s16(bk8, v1k8);
v0k8 = vextq_s16(d8_15, d16_23, 5);
ak8 = vminq_s16(ak8, v0k8);
bk8 = vmaxq_s16(bk8, v0k8);
v1k8 = vextq_s16(d8_15, d16_23, 6);
ak8 = vminq_s16(ak8, v1k8);
bk8 = vmaxq_s16(bk8, v1k8);
v0k8 = vextq_s16(d8_15, d16_23, 7);
ak8 = vminq_s16(ak8, v0k8);
bk8 = vmaxq_s16(bk8, v0k8);
ak8 = vminq_s16(ak8, d16_23);
bk8 = vmaxq_s16(bk8, d16_23);
q0 = vmaxq_s16(q0, vminq_s16(ak8, d8_15));
q1 = vminq_s16(q1, vmaxq_s16(bk8, d8_15));
v1k8 = vextq_s16(d16_23, d24, 1);
q0 = vmaxq_s16(q0, vminq_s16(ak8, v1k8));
q1 = vminq_s16(q1, vmaxq_s16(bk8, v1k8));
//fin
int16x8_t q = vmaxq_s16(q0, vsubq_s16(vmovq_n_s16(0), q1));
int16x4_t q2 = vmax_s16(vget_low_s16(q), vget_high_s16(q));
int32x4_t q2w = vmovl_s16(q2);
int32x2_t q4 = vmax_s32(vget_low_s32(q2w), vget_high_s32(q2w));
int32x2_t q8 = vmax_s32(q4, vreinterpret_s32_s64(vshr_n_s64(vreinterpret_s64_s32(q4), 32)));
return (u8)(vget_lane_s32(q8, 0) - 1);
}
} //namespace
#endif
void FAST(const Size2D &size,
u8 *srcBase, ptrdiff_t srcStride,
KeypointStore *keypoints,
u8 threshold, bool nonmax_suppression)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
//keypoints.clear();
const s32 K = 8, N = 16 + K + 1;
ptrdiff_t i, j, k, pixel[N];
makeOffsets(pixel, srcStride);
for(k = 16; k < N; k++)
pixel[k] = pixel[k - 16];
uint8x16_t delta = vdupq_n_u8(128);
uint8x16_t t = vdupq_n_u8(threshold);
uint8x16_t K16 = vdupq_n_u8((u8)K);
u8 threshold_tab[512];
for( i = -255; i <= 255; i++ )
threshold_tab[i+255] = (u8)(i < -threshold ? 1 : i > threshold ? 2 : 0);
std::vector<u8> _buf((size.width+16)*3*(sizeof(ptrdiff_t) + sizeof(u8)) + 128);
u8* buf[3];
buf[0] = &_buf[0]; buf[1] = buf[0] + size.width; buf[2] = buf[1] + size.width;
ptrdiff_t* cpbuf[3];
cpbuf[0] = (ptrdiff_t*)internal::alignPtr(buf[2] + size.width, sizeof(ptrdiff_t)) + 1;
cpbuf[1] = cpbuf[0] + size.width + 1;
cpbuf[2] = cpbuf[1] + size.width + 1;
memset(buf[0], 0, size.width*3);
for(i = 3; i < (ptrdiff_t)size.height-2; i++)
{
const u8* ptr = internal::getRowPtr(srcBase, srcStride, i) + 3;
u8* curr = buf[(i - 3)%3];
ptrdiff_t* cornerpos = cpbuf[(i - 3)%3];
memset(curr, 0, size.width);
ptrdiff_t ncorners = 0;
if( i < (ptrdiff_t)size.height - 3 )
{
j = 3;
for(; j < (ptrdiff_t)size.width - 16 - 3; j += 16, ptr += 16)
{
internal::prefetch(ptr);
internal::prefetch(ptr + pixel[0]);
internal::prefetch(ptr + pixel[2]);
uint8x16_t v0 = vld1q_u8(ptr);
int8x16_t v1 = vreinterpretq_s8_u8(veorq_u8(vqsubq_u8(v0, t), delta));
int8x16_t v2 = vreinterpretq_s8_u8(veorq_u8(vqaddq_u8(v0, t), delta));
int8x16_t x0 = vreinterpretq_s8_u8(vsubq_u8(vld1q_u8(ptr + pixel[0]), delta));
int8x16_t x1 = vreinterpretq_s8_u8(vsubq_u8(vld1q_u8(ptr + pixel[4]), delta));
int8x16_t x2 = vreinterpretq_s8_u8(vsubq_u8(vld1q_u8(ptr + pixel[8]), delta));
int8x16_t x3 = vreinterpretq_s8_u8(vsubq_u8(vld1q_u8(ptr + pixel[12]), delta));
uint8x16_t m0 = vandq_u8(vcgtq_s8(x0, v2), vcgtq_s8(x1, v2));
uint8x16_t m1 = vandq_u8(vcgtq_s8(v1, x0), vcgtq_s8(v1, x1));
m0 = vorrq_u8(m0, vandq_u8(vcgtq_s8(x1, v2), vcgtq_s8(x2, v2)));
m1 = vorrq_u8(m1, vandq_u8(vcgtq_s8(v1, x1), vcgtq_s8(v1, x2)));
m0 = vorrq_u8(m0, vandq_u8(vcgtq_s8(x2, v2), vcgtq_s8(x3, v2)));
m1 = vorrq_u8(m1, vandq_u8(vcgtq_s8(v1, x2), vcgtq_s8(v1, x3)));
m0 = vorrq_u8(m0, vandq_u8(vcgtq_s8(x3, v2), vcgtq_s8(x0, v2)));
m1 = vorrq_u8(m1, vandq_u8(vcgtq_s8(v1, x3), vcgtq_s8(v1, x0)));
m0 = vorrq_u8(m0, m1);
u64 mask[2];
vst1q_u64(mask, vreinterpretq_u64_u8(m0));
if( mask[0] == 0 )
{
if (mask[1] != 0)
{
j -= 8;
ptr -= 8;
}
continue;
}
uint8x16_t c0 = vmovq_n_u8(0);
uint8x16_t c1 = vmovq_n_u8(0);
uint8x16_t max0 = vmovq_n_u8(0);
uint8x16_t max1 = vmovq_n_u8(0);
for( k = 0; k < N; k++ )
{
int8x16_t x = vreinterpretq_s8_u8(veorq_u8(vld1q_u8(ptr + pixel[k]), delta));
m0 = vcgtq_s8(x, v2);
m1 = vcgtq_s8(v1, x);
c0 = vandq_u8(vsubq_u8(c0, m0), m0);
c1 = vandq_u8(vsubq_u8(c1, m1), m1);
max0 = vmaxq_u8(max0, c0);
max1 = vmaxq_u8(max1, c1);
}
max0 = vmaxq_u8(max0, max1);
u8 m[16];
vst1q_u8(m, vcgtq_u8(max0, K16));
for( k = 0; k < 16; ++k )
if(m[k])
{
cornerpos[ncorners++] = j+k;
if(nonmax_suppression)
curr[j+k] = cornerScore(ptr+k, pixel);
}
}
for( ; j < (s32)size.width - 3; j++, ptr++ )
{
s32 v = ptr[0];
const u8* tab = &threshold_tab[0] - v + 255;
s32 d = tab[ptr[pixel[0]]] | tab[ptr[pixel[8]]];
if( d == 0 )
continue;
d &= tab[ptr[pixel[2]]] | tab[ptr[pixel[10]]];
d &= tab[ptr[pixel[4]]] | tab[ptr[pixel[12]]];
d &= tab[ptr[pixel[6]]] | tab[ptr[pixel[14]]];
if( d == 0 )
continue;
d &= tab[ptr[pixel[1]]] | tab[ptr[pixel[9]]];
d &= tab[ptr[pixel[3]]] | tab[ptr[pixel[11]]];
d &= tab[ptr[pixel[5]]] | tab[ptr[pixel[13]]];
d &= tab[ptr[pixel[7]]] | tab[ptr[pixel[15]]];
if( d & 1 )
{
s32 vt = v - threshold, count = 0;
for( k = 0; k < N; k++ )
{
s32 x = ptr[pixel[k]];
if(x < vt)
{
if( ++count > K )
{
cornerpos[ncorners++] = j;
if(nonmax_suppression)
curr[j] = cornerScore(ptr, pixel);
break;
}
}
else
count = 0;
}
}
if( d & 2 )
{
s32 vt = v + threshold, count = 0;
for( k = 0; k < N; k++ )
{
s32 x = ptr[pixel[k]];
if(x > vt)
{
if( ++count > K )
{
cornerpos[ncorners++] = j;
if(nonmax_suppression)
curr[j] = cornerScore(ptr, pixel);
break;
}
}
else
count = 0;
}
}
}
}
cornerpos[-1] = ncorners;
if( i == 3 )
continue;
const u8* prev = buf[(i - 4 + 3)%3];
const u8* pprev = buf[(i - 5 + 3)%3];
cornerpos = cpbuf[(i - 4 + 3)%3];
ncorners = cornerpos[-1];
for( k = 0; k < ncorners; k++ )
{
j = cornerpos[k];
s32 score = prev[j];
if( !nonmax_suppression ||
(score > prev[j+1] && score > prev[j-1] &&
score > pprev[j-1] && score > pprev[j] && score > pprev[j+1] &&
score > curr[j-1] && score > curr[j] && score > curr[j+1]) )
{
keypoints->push((f32)j, (f32)(i-1), 7.f, -1, (f32)score);
}
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)keypoints;
(void)threshold;
(void)nonmax_suppression;
#endif
}
} // namespace CAROTENE_NS

442
3rdparty/carotene/src/fill_minmaxloc.cpp vendored Normal file
View File

@@ -0,0 +1,442 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <typename T>
void process(const T * src, size_t j0, size_t j1, size_t i,
T minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
T maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
for (size_t j = j0; j < j1; ++j)
{
T val = src[j];
if (val == maxVal)
{
if (maxLocCount < maxLocCapacity)
{
maxLocPtr[maxLocCount] = j;
maxLocPtr[maxLocCount + 1] = i;
}
maxLocCount += 2;
}
if (val == minVal)
{
if (minLocCount < minLocCapacity)
{
minLocPtr[minLocCount] = j;
minLocPtr[minLocCount + 1] = i;
}
minLocCount += 2;
}
}
}
} // namespace
#endif
void fillMinMaxLocs(const Size2D & size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
u8 maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
uint8x16_t v_maxval16 = vdupq_n_u8(maxVal), v_minval16 = vdupq_n_u8(minVal);
uint8x8_t v_maxval8 = vdup_n_u8(maxVal), v_minval8 = vdup_n_u8(minVal);
u64 mask[2] = { 0ul };
minLocCapacity <<= 1;
maxLocCapacity <<= 1;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0;
for ( ; j < roiw16; j += 16)
{
internal::prefetch(src + j);
uint8x16_t v_src = vld1q_u8(src + j);
uint8x16_t v_maxmask = vceqq_u8(v_src, v_maxval16);
uint8x16_t v_minmask = vceqq_u8(v_src, v_minval16);
uint8x16_t v_mask = vorrq_u8(v_maxmask, v_minmask);
vst1q_u8((u8 *)&mask[0], v_mask);
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
if (mask[1])
process(src, j + 8, j + 16, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
for ( ; j < roiw8; j += 8)
{
uint8x8_t v_src = vld1_u8(src + j);
uint8x8_t v_maxmask = vceq_u8(v_src, v_maxval8);
uint8x8_t v_minmask = vceq_u8(v_src, v_minval8);
uint8x8_t v_mask = vorr_u8(v_maxmask, v_minmask);
vst1_u8((u8 *)&mask[0], v_mask);
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
process(src, j, size.width, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
minLocCount >>= 1;
maxLocCount >>= 1;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)minVal;
(void)minLocPtr;
(void)minLocCount;
(void)minLocCapacity;
(void)maxVal;
(void)maxLocPtr;
(void)maxLocCount;
(void)maxLocCapacity;
#endif
}
void fillMinMaxLocs(const Size2D & size,
const u16 * srcBase, ptrdiff_t srcStride,
u16 minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
u16 maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
uint16x8_t v_maxval8 = vdupq_n_u16(maxVal),
v_minval8 = vdupq_n_u16(minVal);
u64 mask[2] = { 0ul };
minLocCapacity <<= 1;
maxLocCapacity <<= 1;
for (size_t i = 0; i < size.height; ++i)
{
const u16 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0;
for ( ; j < roiw16; j += 16)
{
internal::prefetch(src + j);
uint16x8_t v_src0 = vld1q_u16(src + j), v_src1 = vld1q_u16(src + j + 8);
uint16x8_t v_mask0 = vorrq_u16(vceqq_u16(v_src0, v_maxval8), vceqq_u16(v_src0, v_minval8));
uint16x8_t v_mask1 = vorrq_u16(vceqq_u16(v_src1, v_maxval8), vceqq_u16(v_src1, v_minval8));
vst1q_u8((u8 *)&mask[0], vcombine_u8(vmovn_u16(v_mask0), vmovn_u16(v_mask1)));
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
if (mask[1])
process(src, j + 8, j + 16, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
for ( ; j < roiw8; j += 8)
{
internal::prefetch(src + j);
uint16x8_t v_src = vld1q_u16(src + j);
uint16x8_t v_maxmask = vceqq_u16(v_src, v_maxval8);
uint16x8_t v_minmask = vceqq_u16(v_src, v_minval8);
uint16x8_t v_mask = vorrq_u16(v_maxmask, v_minmask);
vst1_u8((u8 *)&mask[0], vmovn_u16(v_mask));
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
process(src, j, size.width, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
minLocCount >>= 1;
maxLocCount >>= 1;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)minVal;
(void)minLocPtr;
(void)minLocCount;
(void)minLocCapacity;
(void)maxVal;
(void)maxLocPtr;
(void)maxLocCount;
(void)maxLocCapacity;
#endif
}
void fillMinMaxLocs(const Size2D & size,
const s16 * srcBase, ptrdiff_t srcStride,
s16 minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
s16 maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
int16x8_t v_maxval8 = vdupq_n_s16(maxVal),
v_minval8 = vdupq_n_s16(minVal);
u64 mask[2] = { 0ul };
minLocCapacity <<= 1;
maxLocCapacity <<= 1;
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0;
for ( ; j < roiw16; j += 16)
{
internal::prefetch(src + j);
int16x8_t v_src0 = vld1q_s16(src + j), v_src1 = vld1q_s16(src + j + 8);
uint16x8_t v_mask0 = vorrq_u16(vceqq_s16(v_src0, v_maxval8), vceqq_s16(v_src0, v_minval8));
uint16x8_t v_mask1 = vorrq_u16(vceqq_s16(v_src1, v_maxval8), vceqq_s16(v_src1, v_minval8));
vst1q_u8((u8 *)&mask[0], vcombine_u8(vmovn_u16(v_mask0), vmovn_u16(v_mask1)));
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
if (mask[1])
process(src, j + 8, j + 16, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
for ( ; j < roiw8; j += 8)
{
internal::prefetch(src + j);
int16x8_t v_src = vld1q_s16(src + j);
uint16x8_t v_maxmask = vceqq_s16(v_src, v_maxval8);
uint16x8_t v_minmask = vceqq_s16(v_src, v_minval8);
uint16x8_t v_mask = vorrq_u16(v_maxmask, v_minmask);
vst1_u8((u8 *)&mask[0], vmovn_u16(v_mask));
if (mask[0])
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
process(src, j, size.width, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
minLocCount >>= 1;
maxLocCount >>= 1;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)minVal;
(void)minLocPtr;
(void)minLocCount;
(void)minLocCapacity;
(void)maxVal;
(void)maxLocPtr;
(void)maxLocCount;
(void)maxLocCapacity;
#endif
}
void fillMinMaxLocs(const Size2D & size,
const s32 * srcBase, ptrdiff_t srcStride,
s32 minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
s32 maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
int32x4_t v_maxval4 = vdupq_n_s32(maxVal),
v_minval4 = vdupq_n_s32(minVal);
u64 mask = 0ul;
minLocCapacity <<= 1;
maxLocCapacity <<= 1;
for (size_t i = 0; i < size.height; ++i)
{
const s32 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0;
for ( ; j < roiw8; j += 8)
{
internal::prefetch(src + j);
int32x4_t v_src0 = vld1q_s32(src + j), v_src1 = vld1q_s32(src + j + 4);
uint32x4_t v_mask0 = vorrq_u32(vceqq_s32(v_src0, v_maxval4), vceqq_s32(v_src0, v_minval4));
uint32x4_t v_mask1 = vorrq_u32(vceqq_s32(v_src1, v_maxval4), vceqq_s32(v_src1, v_minval4));
vst1_u8((u8 *)&mask, vmovn_u16(vcombine_u16(vmovn_u32(v_mask0), vmovn_u32(v_mask1))));
if (mask)
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
process(src, j, size.width, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
minLocCount >>= 1;
maxLocCount >>= 1;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)minVal;
(void)minLocPtr;
(void)minLocCount;
(void)minLocCapacity;
(void)maxVal;
(void)maxLocPtr;
(void)maxLocCount;
(void)maxLocCapacity;
#endif
}
void fillMinMaxLocs(const Size2D & size,
const u32 * srcBase, ptrdiff_t srcStride,
u32 minVal, size_t * minLocPtr, s32 & minLocCount, s32 minLocCapacity,
u32 maxVal, size_t * maxLocPtr, s32 & maxLocCount, s32 maxLocCapacity)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
uint32x4_t v_maxval4 = vdupq_n_u32(maxVal),
v_minval4 = vdupq_n_u32(minVal);
u64 mask = 0ul;
minLocCapacity <<= 1;
maxLocCapacity <<= 1;
for (size_t i = 0; i < size.height; ++i)
{
const u32 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0;
for ( ; j < roiw8; j += 8)
{
internal::prefetch(src + j);
uint32x4_t v_src0 = vld1q_u32(src + j), v_src1 = vld1q_u32(src + j + 4);
uint32x4_t v_mask0 = vorrq_u32(vceqq_u32(v_src0, v_maxval4), vceqq_u32(v_src0, v_minval4));
uint32x4_t v_mask1 = vorrq_u32(vceqq_u32(v_src1, v_maxval4), vceqq_u32(v_src1, v_minval4));
vst1_u8((u8 *)&mask, vmovn_u16(vcombine_u16(vmovn_u32(v_mask0), vmovn_u32(v_mask1))));
if (mask)
process(src, j, j + 8, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
process(src, j, size.width, i,
minVal, minLocPtr, minLocCount, minLocCapacity,
maxVal, maxLocPtr, maxLocCount, maxLocCapacity);
}
minLocCount >>= 1;
maxLocCount >>= 1;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)minVal;
(void)minLocPtr;
(void)minLocCount;
(void)minLocCapacity;
(void)maxVal;
(void)maxLocPtr;
(void)maxLocCount;
(void)maxLocCapacity;
#endif
}
} // namespace CAROTENE_NS

222
3rdparty/carotene/src/flip.cpp vendored Normal file
View File

@@ -0,0 +1,222 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
#include <cstring>
namespace CAROTENE_NS {
bool isFlipSupported(FLIP_MODE flipMode, u32 elemSize)
{
bool supportedElemSize = (elemSize == 1) || (elemSize == 2) || (elemSize == 3) || (elemSize == 4);
return isSupportedConfiguration() &&
((supportedElemSize && ((flipMode == FLIP_BOTH_MODE) || (flipMode == FLIP_HORIZONTAL_MODE))) ||
(flipMode == FLIP_VERTICAL_MODE));
}
#ifdef CAROTENE_NEON
namespace {
template <typename T>
void flip(const Size2D & size,
const void * srcBase, ptrdiff_t srcStride,
void * dstBase, ptrdiff_t dstStride,
FLIP_MODE flipMode)
{
using namespace internal;
typedef typename VecTraits<T>::vec128 vec128;
typedef typename VecTraits<T>::vec64 vec64;
u32 step_base = 16 / sizeof(T), step_tail = 8 / sizeof(T);
size_t roiw_base = size.width >= (step_base - 1) ? size.width - step_base + 1 : 0;
size_t roiw_tail = size.width >= (step_tail - 1) ? size.width - step_tail + 1 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const T * src = getRowPtr((const T *)srcBase, srcStride, i);
T * dst = getRowPtr((T *)dstBase, dstStride, (flipMode & FLIP_VERTICAL_MODE) != 0 ? size.height - i - 1 : i);
size_t js = 0, jd = size.width;
for (; js < roiw_base; js += step_base, jd -= step_base)
{
prefetch(src + js);
vec128 v_src = vld1q(src + js);
vec128 v_dst = vrev64q(v_src);
v_dst = vcombine(vget_high(v_dst), vget_low(v_dst));
vst1q(dst + jd - step_base, v_dst);
}
for (; js < roiw_tail; js += step_tail, jd -= step_tail)
{
vec64 v_src = vld1(src + js);
vst1(dst + jd - step_tail, vrev64(v_src));
}
for (--jd; js < size.width; ++js, --jd)
dst[jd] = src[js];
}
}
template <typename T>
void flip3(const Size2D & size,
const void * srcBase, ptrdiff_t srcStride,
void * dstBase, ptrdiff_t dstStride,
FLIP_MODE flipMode)
{
using namespace internal;
#ifndef __ANDROID__
typedef typename VecTraits<T, 3>::vec128 vec128;
#endif
typedef typename VecTraits<T, 3>::vec64 vec64;
#ifndef __ANDROID__
u32 step_base = 16 / sizeof(T), step_base3 = step_base * 3;
size_t roiw_base = size.width >= (step_base - 1) ? size.width - step_base + 1 : 0;
#endif
u32 step_tail = 8 / sizeof(T), step_tail3 = step_tail * 3;
size_t roiw_tail = size.width >= (step_tail - 1) ? size.width - step_tail + 1 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const T * src = getRowPtr((const T *)srcBase, srcStride, i);
T * dst = getRowPtr((T *)dstBase, dstStride, (flipMode & FLIP_VERTICAL_MODE) != 0 ? size.height - i - 1 : i);
size_t j = 0, js = 0, jd = size.width * 3;
#ifndef __ANDROID__
for (; j < roiw_base; j += step_base, js += step_base3, jd -= step_base3)
{
prefetch(src + js);
vec128 v_src = vld3q(src + js), v_dst;
v_src.val[0] = vrev64q(v_src.val[0]);
v_src.val[1] = vrev64q(v_src.val[1]);
v_src.val[2] = vrev64q(v_src.val[2]);
v_dst.val[0] = vcombine(vget_high(v_src.val[0]), vget_low(v_src.val[0]));
v_dst.val[1] = vcombine(vget_high(v_src.val[1]), vget_low(v_src.val[1]));
v_dst.val[2] = vcombine(vget_high(v_src.val[2]), vget_low(v_src.val[2]));
vst3q(dst + jd - step_base3, v_dst);
}
#endif // __ANDROID__
for (; j < roiw_tail; j += step_tail, js += step_tail3, jd -= step_tail3)
{
vec64 v_src = vld3(src + js), v_dst;
v_dst.val[0] = vrev64(v_src.val[0]);
v_dst.val[1] = vrev64(v_src.val[1]);
v_dst.val[2] = vrev64(v_src.val[2]);
vst3(dst + jd - step_tail3, v_dst);
}
for (jd -= 3; j < size.width; ++j, js += 3, jd -= 3)
{
dst[jd] = src[js];
dst[jd + 1] = src[js + 1];
dst[jd + 2] = src[js + 2];
}
}
}
typedef void (* flipFunc)(const Size2D &size,
const void * srcBase, ptrdiff_t srcStride,
void * dstBase, ptrdiff_t dstStride,
FLIP_MODE flipMode);
} // namespace
#endif
void flip(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
FLIP_MODE flipMode, u32 elemSize)
{
internal::assertSupportedConfiguration(isFlipSupported(flipMode, elemSize));
#ifdef CAROTENE_NEON
if (flipMode == FLIP_VERTICAL_MODE)
{
for (size_t y = 0; y < size.height; ++y)
{
const u8 * src_row = internal::getRowPtr(srcBase, srcStride, y);
u8 * dst_row = internal::getRowPtr(dstBase, dstStride, size.height - y - 1);
std::memcpy(dst_row, src_row, elemSize * size.width);
}
return;
}
flipFunc func = NULL;
if (elemSize == (u32)sizeof(u8))
func = &flip<u8>;
if (elemSize == (u32)sizeof(u16))
func = &flip<u16>;
if (elemSize == (u32)sizeof(u32))
func = &flip<u32>;
if (elemSize == (u32)sizeof(u8) * 3)
func = &flip3<u8>;
if (func == NULL)
return;
func(size,
srcBase, srcStride,
dstBase, dstStride,
flipMode);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)flipMode;
(void)elemSize;
#endif
}
} // namespace CAROTENE_NS

1059
3rdparty/carotene/src/gaussian_blur.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

195
3rdparty/carotene/src/in_range.cpp vendored Normal file
View File

@@ -0,0 +1,195 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
inline void vnst(u8* dst, uint8x16_t v1, uint8x16_t v2) { vst1q_u8(dst, v1); vst1q_u8(dst+16, v2); }
inline void vnst(u8* dst, uint16x8_t v1, uint16x8_t v2) { vst1q_u8(dst, vcombine_u8(vmovn_u16(v1), vmovn_u16(v2))); }
inline void vnst(u8* dst, uint32x4_t v1, uint32x4_t v2) { vst1_u8(dst, vmovn_u16(vcombine_u16(vmovn_u32(v1), vmovn_u32(v2)))); }
template <typename T, int elsize> struct vtail
{
static inline void inRange(const T *, const T *, const T *,
u8 *, size_t &, size_t)
{
//do nothing since there couldn't be enough data
}
};
template <typename T> struct vtail<T, 2>
{
static inline void inRange(const T * src, const T * rng1, const T * rng2,
u8 * dst, size_t &x, size_t width)
{
typedef typename internal::VecTraits<T>::vec128 vec128;
typedef typename internal::VecTraits<T>::unsign::vec128 uvec128;
//There no more than 15 elements in the tail, so we could handle 8 element vector only once
if( x + 8 < width)
{
vec128 vs = internal::vld1q( src + x);
vec128 vr1 = internal::vld1q(rng1 + x);
vec128 vr2 = internal::vld1q(rng2 + x);
uvec128 vd = internal::vandq(internal::vcgeq(vs, vr1), internal::vcgeq(vr2, vs));
internal::vst1(dst + x, internal::vmovn(vd));
x+=8;
}
}
};
template <typename T> struct vtail<T, 1>
{
static inline void inRange(const T * src, const T * rng1, const T * rng2,
u8 * dst, size_t &x, size_t width)
{
typedef typename internal::VecTraits<T>::vec128 vec128;
typedef typename internal::VecTraits<T>::unsign::vec128 uvec128;
typedef typename internal::VecTraits<T>::vec64 vec64;
typedef typename internal::VecTraits<T>::unsign::vec64 uvec64;
//There no more than 31 elements in the tail, so we could handle once 16+8 or 16 or 8 elements
if( x + 16 < width)
{
vec128 vs = internal::vld1q( src + x);
vec128 vr1 = internal::vld1q(rng1 + x);
vec128 vr2 = internal::vld1q(rng2 + x);
uvec128 vd = internal::vandq(internal::vcgeq(vs, vr1), internal::vcgeq(vr2, vs));
internal::vst1q(dst + x, vd);
x+=16;
}
if( x + 8 < width)
{
vec64 vs = internal::vld1( src + x);
vec64 vr1 = internal::vld1(rng1 + x);
vec64 vr2 = internal::vld1(rng2 + x);
uvec64 vd = internal::vand(internal::vcge(vs, vr1), internal::vcge(vr2, vs));
internal::vst1(dst + x, vd);
x+=8;
}
}
};
template <typename T>
inline void inRangeCheck(const Size2D &_size,
const T * srcBase, ptrdiff_t srcStride,
const T * rng1Base, ptrdiff_t rng1Stride,
const T * rng2Base, ptrdiff_t rng2Stride,
u8 * dstBase, ptrdiff_t dstStride)
{
typedef typename internal::VecTraits<T>::vec128 vec128;
typedef typename internal::VecTraits<T>::unsign::vec128 uvec128;
Size2D size(_size);
if (srcStride == dstStride &&
srcStride == rng1Stride &&
srcStride == rng2Stride &&
srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
const size_t width = size.width & ~( 32/sizeof(T) - 1 );
for(size_t j = 0; j < size.height; ++j)
{
const T * src = internal::getRowPtr( srcBase, srcStride, j);
const T * rng1 = internal::getRowPtr(rng1Base, rng1Stride, j);
const T * rng2 = internal::getRowPtr(rng2Base, rng2Stride, j);
u8 * dst = internal::getRowPtr( dstBase, dstStride, j);
size_t i = 0;
for( ; i < width; i += 32/sizeof(T) )
{
internal::prefetch(src + i);
internal::prefetch(rng1 + i);
internal::prefetch(rng2 + i);
vec128 vs = internal::vld1q( src + i);
vec128 vr1 = internal::vld1q(rng1 + i);
vec128 vr2 = internal::vld1q(rng2 + i);
uvec128 vd1 = internal::vandq(internal::vcgeq(vs, vr1), internal::vcgeq(vr2, vs));
vs = internal::vld1q( src + i + 16/sizeof(T));
vr1 = internal::vld1q(rng1 + i + 16/sizeof(T));
vr2 = internal::vld1q(rng2 + i + 16/sizeof(T));
uvec128 vd2 = internal::vandq(internal::vcgeq(vs, vr1), internal::vcgeq(vr2, vs));
vnst(dst + i, vd1, vd2);
}
vtail<T, sizeof(T)>::inRange(src, rng1, rng2, dst, i, size.width);
for( ; i < size.width; i++ )
dst[i] = (u8)(-(rng1[i] <= src[i] && src[i] <= rng2[i]));
}
}
}
#define INRANGEFUNC(T) \
void inRange(const Size2D &_size, \
const T * srcBase, ptrdiff_t srcStride, \
const T * rng1Base, ptrdiff_t rng1Stride, \
const T * rng2Base, ptrdiff_t rng2Stride, \
u8 * dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
inRangeCheck(_size, srcBase, srcStride, \
rng1Base, rng1Stride, rng2Base, rng2Stride, \
dstBase, dstStride); \
}
#else
#define INRANGEFUNC(T) \
void inRange(const Size2D &, \
const T *, ptrdiff_t, \
const T *, ptrdiff_t, \
const T *, ptrdiff_t, \
u8 *, ptrdiff_t) \
{ \
internal::assertSupportedConfiguration(); \
}
#endif
INRANGEFUNC(u8)
INRANGEFUNC(s8)
INRANGEFUNC(u16)
INRANGEFUNC(s16)
INRANGEFUNC(s32)
INRANGEFUNC(f32)
} // namespace CAROTENE_NS

238
3rdparty/carotene/src/integral.cpp vendored Normal file
View File

@@ -0,0 +1,238 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
namespace CAROTENE_NS {
void integral(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u32 * sumBase, ptrdiff_t sumStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
uint32x4_t v_zero = vmovq_n_u32(0u);
// the first iteration
const u8 * src = internal::getRowPtr(srcBase, srcStride, 0);
u32 * sum = internal::getRowPtr(sumBase, sumStride, 0);
uint32x4_t prev = v_zero;
size_t j = 0u;
for ( ; j + 7 < size.width; j += 8)
{
internal::prefetch(sum + j);
internal::prefetch(src + j);
uint8x8_t el8shr0 = vld1_u8(src + j);
uint8x8_t el8shr1 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 8));
uint8x8_t el8shr2 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 16));
uint8x8_t el8shr3 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 24));
uint16x8_t el8shr12 = vaddl_u8(el8shr1, el8shr2);
uint16x8_t el8shr03 = vaddl_u8(el8shr0, el8shr3);
uint16x8_t el8 = vaddq_u16(el8shr12, el8shr03);
uint16x4_t el4h = vadd_u16(vget_low_u16(el8), vget_high_u16(el8));
uint32x4_t vsuml = vaddw_u16(prev, vget_low_u16(el8));
uint32x4_t vsumh = vaddw_u16(prev, el4h);
vst1q_u32(sum + j, vsuml);
vst1q_u32(sum + j + 4, vsumh);
prev = vaddw_u16(prev, vdup_lane_u16(el4h, 3));
}
for (u32 v = vgetq_lane_u32(prev, 3); j < size.width; ++j)
sum[j] = (v += src[j]);
// the others
for (size_t i = 1; i < size.height ; ++i)
{
src = internal::getRowPtr(srcBase, srcStride, i);
u32 * prevSum = internal::getRowPtr(sumBase, sumStride, i - 1);
sum = internal::getRowPtr(sumBase, sumStride, i);
prev = v_zero;
j = 0u;
for ( ; j + 7 < size.width; j += 8)
{
internal::prefetch(sum + j);
internal::prefetch(src + j);
uint32x4_t vsuml = vld1q_u32(prevSum + j);
uint32x4_t vsumh = vld1q_u32(prevSum + j + 4);
uint8x8_t el8shr0 = vld1_u8(src + j);
uint8x8_t el8shr1 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 8));
uint8x8_t el8shr2 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 16));
uint8x8_t el8shr3 = vreinterpret_u8_u64(vshl_n_u64(vreinterpret_u64_u8(el8shr0), 24));
vsuml = vaddq_u32(vsuml, prev);
vsumh = vaddq_u32(vsumh, prev);
uint16x8_t el8shr12 = vaddl_u8(el8shr1, el8shr2);
uint16x8_t el8shr03 = vaddl_u8(el8shr0, el8shr3);
uint16x8_t el8 = vaddq_u16(el8shr12, el8shr03);
uint16x4_t el4h = vadd_u16(vget_low_u16(el8), vget_high_u16(el8));
vsuml = vaddw_u16(vsuml, vget_low_u16(el8));
vsumh = vaddw_u16(vsumh, el4h);
vst1q_u32(sum + j, vsuml);
vst1q_u32(sum + j + 4, vsumh);
prev = vaddw_u16(prev, vdup_lane_u16(el4h, 3));
}
for (u32 v = vgetq_lane_u32(prev, 3); j < size.width; ++j)
sum[j] = (v += src[j]) + prevSum[j];
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)sumBase;
(void)sumStride;
#endif
}
void sqrIntegral(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
f64 * sqsumBase, ptrdiff_t sqsumStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
uint16x8_t v_zero8 = vmovq_n_u16(0u);
// the first iteration
const u8 * src = internal::getRowPtr(srcBase, srcStride, 0);
f64 * sqsum = internal::getRowPtr(sqsumBase, sqsumStride, 0);
double prev = 0.;
size_t j = 0u;
for ( ; j + 7 < size.width; j += 8)
{
internal::prefetch(sqsum + j);
internal::prefetch(src + j);
uint8x8_t vsrc = vld1_u8(src + j);
uint16x8_t el8shr0 = vmull_u8(vsrc, vsrc);
uint16x8_t el8shr1 = vextq_u16(v_zero8, el8shr0, 7);
uint32x4_t el8shr01l = vaddl_u16(vget_low_u16(el8shr0), vget_low_u16(el8shr1));
uint32x4_t el8shr01h = vaddl_u16(vget_high_u16(el8shr0), vget_high_u16(el8shr1));
uint32x4_t el4h = vaddq_u32(el8shr01l, el8shr01h);
uint32x2_t el2l = vadd_u32(vget_low_u32(el8shr01l), vget_high_u32(el8shr01l));
uint32x2_t el2hl = vadd_u32(vget_low_u32(el4h), vget_high_u32(el8shr01l));
uint32x2_t el2hh = vadd_u32(vget_low_u32(el4h), vget_high_u32(el4h));
u32 buf[8];
vst1_u32(buf, vget_low_u32(el8shr01l));
vst1_u32(buf+2, el2l);
vst1_u32(buf+4, el2hl);
vst1_u32(buf+6, el2hh);
for(u32 k=0; k < 8; k++)
sqsum[j+k] = prev + buf[k];
prev += buf[7];
}
for (; j < size.width; ++j)
sqsum[j] = (prev += src[j]*src[j]);
// the others
for (size_t i = 1; i < size.height ; ++i)
{
src = internal::getRowPtr(srcBase, srcStride, i);
f64 * prevSqSum = internal::getRowPtr(sqsumBase, sqsumStride, i - 1);
sqsum = internal::getRowPtr(sqsumBase, sqsumStride, i);
prev = 0.;
j = 0u;
for ( ; j + 7 < size.width; j += 8)
{
internal::prefetch(sqsum + j);
internal::prefetch(src + j);
uint8x8_t vsrc = vld1_u8(src + j);
uint16x8_t el8shr0 = vmull_u8(vsrc, vsrc);
uint16x8_t el8shr1 = vextq_u16(v_zero8, el8shr0, 7);
uint32x4_t el8shr01l = vaddl_u16(vget_low_u16(el8shr0), vget_low_u16(el8shr1));
uint32x4_t el8shr01h = vaddl_u16(vget_high_u16(el8shr0), vget_high_u16(el8shr1));
uint32x4_t el4h = vaddq_u32(el8shr01l, el8shr01h);
uint32x2_t el2l = vadd_u32(vget_low_u32(el8shr01l), vget_high_u32(el8shr01l));
uint32x2_t el2hl = vadd_u32(vget_low_u32(el4h), vget_high_u32(el8shr01l));
uint32x2_t el2hh = vadd_u32(vget_low_u32(el4h), vget_high_u32(el4h));
u32 buf[8];
vst1_u32(buf, vget_low_u32(el8shr01l));
vst1_u32(buf+2, el2l);
vst1_u32(buf+4, el2hl);
vst1_u32(buf+6, el2hh);
for(u32 k=0; k < 8; k++)
sqsum[j+k] = prev + prevSqSum[j+k] + buf[k];
prev += buf[7];
}
for (; j < size.width; ++j)
sqsum[j] = (prev += src[j]*src[j]) + prevSqSum[j];
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)sqsumBase;
(void)sqsumStride;
#endif
}
} // namespace CAROTENE_NS

112
3rdparty/carotene/src/intrinsics.hpp vendored Normal file
View File

@@ -0,0 +1,112 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_INTRINSICS_HPP
#define CAROTENE_INTRINSICS_HPP
#include <carotene/definitions.hpp>
#include <arm_neon.h>
namespace CAROTENE_NS { namespace internal {
/////////////// Custom NEON intrinsics ///////////////////
// calculate reciprocal value
inline float32x4_t vrecpq_f32(float32x4_t val)
{
float32x4_t reciprocal = vrecpeq_f32(val);
reciprocal = vmulq_f32(vrecpsq_f32(val, reciprocal), reciprocal);
reciprocal = vmulq_f32(vrecpsq_f32(val, reciprocal), reciprocal);
return reciprocal;
}
inline float32x2_t vrecp_f32(float32x2_t val)
{
float32x2_t reciprocal = vrecpe_f32(val);
reciprocal = vmul_f32(vrecps_f32(val, reciprocal), reciprocal);
reciprocal = vmul_f32(vrecps_f32(val, reciprocal), reciprocal);
return reciprocal;
}
// caclulate sqrt value
inline float32x4_t vrsqrtq_f32(float32x4_t val)
{
float32x4_t e = vrsqrteq_f32(val);
e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(e, e), val), e);
e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(e, e), val), e);
return e;
}
inline float32x2_t vrsqrt_f32(float32x2_t val)
{
float32x2_t e = vrsqrte_f32(val);
e = vmul_f32(vrsqrts_f32(vmul_f32(e, e), val), e);
e = vmul_f32(vrsqrts_f32(vmul_f32(e, e), val), e);
return e;
}
inline float32x4_t vsqrtq_f32(float32x4_t val)
{
return vrecpq_f32(vrsqrtq_f32(val));
}
inline float32x2_t vsqrt_f32(float32x2_t val)
{
return vrecp_f32(vrsqrt_f32(val));
}
// table lookup with the table in a 128-bit register
inline uint8x8_t vqtbl1_u8 (uint8x16_t a, uint8x8_t b)
{
#ifdef __aarch64__
// AArch64 supports this natively
return ::vqtbl1_u8(a, b);
#else
union { uint8x16_t v; uint8x8x2_t w; } u = { a };
return vtbl2_u8(u.w, b);
#endif
}
} }
#endif

713
3rdparty/carotene/src/laplacian.cpp vendored Normal file
View File

@@ -0,0 +1,713 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "saturate_cast.hpp"
#include <vector>
namespace CAROTENE_NS {
bool isLaplacian3x3Supported(const Size2D &size, BORDER_MODE border)
{
return isSupportedConfiguration() && size.width >= 8 &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REPLICATE);
}
void Laplacian3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isLaplacian3x3Supported(size, border));
#ifdef CAROTENE_NEON
const uint16x8_t v_border_x3 = vdupq_n_u16(borderValue * 3);
const uint16x8_t v_zero = vdupq_n_u16(0);
const uint8x8_t v_border = vdup_n_u8(borderValue);
uint8x8_t vsub;
uint16x8_t tprev = v_zero, tcurr = v_zero, tnext = v_zero;
uint16x8_t t0 = v_zero, t1 = v_zero, t2 = v_zero;
ptrdiff_t width = (ptrdiff_t)size.width, height = (ptrdiff_t)size.height;
for (ptrdiff_t y = 0; y < height; ++y)
{
const u8 * srow0 = y == 0 && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::max<ptrdiff_t>(y - 1, 0));
const u8 * srow1 = internal::getRowPtr(srcBase, srcStride, y);
const u8 * srow2 = y + 1 == height && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::min(y + 1, height - 1));
u8 * drow = internal::getRowPtr(dstBase, dstStride, y);
s16 prevx = 0, currx = 0, nextx = 0;
ptrdiff_t x = 0;
const ptrdiff_t bwidth = y + 2 < height ? width : (width - 8);
// perform vertical convolution
for ( ; x <= bwidth; x += 8)
{
internal::prefetch(srow0 + x);
internal::prefetch(srow1 + x);
internal::prefetch(srow2 + x);
uint8x8_t x0 = !srow0 ? v_border : vld1_u8(srow0 + x);
uint8x8_t x1 = vld1_u8(srow1 + x);
uint8x8_t x2 = !srow2 ? v_border : vld1_u8(srow2 + x);
// calculate values for plain CPU part below if needed
if (x + 8 >= bwidth)
{
ptrdiff_t x3 = x == width ? width - 1 : x;
ptrdiff_t x4 = border == BORDER_MODE_CONSTANT ? x3 - 1 : std::max<ptrdiff_t>(x3 - 1, 0);
if (border == BORDER_MODE_CONSTANT && x4 < 0)
prevx = borderValue;
else
prevx = (srow2 ? srow2[x4] : borderValue) + srow1[x4] + (srow0 ? srow0[x4] : borderValue);
currx = (srow2 ? srow2[x3] : borderValue) + srow1[x3] + (srow0 ? srow0[x3] : borderValue);
}
// make shift
if (x)
{
tprev = tcurr;
tcurr = tnext;
}
// and calculate next value
tnext = vaddw_u8(vaddl_u8(x0, x1), x2);
// make extrapolation for the first elements
if (!x)
{
// make border
if (border == BORDER_MODE_CONSTANT)
tcurr = v_border_x3;
else if (border == BORDER_MODE_REPLICATE)
tcurr = vdupq_n_u16(vgetq_lane_u16(tnext, 0));
vsub = x1;
continue;
}
// combine 3 "shifted" vectors
t0 = vextq_u16(tprev, tcurr, 7);
t1 = tcurr;
t2 = vextq_u16(tcurr, tnext, 1);
// and add them
t0 = vqaddq_u16(t0, vqaddq_u16(t1, t2));
int16x8_t tt0 = vsubq_s16(vreinterpretq_s16_u16(t0),
vreinterpretq_s16_u16(vaddw_u8(vshll_n_u8(vsub, 3), vsub)));
uint8x8_t it0 = vqmovun_s16(tt0);
vst1_u8(drow + x - 8, it0);
vsub = x1;
}
x -= 8;
if (x == width)
--x;
for ( ; x < width; ++x)
{
// make extrapolation for the last elements
if (x + 1 >= width)
{
if (border == BORDER_MODE_CONSTANT)
nextx = borderValue * 3;
else if (border == BORDER_MODE_REPLICATE)
nextx = srow2[x] + srow1[x] + srow0[x];
}
else
{
nextx = (srow2 ? srow2[x + 1] : borderValue) +
srow1[x + 1] +
(srow0 ? srow0[x + 1] : borderValue);
}
s32 val = (prevx + currx + nextx) - 9 * srow1[x];
drow[x] = internal::saturate_cast<u8>((s32)val);
// make shift
prevx = currx;
currx = nextx;
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
bool isLaplacianOpenCVSupported(const Size2D &size, BORDER_MODE border)
{
return isSupportedConfiguration() &&
size.width >= 8 && size.height >= 1 &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REFLECT ||
border == BORDER_MODE_REFLECT101 ||
border == BORDER_MODE_REPLICATE);
}
void Laplacian1OpenCV(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isLaplacianOpenCVSupported(size, border));
#ifdef CAROTENE_NEON
ptrdiff_t rows = size.height, cols = size.width;
std::vector<u8> _tmp;
u8 *tmp = 0;
if (border == BORDER_MODE_CONSTANT)
{
_tmp.assign(cols + 4,borderValue);
tmp = &_tmp[2];
}
for( ptrdiff_t y = 0; y < rows; y++ )
{
const u8* v0 = 0;
const u8* v1 = internal::getRowPtr(srcBase, srcStride, y);
const u8* v2 = 0;
// make border
if (border == BORDER_MODE_REFLECT101) {
v0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : y+1);
v2 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 1 ? rows-2 : 0);
} else if (border == BORDER_MODE_CONSTANT) {
v0 = y > 0 ? internal::getRowPtr(srcBase, srcStride, y-1) : tmp;
v2 = y < rows-1 ? internal::getRowPtr(srcBase, srcStride, y+1) : tmp;
} else {
v0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 0);
v2 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 0 ? rows-1 : 0);
}
s16* drow = internal::getRowPtr(dstBase, dstStride, y);
int16x8_t tcurr = vmovq_n_s16(0x0);
int16x8_t tnext = vmovq_n_s16(0x0);
int16x8_t t0, t2;
uint8x8_t xx0 = vmov_n_u8(0x0);
uint8x8_t xx1 = vmov_n_u8(0x0);
uint8x8_t xx2 = vmov_n_u8(0x0);
ptrdiff_t x = 0;
const ptrdiff_t bcols = y + 2 < rows ? cols : (cols - 8);
for( ; x <= bcols; x += 8 )
{
internal::prefetch(v0 + x);
internal::prefetch(v1 + x);
internal::prefetch(v2 + x);
uint8x8_t x0 = vld1_u8(v0 + x);
uint8x8_t x1 = vld1_u8(v1 + x);
uint8x8_t x2 = vld1_u8(v2 + x);
if(x) {
xx0 = xx1;
xx1 = xx2;
} else {
xx1 = x1;
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT)
{
xx1 = vset_lane_u8(vget_lane_u8(x1, 0),x1, 7);
}
else if (border == BORDER_MODE_CONSTANT)
{
xx1 = vset_lane_u8(borderValue, x1, 7);
}
else if (border == BORDER_MODE_REFLECT101)
{
xx1 = vset_lane_u8(vget_lane_u8(x1, 1),x1, 7);
}
}
xx2 = x1;
if(x) {
tcurr = tnext;
}
tnext = vsubq_s16(vreinterpretq_s16_u16(vaddl_u8(x0, x2)),
vreinterpretq_s16_u16(vshll_n_u8(x1, 2)));
if(!x) {
tcurr = tnext;
continue;
}
t0 = vreinterpretq_s16_u16(vmovl_u8(vext_u8(xx0, xx1, 7)));
t2 = vreinterpretq_s16_u16(vmovl_u8(vext_u8(xx1, xx2, 1)));
t0 = vaddq_s16(vqaddq_s16(t0, t2), tcurr);
vst1q_s16(drow + x - 8, t0);
}
x -= 8;
if(x == cols){
x--;
}
for( ; x < cols; x++ )
{
s16 nextx;
s16 prevx;
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT)
{
prevx = x == 0 ? v1[0] : v1[x-1];
nextx = x == cols-1 ? v1[x] : v1[x+1];
}
else if (border == BORDER_MODE_REFLECT101)
{
prevx = x == 0 ? v1[1] : v1[x-1];
nextx = x == cols-1 ? v1[x-1] : v1[x+1];
}
else //if (border == BORDER_MODE_CONSTANT)
{
prevx = x == 0 ? borderValue : v1[x-1];
nextx = x == cols-1 ? borderValue : v1[x+1];
}
*(drow+x) = prevx + nextx - 4*v1[x] + v0[x] + v2[x];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
void Laplacian3OpenCV(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isLaplacianOpenCVSupported(size, border));
#ifdef CAROTENE_NEON
ptrdiff_t rows = size.height, cols = size.width;
std::vector<u8> _tmp;
u8 *tmp = 0;
if (border == BORDER_MODE_CONSTANT)
{
_tmp.assign(cols + 4,borderValue);
tmp = &_tmp[2];
}
for( ptrdiff_t y = 0; y < rows; y++ )
{
const u8* v0 = 0;
const u8* v1 = internal::getRowPtr(srcBase, srcStride, y);
const u8* v2 = 0;
// make border
if (border == BORDER_MODE_REFLECT101) {
v0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : y+1);
v2 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 1 ? rows-2 : 0);
} else if (border == BORDER_MODE_CONSTANT) {
v0 = y > 0 ? internal::getRowPtr(srcBase, srcStride, y-1) : tmp;
v2 = y < rows-1 ? internal::getRowPtr(srcBase, srcStride, y+1) : tmp;
} else {
v0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 0);
v2 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 0 ? rows-1 : 0);
}
s16* drow = internal::getRowPtr(dstBase, dstStride, y);
int16x8_t tprev = vmovq_n_s16(0x0);
int16x8_t tcurr = vmovq_n_s16(0x0);
int16x8_t tnext = vmovq_n_s16(0x0);
int16x8_t tc = vmovq_n_s16(0x0);
int16x8_t t0, t2, tcnext;
ptrdiff_t x = 0;
const ptrdiff_t bcols = y + 2 < rows ? cols : (cols - 8);
for( ; x <= bcols; x += 8 )
{
internal::prefetch(v0 + x);
internal::prefetch(v1 + x);
internal::prefetch(v2 + x);
uint8x8_t x0 = vld1_u8(v0 + x);
uint8x8_t x1 = vld1_u8(v1 + x);
uint8x8_t x2 = vld1_u8(v2 + x);
tcnext = vreinterpretq_s16_u16(vshll_n_u8(x1, 2));
if(x) {
tprev = tcurr;
tcurr = tnext;
}
tnext = vreinterpretq_s16_u16(vaddl_u8(x0, x2));
if(!x) {
tcurr = tnext;
tc = tcnext;
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT)
{
tcurr = vsetq_lane_s16(vgetq_lane_s16(tcurr, 0),tcurr, 7);
}
else if (border == BORDER_MODE_CONSTANT)
{
tcurr = vsetq_lane_s16(borderValue, tcurr, 7);
}
else if (border == BORDER_MODE_REFLECT101)
{
tcurr = vsetq_lane_s16(vgetq_lane_s16(tcurr, 1),tcurr, 7);
}
continue;
}
t0 = vextq_s16(tprev, tcurr, 7);
t2 = vextq_s16(tcurr, tnext, 1);
t0 = vsubq_s16(vqaddq_s16(t0, t2), tc);
tc = tcnext;
t0 = vshlq_n_s16(t0, 1);
vst1q_s16(drow + x - 8, t0);
}
x -= 8;
if(x == cols){
x--;
}
for( ; x < cols; x++ )
{
s16 nextx, nextx2;
s16 prevx, prevx2;
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT)
{
prevx = x == 0 ? v0[0] : v0[x-1];
prevx2 = x == 0 ? v2[0] : v2[x-1];
nextx = x == cols-1 ? v0[x] : v0[x+1];
nextx2 = x == cols-1 ? v2[x] : v2[x+1];
}
else if (border == BORDER_MODE_REFLECT101)
{
prevx = x == 0 ? v0[1] : v0[x-1];
prevx2 = x == 0 ? v2[1] : v2[x-1];
nextx = x == cols-1 ? v0[x-1] : v0[x+1];
nextx2 = x == cols-1 ? v2[x-1] : v2[x+1];
}
else //if (border == BORDER_MODE_CONSTANT)
{
prevx = x == 0 ? borderValue : v0[x-1];
prevx2 = x == 0 ? borderValue : v2[x-1];
nextx = x == cols-1 ? borderValue : v0[x+1];
nextx2 = x == cols-1 ? borderValue : v2[x+1];
}
s16 res = prevx + nextx - 4*v1[x] + prevx2 + nextx2;
*(drow+x) = 2*res;
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
void Laplacian5OpenCV(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isLaplacianOpenCVSupported(size, border));
#ifdef CAROTENE_NEON
ptrdiff_t rows = size.height, cols = size.width;
std::vector<u8> _tmp;
u8 *tmp = 0;
if (border == BORDER_MODE_CONSTANT)
{
_tmp.assign(cols + 4,borderValue);
tmp = &_tmp[2];
}
for( ptrdiff_t y = 0; y < rows; y++ )
{
const u8* v0 = 0;
const u8* v1 = 0;
const u8* v2 = internal::getRowPtr(srcBase, srcStride, y);
const u8* v3 = 0;
const u8* v4 = 0;
// make border
if (border == BORDER_MODE_REPLICATE) {
v0 = internal::getRowPtr(srcBase, srcStride, y > 1 ? y-2 : 0);
v1 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 0);
v3 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 0 ? rows-1 : 0);
v4 = internal::getRowPtr(srcBase, srcStride, y < rows-2 ? y+2 : rows > 0 ? rows-1 : 0);
} else if (border == BORDER_MODE_REFLECT) {
v0 = internal::getRowPtr(srcBase, srcStride, y > 1 ? y-2 : rows > 1 ? 1-y : 0);
v1 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 0);
v3 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 0 ? rows-1 : 0);
v4 = internal::getRowPtr(srcBase, srcStride, y < rows-2 ? y+2 : rows > 1 ? 2*rows-(y+3) : 0);
} else if (border == BORDER_MODE_REFLECT101) {
v0 = internal::getRowPtr(srcBase, srcStride, y > 1 ? y-2 : rows > 2-y ? 2-y : 0); ///check
v1 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : rows > 1 ? 1 : 0);
v3 = internal::getRowPtr(srcBase, srcStride, y < rows-1 ? y+1 : rows > 1 ? rows-2 : 0);
v4 = internal::getRowPtr(srcBase, srcStride, y < rows-2 ? y+2 : rows > 2 ? 2*rows-(y+4) : 0);///bad if rows=2 y=1 rows - 4 + (2,1)
} else if (border == BORDER_MODE_CONSTANT) {
v0 = y > 1 ? internal::getRowPtr(srcBase, srcStride, y-2) : tmp;
v1 = y > 0 ? internal::getRowPtr(srcBase, srcStride, y-1) : tmp;
v3 = y < rows-1 ? internal::getRowPtr(srcBase, srcStride, y+1) : tmp;
v4 = y < rows-2 ? internal::getRowPtr(srcBase, srcStride, y+2) : tmp;
}
s16* drow = internal::getRowPtr(dstBase, dstStride, y);
int16x8_t tnext, tc, t0;
int16x8_t tnext2, tnext3;
int16x8_t tnext1Old, tnext2Old, tnext3Old;
int16x8_t tnext4OldOldOld, tnext5OldOldOld;
int16x8_t tcurr1 = vmovq_n_s16(0x0);
int16x8_t tnext1 = vmovq_n_s16(0x0);
int16x8_t tprev1 = vmovq_n_s16(0x0);
int16x8_t tpprev1 = vmovq_n_s16(0x0);
int16x8_t tppprev1 = vmovq_n_s16(0x0);
int16x8_t tnext4Old = vmovq_n_s16(0x0);
int16x8_t tnext5Old = vmovq_n_s16(0x0);
int16x8_t tnext1OldOld = vmovq_n_s16(0x0);
int16x8_t tnext2OldOld = vmovq_n_s16(0x0);
int16x8_t tnext3OldOld = vmovq_n_s16(0x0);
int16x8_t tnext4OldOld = vmovq_n_s16(0x0);
int16x8_t tnext5OldOld = vmovq_n_s16(0x0);
// do vertical convolution
ptrdiff_t x = 0;
const ptrdiff_t bcols = y + 3 < rows ? cols : (cols - 8);
for( ; x <= bcols; x += 8 )
{
internal::prefetch(v0 + x);
internal::prefetch(v1 + x);
internal::prefetch(v2 + x);
internal::prefetch(v3 + x);
internal::prefetch(v4 + x);
uint8x8_t x0 = vld1_u8(v0 + x);
uint8x8_t x1 = vld1_u8(v1 + x);
uint8x8_t x2 = vld1_u8(v2 + x);
uint8x8_t x3 = vld1_u8(v3 + x);
uint8x8_t x4 = vld1_u8(v4 + x);
if(x) {
tcurr1 = tnext1;
}
tnext4OldOldOld = tnext4Old;
tnext5OldOldOld = tnext5Old;
tnext1Old = tnext1OldOld;
tnext2Old = tnext2OldOld;
tnext3Old = tnext3OldOld;
tnext4Old = tnext4OldOld;
tnext5Old = tnext5OldOld;
tnext3 = vreinterpretq_s16_u16(vaddq_u16(vaddl_u8(x3, x2),vaddl_u8(x2, x1)));
tnext3 = vshlq_n_s16(tnext3, 1);
tc = vreinterpretq_s16_u16(vsubl_u8(x4, x2));
tnext = vreinterpretq_s16_u16(vsubl_u8(x2, x0));
tnext2 = vsubq_s16(tc, tnext);
tnext1 = vaddq_s16(tnext3, tnext2);
// tnext1 = x0 + 2*x1 + 2*x2 + 2*x3 + x4
tnext2 = vshlq_n_s16(tnext2, 1);
// tnext2 = 2*x4 - 4*x2 + 2*x0
tnext3 = vsubq_s16(tnext2, vshlq_n_s16(tnext3, 1));
// tnext3 = 2*x0 - 4*x1 - 12*x2 - 4*x3 + 2*x4
tnext1OldOld = tnext1;
tnext2OldOld = tnext2;
tnext3OldOld = tnext3;
tnext4OldOld = tnext2;
tnext5OldOld = tnext1;
if(x) {
tnext1 = vextq_s16(tnext1Old, tnext1, 2);
tcurr1 = vextq_s16(tnext2Old, tnext2, 1);
tprev1 = tnext3Old;
if(x!=8) {
tpprev1 = vextq_s16(tnext4OldOldOld, tnext4Old, 7);
tppprev1 = vextq_s16(tnext5OldOldOld, tnext5Old, 6);
}
}
if(!x) {
// make border
if (border == BORDER_MODE_REPLICATE) {
tpprev1 = vextq_s16(tnext2, tnext2, 7);
tpprev1 = vsetq_lane_s16(vgetq_lane_s16(tpprev1, 1),tpprev1, 0);
tprev1 = vextq_s16(tnext1, tnext1, 6);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 2),tprev1, 0);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 2),tprev1, 1);
} else if (border == BORDER_MODE_REFLECT) {
tpprev1 = vextq_s16(tnext2, tnext2, 7);
tpprev1 = vsetq_lane_s16(vgetq_lane_s16(tpprev1, 1),tpprev1, 0);
tprev1 = vextq_s16(tnext1, tnext1, 6);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 3),tprev1, 0);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 2),tprev1, 1);
} else if (border == BORDER_MODE_REFLECT101) {
tpprev1 = vextq_s16(tnext2, tnext2, 7);
tpprev1 = vsetq_lane_s16(vgetq_lane_s16(tpprev1, 2),tpprev1, 0);
tprev1 = vextq_s16(tnext1, tnext1, 6);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 3),tprev1, 1);
tprev1 = vsetq_lane_s16(vgetq_lane_s16(tprev1, 4),tprev1, 0);
} else if (border == BORDER_MODE_CONSTANT) {
tpprev1 = vextq_s16(tnext2, tnext2, 7);
tpprev1 = vsetq_lane_s16(borderValue, tpprev1, 0);
tprev1 = vextq_s16(tnext1, tnext1, 6);
tprev1 = vsetq_lane_s16(borderValue, tprev1, 0);
tprev1 = vsetq_lane_s16(borderValue, tprev1, 1);
}
tppprev1 = tprev1;
continue;
}
t0 = vaddq_s16(vaddq_s16(vqaddq_s16(tcurr1, tprev1), vqaddq_s16(tpprev1, tppprev1)), tnext1);
t0 = vaddq_s16(t0, t0);
vst1q_s16(drow + x - 8, t0);
}
x -= 8;
if(x >= cols - 1)
x = cols-2;
s16 pprevx = 0;
s16 prevx = 0;
s16 nextx = 0;
s16 nnextx = 0;
for( ; x < cols; x++ )
{
if (x == 0) {
// make border
if (border == BORDER_MODE_REPLICATE) {
pprevx = v0[0] + 2*v1[0] + 2*v2[0] + 2*v3[0] + v4[0];
prevx = 2*v0[0] - 4*v2[0] + 2*v4[0];
} else if (border == BORDER_MODE_REFLECT) {
pprevx = v0[1] + 2*v1[1] + 2*v2[1] + 2*v3[1] + v4[1];
prevx = 2*v0[0] - 4*v2[0] + 2*v4[0];
} else if (border == BORDER_MODE_REFLECT101) {
pprevx = v0[2] + 2*v1[2] + 2*v2[2] + 2*v3[2] + v4[2];
prevx = 2*v0[1] - 4*v2[1] + 2*v4[1];
} else if (border == BORDER_MODE_CONSTANT) {
pprevx = 8 * borderValue;
prevx = 0;
}
} else if (x == 1) {
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT) {
pprevx = v0[0] + 2*v1[0] + 2*v2[0] + 2*v3[0] + v4[0];
} else if (border == BORDER_MODE_REFLECT101) {
pprevx = v0[1] + 2*v1[1] + 2*v2[1] + 2*v3[1] + v4[1];
} else if (border == BORDER_MODE_CONSTANT) {
pprevx = 8 * borderValue;
}
prevx = 2*v0[0] - 4*v2[0] + 2*v4[0];
} else {
pprevx = v0[x-2] + 2*v1[x-2] + 2*v2[x-2] + 2*v3[x-2] + v4[x-2];
prevx = 2*v0[x-1] - 4*v2[x-1] + 2*v4[x-1];
}
s16 currx = 2*v0[x] - 4*v1[x] - 12*v2[x] - 4*v3[x] + 2*v4[x];
if (x == cols-1) {
// make border
if (border == BORDER_MODE_REPLICATE) {
nextx = 2*v0[x] - 4*v2[x] + 2*v4[x];
nnextx = v0[x] + 2*v1[x] + 2*v2[x] + 2*v3[x] + v4[x];
} else if (border == BORDER_MODE_REFLECT) {
nextx = 2*v0[x] - 4*v2[x] + 2*v4[x];
nnextx = v0[x-1] + 2*v1[x-1] + 2*v2[x-1] + 2*v3[x-1] + v4[x-1];
} else if (border == BORDER_MODE_REFLECT101) {
nextx = 2*v0[x-1] - 4*v2[x-1] + 2*v4[x-1];
nnextx = v0[x-2] + 2*v1[x-2] + 2*v2[x-2] + 2*v3[x-2] + v4[x-2];
} else if (border == BORDER_MODE_CONSTANT) {
nextx = 0;
nnextx = 8 * borderValue;
}
} else if (x == cols-2) {
// make border
if (border == BORDER_MODE_REPLICATE || border == BORDER_MODE_REFLECT) {
nnextx = v0[x+1] + 2*v1[x+1] + 2*v2[x+1] + 2*v3[x+1] + v4[x+1];
} else if (border == BORDER_MODE_REFLECT101) {
nnextx = v0[x] + 2*v1[x] + 2*v2[x] + 2*v3[x] + v4[x];
} else if (border == BORDER_MODE_CONSTANT) {
nnextx = 8 * borderValue;
}
nextx = 2*v0[x+1] - 4*v2[x+1] + 2*v4[x+1];
} else {
nextx = 2*v0[x+1] - 4*v2[x+1] + 2*v4[x+1];
nnextx = v0[x+2] + 2*v1[x+2] + 2*v2[x+2] + 2*v3[x+2] + v4[x+2];
}
s16 res = pprevx + prevx + currx + nextx + nnextx;
*(drow+x) = 2*res;
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

160
3rdparty/carotene/src/magnitude.cpp vendored Normal file
View File

@@ -0,0 +1,160 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
#include <cmath>
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
struct Magnitude
{
typedef s16 type;
void operator() (const int16x8_t & v_src0, const int16x8_t & v_src1,
int16x8_t & v_dst) const
{
int16x4_t v_src0_p = vget_low_s16(v_src0), v_src1_p = vget_low_s16(v_src1);
float32x4_t v_sqr0 = vaddq_f32(vcvtq_f32_s32(vmull_s16(v_src0_p, v_src0_p)),
vcvtq_f32_s32(vmull_s16(v_src1_p, v_src1_p)));
v_src0_p = vget_high_s16(v_src0);
v_src1_p = vget_high_s16(v_src1);
float32x4_t v_sqr1 = vaddq_f32(vcvtq_f32_s32(vmull_s16(v_src0_p, v_src0_p)),
vcvtq_f32_s32(vmull_s16(v_src1_p, v_src1_p)));
int32x4_t v_sqrt0 = vcvtq_s32_f32(internal::vsqrtq_f32(v_sqr0));
int32x4_t v_sqrt1 = vcvtq_s32_f32(internal::vsqrtq_f32(v_sqr1));
v_dst = vcombine_s16(vqmovn_s32(v_sqrt0), vqmovn_s32(v_sqrt1));
}
void operator() (const int16x4_t & v_src0, const int16x4_t & v_src1,
int16x4_t & v_dst) const
{
float32x4_t v_tmp = vaddq_f32(vcvtq_f32_s32(vmull_s16(v_src0, v_src0)),
vcvtq_f32_s32(vmull_s16(v_src1, v_src1)));
int32x4_t v_sqrt = vcvtq_s32_f32(internal::vsqrtq_f32(v_tmp));
v_dst = vqmovn_s32(v_sqrt);
}
void operator() (const short * src0, const short * src1, short * dst) const
{
f32 src0val = (f32)src0[0], src1val = (f32)src1[0];
dst[0] = internal::saturate_cast<s16>((s32)sqrtf(src0val * src0val + src1val * src1val));
}
};
struct MagnitudeF32
{
typedef f32 type;
void operator() (const float32x4_t & v_src0, const float32x4_t & v_src1,
float32x4_t & v_dst) const
{
v_dst = internal::vsqrtq_f32(vaddq_f32(vmulq_f32(v_src0, v_src0), vmulq_f32(v_src1, v_src1)));
}
void operator() (const float32x2_t & v_src0, const float32x2_t & v_src1,
float32x2_t & v_dst) const
{
v_dst = internal::vsqrt_f32(vadd_f32(vmul_f32(v_src0, v_src0), vmul_f32(v_src1, v_src1)));
}
void operator() (const f32 * src0, const f32 * src1, f32 * dst) const
{
dst[0] = sqrtf(src0[0] * src0[0] + src1[0] * src1[0]);
}
};
} // namespace
#endif
void magnitude(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
Magnitude());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void magnitude(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
MagnitudeF32());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

163
3rdparty/carotene/src/meanstddev.cpp vendored Normal file
View File

@@ -0,0 +1,163 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <cmath>
namespace CAROTENE_NS {
void meanStdDev(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
f32 * pMean, f32 * pStdDev)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
f64 fsum = 0.0f, fsqsum = 0.0f;
sqsum(size, srcBase, srcStride, &fsum, &fsqsum, 1);
// calc mean and stddev
f64 itotal = 1.0 / size.total();
f64 mean = fsum * itotal;
f64 stddev = sqrt(std::max(fsqsum * itotal - mean * mean, 0.0));
if (pMean)
*pMean = mean;
if (pStdDev)
*pStdDev = stddev;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)pMean;
(void)pStdDev;
#endif
}
void meanStdDev(const Size2D &size,
const u16 * srcBase, ptrdiff_t srcStride,
f32 * pMean, f32 * pStdDev)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t blockSize0 = 1 << 10, roiw4 = size.width & ~3;
f64 fsum = 0.0f, fsqsum = 0.0f;
f32 arsum[8];
uint32x4_t v_zero = vdupq_n_u32(0u), v_sum;
float32x4_t v_zero_f = vdupq_n_f32(0.0f), v_sqsum;
for (size_t i = 0; i < size.height; ++i)
{
const u16 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0u;
while (j < roiw4)
{
size_t blockSize = std::min(roiw4 - j, blockSize0) + j;
v_sum = v_zero;
v_sqsum = v_zero_f;
for ( ; j + 16 < blockSize ; j += 16)
{
internal::prefetch(src + j);
uint16x8_t v_src0 = vld1q_u16(src + j), v_src1 = vld1q_u16(src + j + 8);
// 0
uint32x4_t v_srclo = vmovl_u16(vget_low_u16(v_src0));
uint32x4_t v_srchi = vmovl_u16(vget_high_u16(v_src0));
v_sum = vaddq_u32(v_sum, vaddq_u32(v_srclo, v_srchi));
float32x4_t v_srclo_f = vcvtq_f32_u32(v_srclo);
float32x4_t v_srchi_f = vcvtq_f32_u32(v_srchi);
v_sqsum = vmlaq_f32(v_sqsum, v_srclo_f, v_srclo_f);
v_sqsum = vmlaq_f32(v_sqsum, v_srchi_f, v_srchi_f);
// 1
v_srclo = vmovl_u16(vget_low_u16(v_src1));
v_srchi = vmovl_u16(vget_high_u16(v_src1));
v_sum = vaddq_u32(v_sum, vaddq_u32(v_srclo, v_srchi));
v_srclo_f = vcvtq_f32_u32(v_srclo);
v_srchi_f = vcvtq_f32_u32(v_srchi);
v_sqsum = vmlaq_f32(v_sqsum, v_srclo_f, v_srclo_f);
v_sqsum = vmlaq_f32(v_sqsum, v_srchi_f, v_srchi_f);
}
for ( ; j < blockSize; j += 4)
{
uint32x4_t v_src = vmovl_u16(vld1_u16(src + j));
float32x4_t v_src_f = vcvtq_f32_u32(v_src);
v_sum = vaddq_u32(v_sum, v_src);
v_sqsum = vmlaq_f32(v_sqsum, v_src_f, v_src_f);
}
vst1q_f32(arsum, vcvtq_f32_u32(v_sum));
vst1q_f32(arsum + 4, v_sqsum);
fsum += (f64)arsum[0] + arsum[1] + arsum[2] + arsum[3];
fsqsum += (f64)arsum[4] + arsum[5] + arsum[6] + arsum[7];
}
// collect a few last elements in the current row
for ( ; j < size.width; ++j)
{
f32 srcval = src[j];
fsum += srcval;
fsqsum += srcval * srcval;
}
}
// calc mean and stddev
f64 itotal = 1.0 / size.total();
f64 mean = fsum * itotal;
f64 stddev = sqrt(std::max(fsqsum * itotal - mean * mean, 0.0));
if (pMean)
*pMean = mean;
if (pStdDev)
*pStdDev = stddev;
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)pMean;
(void)pStdDev;
#endif
}
} // namespace CAROTENE_NS

227
3rdparty/carotene/src/median_filter.cpp vendored Normal file
View File

@@ -0,0 +1,227 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
/*
* The code here is based on the code in
* <http://ndevilla.free.fr/median/median/src/optmed.c>, which is in public domain.
* See also <http://ndevilla.free.fr/median/median/index.html>.
*/
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
uint8x16_t getLeftReplicate(uint8x16_t r, u32 cn)
{
u8 buf[16+8];
vst1q_u8(buf+cn, r);
for (u32 i = 0; i < cn; ++i) buf[i] = buf[cn+i];
return vld1q_u8(buf);
}
uint8x8_t getRightReplicate(uint8x8_t r, u32 cn)
{
u8 buf[8+8];
vst1_u8(buf, r);
for (u32 i = 0; i < cn; ++i) buf[8+i] = buf[8-cn+i];
return vld1_u8(buf+cn);
}
} // namespace
//o------^-------^-----------------------------o 0
// | |
//o--^---v---^---|-------^---------------------o 1
// | | | |
//o--v-------v---|-------|-^-------^-------^---o 2
// | | | | |
//o------^-------v-----^-|-|-------|-------|---o 3
// | | | | | |
//o--^---v---^-----^---|-v-|---^---v---^---v---o 4
// | | | | | | |
//o--v-------v---^-|---|---v---|-------|-------o 5
// | | | | |
//o------^-------|-|---v-------|-------v-------o 6
// | | | |
//o--^---v---^---|-v-----------v---------------o 7
// | | |
//o--v-------v---v-----------------------------o 8
#define ELT(num, level) v ## num ## _lv ## level
#define PIX_SORT(a, alvl, b, blvl, newlvl) \
PIX_MIN(a, alvl, b, blvl, newlvl); \
PIX_MAX(a, alvl, b, blvl, newlvl);
#define SORT9 \
PIX_SORT(1, 00, 2, 00, 01); \
PIX_SORT(4, 00, 5, 00, 02); \
PIX_SORT(7, 00, 8, 00, 03); \
PIX_SORT(0, 00, 1, 01, 04); \
PIX_SORT(3, 00, 4, 02, 05); \
PIX_SORT(6, 00, 7, 03, 06); \
PIX_SORT(1, 04, 2, 01, 07); \
PIX_SORT(4, 05, 5, 02, 08); \
PIX_SORT(7, 06, 8, 03, 09); \
PIX_MAX (0, 04, 3, 05, 10); \
PIX_MIN (5, 08, 8, 09, 11); \
PIX_SORT(4, 08, 7, 09, 12); \
PIX_MAX (3, 10, 6, 06, 13); \
PIX_MAX (1, 07, 4, 12, 14); \
PIX_MIN (2, 07, 5, 11, 15); \
PIX_MIN (4, 14, 7, 12, 16); \
PIX_SORT(4, 16, 2, 15, 17); \
PIX_MAX (6, 13, 4, 17, 18); \
PIX_MIN (4, 18, 2, 17, 19);
#endif
bool isMedianFilter3x3Supported(const Size2D &size, u32 numChannels)
{
return isSupportedConfiguration() && size.width >= 16 + numChannels && numChannels <= 8;
}
void medianFilter3x3(const Size2D &size, u32 numChannels,
const u8 *srcBase, ptrdiff_t srcStride,
const Margin &srcMargin,
u8 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration(isMedianFilter3x3Supported(size, numChannels));
#ifdef CAROTENE_NEON
u32 cn = numChannels;
size_t colsn = size.width * cn;
for (size_t i = 0; i < size.height; ++i) {
const u8* psrc1 = internal::getRowPtr(srcBase, srcStride, i);
const u8* psrc0 = i == 0 && srcMargin.top == 0 ? psrc1 : psrc1 - srcStride;
const u8* psrc2 = i + 1 == size.height && srcMargin.bottom == 0 ? psrc1 : psrc1 + srcStride;
u8* pdst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
{
uint8x16_t v3_lv00 = vld1q_u8(psrc0);
uint8x16_t v4_lv00 = vld1q_u8(psrc1);
uint8x16_t v5_lv00 = vld1q_u8(psrc2);
uint8x16_t v6_lv00 = vld1q_u8(psrc0 + cn);
uint8x16_t v7_lv00 = vld1q_u8(psrc1 + cn);
uint8x16_t v8_lv00 = vld1q_u8(psrc2 + cn);
uint8x16_t v0_lv00 = srcMargin.left > 0 ? vld1q_u8(psrc0 - cn) : getLeftReplicate(v3_lv00, cn);
uint8x16_t v1_lv00 = srcMargin.left > 0 ? vld1q_u8(psrc1 - cn) : getLeftReplicate(v4_lv00, cn);
uint8x16_t v2_lv00 = srcMargin.left > 0 ? vld1q_u8(psrc2 - cn) : getLeftReplicate(v5_lv00, cn);
goto medianBlur3x3_mainBody;
for (; j < colsn - 16; j += 16) {
internal::prefetch(psrc0 + j);
internal::prefetch(psrc1 + j);
internal::prefetch(psrc2 + j);
v0_lv00 = vld1q_u8(psrc0 + j - cn);
v1_lv00 = vld1q_u8(psrc1 + j - cn);
v2_lv00 = vld1q_u8(psrc2 + j - cn);
v3_lv00 = vld1q_u8(psrc0 + j);
v4_lv00 = vld1q_u8(psrc1 + j);
v5_lv00 = vld1q_u8(psrc2 + j);
v6_lv00 = vld1q_u8(psrc0 + j + cn);
v7_lv00 = vld1q_u8(psrc1 + j + cn);
v8_lv00 = vld1q_u8(psrc2 + j + cn);
medianBlur3x3_mainBody:
#define PIX_MIN(a, alvl, b, blvl, newlvl) uint8x16_t ELT(a, newlvl) = vminq_u8(ELT(a, alvl), ELT(b, blvl))
#define PIX_MAX(a, alvl, b, blvl, newlvl) uint8x16_t ELT(b, newlvl) = vmaxq_u8(ELT(a, alvl), ELT(b, blvl))
SORT9;
#undef PIX_MAX
#undef PIX_MIN
vst1q_u8(pdst + j, v4_lv19);
}
}
{
size_t k = colsn - 8;
uint8x8_t v0_lv00 = vld1_u8(psrc0 + k - cn);
uint8x8_t v1_lv00 = vld1_u8(psrc1 + k - cn);
uint8x8_t v2_lv00 = vld1_u8(psrc2 + k - cn);
uint8x8_t v3_lv00 = vld1_u8(psrc0 + k);
uint8x8_t v4_lv00 = vld1_u8(psrc1 + k);
uint8x8_t v5_lv00 = vld1_u8(psrc2 + k);
uint8x8_t v6_lv00 = srcMargin.right > 0 ? vld1_u8(psrc0 + k + cn) : getRightReplicate(v3_lv00, cn);
uint8x8_t v7_lv00 = srcMargin.right > 0 ? vld1_u8(psrc1 + k + cn) : getRightReplicate(v4_lv00, cn);
uint8x8_t v8_lv00 = srcMargin.right > 0 ? vld1_u8(psrc2 + k + cn) : getRightReplicate(v5_lv00, cn);
goto medianBlur3x3_tailBody;
for (; k >= j - 8; k -= 8) {
v0_lv00 = vld1_u8(psrc0 + k - cn);
v1_lv00 = vld1_u8(psrc1 + k - cn);
v2_lv00 = vld1_u8(psrc2 + k - cn);
v3_lv00 = vld1_u8(psrc0 + k);
v4_lv00 = vld1_u8(psrc1 + k);
v5_lv00 = vld1_u8(psrc2 + k);
v6_lv00 = vld1_u8(psrc0 + k + cn);
v7_lv00 = vld1_u8(psrc1 + k + cn);
v8_lv00 = vld1_u8(psrc2 + k + cn);
medianBlur3x3_tailBody:
#define PIX_MIN(a, alvl, b, blvl, newlvl) uint8x8_t ELT(a, newlvl) = vmin_u8(ELT(a, alvl), ELT(b, blvl))
#define PIX_MAX(a, alvl, b, blvl, newlvl) uint8x8_t ELT(b, newlvl) = vmax_u8(ELT(a, alvl), ELT(b, blvl))
SORT9;
#undef PIX_MAX
#undef PIX_MIN
vst1_u8(pdst + k, v4_lv19);
}
}
}
#else
(void)size;
(void)numChannels;
(void)srcBase;
(void)srcStride;
(void)srcMargin;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

139
3rdparty/carotene/src/min_max.cpp vendored Normal file
View File

@@ -0,0 +1,139 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <algorithm>
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <typename T>
struct Min
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vminq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vmin(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = std::min(src0[0], src1[0]);
}
};
template <typename T>
struct Max
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vmaxq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vmax(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = std::max(src0[0], src1[0]);
}
};
} // namespace
#define IMPL_OP(fun, op, type) \
void fun(const Size2D &size, \
const type * src0Base, ptrdiff_t src0Stride, \
const type * src1Base, ptrdiff_t src1Stride, \
type * dstBase, ptrdiff_t dstStride) \
{ \
internal::assertSupportedConfiguration(); \
internal::vtransform(size, \
src0Base, src0Stride, \
src1Base, src1Stride, \
dstBase, dstStride, op<type>()); \
}
#else
#define IMPL_OP(fun, op, type) \
void fun(const Size2D &, \
const type *, ptrdiff_t, \
const type *, ptrdiff_t, \
type *, ptrdiff_t) \
{ \
internal::assertSupportedConfiguration(); \
}
#endif
#define IMPL_MINMAX(type) IMPL_OP(min, Min, type) IMPL_OP(max, Max, type)
IMPL_MINMAX(u8)
IMPL_MINMAX(s8)
IMPL_MINMAX(u16)
IMPL_MINMAX(s16)
IMPL_MINMAX(u32)
IMPL_MINMAX(s32)
IMPL_MINMAX(f32)
} // namespace CAROTENE_NS

1340
3rdparty/carotene/src/minmaxloc.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

728
3rdparty/carotene/src/morph.cpp vendored Normal file
View File

@@ -0,0 +1,728 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <algorithm>
#include <limits>
#include <vector>
#include <cstring>
namespace CAROTENE_NS {
bool isMorph3x3Supported(const Size2D &size, BORDER_MODE border)
{
return isSupportedConfiguration() && size.width >= 16 &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REPLICATE);
}
#ifdef CAROTENE_NEON
namespace {
struct ErodeVecOp
{
ErodeVecOp():borderValue(0){}
ErodeVecOp(BORDER_MODE border, u8 borderValue_) :
borderValue(borderValue_)
{
if (border == BORDER_MODE_REPLICATE)
borderValue = std::numeric_limits<u8>::max();
}
inline uint8x16_t operator()(uint8x16_t a, uint8x16_t b) const
{
return vminq_u8(a, b);
}
inline uint8x8_t operator()(uint8x8_t a, uint8x8_t b) const
{
return vmin_u8(a, b);
}
inline u8 operator()(u8 a, u8 b) const
{
return std::min(a, b);
}
u8 borderValue;
};
struct DilateVecOp
{
DilateVecOp():borderValue(0){}
DilateVecOp(BORDER_MODE border, u8 borderValue_) :
borderValue(borderValue_)
{
if (border == BORDER_MODE_REPLICATE)
borderValue = std::numeric_limits<u8>::min();
}
inline uint8x16_t operator()(uint8x16_t a, uint8x16_t b) const
{
return vmaxq_u8(a, b);
}
inline uint8x8_t operator()(uint8x8_t a, uint8x8_t b) const
{
return vmax_u8(a, b);
}
inline u8 operator()(u8 a, u8 b) const
{
return std::max(a, b);
}
u8 borderValue;
};
template <typename VecOp>
void morph3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, const VecOp & vop)
{
u8 borderValue = vop.borderValue;
ptrdiff_t width = (ptrdiff_t)size.width, height = (ptrdiff_t)size.height;
const uint8x16_t v_zero = vdupq_n_u8(0);
const uint8x16_t v_border = vdupq_n_u8(borderValue);
uint8x16_t tprev = v_zero, tcurr = v_zero, tnext = v_zero;
uint8x16_t t0 = v_zero, t1 = v_zero, t2 = v_zero;
for (ptrdiff_t y = 0; y < height; ++y)
{
const u8 * srow0 = y == 0 && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::max<ptrdiff_t>(y - 1, 0));
const u8 * srow1 = internal::getRowPtr(srcBase, srcStride, y);
const u8 * srow2 = y + 1 == height && border == BORDER_MODE_CONSTANT ? NULL : internal::getRowPtr(srcBase, srcStride, std::min(y + 1, height - 1));
u8 * drow = internal::getRowPtr(dstBase, dstStride, y);
u8 prevx = 0, currx = 0, nextx = 0;
ptrdiff_t x = 0;
const ptrdiff_t bwidth = y + 2 < height ? width : (width - 16);
// perform vertical convolution
for ( ; x <= bwidth; x += 16)
{
internal::prefetch(srow0 + x);
internal::prefetch(srow1 + x);
internal::prefetch(srow2 + x);
uint8x16_t x0 = !srow0 ? v_border : vld1q_u8(srow0 + x);
uint8x16_t x1 = vld1q_u8(srow1 + x);
uint8x16_t x2 = !srow2 ? v_border : vld1q_u8(srow2 + x);
// calculate values for plain CPU part below if needed
if (x + 16 >= bwidth)
{
ptrdiff_t x3 = x == width ? width - 1 : x;
ptrdiff_t x4 = border == BORDER_MODE_CONSTANT ? x3 - 1 : std::max<ptrdiff_t>(x3 - 1, 0);
if (border == BORDER_MODE_CONSTANT && x4 < 0)
prevx = borderValue;
else
prevx = vop(srow1[x4],
vop(srow2 ? srow2[x4] : borderValue,
srow0 ? srow0[x4] : borderValue));
currx = vop(srow2 ? srow2[x3] : borderValue, vop(srow1[x3], srow0 ? srow0[x3] : borderValue));
}
// make shift
if (x)
{
tprev = tcurr;
tcurr = tnext;
}
// and calculate next value
tnext = vop(vop(x0, x1), x2);
// make extrapolation for the first elements
if (!x)
{
// make border
if (border == BORDER_MODE_CONSTANT)
tcurr = v_border;
else if (border == BORDER_MODE_REPLICATE)
tcurr = vdupq_n_u8(vgetq_lane_u8(tnext, 0));
continue;
}
// combine 3 "shifted" vectors
t0 = vextq_u8(tprev, tcurr, 15);
t1 = tcurr;
t2 = vextq_u8(tcurr, tnext, 1);
// and add them
t0 = vop(t0, vop(t1, t2));
vst1q_u8(drow + x - 16, t0);
}
x -= 16;
if (x == width)
--x;
for ( ; x < width; ++x)
{
// make extrapolation for the last elements
if (x + 1 >= width)
{
if (border == BORDER_MODE_CONSTANT)
nextx = borderValue;
else if (border == BORDER_MODE_REPLICATE)
nextx = vop(srow2[x], vop(srow1[x], srow0[x]));
}
else
nextx = vop(vop(srow2 ? srow2[x + 1] : borderValue,
srow0 ? srow0[x + 1] : borderValue),
srow1[x + 1]);
drow[x] = vop(prevx, vop(currx, nextx));
// make shift
prevx = currx;
currx = nextx;
}
}
}
} // namespace
#endif
void erode3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isMorph3x3Supported(size, border));
#ifdef CAROTENE_NEON
morph3x3(size,
srcBase, srcStride,
dstBase, dstStride,
border, ErodeVecOp(border, borderValue));
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
void dilate3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE border, u8 borderValue)
{
internal::assertSupportedConfiguration(isMorph3x3Supported(size, border));
#ifdef CAROTENE_NEON
morph3x3(size,
srcBase, srcStride,
dstBase, dstStride,
border, DilateVecOp(border, borderValue));
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)border;
(void)borderValue;
#endif
}
#ifdef CAROTENE_NEON
namespace {
template<class VecUpdate>
void MorphRow(const u8* src, u8* dst, size_t width, s32 cn, size_t ksize)
{
size_t i, j, k;
size_t width16 = (width & -16) * cn;
size_t width8 = (width & -8) * cn;
width *= cn;
if (ksize == 1)
{
for (i = 0; i < width; i++)
dst[i] = src[i];
return;
}
ksize = ksize*cn;
VecUpdate updateOp;
switch(cn)
{
case 1:
for (i = 0; i < width16; i += 16)
{
const u8* sptr = src + i;
uint8x16_t s = vld1q_u8(sptr);
internal::prefetch(sptr);
for( k = 1; k < ksize; ++k)
s = updateOp(s, vld1q_u8(sptr + k));
vst1q_u8(dst + i, s);
}
for (; i < width8; i += 8)
{
const u8* sptr = src + i;
uint8x8_t s = vld1_u8(sptr);
internal::prefetch(sptr);
for( k = 1; k < ksize; ++k)
s = updateOp(s, vld1_u8(sptr + k));
vst1_u8(dst + i, s);
}
break;
default:
for (i = 0; i < width16; i += 16)
{
uint8x16_t s = vld1q_u8(src + i);
internal::prefetch(src + i);
for (k = cn; k < ksize; k += cn)
s = updateOp(s, vld1q_u8(src + i + k));
vst1q_u8(dst + i, s);
}
for (; i < width8; i += 8)
{
uint8x8_t s = vld1_u8(src + i);
internal::prefetch(src + i);
for (k = cn; k < ksize; k += cn)
s = updateOp(s, vld1_u8(src + i + k));
vst1_u8(dst + i, s);
}
break;
}
ptrdiff_t i0 = i;
for( k = 0; k < (size_t)cn; k++, src++, dst++ )
{
for( i = i0; i <= width - cn*2; i += cn*2 )
{
const u8* s = src + i;
u8 m = s[cn];
for( j = cn*2; j < ksize; j += cn )
m = updateOp(m, s[j]);
dst[i] = updateOp(m, s[0]);
dst[i+cn] = updateOp(m, s[j]);
}
for( ; i < width; i += cn )
{
const u8* s = src + i;
u8 m = s[0];
for( j = cn; j < ksize; j += cn )
m = updateOp(m, s[j]);
dst[i] = m;
}
}
}
template<class VecUpdate>
void MorphColumn(const u8** src, u8* dst, ptrdiff_t dststep, size_t count, size_t width, size_t ksize)
{
size_t i, k;
size_t width32 = width & -32;
VecUpdate updateOp;
uint8x16_t x0,x1,s0,s1;
if (ksize == 3)
{
for (; count > 1; count -= 2, dst += dststep * 2, src += 2)
{
for (i = 0; i < width32; i += 32)
{
const u8* sptr = src[1] + i;
s0 = vld1q_u8(sptr);
s1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
sptr = src[2] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
s0 = updateOp(s0, x0);
s1 = updateOp(s1, x1);
sptr = src[0] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
vst1q_u8(dst+i, updateOp(s0, x0));
vst1q_u8(dst+i+16, updateOp(s1, x1));
sptr = src[3] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
vst1q_u8(dst + dststep + i, updateOp(s0, x0));
vst1q_u8(dst + dststep + i + 16, updateOp(s1, x1));
}
for(; i < width; i++ )
{
u8 s = src[1][i];
for( k = 2; k < ksize; k++ )
s = updateOp(s, src[k][i]);
dst[i] = updateOp(s, src[0][i]);
dst[i+dststep] = updateOp(s, src[k][i]);
}
}
}
else if (ksize > 1)
for (; count > 1; count -= 2, dst += dststep*2, src += 2)
{
for (i = 0; i < width32; i += 32)
{
const u8* sptr = src[1] + i;
s0 = vld1q_u8(sptr);
s1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
for (k = 2; k < ksize; k++)
{
sptr = src[k] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
s0 = updateOp(s0, x0);
s1 = updateOp(s1, x1);
}
sptr = src[0] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
vst1q_u8(dst+i, updateOp(s0, x0));
vst1q_u8(dst+i+16, updateOp(s1, x1));
sptr = src[k] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
vst1q_u8(dst + dststep + i, updateOp(s0, x0));
vst1q_u8(dst + dststep + i + 16, updateOp(s1, x1));
}
for(; i < width; i++ )
{
u8 s = src[1][i];
for( k = 2; k < ksize; k++ )
s = updateOp(s, src[k][i]);
dst[i] = updateOp(s, src[0][i]);
dst[i+dststep] = updateOp(s, src[k][i]);
}
}
for (; count > 0; count--, dst += dststep, src++)
{
for (i = 0; i < width32; i += 32)
{
const u8* sptr = src[0] + i;
s0 = vld1q_u8(sptr);
s1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
for (k = 1; k < ksize; k++)
{
sptr = src[k] + i;
x0 = vld1q_u8(sptr);
x1 = vld1q_u8(sptr + 16);
internal::prefetch(sptr);
s0 = updateOp(s0, x0);
s1 = updateOp(s1, x1);
}
vst1q_u8(dst + i, s0);
vst1q_u8(dst + i + 16, s1);
}
for(; i < width; i++ )
{
u8 s = src[0][i];
for( k = 1; k < ksize; k++ )
s = updateOp(s, src[k][i]);
dst[i] = s;
}
}
}
template <class Op>
inline void morphology(const Size2D &ssize, u32 cn,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
const Size2D &ksize,
size_t anchorX, size_t anchorY,
BORDER_MODE rowBorderType, BORDER_MODE columnBorderType,
const u8 * borderValues, Margin borderMargin)
{
//Temporary buffers common for all iterations
std::vector<u8> _srcRow(cn*(ssize.width + ksize.width - 1));
u8* srcRow = &_srcRow[0];
size_t bufRows = std::max<size_t>(ksize.height + 3, std::max<size_t>(anchorY, ksize.height-anchorY-1)*2+1);
std::vector<u8*> _rows(bufRows);
u8** rows = &_rows[0];
// adjust swidthcn so that the used part of buffers stays compact in memory
ptrdiff_t swidthcn = cn*((ssize.width + 15) & -16);// cn * (aligned ssize.width size)
std::vector<u8> _ringBuf(swidthcn*bufRows+16);
u8 * ringBuf = internal::alignPtr(&_ringBuf[0], 16);
size_t borderLength = std::max<size_t>(ksize.width - 1, 1) * cn;
std::vector<ptrdiff_t> _borderTab(borderLength);
ptrdiff_t * borderTab = &_borderTab[0];
std::vector<u8> _constBorderValue;
std::vector<u8> _constBorderRow;
u8 * constBorderValue = NULL;
u8 * constBorderRow = NULL;
if( rowBorderType == BORDER_MODE_CONSTANT || columnBorderType == BORDER_MODE_CONSTANT )
{
_constBorderValue.resize(borderLength);
constBorderValue = &_constBorderValue[0];
size_t i;
for(i = 0; i < cn; i++)
constBorderValue[i] = borderValues[i];
for(; i < borderLength; i++)
constBorderValue[i] = constBorderValue[i-cn];
if( columnBorderType == BORDER_MODE_CONSTANT )
{
_constBorderRow.resize(cn*(ssize.width + ksize.width - 1 + 16));
constBorderRow = internal::alignPtr(&_constBorderRow[0], 16);
size_t N = (ssize.width + ksize.width - 1)*cn;
for( i = 0; i < N; i += borderLength )
{
size_t n = std::min( borderLength, N - i );
for(size_t j = 0; j < n; j++)
srcRow[i+j] = constBorderValue[j];
}
MorphRow<Op>(srcRow, constBorderRow, ssize.width, cn, ksize.width);
}
}
Size2D wholeSize(ssize.width + borderMargin.left + borderMargin.right,
ssize.height + borderMargin.top + borderMargin.bottom);
ptrdiff_t dx1 = std::max<ptrdiff_t>(anchorX - (ptrdiff_t)borderMargin.left, 0);
ptrdiff_t dx2 = std::max<ptrdiff_t>((ptrdiff_t)ksize.width - anchorX - 1 - (ptrdiff_t)borderMargin.right, 0);
// recompute border tables
if( dx1 > 0 || dx2 > 0 )
{
if( rowBorderType == BORDER_MODE_CONSTANT )
{
memcpy( srcRow, &constBorderValue[0], dx1*cn );
memcpy( srcRow + (ssize.width + ksize.width - 1 - dx2)*cn, &constBorderValue[0], dx2*cn );
}
else
{
ptrdiff_t xofs1 = std::min<ptrdiff_t>(borderMargin.left, anchorX) - borderMargin.left;
ptrdiff_t wholeWidth = wholeSize.width;
ptrdiff_t i, j;
for( i = 0; i < dx1; i++ )
{
ptrdiff_t p0 = (internal::borderInterpolate(i-dx1, wholeWidth, rowBorderType) + xofs1)*cn;
for( j = 0; j < (ptrdiff_t)cn; j++ )
borderTab[i*cn + j] = p0 + j;
}
for( i = 0; i < dx2; i++ )
{
ptrdiff_t p0 = (internal::borderInterpolate(wholeWidth + i, wholeWidth, rowBorderType) + xofs1)*cn;
for( j = 0; j < (ptrdiff_t)cn; j++ )
borderTab[(i + dx1)*cn + j] = p0 + j;
}
}
}
ptrdiff_t startY, startY0, endY, rowCount;
startY = startY0 = std::max<ptrdiff_t>(borderMargin.top - anchorY, 0);
endY = std::min<ptrdiff_t>(borderMargin.top + ssize.height + ksize.height - anchorY - 1, wholeSize.height);
const u8* src = srcBase + (startY - borderMargin.top)*srcStride;
u8* dst = dstBase;
ptrdiff_t width = ssize.width, kwidth = ksize.width;
ptrdiff_t kheight = ksize.height, ay = anchorY;
ptrdiff_t width1 = ssize.width + kwidth - 1;
ptrdiff_t xofs1 = std::min<ptrdiff_t>(borderMargin.left, anchorX);
bool makeBorder = (dx1 > 0 || dx2 > 0) && rowBorderType != BORDER_MODE_CONSTANT;
ptrdiff_t dy = 0, i = 0;
src -= xofs1*cn;
ptrdiff_t count = endY - startY;
rowCount = 0;
for(;; dst += dstStride*i, dy += i)
{
ptrdiff_t dcount = bufRows - ay - startY - rowCount + borderMargin.top;
dcount = dcount > 0 ? dcount : bufRows - kheight + 1;
dcount = std::min(dcount, count);
count -= dcount;
for( ; dcount-- > 0; src += srcStride )
{
ptrdiff_t bi = (startY - startY0 + rowCount) % bufRows;
u8* brow = ringBuf + bi*swidthcn;
if( (size_t)(++rowCount) > bufRows )
{
--rowCount;
++startY;
}
memcpy( srcRow + dx1*cn, src, (width1 - dx2 - dx1)*cn );
if( makeBorder )
{
for( i = 0; i < (ptrdiff_t)(dx1*cn); i++ )
srcRow[i] = src[borderTab[i]];
for( i = 0; i < (ptrdiff_t)(dx2*cn); i++ )
srcRow[i + (width1 - dx2)*cn] = src[borderTab[i+dx1*cn]];
}
MorphRow<Op>(srcRow, brow, width, cn, ksize.width);
}
ptrdiff_t max_i = std::min<ptrdiff_t>(bufRows, ssize.height - dy + (kheight - 1));
for( i = 0; i < max_i; i++ )
{
ptrdiff_t srcY = internal::borderInterpolate(dy + i + borderMargin.top - ay,
wholeSize.height, columnBorderType);
if( srcY < 0 ) // can happen only with constant border type
rows[i] = constBorderRow;
else
{
if( srcY >= startY + rowCount )
break;
ptrdiff_t bi = (srcY - startY0) % bufRows;
rows[i] = ringBuf + bi*swidthcn;
}
}
if( i < kheight )
break;
i -= kheight - 1;
MorphColumn<Op>((const u8**)rows, dst, dstStride, i, ssize.width*cn, ksize.height);
}
}
} // namespace
#endif // CAROTENE_NEON
void erode(const Size2D &ssize, u32 cn,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
const Size2D &ksize,
size_t anchorX, size_t anchorY,
BORDER_MODE rowBorderType, BORDER_MODE columnBorderType,
const u8 * borderValues, Margin borderMargin)
{
internal::assertSupportedConfiguration(ssize.width > 0 && ssize.height > 0 &&
anchorX < ksize.width && anchorY < ksize.height);
#ifdef CAROTENE_NEON
morphology<ErodeVecOp>(ssize, cn, srcBase, srcStride, dstBase, dstStride,
ksize, anchorX, anchorY, rowBorderType, columnBorderType,
borderValues, borderMargin);
#else
(void)cn;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)rowBorderType;
(void)columnBorderType;
(void)borderValues;
(void)borderMargin;
#endif
}
void dilate(const Size2D &ssize, u32 cn,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase, ptrdiff_t dstStride,
const Size2D &ksize,
size_t anchorX, size_t anchorY,
BORDER_MODE rowBorderType, BORDER_MODE columnBorderType,
const u8 * borderValues, Margin borderMargin)
{
internal::assertSupportedConfiguration(ssize.width > 0 && ssize.height > 0 &&
anchorX < ksize.width && anchorY < ksize.height);
#ifdef CAROTENE_NEON
morphology<DilateVecOp>(ssize, cn, srcBase, srcStride, dstBase, dstStride,
ksize, anchorX, anchorY, rowBorderType, columnBorderType,
borderValues, borderMargin);
#else
(void)cn;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)rowBorderType;
(void)columnBorderType;
(void)borderValues;
(void)borderMargin;
#endif
}
} // namespace CAROTENE_NS

1572
3rdparty/carotene/src/mul.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

1310
3rdparty/carotene/src/norm.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

539
3rdparty/carotene/src/opticalflow.cpp vendored Normal file
View File

@@ -0,0 +1,539 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "saturate_cast.hpp"
#include <vector>
#include <float.h> // For FLT_EPSILON
namespace CAROTENE_NS {
#define CV_DESCALE(x,n) (((x) + (1 << ((n)-1))) >> (n))
/*
* Pyramidal Lucas-Kanade Optical Flow level processing
*/
void pyrLKOptFlowLevel(const Size2D &size, s32 cn,
const u8 *prevData, ptrdiff_t prevStride,
const s16 *prevDerivData, ptrdiff_t prevDerivStride,
const u8 *nextData, ptrdiff_t nextStride,
u32 ptCount,
const f32 *prevPts, f32 *nextPts,
u8 *status, f32 *err,
const Size2D &winSize,
u32 terminationCount, f64 terminationEpsilon,
u32 level, u32 maxLevel, bool useInitialFlow, bool getMinEigenVals,
f32 minEigThreshold)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
f32 halfWinX = (winSize.width-1)*0.5f, halfWinY = (winSize.height-1)*0.5f;
s32 cn2 = cn*2;
std::vector<s16> _buf(winSize.total()*(cn + cn2));
s16* IWinBuf = &_buf[0];
s32 IWinBufStride = winSize.width*cn;
s16* derivIWinBuf = &_buf[winSize.total()*cn];
s32 derivIWinBufStride = winSize.width*cn2;
for( u32 ptidx = 0; ptidx < ptCount; ptidx++ )
{
f32 levscale = (1./(1 << level));
u32 ptref = ptidx << 1;
f32 prevPtX = prevPts[ptref+0]*levscale;
f32 prevPtY = prevPts[ptref+1]*levscale;
f32 nextPtX;
f32 nextPtY;
if( level == maxLevel )
{
if( useInitialFlow )
{
nextPtX = nextPts[ptref+0]*levscale;
nextPtY = nextPts[ptref+1]*levscale;
}
else
{
nextPtX = prevPtX;
nextPtY = prevPtY;
}
}
else
{
nextPtX = nextPts[ptref+0]*2.f;
nextPtY = nextPts[ptref+1]*2.f;
}
nextPts[ptref+0] = nextPtX;
nextPts[ptref+1] = nextPtY;
s32 iprevPtX, iprevPtY;
s32 inextPtX, inextPtY;
prevPtX -= halfWinX;
prevPtY -= halfWinY;
iprevPtX = floor(prevPtX);
iprevPtY = floor(prevPtY);
if( iprevPtX < -(s32)winSize.width || iprevPtX >= (s32)size.width ||
iprevPtY < -(s32)winSize.height || iprevPtY >= (s32)size.height )
{
if( level == 0 )
{
if( status )
status[ptidx] = false;
if( err )
err[ptidx] = 0;
}
continue;
}
f32 a = prevPtX - iprevPtX;
f32 b = prevPtY - iprevPtY;
const s32 W_BITS = 14, W_BITS1 = 14;
const f32 FLT_SCALE = 1.f/(1 << 20);
s32 iw00 = round((1.f - a)*(1.f - b)*(1 << W_BITS));
s32 iw01 = round(a*(1.f - b)*(1 << W_BITS));
s32 iw10 = round((1.f - a)*b*(1 << W_BITS));
s32 iw11 = (1 << W_BITS) - iw00 - iw01 - iw10;
s32 dstep = prevDerivStride/sizeof(s16);
f32 A11 = 0, A12 = 0, A22 = 0;
int16x4_t viw00 = vmov_n_s16((s16)iw00);
int16x4_t viw01 = vmov_n_s16((s16)iw01);
int16x4_t viw10 = vmov_n_s16((s16)iw10);
int16x4_t viw11 = vmov_n_s16((s16)iw11);
float32x4_t vA11 = vmovq_n_f32(0);
float32x4_t vA12 = vmovq_n_f32(0);
float32x4_t vA22 = vmovq_n_f32(0);
s32 wwcn = winSize.width*cn;
// extract the patch from the first image, compute covariation matrix of derivatives
s32 x = 0;
for(s32 y = 0; y < (s32)winSize.height; y++ )
{
const u8* src = prevData + prevStride*(y + iprevPtY) + iprevPtX*cn;
const s16* dsrc = prevDerivData + dstep*(y + iprevPtY) + iprevPtX*cn2;
s16* Iptr = IWinBuf + y*IWinBufStride;
s16* dIptr = derivIWinBuf + y*derivIWinBufStride;
internal::prefetch(src + x + prevStride * 2, 0);
for(x = 0; x <= wwcn - 8; x += 8)
{
uint8x8_t vsrc00 = vld1_u8(src + x);
uint8x8_t vsrc10 = vld1_u8(src + x + prevStride);
uint8x8_t vsrc01 = vld1_u8(src + x + cn);
uint8x8_t vsrc11 = vld1_u8(src + x + prevStride + cn);
int16x8_t vs00 = vreinterpretq_s16_u16(vmovl_u8(vsrc00));
int16x8_t vs10 = vreinterpretq_s16_u16(vmovl_u8(vsrc10));
int16x8_t vs01 = vreinterpretq_s16_u16(vmovl_u8(vsrc01));
int16x8_t vs11 = vreinterpretq_s16_u16(vmovl_u8(vsrc11));
int32x4_t vsuml = vmull_s16(vget_low_s16(vs00), viw00);
int32x4_t vsumh = vmull_s16(vget_high_s16(vs10), viw10);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs01), viw01);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs11), viw11);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs10), viw10);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs00), viw00);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs11), viw11);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs01), viw01);
int16x4_t vsumnl = vrshrn_n_s32(vsuml, W_BITS1-5);
int16x4_t vsumnh = vrshrn_n_s32(vsumh, W_BITS1-5);
vst1q_s16(Iptr + x, vcombine_s16(vsumnl, vsumnh));
}
for(; x <= wwcn - 4; x += 4)
{
uint8x8_t vsrc00 = vld1_u8(src + x);
uint8x8_t vsrc10 = vld1_u8(src + x + prevStride);
uint8x8_t vsrc01 = vld1_u8(src + x + cn);
uint8x8_t vsrc11 = vld1_u8(src + x + prevStride + cn);
int16x4_t vs00 = vget_low_s16(vreinterpretq_s16_u16(vmovl_u8(vsrc00)));
int16x4_t vs10 = vget_low_s16(vreinterpretq_s16_u16(vmovl_u8(vsrc10)));
int16x4_t vs01 = vget_low_s16(vreinterpretq_s16_u16(vmovl_u8(vsrc01)));
int16x4_t vs11 = vget_low_s16(vreinterpretq_s16_u16(vmovl_u8(vsrc11)));
int32x4_t vsuml1 = vmull_s16(vs00, viw00);
int32x4_t vsuml2 = vmull_s16(vs01, viw01);
vsuml1 = vmlal_s16(vsuml1, vs10, viw10);
vsuml2 = vmlal_s16(vsuml2, vs11, viw11);
int32x4_t vsuml = vaddq_s32(vsuml1, vsuml2);
int16x4_t vsumnl = vrshrn_n_s32(vsuml, W_BITS1-5);
vst1_s16(Iptr + x, vsumnl);
}
internal::prefetch(dsrc + dstep * 2, 0);
for(x = 0; x <= wwcn - 4; x += 4, dsrc += 4*2, dIptr += 4*2 )
{
#if 0
__asm__ (
"vld2.16 {d0-d1}, [%[dsrc00]] \n\t"
"vld2.16 {d2-d3}, [%[dsrc10]] \n\t"
"vld2.16 {d4-d5}, [%[dsrc01]] \n\t"
"vld2.16 {d6-d7}, [%[dsrc11]] \n\t"
"vmull.s16 q4, d3, %P[viw10] \n\t"
"vmull.s16 q5, d0, %P[viw00] \n\t"
"vmlal.s16 q4, d7, %P[viw11] \n\t"
"vmlal.s16 q5, d4, %P[viw01] \n\t"
"vmlal.s16 q4, d1, %P[viw00] \n\t"
"vmlal.s16 q5, d2, %P[viw10] \n\t"
"vmlal.s16 q4, d5, %P[viw01] \n\t"
"vmlal.s16 q5, d6, %P[viw11] \n\t"
"vrshrn.s32 d13, q4, %[W_BITS1] \n\t"
"vrshrn.s32 d12, q5, %[W_BITS1] \n\t"
"vmull.s16 q3, d13, d13 \n\t"
"vmull.s16 q4, d12, d12 \n\t"
"vmull.s16 q5, d13, d12 \n\t"
"vcvt.f32.s32 q3, q3 \n\t"
"vcvt.f32.s32 q4, q4 \n\t"
"vcvt.f32.s32 q5, q5 \n\t"
"vadd.f32 %q[vA22], q3 \n\t"
"vadd.f32 %q[vA11], q4 \n\t"
"vadd.f32 %q[vA12], q5 \n\t"
"vst2.16 {d12-d13}, [%[out]] \n\t"
: [vA22] "=w" (vA22),
[vA11] "=w" (vA11),
[vA12] "=w" (vA12)
: "0" (vA22),
"1" (vA11),
"2" (vA12),
[out] "r" (dIptr),
[dsrc00] "r" (dsrc),
[dsrc10] "r" (dsrc + dstep),
[dsrc01] "r" (dsrc + cn2),
[dsrc11] "r" (dsrc + dstep + cn2),
[viw00] "w" (viw00),
[viw10] "w" (viw10),
[viw01] "w" (viw01),
[viw11] "w" (viw11),
[W_BITS1] "I" (W_BITS1)
: "d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13"
);
#else
int16x4x2_t vdsrc00 = vld2_s16(dsrc);
int16x4x2_t vdsrc10 = vld2_s16(dsrc + dstep);
int16x4x2_t vdsrc01 = vld2_s16(dsrc + cn2);
int16x4x2_t vdsrc11 = vld2_s16(dsrc + dstep + cn2);
int32x4_t vsumy = vmull_s16(vdsrc10.val[1], viw10);
int32x4_t vsumx = vmull_s16(vdsrc00.val[0], viw00);
vsumy = vmlal_s16(vsumy, vdsrc11.val[1], viw11);
vsumx = vmlal_s16(vsumx, vdsrc01.val[0], viw01);
vsumy = vmlal_s16(vsumy, vdsrc00.val[1], viw00);
vsumx = vmlal_s16(vsumx, vdsrc10.val[0], viw10);
vsumy = vmlal_s16(vsumy, vdsrc01.val[1], viw01);
vsumx = vmlal_s16(vsumx, vdsrc11.val[0], viw11);
int16x4_t vsumny = vrshrn_n_s32(vsumy, W_BITS1);
int16x4_t vsumnx = vrshrn_n_s32(vsumx, W_BITS1);
int32x4_t va22i = vmull_s16(vsumny, vsumny);
int32x4_t va11i = vmull_s16(vsumnx, vsumnx);
int32x4_t va12i = vmull_s16(vsumnx, vsumny);
float32x4_t va22f = vcvtq_f32_s32(va22i);
float32x4_t va11f = vcvtq_f32_s32(va11i);
float32x4_t va12f = vcvtq_f32_s32(va12i);
vA22 = vaddq_f32(vA22, va22f);
vA11 = vaddq_f32(vA11, va11f);
vA12 = vaddq_f32(vA12, va12f);
int16x4x2_t vsum;
vsum.val[0] = vsumnx;
vsum.val[1] = vsumny;
vst2_s16(dIptr, vsum);
#endif
}
for( ; x < wwcn; x++, dsrc += 2, dIptr += 2 )
{
s32 ival = CV_DESCALE(src[x]*iw00 + src[x+cn]*iw01 +
src[x+prevStride]*iw10 + src[x+prevStride+cn]*iw11, W_BITS1-5);
s32 ixval = CV_DESCALE(dsrc[0]*iw00 + dsrc[cn2]*iw01 +
dsrc[dstep]*iw10 + dsrc[dstep+cn2]*iw11, W_BITS1);
s32 iyval = CV_DESCALE(dsrc[1]*iw00 + dsrc[cn2+1]*iw01 + dsrc[dstep+1]*iw10 +
dsrc[dstep+cn2+1]*iw11, W_BITS1);
Iptr[x] = (s16)ival;
dIptr[0] = (s16)ixval;
dIptr[1] = (s16)iyval;
A11 += (f32)(ixval*ixval);
A12 += (f32)(ixval*iyval);
A22 += (f32)(iyval*iyval);
}
}
f32 A11buf[2], A12buf[2], A22buf[2];
vst1_f32(A11buf, vadd_f32(vget_low_f32(vA11), vget_high_f32(vA11)));
vst1_f32(A12buf, vadd_f32(vget_low_f32(vA12), vget_high_f32(vA12)));
vst1_f32(A22buf, vadd_f32(vget_low_f32(vA22), vget_high_f32(vA22)));
A11 += A11buf[0] + A11buf[1];
A12 += A12buf[0] + A12buf[1];
A22 += A22buf[0] + A22buf[1];
A11 *= FLT_SCALE;
A12 *= FLT_SCALE;
A22 *= FLT_SCALE;
f32 D = A11*A22 - A12*A12;
f32 minEig = (A22 + A11 - std::sqrt((A11-A22)*(A11-A22) +
4.f*A12*A12))/(2*winSize.width*winSize.height);
if( err && getMinEigenVals )
err[ptidx] = (f32)minEig;
if( minEig < minEigThreshold || D < FLT_EPSILON )
{
if( level == 0 && status )
status[ptidx] = false;
continue;
}
D = 1.f/D;
nextPtX -= halfWinX;
nextPtY -= halfWinY;
f32 prevDeltaX = 0;
f32 prevDeltaY = 0;
for(u32 j = 0; j < terminationCount; j++ )
{
inextPtX = floor(nextPtX);
inextPtY = floor(nextPtY);
if( inextPtX < -(s32)winSize.width || inextPtX >= (s32)size.width ||
inextPtY < -(s32)winSize.height || inextPtY >= (s32)size.height )
{
if( level == 0 && status )
status[ptidx] = false;
break;
}
a = nextPtX - inextPtX;
b = nextPtY - inextPtY;
iw00 = round((1.f - a)*(1.f - b)*(1 << W_BITS));
iw01 = round(a*(1.f - b)*(1 << W_BITS));
iw10 = round((1.f - a)*b*(1 << W_BITS));
iw11 = (1 << W_BITS) - iw00 - iw01 - iw10;
f32 b1 = 0, b2 = 0;
viw00 = vmov_n_s16((s16)iw00);
viw01 = vmov_n_s16((s16)iw01);
viw10 = vmov_n_s16((s16)iw10);
viw11 = vmov_n_s16((s16)iw11);
float32x4_t vb1 = vmovq_n_f32(0);
float32x4_t vb2 = vmovq_n_f32(0);
for(s32 y = 0; y < (s32)winSize.height; y++ )
{
const u8* Jptr = nextData + nextStride*(y + inextPtY) + inextPtX*cn;
const s16* Iptr = IWinBuf + y*IWinBufStride;
const s16* dIptr = derivIWinBuf + y*derivIWinBufStride;
x = 0;
internal::prefetch(Jptr, nextStride * 2);
internal::prefetch(Iptr, IWinBufStride/2);
internal::prefetch(dIptr, derivIWinBufStride/2);
for( ; x <= wwcn - 8; x += 8, dIptr += 8*2 )
{
uint8x8_t vj00 = vld1_u8(Jptr + x);
uint8x8_t vj10 = vld1_u8(Jptr + x + nextStride);
uint8x8_t vj01 = vld1_u8(Jptr + x + cn);
uint8x8_t vj11 = vld1_u8(Jptr + x + nextStride + cn);
int16x8_t vI = vld1q_s16(Iptr + x);
int16x8x2_t vDerivI = vld2q_s16(dIptr);
int16x8_t vs00 = vreinterpretq_s16_u16(vmovl_u8(vj00));
int16x8_t vs10 = vreinterpretq_s16_u16(vmovl_u8(vj10));
int16x8_t vs01 = vreinterpretq_s16_u16(vmovl_u8(vj01));
int16x8_t vs11 = vreinterpretq_s16_u16(vmovl_u8(vj11));
int32x4_t vsuml = vmull_s16(vget_low_s16(vs00), viw00);
int32x4_t vsumh = vmull_s16(vget_high_s16(vs10), viw10);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs01), viw01);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs11), viw11);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs10), viw10);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs00), viw00);
vsuml = vmlal_s16(vsuml, vget_low_s16(vs11), viw11);
vsumh = vmlal_s16(vsumh, vget_high_s16(vs01), viw01);
int16x4_t vsumnl = vrshrn_n_s32(vsuml, W_BITS1-5);
int16x4_t vsumnh = vrshrn_n_s32(vsumh, W_BITS1-5);
int16x8_t diff = vqsubq_s16(vcombine_s16(vsumnl, vsumnh), vI);
int32x4_t vb1l = vmull_s16(vget_low_s16(diff), vget_low_s16(vDerivI.val[0]));
int32x4_t vb2h = vmull_s16(vget_high_s16(diff), vget_high_s16(vDerivI.val[1]));
int32x4_t vb1i = vmlal_s16(vb1l, vget_high_s16(diff), vget_high_s16(vDerivI.val[0]));
int32x4_t vb2i = vmlal_s16(vb2h, vget_low_s16(diff), vget_low_s16(vDerivI.val[1]));
float32x4_t vb1f = vcvtq_f32_s32(vb1i);
float32x4_t vb2f = vcvtq_f32_s32(vb2i);
vb1 = vaddq_f32(vb1, vb1f);
vb2 = vaddq_f32(vb2, vb2f);
}
for( ; x < wwcn; x++, dIptr += 2 )
{
s32 diff = CV_DESCALE(Jptr[x]*iw00 + Jptr[x+cn]*iw01 +
Jptr[x+nextStride]*iw10 + Jptr[x+nextStride+cn]*iw11,
W_BITS1-5) - Iptr[x];
b1 += (f32)(diff*dIptr[0]);
b2 += (f32)(diff*dIptr[1]);
}
}
f32 bbuf[2];
float32x2_t vb = vpadd_f32(vadd_f32(vget_low_f32(vb1), vget_high_f32(vb1)), vadd_f32(vget_low_f32(vb2), vget_high_f32(vb2)));
vst1_f32(bbuf, vb);
b1 += bbuf[0];
b2 += bbuf[1];
b1 *= FLT_SCALE;
b2 *= FLT_SCALE;
f32 deltaX = (f32)((A12*b2 - A22*b1) * D);
f32 deltaY = (f32)((A12*b1 - A11*b2) * D);
nextPtX += deltaX;
nextPtY += deltaY;
nextPts[ptref+0] = nextPtX + halfWinX;
nextPts[ptref+1] = nextPtY + halfWinY;
if( ((double)deltaX*deltaX + (double)deltaY*deltaY) <= terminationEpsilon )
break;
if( j > 0 && std::abs(deltaX + prevDeltaX) < 0.01 &&
std::abs(deltaY + prevDeltaY) < 0.01 )
{
nextPts[ptref+0] -= deltaX*0.5f;
nextPts[ptref+1] -= deltaY*0.5f;
break;
}
prevDeltaX = deltaX;
prevDeltaY = deltaY;
}
if( status && status[ptidx] && err && level == 0 && !getMinEigenVals )
{
f32 nextPointX = nextPts[ptref+0] - halfWinX;
f32 nextPointY = nextPts[ptref+1] - halfWinY;
s32 inextPointX = floor(nextPointX);
s32 inextPointY = floor(nextPointY);
if( inextPointX < -(s32)winSize.width || inextPointX >= (s32)size.width ||
inextPointY < -(s32)winSize.height || inextPointY >= (s32)size.height )
{
if( status )
status[ptidx] = false;
continue;
}
f32 aa = nextPointX - inextPointX;
f32 bb = nextPointY - inextPointY;
iw00 = round((1.f - aa)*(1.f - bb)*(1 << W_BITS));
iw01 = round(aa*(1.f - bb)*(1 << W_BITS));
iw10 = round((1.f - aa)*bb*(1 << W_BITS));
iw11 = (1 << W_BITS) - iw00 - iw01 - iw10;
f32 errval = 0.f;
for(s32 y = 0; y < (s32)winSize.height; y++ )
{
const u8* Jptr = nextData + nextStride*(y + inextPointY) + inextPointX*cn;
const s16* Iptr = IWinBuf + y*IWinBufStride;
for( x = 0; x < wwcn; x++ )
{
s32 diff = CV_DESCALE(Jptr[x]*iw00 + Jptr[x+cn]*iw01 +
Jptr[x+nextStride]*iw10 + Jptr[x+nextStride+cn]*iw11,
W_BITS1-5) - Iptr[x];
errval += std::abs((f32)diff);
}
}
err[ptidx] = errval / (32*wwcn*winSize.height);
}
}
#else
(void)size;
(void)cn;
(void)prevData;
(void)prevStride;
(void)prevDerivData;
(void)prevDerivStride;
(void)nextData;
(void)nextStride;
(void)prevPts;
(void)nextPts;
(void)status;
(void)err;
(void)winSize;
(void)terminationCount;
(void)terminationEpsilon;
(void)level;
(void)maxLevel;
(void)useInitialFlow;
(void)getMinEigenVals;
(void)minEigThreshold;
(void)ptCount;
#endif
}
}//CAROTENE_NS

274
3rdparty/carotene/src/phase.cpp vendored Normal file
View File

@@ -0,0 +1,274 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <cfloat>
#include <cmath>
#include "common.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
#define FASTATAN2CONST(scale) \
f32 P1((f32)( 0.9997878412794807 * (180.0 / M_PI) * scale)), \
P3((f32)(-0.3258083974640975 * (180.0 / M_PI) * scale)), \
P5((f32)( 0.1555786518463281 * (180.0 / M_PI) * scale)), \
P7((f32)(-0.04432655554792128 * (180.0 / M_PI) * scale)), \
A_90((f32)(90.f * scale)), \
A_180((f32)(180.f * scale)), \
A_360((f32)(360.f * scale)); \
float32x4_t eps(vdupq_n_f32((float)DBL_EPSILON)), \
_90(vdupq_n_f32(A_90)), \
_180(vdupq_n_f32(A_180)), \
_360(vdupq_n_f32(A_360)), \
z(vdupq_n_f32(0.0f)), \
p1(vdupq_n_f32(P1)), \
p3(vdupq_n_f32(P3)), \
p5(vdupq_n_f32(P5)), \
p7(vdupq_n_f32(P7));
#define FASTATAN2SCALAR(y, x, a) \
{ \
f32 ax = std::abs(x), ay = std::abs(y); \
f32 c, c2; \
if (ax >= ay) \
{ \
c = ay / (ax + (float)DBL_EPSILON); \
c2 = c * c; \
a = (((P7 * c2 + P5) * c2 + P3) * c2 + P1) * c; \
} \
else \
{ \
c = ax / (ay + (float)DBL_EPSILON); \
c2 = c * c; \
a = A_90 - (((P7 * c2 + P5) * c2 + P3) * c2 + P1) * c; \
} \
if (x < 0) \
a = A_180 - a; \
if (y < 0) \
a = A_360 - a; \
}
#define FASTATAN2VECTOR(v_y, v_x, a) \
{ \
float32x4_t ax = vabsq_f32(v_x), ay = vabsq_f32(v_y); \
float32x4_t tmin = vminq_f32(ax, ay), tmax = vmaxq_f32(ax, ay); \
float32x4_t c = vmulq_f32(tmin, internal::vrecpq_f32(vaddq_f32(tmax, eps))); \
float32x4_t c2 = vmulq_f32(c, c); \
a = vmulq_f32(c2, p7); \
\
a = vmulq_f32(vaddq_f32(a, p5), c2); \
a = vmulq_f32(vaddq_f32(a, p3), c2); \
a = vmulq_f32(vaddq_f32(a, p1), c); \
\
a = vbslq_f32(vcgeq_f32(ax, ay), a, vsubq_f32(_90, a)); \
a = vbslq_f32(vcltq_f32(v_x, z), vsubq_f32(_180, a), a); \
a = vbslq_f32(vcltq_f32(v_y, z), vsubq_f32(_360, a), a); \
\
}
} // namespace
#endif
void phase(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
u8 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
FASTATAN2CONST(256.0f / 360.0f)
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
float32x4_t v_05 = vdupq_n_f32(0.5f);
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const s16 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
u8 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
int16x8_t v_src00 = vld1q_s16(src0 + j), v_src01 = vld1q_s16(src0 + j + 8);
int16x8_t v_src10 = vld1q_s16(src1 + j), v_src11 = vld1q_s16(src1 + j + 8);
// 0
float32x4_t v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src00)));
float32x4_t v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src10)));
float32x4_t v_dst32f0;
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f0)
v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src00)));
v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src10)));
float32x4_t v_dst32f1;
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f1)
uint16x8_t v_dst16s0 = vcombine_u16(vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f0, v_05))),
vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f1, v_05))));
// 1
v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src01)));
v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src11)));
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f0)
v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src01)));
v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src11)));
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f1)
uint16x8_t v_dst16s1 = vcombine_u16(vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f0, v_05))),
vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f1, v_05))));
vst1q_u8(dst + j, vcombine_u8(vmovn_u16(v_dst16s0),
vmovn_u16(v_dst16s1)));
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vld1q_s16(src0 + j);
int16x8_t v_src1 = vld1q_s16(src1 + j);
float32x4_t v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src0)));
float32x4_t v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src1)));
float32x4_t v_dst32f0;
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f0)
v_src0_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src0)));
v_src1_p = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src1)));
float32x4_t v_dst32f1;
FASTATAN2VECTOR(v_src1_p, v_src0_p, v_dst32f1)
uint16x8_t v_dst = vcombine_u16(vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f0, v_05))),
vmovn_u32(vcvtq_u32_f32(vaddq_f32(v_dst32f1, v_05))));
vst1_u8(dst + j, vmovn_u16(v_dst));
}
for (; j < size.width; j++)
{
f32 x = src0[j], y = src1[j];
f32 a;
FASTATAN2SCALAR(y, x, a)
dst[j] = (u8)(s32)floor(a + 0.5f);
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void phase(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 * dstBase, ptrdiff_t dstStride,
f32 scale)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
FASTATAN2CONST(scale)
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const f32 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const f32 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw8; j += 8)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
float32x4_t v_src00 = vld1q_f32(src0 + j), v_src01 = vld1q_f32(src0 + j + 4);
float32x4_t v_src10 = vld1q_f32(src1 + j), v_src11 = vld1q_f32(src1 + j + 4);
float32x4_t v_dst32f;
// 0
FASTATAN2VECTOR(v_src10, v_src00, v_dst32f)
vst1q_f32(dst + j, v_dst32f);
// 1
FASTATAN2VECTOR(v_src11, v_src01, v_dst32f)
vst1q_f32(dst + j + 4, v_dst32f);
}
if(j + 4 <= size.width)
{
float32x4_t v_src0 = vld1q_f32(src0 + j);
float32x4_t v_src1 = vld1q_f32(src1 + j);
float32x4_t v_dst32f;
FASTATAN2VECTOR(v_src1, v_src0, v_dst32f)
vst1q_f32(dst + j, v_dst32f);
j += 4;
}
for (; j < size.width; j++)
{
f32 a;
FASTATAN2SCALAR(src1[j], src0[j], a)
dst[j] = a;
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)scale;
#endif
}
} // namespace CAROTENE_NS

1414
3rdparty/carotene/src/pyramid.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

460
3rdparty/carotene/src/reduce.cpp vendored Normal file
View File

@@ -0,0 +1,460 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <cstring>
namespace CAROTENE_NS {
void reduceColSum(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s32 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memset(dstBase, 0, size.width*sizeof(s32));
size_t i = 0;
for (; i + 16 <= size.width; i += 16)
{
const u8* src_address = srcBase + i;
int32x4_t sll = vmovq_n_s32(0);
int32x4_t slh = vmovq_n_s32(0);
int32x4_t shl = vmovq_n_s32(0);
int32x4_t shh = vmovq_n_s32(0);
for (size_t h = 0; h < size.height; h += 256)
{
size_t lim = std::min(h + 256, size.height);
uint16x8_t sl = vmovq_n_u16(0);
uint16x8_t sh = vmovq_n_u16(0);
for (size_t k = h; k < lim; ++k, src_address += srcStride)
{
internal::prefetch(src_address + srcStride, 0);
uint8x16_t v = vld1q_u8(src_address);
sl = vaddw_u8(sl, vget_low_u8(v));
sh = vaddw_u8(sh, vget_high_u8(v));
}
int32x4_t vsll = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(sl)));
int32x4_t vslh = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(sl)));
int32x4_t vshl = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(sh)));
int32x4_t vshh = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(sh)));
sll = vqaddq_s32(sll, vsll);
slh = vqaddq_s32(slh, vslh);
shl = vqaddq_s32(shl, vshl);
shh = vqaddq_s32(shh, vshh);
}
vst1q_s32(dstBase + i + 0, sll);
vst1q_s32(dstBase + i + 4, slh);
vst1q_s32(dstBase + i + 8, shl);
vst1q_s32(dstBase + i + 12, shh);
}
for(size_t h = 0; h < size.height; ++h)
{
for(size_t j = i ; j < size.width; j++ )
{
if (((u32)(dstBase[j] += srcBase[j + srcStride * h])) > 0x7fFFffFFu)
dstBase[j] = 0x7fFFffFF;
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
void reduceColMax(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memcpy(dstBase, srcBase, size.width);
size_t i = 0;
for (; i + 16*4 <= size.width; i += 16*4)
{
const u8* src_address = srcBase + i;
uint8x16_t s1 = vld1q_u8(src_address + 0);
uint8x16_t s2 = vld1q_u8(src_address + 16);
uint8x16_t s3 = vld1q_u8(src_address + 32);
uint8x16_t s4 = vld1q_u8(src_address + 48);
src_address += srcStride;
for(size_t h = 1; h < size.height; ++h, src_address += srcStride)
{
internal::prefetch(src_address + srcStride, 0);
internal::prefetch(src_address + srcStride, 32);
uint8x16_t v1 = vld1q_u8(src_address + 0);
uint8x16_t v2 = vld1q_u8(src_address + 16);
uint8x16_t v3 = vld1q_u8(src_address + 32);
uint8x16_t v4 = vld1q_u8(src_address + 48);
s1 = vmaxq_u8(s1, v1);
s2 = vmaxq_u8(s2, v2);
s3 = vmaxq_u8(s3, v3);
s4 = vmaxq_u8(s4, v4);
}
vst1q_u8(dstBase + i + 0, s1);
vst1q_u8(dstBase + i + 16, s2);
vst1q_u8(dstBase + i + 32, s3);
vst1q_u8(dstBase + i + 48, s4);
}
for (; i + 16 <= size.width; i += 16)
{
const u8* src_address = srcBase + i;
uint8x16_t s1 = vld1q_u8(src_address);
src_address += srcStride;
for(size_t h = 1; h < size.height; ++h, src_address += srcStride)
{
internal::prefetch(src_address + srcStride, 0);
uint8x16_t v1 = vld1q_u8(src_address);
s1 = vmaxq_u8(s1, v1);
}
vst1q_u8(dstBase + i, s1);
}
if (i < size.width)
for(size_t h = 1; h < size.height; ++h)
for(size_t j = i ; j < size.width; j++ )
dstBase[j] = std::max(dstBase[j], srcBase[j + srcStride * h]);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
void reduceColMin(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
u8 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memcpy(dstBase, srcBase, size.width);
size_t i = 0;
for (; i + 16*4 <= size.width; i += 16*4)
{
const u8* src_address = srcBase + i;
uint8x16_t s1 = vld1q_u8(src_address + 0);
uint8x16_t s2 = vld1q_u8(src_address + 16);
uint8x16_t s3 = vld1q_u8(src_address + 32);
uint8x16_t s4 = vld1q_u8(src_address + 48);
src_address += srcStride;
for(size_t h = 1; h < size.height; ++h, src_address += srcStride)
{
internal::prefetch(src_address + srcStride, 0);
internal::prefetch(src_address + srcStride, 32);
uint8x16_t v1 = vld1q_u8(src_address + 0);
uint8x16_t v2 = vld1q_u8(src_address + 16);
uint8x16_t v3 = vld1q_u8(src_address + 32);
uint8x16_t v4 = vld1q_u8(src_address + 48);
s1 = vminq_u8(s1, v1);
s2 = vminq_u8(s2, v2);
s3 = vminq_u8(s3, v3);
s4 = vminq_u8(s4, v4);
}
vst1q_u8(dstBase + i + 0, s1);
vst1q_u8(dstBase + i + 16, s2);
vst1q_u8(dstBase + i + 32, s3);
vst1q_u8(dstBase + i + 48, s4);
}
for (; i + 16 <= size.width; i += 16)
{
const u8* src_address = srcBase + i;
uint8x16_t s1 = vld1q_u8(src_address);
src_address += srcStride;
for(size_t h = 1; h < size.height; ++h, src_address += srcStride)
{
internal::prefetch(src_address + srcStride, 0);
uint8x16_t v1 = vld1q_u8(src_address);
s1 = vminq_u8(s1, v1);
}
vst1q_u8(dstBase + i, s1);
}
if (i < size.width)
for(size_t h = 1; h < size.height; ++h)
for(size_t j = i ; j < size.width; j++ )
dstBase[j] = std::min(dstBase[j], srcBase[j + srcStride * h]);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
void reduceColSum(const Size2D &size,
const f32 * srcBase, ptrdiff_t srcStride,
f32 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memcpy(dstBase, srcBase, size.width*sizeof(f32));
size_t srcstep = srcStride/sizeof(f32);
size_t i = 0;
for (; i + 16 <= size.width; i += 16)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address + 0);
float32x4_t s2 = vld1q_f32(src_address + 4);
float32x4_t s3 = vld1q_f32(src_address + 8);
float32x4_t s4 = vld1q_f32(src_address + 12);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
internal::prefetch(src_address + srcstep, 32);
float32x4_t v1 = vld1q_f32(src_address + 0);
float32x4_t v2 = vld1q_f32(src_address + 4);
float32x4_t v3 = vld1q_f32(src_address + 8);
float32x4_t v4 = vld1q_f32(src_address + 12);
s1 = vaddq_f32(s1, v1);
s2 = vaddq_f32(s2, v2);
s3 = vaddq_f32(s3, v3);
s4 = vaddq_f32(s4, v4);
}
vst1q_f32(dstBase + i + 0, s1);
vst1q_f32(dstBase + i + 4, s2);
vst1q_f32(dstBase + i + 8, s3);
vst1q_f32(dstBase + i + 12, s4);
}
for (; i + 4 <= size.width; i += 4)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
float32x4_t v1 = vld1q_f32(src_address);
s1 = vaddq_f32(s1, v1);
}
vst1q_f32(dstBase + i, s1);
}
if (i < size.width)
for(size_t h = 1; h < size.height; ++h)
{
for(size_t j = i ; j < size.width; j++ )
{
dstBase[j] += srcBase[j + srcstep * h];
}
}
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
void reduceColMax(const Size2D &size,
const f32 * srcBase, ptrdiff_t srcStride,
f32 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memcpy(dstBase, srcBase, size.width*sizeof(f32));
size_t srcstep = srcStride/sizeof(f32);
size_t i = 0;
for (; i + 16 <= size.width; i += 16)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address + 0);
float32x4_t s2 = vld1q_f32(src_address + 4);
float32x4_t s3 = vld1q_f32(src_address + 8);
float32x4_t s4 = vld1q_f32(src_address + 12);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
internal::prefetch(src_address + srcstep, 32);
float32x4_t v1 = vld1q_f32(src_address + 0);
float32x4_t v2 = vld1q_f32(src_address + 4);
float32x4_t v3 = vld1q_f32(src_address + 8);
float32x4_t v4 = vld1q_f32(src_address + 12);
s1 = vmaxq_f32(s1, v1);
s2 = vmaxq_f32(s2, v2);
s3 = vmaxq_f32(s3, v3);
s4 = vmaxq_f32(s4, v4);
}
vst1q_f32(dstBase + i + 0, s1);
vst1q_f32(dstBase + i + 4, s2);
vst1q_f32(dstBase + i + 8, s3);
vst1q_f32(dstBase + i + 12, s4);
}
for (; i + 4 <= size.width; i += 4)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
float32x4_t v1 = vld1q_f32(src_address);
s1 = vmaxq_f32(s1, v1);
}
vst1q_f32(dstBase + i, s1);
}
if (i < size.width)
for(size_t h = 1; h < size.height; ++h)
for(size_t j = i ; j < size.width; j++ )
dstBase[j] = std::max(dstBase[j], srcBase[j + srcstep * h]);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
void reduceColMin(const Size2D &size,
const f32 * srcBase, ptrdiff_t srcStride,
f32 * dstBase)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
memcpy(dstBase, srcBase, size.width*sizeof(f32));
size_t srcstep = srcStride/sizeof(f32);
size_t i = 0;
for (; i + 16 <= size.width; i += 16)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address + 0);
float32x4_t s2 = vld1q_f32(src_address + 4);
float32x4_t s3 = vld1q_f32(src_address + 8);
float32x4_t s4 = vld1q_f32(src_address + 12);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
internal::prefetch(src_address + srcstep, 32);
float32x4_t v1 = vld1q_f32(src_address + 0);
float32x4_t v2 = vld1q_f32(src_address + 4);
float32x4_t v3 = vld1q_f32(src_address + 8);
float32x4_t v4 = vld1q_f32(src_address + 12);
s1 = vminq_f32(s1, v1);
s2 = vminq_f32(s2, v2);
s3 = vminq_f32(s3, v3);
s4 = vminq_f32(s4, v4);
}
vst1q_f32(dstBase + i + 0, s1);
vst1q_f32(dstBase + i + 4, s2);
vst1q_f32(dstBase + i + 8, s3);
vst1q_f32(dstBase + i + 12, s4);
}
for (; i + 4 <= size.width; i += 4)
{
const f32* src_address = srcBase + i;
float32x4_t s1 = vld1q_f32(src_address);
src_address += srcstep;
for(size_t h = 1; h < size.height; ++h, src_address += srcstep)
{
internal::prefetch(src_address + srcstep, 0);
float32x4_t v1 = vld1q_f32(src_address);
s1 = vminq_f32(s1, v1);
}
vst1q_f32(dstBase + i, s1);
}
if (i < size.width)
for(size_t h = 1; h < size.height; ++h)
for(size_t j = i ; j < size.width; j++ )
dstBase[j] = std::min(dstBase[j], srcBase[j + srcstep * h]);
#else
(void)size;
(void)srcBase;
(void)srcStride;
(void)dstBase;
#endif
}
} // namespace CAROTENE_NS

694
3rdparty/carotene/src/remap.cpp vendored Normal file
View File

@@ -0,0 +1,694 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "remap.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace internal {
void remapNearestNeighborReplicate(const Size2D size,
const u8 * srcBase,
const s32 * map,
u8 * dstBase, ptrdiff_t dstStride)
{
for (size_t y = 0; y < size.height; ++y)
{
const s32 * map_row = internal::getRowPtr(map, size.width * sizeof(s32), y);
u8 * dst_row = internal::getRowPtr(dstBase, dstStride, y);
for (size_t x = 0; x < size.width; ++x)
{
dst_row[x] = srcBase[map_row[x]];
}
}
}
void remapNearestNeighborConst(const Size2D size,
const u8 * srcBase,
const s32 * map,
u8 * dstBase, ptrdiff_t dstStride,
u8 borderValue)
{
for (size_t y = 0; y < size.height; ++y)
{
const s32 * map_row = internal::getRowPtr(map, size.width * sizeof(s32), y);
u8 * dst_row = internal::getRowPtr(dstBase, dstStride, y);
for (size_t x = 0; x < size.width; ++x)
{
s32 src_idx = map_row[x];
dst_row[x] = src_idx >= 0 ? srcBase[map_row[x]] : borderValue;
}
}
}
void remapLinearReplicate(const Size2D size,
const u8 * srcBase,
const s32 * map,
const f32 * coeffs,
u8 * dstBase, ptrdiff_t dstStride)
{
int16x8_t v_zero16 = vdupq_n_s16(0);
for (size_t y = 0; y < size.height; ++y)
{
const s32 * map_row = internal::getRowPtr(map, size.width * sizeof(s32) * 4, y);
const f32 * coeff_row = internal::getRowPtr(coeffs, size.width * sizeof(f32) * 2, y);
u8 * dst_row = internal::getRowPtr(dstBase, dstStride, y);
size_t x = 0;
for ( ; x + 8 < size.width; x += 8)
{
int16x8_t v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2)]], v_zero16, 0);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 4]], v_src00, 1);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 8]], v_src00, 2);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 12]], v_src00, 3);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 16]], v_src00, 4);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 20]], v_src00, 5);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 24]], v_src00, 6);
v_src00 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 28]], v_src00, 7);
int16x8_t v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 1]], v_zero16, 0);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 5]], v_src01, 1);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 9]], v_src01, 2);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 13]], v_src01, 3);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 17]], v_src01, 4);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 21]], v_src01, 5);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 25]], v_src01, 6);
v_src01 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 29]], v_src01, 7);
int16x8_t v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 2]], v_zero16, 0);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 6]], v_src10, 1);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 10]], v_src10, 2);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 14]], v_src10, 3);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 18]], v_src10, 4);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 22]], v_src10, 5);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 26]], v_src10, 6);
v_src10 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 30]], v_src10, 7);
int16x8_t v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 3]], v_zero16, 0);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 7]], v_src11, 1);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 11]], v_src11, 2);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 15]], v_src11, 3);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 19]], v_src11, 4);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 23]], v_src11, 5);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 27]], v_src11, 6);
v_src11 = vsetq_lane_s16(srcBase[map_row[(x << 2) + 31]], v_src11, 7);
// first part
float32x4_t v_src00_f = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src00)));
float32x4_t v_src10_f = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src10)));
float32x4x2_t v_coeff = vld2q_f32(coeff_row + (x << 1));
float32x4_t v_dst_0 = vmlaq_f32(v_src00_f, vcvtq_f32_s32(vsubl_s16(vget_low_s16(v_src01),
vget_low_s16(v_src00))), v_coeff.val[0]);
float32x4_t v_dst_1 = vmlaq_f32(v_src10_f, vcvtq_f32_s32(vsubl_s16(vget_low_s16(v_src11),
vget_low_s16(v_src10))), v_coeff.val[0]);
float32x4_t v_dst = vmlaq_f32(v_dst_0, vsubq_f32(v_dst_1, v_dst_0), v_coeff.val[1]);
uint16x4_t v_dst0 = vmovn_u32(vcvtq_u32_f32(v_dst));
// second part
v_src00_f = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src00)));
v_src10_f = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src10)));
v_coeff = vld2q_f32(coeff_row + (x << 1) + 8);
v_dst_0 = vmlaq_f32(v_src00_f, vcvtq_f32_s32(vsubl_s16(vget_high_s16(v_src01),
vget_high_s16(v_src00))), v_coeff.val[0]);
v_dst_1 = vmlaq_f32(v_src10_f, vcvtq_f32_s32(vsubl_s16(vget_high_s16(v_src11),
vget_high_s16(v_src10))), v_coeff.val[0]);
v_dst = vmlaq_f32(v_dst_0, vsubq_f32(v_dst_1, v_dst_0), v_coeff.val[1]);
uint16x4_t v_dst1 = vmovn_u32(vcvtq_u32_f32(v_dst));
// store
vst1_u8(dst_row + x, vmovn_u16(vcombine_u16(v_dst0, v_dst1)));
}
for ( ; x < size.width; ++x)
{
s32 src00_index = map_row[(x << 2)];
s32 src10_index = map_row[(x << 2) + 2];
f32 dst_val_0 = (srcBase[map_row[(x << 2) + 1]] - srcBase[src00_index]) * coeff_row[x << 1] +
srcBase[src00_index];
f32 dst_val_1 = (srcBase[map_row[(x << 2) + 3]] - srcBase[src10_index]) * coeff_row[x << 1] +
srcBase[src10_index];
dst_row[x] = floorf((dst_val_1 - dst_val_0) * coeff_row[(x << 1) + 1] + dst_val_0);
}
}
}
void remapLinearConst(const Size2D size,
const u8 * srcBase,
const s32 * map,
const f32 * coeffs,
u8 * dstBase, ptrdiff_t dstStride,
u8 borderValue)
{
int16x8_t v_zero16 = vdupq_n_s16(0);
for (size_t y = 0; y < size.height; ++y)
{
const s32 * map_row = internal::getRowPtr(map, size.width * sizeof(s32) * 4, y);
const f32 * coeff_row = internal::getRowPtr(coeffs, size.width * sizeof(f32) * 2, y);
u8 * dst_row = internal::getRowPtr(dstBase, dstStride, y);
size_t x = 0;
for ( ; x + 8 < size.width; x += 8)
{
int16x8_t v_src00 = vsetq_lane_s16(map_row[(x << 2)] >= 0 ? srcBase[map_row[(x << 2)]] : borderValue, v_zero16, 0);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 4] >= 0 ? srcBase[map_row[(x << 2) + 4]] : borderValue, v_src00, 1);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 8] >= 0 ? srcBase[map_row[(x << 2) + 8]] : borderValue, v_src00, 2);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 12] >= 0 ? srcBase[map_row[(x << 2) + 12]] : borderValue, v_src00, 3);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 16] >= 0 ? srcBase[map_row[(x << 2) + 16]] : borderValue, v_src00, 4);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 20] >= 0 ? srcBase[map_row[(x << 2) + 20]] : borderValue, v_src00, 5);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 24] >= 0 ? srcBase[map_row[(x << 2) + 24]] : borderValue, v_src00, 6);
v_src00 = vsetq_lane_s16(map_row[(x << 2) + 28] >= 0 ? srcBase[map_row[(x << 2) + 28]] : borderValue, v_src00, 7);
int16x8_t v_src01 = vsetq_lane_s16(map_row[(x << 2) + 1] >= 0 ? srcBase[map_row[(x << 2) + 1]] : borderValue, v_zero16, 0);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 5] >= 0 ? srcBase[map_row[(x << 2) + 5]] : borderValue, v_src01, 1);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 9] >= 0 ? srcBase[map_row[(x << 2) + 9]] : borderValue, v_src01, 2);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 13] >= 0 ? srcBase[map_row[(x << 2) + 13]] : borderValue, v_src01, 3);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 17] >= 0 ? srcBase[map_row[(x << 2) + 17]] : borderValue, v_src01, 4);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 21] >= 0 ? srcBase[map_row[(x << 2) + 21]] : borderValue, v_src01, 5);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 25] >= 0 ? srcBase[map_row[(x << 2) + 25]] : borderValue, v_src01, 6);
v_src01 = vsetq_lane_s16(map_row[(x << 2) + 29] >= 0 ? srcBase[map_row[(x << 2) + 29]] : borderValue, v_src01, 7);
int16x8_t v_src10 = vsetq_lane_s16(map_row[(x << 2) + 2] >= 0 ? srcBase[map_row[(x << 2) + 2]] : borderValue, v_zero16, 0);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 6] >= 0 ? srcBase[map_row[(x << 2) + 6]] : borderValue, v_src10, 1);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 10] >= 0 ? srcBase[map_row[(x << 2) + 10]] : borderValue, v_src10, 2);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 14] >= 0 ? srcBase[map_row[(x << 2) + 14]] : borderValue, v_src10, 3);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 18] >= 0 ? srcBase[map_row[(x << 2) + 18]] : borderValue, v_src10, 4);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 22] >= 0 ? srcBase[map_row[(x << 2) + 22]] : borderValue, v_src10, 5);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 26] >= 0 ? srcBase[map_row[(x << 2) + 26]] : borderValue, v_src10, 6);
v_src10 = vsetq_lane_s16(map_row[(x << 2) + 30] >= 0 ? srcBase[map_row[(x << 2) + 30]] : borderValue, v_src10, 7);
int16x8_t v_src11 = vsetq_lane_s16(map_row[(x << 2) + 3] >= 0 ? srcBase[map_row[(x << 2) + 3]] : borderValue, v_zero16, 0);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 7] >= 0 ? srcBase[map_row[(x << 2) + 7]] : borderValue, v_src11, 1);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 11] >= 0 ? srcBase[map_row[(x << 2) + 11]] : borderValue, v_src11, 2);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 15] >= 0 ? srcBase[map_row[(x << 2) + 15]] : borderValue, v_src11, 3);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 19] >= 0 ? srcBase[map_row[(x << 2) + 19]] : borderValue, v_src11, 4);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 23] >= 0 ? srcBase[map_row[(x << 2) + 23]] : borderValue, v_src11, 5);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 27] >= 0 ? srcBase[map_row[(x << 2) + 27]] : borderValue, v_src11, 6);
v_src11 = vsetq_lane_s16(map_row[(x << 2) + 31] >= 0 ? srcBase[map_row[(x << 2) + 31]] : borderValue, v_src11, 7);
// first part
float32x4_t v_src00_f = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src00)));
float32x4_t v_src10_f = vcvtq_f32_s32(vmovl_s16(vget_low_s16(v_src10)));
float32x4x2_t v_coeff = vld2q_f32(coeff_row + (x << 1));
float32x4_t v_dst_0 = vmlaq_f32(v_src00_f, vcvtq_f32_s32(vsubl_s16(vget_low_s16(v_src01),
vget_low_s16(v_src00))), v_coeff.val[0]);
float32x4_t v_dst_1 = vmlaq_f32(v_src10_f, vcvtq_f32_s32(vsubl_s16(vget_low_s16(v_src11),
vget_low_s16(v_src10))), v_coeff.val[0]);
float32x4_t v_dst = vmlaq_f32(v_dst_0, vsubq_f32(v_dst_1, v_dst_0), v_coeff.val[1]);
uint16x4_t v_dst0 = vmovn_u32(vcvtq_u32_f32(v_dst));
// second part
v_src00_f = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src00)));
v_src10_f = vcvtq_f32_s32(vmovl_s16(vget_high_s16(v_src10)));
v_coeff = vld2q_f32(coeff_row + (x << 1) + 8);
v_dst_0 = vmlaq_f32(v_src00_f, vcvtq_f32_s32(vsubl_s16(vget_high_s16(v_src01),
vget_high_s16(v_src00))), v_coeff.val[0]);
v_dst_1 = vmlaq_f32(v_src10_f, vcvtq_f32_s32(vsubl_s16(vget_high_s16(v_src11),
vget_high_s16(v_src10))), v_coeff.val[0]);
v_dst = vmlaq_f32(v_dst_0, vsubq_f32(v_dst_1, v_dst_0), v_coeff.val[1]);
uint16x4_t v_dst1 = vmovn_u32(vcvtq_u32_f32(v_dst));
// store
vst1_u8(dst_row + x, vmovn_u16(vcombine_u16(v_dst0, v_dst1)));
}
for ( ; x < size.width; ++x)
{
s16 src00 = map_row[(x << 2) + 0] >= 0 ? srcBase[map_row[(x << 2) + 0]] : borderValue;
s16 src01 = map_row[(x << 2) + 1] >= 0 ? srcBase[map_row[(x << 2) + 1]] : borderValue;
s16 src10 = map_row[(x << 2) + 2] >= 0 ? srcBase[map_row[(x << 2) + 2]] : borderValue;
s16 src11 = map_row[(x << 2) + 3] >= 0 ? srcBase[map_row[(x << 2) + 3]] : borderValue;
f32 dst_val_0 = (src01 - src00) * coeff_row[(x << 1)] + src00;
f32 dst_val_1 = (src11 - src10) * coeff_row[(x << 1)] + src10;
dst_row[x] = floorf((dst_val_1 - dst_val_0) * coeff_row[(x << 1) + 1] + dst_val_0);
}
}
}
} // namespace internal
#endif // CAROTENE_NEON
bool isRemapNearestNeighborSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
bool isRemapLinearSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
void remapNearestNeighbor(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * tableBase, ptrdiff_t tableStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isRemapNearestNeighborSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[BLOCK_SIZE * BLOCK_SIZE + 16];
s32 * map = alignPtr(_map, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x2_t v_width2 = vdup_n_s32(ssize.width - 1), v_height2 = vdup_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride);
int32x2_t v_step2 = vdup_n_s32(srcStride);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
int32x2_t v_zero2 = vdup_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
const f32 * table_row = getRowPtr(tableBase, tableStride, i + y) + (j << 1);
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0;
for ( ; x + 8 <= blockWidth; x += 8)
{
float32x4x2_t v_table0 = vld2q_f32(table_row + (x << 1)),
v_table1 = vld2q_f32(table_row + (x << 1) + 8);
int32x4_t v_dst_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vcvtq_s32_f32(v_table0.val[0])));
int32x4_t v_dst_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vcvtq_s32_f32(v_table0.val[1])));
int32x4_t v_dst_index = vmlaq_s32(v_dst_x, v_dst_y, v_step4);
vst1q_s32(map_row + x, v_dst_index);
v_dst_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vcvtq_s32_f32(v_table1.val[0])));
v_dst_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vcvtq_s32_f32(v_table1.val[1])));
v_dst_index = vmlaq_s32(v_dst_x, v_dst_y, v_step4);
vst1q_s32(map_row + x + 4, v_dst_index);
}
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4x2_t v_table0 = vld2q_f32(table_row + (x << 1));
int32x4_t v_dst_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vcvtq_s32_f32(v_table0.val[0])));
int32x4_t v_dst_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vcvtq_s32_f32(v_table0.val[1])));
int32x4_t v_dst_index = vmlaq_s32(v_dst_x, v_dst_y, v_step4);
vst1q_s32(map_row + x, v_dst_index);
}
for ( ; x + 2 <= blockWidth; x += 2)
{
float32x2x2_t v_table0 = vld2_f32(table_row + (x << 1));
int32x2_t v_dst_x = vmax_s32(v_zero2, vmin_s32(v_width2, vcvt_s32_f32(v_table0.val[0])));
int32x2_t v_dst_y = vmax_s32(v_zero2, vmin_s32(v_height2, vcvt_s32_f32(v_table0.val[1])));
int32x2_t v_dst_index = vmla_s32(v_dst_x, v_dst_y, v_step2);
vst1_s32(map_row + x, v_dst_index);
}
for ( ; x < blockWidth; ++x)
{
s32 src_x = std::max(0, std::min<s32>(ssize.width - 1, (s32)floorf(table_row[(x << 1) + 0])));
s32 src_y = std::max(0, std::min<s32>(ssize.height - 1, (s32)floorf(table_row[(x << 1) + 1])));
map_row[x] = src_y * srcStride + src_x;
}
}
// make remap
remapNearestNeighborReplicate(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
int32x4_t v_m1_4 = vdupq_n_s32(-1);
int32x2_t v_m1_2 = vdup_n_s32(-1);
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
float32x2_t v_zero2 = vdup_n_f32(0.0f);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
const f32 * table_row = getRowPtr(tableBase, tableStride, i + y) + (j << 1);
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0;
for ( ; x + 8 <= blockWidth; x += 8)
{
float32x4x2_t v_table0 = vld2q_f32(table_row + (x << 1)),
v_table1 = vld2q_f32(table_row + (x << 1) + 8);
int32x4_t v_dst_x = vcvtq_s32_f32(v_table0.val[0]);
int32x4_t v_dst_y = vcvtq_s32_f32(v_table0.val[1]);
uint32x4_t v_mask = vandq_u32(vandq_u32(vcgeq_f32(v_table0.val[0], v_zero4), vcleq_s32(v_dst_x, v_width4)),
vandq_u32(vcgeq_f32(v_table0.val[1], v_zero4), vcleq_s32(v_dst_y, v_height4)));
int32x4_t v_dst_index = vbslq_s32(v_mask, vmlaq_s32(v_dst_x, v_dst_y, v_step4), v_m1_4);
vst1q_s32(map_row + x, v_dst_index);
v_dst_x = vcvtq_s32_f32(v_table1.val[0]);
v_dst_y = vcvtq_s32_f32(v_table1.val[1]);
v_mask = vandq_u32(vandq_u32(vcgeq_f32(v_table1.val[0], v_zero4), vcleq_s32(v_dst_x, v_width4)),
vandq_u32(vcgeq_f32(v_table1.val[1], v_zero4), vcleq_s32(v_dst_y, v_height4)));
v_dst_index = vbslq_s32(v_mask, vmlaq_s32(v_dst_x, v_dst_y, v_step4), v_m1_4);
vst1q_s32(map_row + x + 4, v_dst_index);
}
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4x2_t v_table0 = vld2q_f32(table_row + (x << 1));
int32x4_t v_dst_x = vcvtq_s32_f32(v_table0.val[0]);
int32x4_t v_dst_y = vcvtq_s32_f32(v_table0.val[1]);
uint32x4_t v_mask = vandq_u32(vandq_u32(vcgeq_f32(v_table0.val[0], v_zero4), vcleq_s32(v_dst_x, v_width4)),
vandq_u32(vcgeq_f32(v_table0.val[1], v_zero4), vcleq_s32(v_dst_y, v_height4)));
int32x4_t v_dst_index = vbslq_s32(v_mask, vmlaq_s32(v_dst_x, v_dst_y, v_step4), v_m1_4);
vst1q_s32(map_row + x, v_dst_index);
}
for ( ; x + 2 <= blockWidth; x += 2)
{
float32x2x2_t v_table0 = vld2_f32(table_row + (x << 1));
int32x2_t v_dst_x = vcvt_s32_f32(v_table0.val[0]);
int32x2_t v_dst_y = vcvt_s32_f32(v_table0.val[1]);
uint32x2_t v_mask = vand_u32(vand_u32(vcge_f32(v_table0.val[0], v_zero2), vcle_s32(v_dst_x, v_width2)),
vand_u32(vcge_f32(v_table0.val[1], v_zero2), vcle_s32(v_dst_y, v_height2)));
int32x2_t v_dst_index = vbsl_s32(v_mask, vmla_s32(v_dst_x, v_dst_y, v_step2), v_m1_2);
vst1_s32(map_row + x, v_dst_index);
}
for ( ; x < blockWidth; ++x)
{
s32 src_x = (s32)floorf(table_row[(x << 1) + 0]);
s32 src_y = (s32)floorf(table_row[(x << 1) + 1]);
map_row[x] = (src_x >= 0) && (src_x < (s32)ssize.width) &&
(src_y >= 0) && (src_y < (s32)ssize.height) ? src_y * srcStride + src_x : -1;
}
}
// make remap
remapNearestNeighborConst(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)tableBase;
(void)tableStride;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
void remapLinear(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * tableBase, ptrdiff_t tableStride,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isRemapLinearSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[((BLOCK_SIZE * BLOCK_SIZE) << 2) + 16];
f32 _coeffs[((BLOCK_SIZE * BLOCK_SIZE) << 1) + 16];
s32 * map = alignPtr(_map, 16);
f32 * coeffs = alignPtr(_coeffs, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride), v_1 = vdupq_n_s32(1);
float32x4_t v_zero4f = vdupq_n_f32(0.0f), v_one4f = vdupq_n_f32(1.0f);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
const f32 * table_row = getRowPtr(tableBase, tableStride, i + y) + (j << 1);
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0;
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4x2_t v_table = vld2q_f32(table_row + (x << 1));
int32x4_t v_src_x = vcvtq_s32_f32(v_table.val[0]);
int32x4_t v_src_y = vcvtq_s32_f32(v_table.val[1]);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_table.val[0], vcvtq_f32_s32(v_src_x));
v_coeff.val[1] = vsubq_f32(v_table.val[1], vcvtq_f32_s32(v_src_y));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x = vbslq_s32(v_maskx, vsubq_s32(v_src_x, v_1), v_src_x);
v_src_y = vbslq_s32(v_masky, vsubq_s32(v_src_y, v_1), v_src_y);
int32x4_t v_dst0_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, v_src_x));
int32x4_t v_dst0_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, v_src_y));
int32x4_t v_dst1_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vaddq_s32(v_1, v_src_x)));
int32x4_t v_dst1_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vaddq_s32(v_1, v_src_y)));
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_dst0_x, v_dst0_y, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_dst1_x, v_dst0_y, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_dst0_x, v_dst1_y, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_dst1_x, v_dst1_y, v_step4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
}
for ( ; x < blockWidth; ++x)
{
f32 src_x_f = table_row[(x << 1) + 0];
f32 src_y_f = table_row[(x << 1) + 1];
s32 src0_x = (s32)floorf(src_x_f);
s32 src0_y = (s32)floorf(src_y_f);
coeff_row[x << 1] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
s32 src1_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y + 1));
src0_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y));
s32 src1_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x + 1));
src0_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x));
map_row[(x << 2) + 0] = src0_y * srcStride + src0_x;
map_row[(x << 2) + 1] = src0_y * srcStride + src1_x;
map_row[(x << 2) + 2] = src1_y * srcStride + src0_x;
map_row[(x << 2) + 3] = src1_y * srcStride + src1_x;
}
}
remapLinearReplicate(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
int32x4_t v_m1_4 = vdupq_n_s32(-1);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
const f32 * table_row = getRowPtr(tableBase, tableStride, i + y) + (j << 1);
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0;
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4x2_t v_table = vld2q_f32(table_row + (x << 1));
int32x4_t v_src_x0 = vcvtq_s32_f32(v_table.val[0]);
int32x4_t v_src_y0 = vcvtq_s32_f32(v_table.val[1]);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_table.val[0], vcvtq_f32_s32(v_src_x0));
v_coeff.val[1] = vsubq_f32(v_table.val[1], vcvtq_f32_s32(v_src_y0));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x0 = vbslq_s32(v_maskx, vsubq_s32(v_src_x0, v_1), v_src_x0);
v_src_y0 = vbslq_s32(v_masky, vsubq_s32(v_src_y0, v_1), v_src_y0);
int32x4_t v_src_x1 = vaddq_s32(v_src_x0, v_1);
int32x4_t v_src_y1 = vaddq_s32(v_src_y0, v_1);
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_src_x0, v_src_y0, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_src_x1, v_src_y0, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_src_x0, v_src_y1, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_src_x1, v_src_y1, v_step4);
uint32x4_t v_mask_x0 = vandq_u32(vcgeq_f32(v_table.val[0], v_zero4), vcleq_s32(v_src_x0, v_width4));
uint32x4_t v_mask_x1 = vandq_u32(vcgeq_f32(vaddq_f32(v_table.val[0], v_one4f), v_zero4), vcleq_s32(v_src_x1, v_width4));
uint32x4_t v_mask_y0 = vandq_u32(vcgeq_f32(v_table.val[1], v_zero4), vcleq_s32(v_src_y0, v_height4));
uint32x4_t v_mask_y1 = vandq_u32(vcgeq_f32(vaddq_f32(v_table.val[1], v_one4f), v_zero4), vcleq_s32(v_src_y1, v_height4));
v_dst_index.val[0] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y0), v_dst_index.val[0], v_m1_4);
v_dst_index.val[1] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y0), v_dst_index.val[1], v_m1_4);
v_dst_index.val[2] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y1), v_dst_index.val[2], v_m1_4);
v_dst_index.val[3] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y1), v_dst_index.val[3], v_m1_4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
}
for ( ; x < blockWidth; ++x)
{
f32 src_x_f = table_row[(x << 1) + 0];
f32 src_y_f = table_row[(x << 1) + 1];
s32 src0_x = (s32)floorf(src_x_f), src1_x = src0_x + 1;
s32 src0_y = (s32)floorf(src_y_f), src1_y = src0_y + 1;
coeff_row[(x << 1)] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
map_row[(x << 2) + 0] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src0_x : -1;
map_row[(x << 2) + 1] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src1_x : -1;
map_row[(x << 2) + 2] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src0_x : -1;
map_row[(x << 2) + 3] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src1_x : -1;
}
}
remapLinearConst(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)tableBase;
(void)tableStride;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

85
3rdparty/carotene/src/remap.hpp vendored Normal file
View File

@@ -0,0 +1,85 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_SRC_REMAP_HPP
#define CAROTENE_SRC_REMAP_HPP
#include "common.hpp"
#include <cmath>
#ifdef CAROTENE_NEON
namespace CAROTENE_NS { namespace internal {
enum
{
BLOCK_SIZE = 32
};
void remapNearestNeighborReplicate(const Size2D size,
const u8 * srcBase,
const s32 * map,
u8 * dstBase, ptrdiff_t dstStride);
void remapNearestNeighborConst(const Size2D size,
const u8 * srcBase,
const s32 * map,
u8 * dstBase, ptrdiff_t dstStride,
u8 borderValue);
void remapLinearReplicate(const Size2D size,
const u8 * srcBase,
const s32 * map,
const f32 * coeffs,
u8 * dstBase, ptrdiff_t dstStride);
void remapLinearConst(const Size2D size,
const u8 * srcBase,
const s32 * map,
const f32 * coeffs,
u8 * dstBase, ptrdiff_t dstStride,
u8 borderValue);
} }
#endif // CAROTENE_NEON
#endif // CAROTENE_SRC_REMAP_HPP

2192
3rdparty/carotene/src/resize.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

199
3rdparty/carotene/src/saturate_cast.hpp vendored Normal file
View File

@@ -0,0 +1,199 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_SATURATE_CAST_HPP
#define CAROTENE_SATURATE_CAST_HPP
#include <algorithm>
#include <climits>
#include <cmath>
#if defined _MSC_VER && defined _M_ARM
# include <intrin.h>
#endif
#include <carotene/definitions.hpp>
#include <carotene/types.hpp>
namespace CAROTENE_NS { namespace internal {
#if defined _MSC_VER && defined _M_ARM
__declspec(naked) static void vcvtr_s32_f64_imp(f64 d)
{
(void)d;
__emit(0xEEBD); // vcvtr.s32.f64 s0, d0
__emit(0x0B40);
__emit(0xEE10); // vmov r0, s0
__emit(0x0A10);
__emit(0x4770); // bx lr
}
# define CAROTENE_ROUND_FLT(x) return ((s32 (*)(f64))vcvtr_s32_f64_imp)((f64)x);
# define CAROTENE_ROUND_DBL(x) return ((s32 (*)(f64))vcvtr_s32_f64_imp)(x);
#elif defined CV_ICC || defined __GNUC__
# if defined(__VFP_FP__) && !defined(__SOFTFP__) && !(defined _DEBUG || defined DEBUG) && !defined(__CUDACC__)
# define CAROTENE_ROUND_FLT(value) { \
union { f32 f; s32 i; } result; \
asm ("ftosis %0, %1 \n" : "=w" (result.f) : "w" (value) ); \
return result.i; }
# define CAROTENE_ROUND_DBL(value) { \
union {f32 f; s32 i;} __tegra_result; \
asm ( \
"ftosid %0, %P1\n" \
: "=w" (__tegra_result.f) \
: "w" (value) \
); \
return __tegra_result.i; \
}
# else
# define CAROTENE_ROUND_FLT(x) return (s32)lrintf(value);
# define CAROTENE_ROUND_DBL(value) return (s32)lrint(value);
# endif
#endif
inline s32 round(f32 value)
{
#ifdef CAROTENE_ROUND_FLT
CAROTENE_ROUND_FLT(value)
#else
s32 intpart = (s32)(value);
f32 fractpart = value - intpart;
if ((fractpart != 0.5 && fractpart != -0.5) || ((intpart % 2) != 0))
return (s32)(value + (value >= 0 ? 0.5 : -0.5));
else
return intpart;
#endif
}
inline s32 round(f64 value)
{
#ifdef CAROTENE_ROUND_DBL
CAROTENE_ROUND_DBL(value)
#else
s32 intpart = (s32)(value);
f64 fractpart = value - intpart;
if ((fractpart != 0.5 && fractpart != -0.5) || ((intpart % 2) != 0))
return (s32)(value + (value >= 0 ? 0.5 : -0.5));
else
return intpart;
#endif
}
/////////////// saturate_cast (used in image & signal processing) ///////////////////
template<typename _Tp> inline _Tp saturate_cast(u8 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(s8 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(u16 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(s16 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(u32 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(s32 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(s64 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(u64 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(f32 v) { return _Tp(v); }
template<typename _Tp> inline _Tp saturate_cast(f64 v) { return _Tp(v); }
template<> inline u8 saturate_cast<u8>(s8 v) { return (u8)std::max((s32)v, 0); }
template<> inline u8 saturate_cast<u8>(u16 v) { return (u8)std::min((u32)v, (u32)UCHAR_MAX); }
template<> inline u8 saturate_cast<u8>(s32 v) { return (u8)((u32)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }
template<> inline u8 saturate_cast<u8>(s16 v) { return saturate_cast<u8>((s32)v); }
template<> inline u8 saturate_cast<u8>(u32 v) { return (u8)std::min(v, (u32)UCHAR_MAX); }
template<> inline u8 saturate_cast<u8>(s64 v) { return (u8)((u64)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); }
template<> inline u8 saturate_cast<u8>(u64 v) { return (u8)std::min(v, (u64)UCHAR_MAX); }
template<> inline u8 saturate_cast<u8>(f32 v) { return saturate_cast<u8>(round(v)); }
template<> inline u8 saturate_cast<u8>(f64 v) { return saturate_cast<u8>(round(v)); }
template<> inline s8 saturate_cast<s8>(u8 v) { return (s8)std::min((s32)v, SCHAR_MAX); }
template<> inline s8 saturate_cast<s8>(u16 v) { return (s8)std::min((u32)v, (u32)SCHAR_MAX); }
template<> inline s8 saturate_cast<s8>(s32 v) { return (s8)((u32)(v-SCHAR_MIN) <= (u32)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }
template<> inline s8 saturate_cast<s8>(s16 v) { return saturate_cast<s8>((s32)v); }
template<> inline s8 saturate_cast<s8>(u32 v) { return (s8)std::min(v, (u32)SCHAR_MAX); }
template<> inline s8 saturate_cast<s8>(s64 v) { return (s8)((u64)(v-SCHAR_MIN) <= (u64)UCHAR_MAX ? v : v > 0 ? SCHAR_MAX : SCHAR_MIN); }
template<> inline s8 saturate_cast<s8>(u64 v) { return (s8)std::min(v, (u64)SCHAR_MAX); }
template<> inline s8 saturate_cast<s8>(f32 v) { return saturate_cast<s8>(round(v)); }
template<> inline s8 saturate_cast<s8>(f64 v) { return saturate_cast<s8>(round(v)); }
template<> inline u16 saturate_cast<u16>(s8 v) { return (u16)std::max((s32)v, 0); }
template<> inline u16 saturate_cast<u16>(s16 v) { return (u16)std::max((s32)v, 0); }
template<> inline u16 saturate_cast<u16>(s32 v) { return (u16)((u32)v <= (u32)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }
template<> inline u16 saturate_cast<u16>(u32 v) { return (u16)std::min(v, (u32)USHRT_MAX); }
template<> inline u16 saturate_cast<u16>(s64 v) { return (u16)((u64)v <= (u64)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); }
template<> inline u16 saturate_cast<u16>(u64 v) { return (u16)std::min(v, (u64)USHRT_MAX); }
template<> inline u16 saturate_cast<u16>(f32 v) { return saturate_cast<u16>(round(v)); }
template<> inline u16 saturate_cast<u16>(f64 v) { return saturate_cast<u16>(round(v)); }
template<> inline s16 saturate_cast<s16>(u16 v) { return (s16)std::min((s32)v, SHRT_MAX); }
template<> inline s16 saturate_cast<s16>(s32 v) { return (s16)((u32)(v - SHRT_MIN) <= (u32)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }
template<> inline s16 saturate_cast<s16>(u32 v) { return (s16)std::min(v, (u32)SHRT_MAX); }
template<> inline s16 saturate_cast<s16>(s64 v) { return (s16)((u64)(v - SHRT_MIN) <= (u64)USHRT_MAX ? v : v > 0 ? SHRT_MAX : SHRT_MIN); }
template<> inline s16 saturate_cast<s16>(u64 v) { return (s16)std::min(v, (u64)SHRT_MAX); }
template<> inline s16 saturate_cast<s16>(f32 v) { return saturate_cast<s16>(round(v)); }
template<> inline s16 saturate_cast<s16>(f64 v) { return saturate_cast<s16>(round(v)); }
template<> inline u32 saturate_cast<u32>(s8 v) { return (u32)std::max(v, (s8)0); }
template<> inline u32 saturate_cast<u32>(s16 v) { return (u32)std::max(v, (s16)0); }
template<> inline u32 saturate_cast<u32>(s32 v) { return (u32)std::max(v, (s32)0); }
template<> inline u32 saturate_cast<u32>(s64 v) { return (u32)((u64)v <= (u64)UINT_MAX ? v : v > 0 ? UINT_MAX : 0); }
template<> inline u32 saturate_cast<u32>(u64 v) { return (u32)std::min(v, (u64)UINT_MAX); }
//OpenCV like f32/f64 -> u32 conversion
//we intentionally do not clip negative numbers, to make -1 become 0xffffffff etc.
template<> inline u32 saturate_cast<u32>(f32 v) { return round(v); }
template<> inline u32 saturate_cast<u32>(f64 v) { return round(v); }
//Negative clipping implementation
//template<> inline u32 saturate_cast<u32>(f32 v) { return saturate_cast<u32>(round(v)); }
//template<> inline u32 saturate_cast<u32>(f64 v) { return saturate_cast<u32>(round(v)); }
template<> inline s32 saturate_cast<s32>(u32 v) { return (s32)std::min(v, (u32)INT_MAX); }
template<> inline s32 saturate_cast<s32>(s64 v) { return (s32)((u64)(v - INT_MIN) <= (u64)UINT_MAX ? v : v > 0 ? INT_MAX : INT_MIN); }
template<> inline s32 saturate_cast<s32>(u64 v) { return (s32)std::min(v, (u64)INT_MAX); }
template<> inline s32 saturate_cast<s32>(f32 v) { return round(v); }
template<> inline s32 saturate_cast<s32>(f64 v) { return round(v); }
template<> inline u64 saturate_cast<u64>(s8 v) { return (u64)std::max(v, (s8)0); }
template<> inline u64 saturate_cast<u64>(s16 v) { return (u64)std::max(v, (s16)0); }
template<> inline u64 saturate_cast<u64>(s32 v) { return (u64)std::max(v, (s32)0); }
template<> inline u64 saturate_cast<u64>(s64 v) { return (u64)std::max(v, (s64)0); }
template<> inline s64 saturate_cast<s64>(u64 v) { return (s64)std::min(v, (u64)LLONG_MAX); }
} }
#endif

219
3rdparty/carotene/src/scharr.cpp vendored Normal file
View File

@@ -0,0 +1,219 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <vector>
#include "common.hpp"
namespace CAROTENE_NS {
bool isScharr3x3Supported(const Size2D &size, BORDER_MODE border, s32 dx, s32 dy, Margin borderMargin)
{
return (dx == 0 && dy == 1 &&
isSeparableFilter3x3Supported(size, border, 3, 1, borderMargin)) ||
(dx == 1 && dy == 0 &&
isSeparableFilter3x3Supported(size, border, 1, 3, borderMargin));
}
void Scharr3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
s32 dx, s32 dy,
BORDER_MODE border, u8 borderValue, Margin borderMargin)
{
internal::assertSupportedConfiguration(isScharr3x3Supported(size, border, dx, dy, borderMargin));
#ifdef CAROTENE_NEON
static s16 dw[] = {3, 10, 3};
if (dy == 1)
SeparableFilter3x3(size, srcBase, srcStride, dstBase, dstStride,
3, 1, dw, 0,
border, borderValue, borderMargin);
else
SeparableFilter3x3(size, srcBase, srcStride, dstBase, dstStride,
1, 3, 0, dw,
border, borderValue, borderMargin);
#else
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)borderValue;
#endif
}
void ScharrDeriv(const Size2D &size, s32 cn,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t colsn = size.width*cn;
size_t roiw8 = colsn > 7 ? colsn - 7 : 0;
ptrdiff_t delta = (ptrdiff_t)(((size.width + 2)*cn + 15) & -16);//align size
std::vector<s16> _tempBuf((delta << 1) + 64);
s16 *trow0 = internal::alignPtr(&_tempBuf[cn], 16), *trow1 = internal::alignPtr(trow0 + delta, 16);
int16x8_t vc3 = vmovq_n_s16(3);
int16x8_t vc10 = vmovq_n_s16(10);
uint8x8_t v8c10 = vmov_n_u8(10);
for(size_t y = 0; y < size.height; y++ )
{
const u8* srow0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : size.height > 1 ? 1 : 0);
const u8* srow1 = internal::getRowPtr(srcBase, srcStride, y);
const u8* srow2 = internal::getRowPtr(srcBase, srcStride, y < size.height-1 ? y+1 : size.height > 1 ? size.height-2 : 0);
s16* drow = internal::getRowPtr(dstBase, dstStride, y);
// do vertical convolution
size_t x = 0;
for( ; x < roiw8; x += 8 )
{
internal::prefetch(srow0 + x);
internal::prefetch(srow1 + x);
internal::prefetch(srow2 + x);
#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7 && !defined(__clang__)
__asm__ (
"vld1.8 {d0}, [%[src0]] \n\t"
"vld1.8 {d2}, [%[src2]] \n\t"
"vld1.8 {d1}, [%[src1]] \n\t"
"vaddl.u8 q2, d2, d0 \n\t"
"vmull.u8 q3, d1, %[vc10] \n\t"
"vsubl.u8 q4, d2, d0 \n\t"
"vmla.s16 q3, q2, %q[vc3] \n\t"
"vst1.16 {d8-d9}, [%[out1],:128] \n\t"
"vst1.16 {d6-d7}, [%[out0],:128] \n\t"
:
: [out0] "r" (trow0 + x),
[out1] "r" (trow1 + x),
[src0] "r" (srow0 + x),
[src1] "r" (srow1 + x),
[src2] "r" (srow2 + x),
[vc10] "w" (v8c10), [vc3] "w" (vc3)
: "d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13","d14","d15"
);
#else
uint8x8_t s0 = vld1_u8(srow0 + x);
uint8x8_t s1 = vld1_u8(srow1 + x);
uint8x8_t s2 = vld1_u8(srow2 + x);
int16x8_t s1x10 = vreinterpretq_s16_u16(vmull_u8(s1, v8c10));
int16x8_t s02 = vreinterpretq_s16_u16(vaddl_u8(s2, s0));
int16x8_t t1 = vreinterpretq_s16_u16(vsubl_u8(s2, s0));
int16x8_t t0 = vmlaq_s16(s1x10, s02, vc3);
vst1q_s16(trow1 + x, t1);
vst1q_s16(trow0 + x, t0);
#endif
}
for( ; x < colsn; x++ )
{
trow0[x] = (s16)((srow0[x] + srow2[x])*3 + srow1[x]*10);
trow1[x] = (s16)(srow2[x] - srow0[x]);
}
// make border
size_t x0 = (size.width > 1 ? cn : 0), x1 = (size.width > 1 ? (size.width-2)*cn : 0);
for( s32 k = 0; k < cn; k++ )
{
trow0[-cn + k] = trow0[x0 + k]; trow0[colsn + k] = trow0[x1 + k];
trow1[-cn + k] = trow1[x0 + k]; trow1[colsn + k] = trow1[x1 + k];
}
// do horizontal convolution, interleave the results and store them to dst
x = 0;
for( ; x < roiw8; x += 8 )
{
#if !defined(__aarch64__) && defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__clang__)
__asm__ (
"vld1.16 {d4-d5}, [%[s2ptr]] \n\t"
"vld1.16 {d8-d9}, [%[s4ptr]] \n\t"
"vld1.16 {d6-d7}, [%[s3ptr],:128] \n\t"
"vld1.16 {d0-d1}, [%[s0ptr]] \n\t"
"vld1.16 {d2-d3}, [%[s1ptr]] \n\t"
"vadd.i16 q7, q2, q4 \n\t"
"vmul.s16 q6, q3, %q[vc10] \n\t"
"vsub.s16 q5, q1, q0 \n\t"
"vmla.s16 q6, q7, %q[vc3] \n\t"
"vst2.16 {d10-d13}, [%[out]] \n\t"
:
: [out] "r" (drow + x * 2),
[s0ptr] "r" (trow0 + x - cn),
[s1ptr] "r" (trow0 + x + cn),
[s2ptr] "r" (trow1 + x - cn),
[s3ptr] "r" (trow1 + x),
[s4ptr] "r" (trow1 + x + cn),
[vc10] "w" (vc10), [vc3] "w" (vc3)
: "d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13","d14","d15"
);
#else
int16x8_t s0 = vld1q_s16(trow0 + x - cn);
int16x8_t s1 = vld1q_s16(trow0 + x + cn);
int16x8_t s2 = vld1q_s16(trow1 + x - cn);
int16x8_t s3 = vld1q_s16(trow1 + x);
int16x8_t s4 = vld1q_s16(trow1 + x + cn);
int16x8_t s3x10 = vmulq_s16(s3, vc10);
int16x8_t s24 = vaddq_s16(s2, s4);
int16x8x2_t vr;
vr.val[0] = vsubq_s16(s1, s0);
vr.val[1] = vmlaq_s16(s3x10, s24, vc3);
vst2q_s16(drow + x*2, vr);
#endif
}
for( ; x < colsn; x++ )
{
drow[x*2] = (s16)(trow0[x+cn] - trow0[x-cn]);
drow[x*2+1] = (s16)((trow1[x+cn] + trow1[x-cn])*3 + trow1[x]*10);
}
}
#else
(void)size;
(void)cn;
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

View File

@@ -0,0 +1,109 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "separable_filter.hpp"
namespace CAROTENE_NS {
bool isSeparableFilter3x3Supported(const Size2D &size, BORDER_MODE border, s32 dx, s32 dy, Margin borderMargin)
{
return isSupportedConfiguration() &&
size.width >= 9 && size.height >= 1 &&
(size.height + borderMargin.top + borderMargin.bottom) >= 2 &&
(dx >= 0) && (dx < 4) && (dy >= 0) && (dy < 4) &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REFLECT ||
border == BORDER_MODE_REFLECT101 ||
border == BORDER_MODE_REPLICATE );
}
void SeparableFilter3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
const u8 rowFilter, const u8 colFilter, const s16 *xw, const s16 *yw,
BORDER_MODE border, u8 borderValue, Margin borderMargin)
{
internal::assertSupportedConfiguration(isSeparableFilter3x3Supported(size, border, rowFilter, colFilter, borderMargin));
#ifdef CAROTENE_NEON
if(!((xw || rowFilter < 3) && (yw || colFilter < 3)))
std::abort();//Couldn't call generic filter without provided weights
typedef void (*sepFilter3x3_8u16s_func)(const Size2D&, const u8*, ptrdiff_t, s16*, ptrdiff_t,
const s16*, const s16*, BORDER_MODE, u8, Margin);
static sepFilter3x3_8u16s_func quickFilters[4][4]=
{
/*d0y*/{ /*d0x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_121, internal::ColFilter3x3S16_121>::process,
/*dx*/ internal::sepFilter3x3<internal::RowFilter3x3S16_m101, internal::ColFilter3x3S16_121>::process,
/*d2x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_1m21, internal::ColFilter3x3S16_121>::process,
/*dNx*/ internal::sepFilter3x3<internal::RowFilter3x3S16Generic, internal::ColFilter3x3S16_121>::process},
/*dy */{ /*d0x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_121, internal::ColFilter3x3S16_m101>::process,
/*dx*/ internal::sepFilter3x3<internal::RowFilter3x3S16_m101, internal::ColFilter3x3S16_m101>::process,
/*d2x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_1m21, internal::ColFilter3x3S16_m101>::process,
/*dNx*/ internal::sepFilter3x3<internal::RowFilter3x3S16Generic, internal::ColFilter3x3S16_m101>::process},
/*d2y*/{ /*d0x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_121, internal::ColFilter3x3S16_1m21>::process,
/*dx*/ internal::sepFilter3x3<internal::RowFilter3x3S16_m101, internal::ColFilter3x3S16_1m21>::process,
/*d2x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_1m21, internal::ColFilter3x3S16_1m21>::process,
/*dNx*/ internal::sepFilter3x3<internal::RowFilter3x3S16Generic, internal::ColFilter3x3S16_1m21>::process},
/*dNy*/{ /*d0x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_121, internal::ColFilter3x3S16Generic>::process,
/*dx*/ internal::sepFilter3x3<internal::RowFilter3x3S16_m101, internal::ColFilter3x3S16Generic>::process,
/*d2x*/ internal::sepFilter3x3<internal::RowFilter3x3S16_1m21, internal::ColFilter3x3S16Generic>::process,
/*dNx*/ internal::sepFilter3x3<internal::RowFilter3x3S16Generic, internal::ColFilter3x3S16Generic>::process}
};
quickFilters[colFilter][rowFilter](size, srcBase, srcStride, dstBase, dstStride,
xw, yw, border, borderValue, borderMargin);
#else
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)xw;
(void)yw;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

1161
3rdparty/carotene/src/separable_filter.hpp vendored Normal file

File diff suppressed because it is too large Load Diff

317
3rdparty/carotene/src/sobel.cpp vendored Normal file
View File

@@ -0,0 +1,317 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include <vector>
#include "common.hpp"
namespace CAROTENE_NS {
bool isSobel3x3Supported(const Size2D &size, BORDER_MODE border,
s32 dx, s32 dy, Margin borderMargin)
{
return dx < 3 && dx >= 0 &&
dy < 3 && dy >= 0 &&
(dx + dy) > 0 &&
isSeparableFilter3x3Supported(size, border, dx, dy, borderMargin);
}
void Sobel3x3(const Size2D &size,
const u8 * srcBase, ptrdiff_t srcStride,
s16 * dstBase, ptrdiff_t dstStride,
s32 dx, s32 dy,
BORDER_MODE borderType, u8 borderValue, Margin borderMargin)
{
internal::assertSupportedConfiguration(isSobel3x3Supported(size, borderType, dx, dy, borderMargin));
#ifdef CAROTENE_NEON
SeparableFilter3x3(size, srcBase, srcStride, dstBase, dstStride,
dx, dy, 0, 0,
borderType, borderValue, borderMargin);
#else
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)borderValue;
#endif
}
bool isSobel3x3f32Supported(const Size2D &size, BORDER_MODE border,
s32 dx, s32 dy)
{
return isSupportedConfiguration() &&
dx < 3 && dx >= 0 &&
dy < 3 && dy >= 0 &&
(dx + dy) > 0 &&
size.width >= 4 && size.height >= 2 &&
(border == BORDER_MODE_CONSTANT ||
border == BORDER_MODE_REFLECT ||
border == BORDER_MODE_REFLECT101 ||
border == BORDER_MODE_REPLICATE );
}
void Sobel3x3(const Size2D &size,
const f32 * srcBase, ptrdiff_t srcStride,
f32 * dstBase, ptrdiff_t dstStride,
s32 dx, s32 dy,
BORDER_MODE borderType, f32 borderValue)
{
internal::assertSupportedConfiguration(isSobel3x3f32Supported(size, borderType, dx, dy));
#ifdef CAROTENE_NEON
std::vector<f32> _tmp;
f32 *tmp = 0;
if (borderType == BORDER_MODE_CONSTANT)
{
_tmp.assign(size.width + 2, borderValue);
tmp = &_tmp[1];
}
ptrdiff_t delta = (ptrdiff_t)((size.width + 2 + 31) & -32);//align size
std::vector<f32> _tempBuf((delta << 1) + 64);
f32 *trow0 = internal::alignPtr(&_tempBuf[1], 32), *trow1 = internal::alignPtr(trow0 + delta, 32);
for( size_t y = 0; y < size.height; y++ )
{
const f32* srow0;
const f32* srow1 = internal::getRowPtr(srcBase, srcStride, y);
const f32* srow2;
f32* drow = internal::getRowPtr(dstBase, dstStride, y > 0 ? y-1 : 0);
f32* drow1 = internal::getRowPtr(dstBase, dstStride, y);
if (borderType == BORDER_MODE_REFLECT101) {
srow0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 1);
srow2 = internal::getRowPtr(srcBase, srcStride, y < size.height-1 ? y+1 : size.height-2);
} else if (borderType == BORDER_MODE_CONSTANT) {
srow0 = y > 0 ? internal::getRowPtr(srcBase, srcStride, y-1) : tmp;
srow2 = y < size.height-1 ? internal::getRowPtr(srcBase, srcStride, y+1) : tmp;
} else { // BORDER_MODE_REFLECT || BORDER_MODE_REPLICATE
srow0 = internal::getRowPtr(srcBase, srcStride, y > 0 ? y-1 : 0);
srow2 = internal::getRowPtr(srcBase, srcStride, y < size.height-1 ? y+1 : size.height-1);
}
float32x4_t tprev = vmovq_n_f32(0.f);
float32x4_t tcurr = vmovq_n_f32(0.f);
float32x4_t tnext = vmovq_n_f32(0.f);
float32x4_t t0, t1, t2;
// do vertical convolution
size_t x = 0, bcolsn = y + 2 < size.height ? size.width : (size.width - 4);
for( ; x <= bcolsn; x += 4 )
{
internal::prefetch(srow0 + x);
internal::prefetch(srow1 + x);
internal::prefetch(srow2 + x);
float32x4_t x0 = vld1q_f32(srow0 + x);
float32x4_t x1 = vld1q_f32(srow1 + x);
float32x4_t x2 = vld1q_f32(srow2 + x);
tprev = tcurr;
tcurr = tnext;
if(!dy)
{
tnext = vaddq_f32(vaddq_f32(vaddq_f32(x1, x1), x2), x0);
}
else if(dy == 2)
{
tnext = vsubq_f32(vsubq_f32(x2, x1), vsubq_f32(x1, x0));
}
else
{
tnext = vsubq_f32(x2, x0);
}
if(!x) {
tcurr = tnext;
// make border
if (borderType == BORDER_MODE_CONSTANT)
{
tcurr = vsetq_lane_f32(borderValue,tcurr, 3);
}
else if (borderType == BORDER_MODE_REFLECT101)
{
tcurr = vsetq_lane_f32(vgetq_lane_f32(tcurr, 1),tcurr, 3);
}
else // BORDER_MODE_REFLECT || BORDER_MODE_REPLICATE
{
tcurr = vsetq_lane_f32(vgetq_lane_f32(tcurr, 0),tcurr, 3);
}
continue;
}
internal::prefetch(trow0 + x);
internal::prefetch(trow1 + x);
t0 = vextq_f32(tprev, tcurr, 3);
t1 = tcurr;
t2 = vextq_f32(tcurr, tnext, 1);
if(!dx)
{
t0 = vaddq_f32(t0, vaddq_f32(vaddq_f32(t1, t1), t2));
}
else if(dx == 2)
{
t0 = vsubq_f32(vsubq_f32(t2, t1), vsubq_f32(t1, t0));
}
else
{
t0 = vsubq_f32(t2, t0);
}
if(!(y%2))
{
vst1q_f32(trow0 + x - 4, t0);
}
else
{
vst1q_f32(trow1 + x - 4, t0);
}
}
x -= 4;
if(x == size.width){
x--;
}
f32 prevx = 0, rowx = 0, nextx = 0;
if(!dy)
{
prevx = x > 0 ? srow2[x-1] + 2*srow1[x-1] + srow0[x-1] :
(borderType == BORDER_MODE_REFLECT101 ? srow2[1] + 2*srow1[1] + srow0[1] :
(borderType == BORDER_MODE_CONSTANT ? 4*borderValue :
srow2[0] + 2*srow1[0] + srow0[0]) );
rowx = srow2[x] + 2*srow1[x] + srow0[x];
}
else if(dy == 2)
{
prevx = x > 0 ? srow2[x-1] - 2*srow1[x-1] + srow0[x-1] :
(borderType == BORDER_MODE_REFLECT101 ? srow2[1] - 2*srow1[1] + srow0[1] :
(borderType == BORDER_MODE_CONSTANT ? 0.f :
srow2[0] - 2*srow1[0] + srow0[0]) );
rowx = srow2[x] - 2*srow1[x] + srow0[x];
}
else
{
prevx = x > 0 ? srow2[x-1] - srow0[x-1] :
(borderType == BORDER_MODE_REFLECT101 ? srow2[1] - srow0[1] :
(borderType == BORDER_MODE_CONSTANT ? 0.f :
srow2[0] - srow0[0]) );
rowx = srow2[x] - srow0[x];
}
for( ; x < size.width; x++ )
{
if(x+1 == size.width) {
// make border
if (borderType == BORDER_MODE_CONSTANT)
{
if(!dy) {
nextx = 4*borderValue;
} else {
nextx = 0.f;
}
} else if (borderType == BORDER_MODE_REFLECT101)
{
if(!dy) {
nextx = srow2[x-1] + 2*srow1[x-1] + srow0[x-1];
} else if(dy == 2) {
nextx = srow2[x-1] - 2*srow1[x-1] + srow0[x-1];
} else {
nextx = srow2[x-1] - srow0[x-1];
}
} else {
if(!dy) {
nextx = srow2[x] + 2*srow1[x] + srow0[x];
} else if(dy == 2) {
nextx = srow2[x] - 2*srow1[x] + srow0[x];
} else {
nextx = srow2[x] - srow0[x];
}
}
} else {
if(!dy) {
nextx = srow2[x+1] + 2*srow1[x+1] + srow0[x+1];
} else if(dy == 2) {
nextx = srow2[x+1] - 2*srow1[x+1] + srow0[x+1];
} else {
nextx = srow2[x+1] - srow0[x+1];
}
}
f32 res;
if(dx==1) {
res = nextx - prevx;
} else if(!dx) {
res = prevx + 2*rowx + nextx;
} else {
res = prevx - 2*rowx + nextx;
}
if(!(y%2)) {
*(trow0+x) = res;
} else {
*(trow1+x) = res;
}
prevx = rowx;
rowx = nextx;
}
if(y>0) {
for(size_t x1 = 0; x1 < size.width; x1++ )
{
if(y%2)
*(drow + x1) = trow0[x1];
else
*(drow + x1) = trow1[x1];
}
}
if(y == size.height-1) {
for(size_t x1 = 0; x1 < size.width; x1++ )
{
if(!(y%2))
*(drow1 + x1) = trow0[x1];
else
*(drow1 + x1) = trow1[x1];
}
}
}
#else
(void)srcBase;
(void)srcStride;
(void)dstBase;
(void)dstStride;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

621
3rdparty/carotene/src/sub.cpp vendored Normal file
View File

@@ -0,0 +1,621 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
#ifdef CAROTENE_NEON
namespace {
template <typename T, typename WT>
struct SubWrap
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vsubq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vsub(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = (T)((WT)src0[0] - (WT)src1[0]);
}
};
template <typename T, typename WT>
struct SubSaturate
{
typedef T type;
void operator() (const typename internal::VecTraits<T>::vec128 & v_src0,
const typename internal::VecTraits<T>::vec128 & v_src1,
typename internal::VecTraits<T>::vec128 & v_dst) const
{
v_dst = internal::vqsubq(v_src0, v_src1);
}
void operator() (const typename internal::VecTraits<T>::vec64 & v_src0,
const typename internal::VecTraits<T>::vec64 & v_src1,
typename internal::VecTraits<T>::vec64 & v_dst) const
{
v_dst = internal::vqsub(v_src0, v_src1);
}
void operator() (const T * src0, const T * src1, T * dst) const
{
dst[0] = internal::saturate_cast<T>((WT)src0[0] - (WT)src1[0]);
}
};
} // namespace
#endif
void sub(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
u8 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<u8, s16>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<u8, s16>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const u8 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
u16 * dstu16 = internal::getRowPtr((u16 *)dstBase, dstStride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw32; j += 32)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src00 = vld1q_u8(src0 + j), v_src01 = vld1q_u8(src0 + j + 16);
uint8x16_t v_src10 = vld1q_u8(src1 + j), v_src11 = vld1q_u8(src1 + j + 16);
vst1q_u16(dstu16 + j, vsubl_u8(vget_low_u8(v_src00), vget_low_u8(v_src10)));
vst1q_u16(dstu16 + j + 8, vsubl_u8(vget_high_u8(v_src00), vget_high_u8(v_src10)));
vst1q_u16(dstu16 + j + 16, vsubl_u8(vget_low_u8(v_src01), vget_low_u8(v_src11)));
vst1q_u16(dstu16 + j + 24, vsubl_u8(vget_high_u8(v_src01), vget_high_u8(v_src11)));
}
for (; j < roiw8; j += 8)
{
uint8x8_t v_src0 = vld1_u8(src0 + j);
uint8x8_t v_src1 = vld1_u8(src1 + j);
vst1q_u16(dstu16 + j, vsubl_u8(v_src0, v_src1));
}
for (; j < size.width; j++)
dst[j] = (s16)src0[j] - (s16)src1[j];
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void sub(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
f32 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw32 = size.width >= 31 ? size.width - 31 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const u8 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
f32 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
for (; j < roiw32; j += 32)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src00 = vld1q_u8(src0 + j), v_src01 = vld1q_u8(src0 + j + 16);
uint8x16_t v_src10 = vld1q_u8(src1 + j), v_src11 = vld1q_u8(src1 + j + 16);
int16x8_t vsl = vreinterpretq_s16_u16(vsubl_u8( vget_low_u8(v_src00), vget_low_u8(v_src10)));
int16x8_t vsh = vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(v_src00), vget_high_u8(v_src10)));
vst1q_f32(dst + j + 0, vcvtq_f32_s32(vmovl_s16( vget_low_s16(vsl) )));
vst1q_f32(dst + j + 4, vcvtq_f32_s32(vmovl_s16( vget_high_s16(vsl) )));
vst1q_f32(dst + j + 8, vcvtq_f32_s32(vmovl_s16( vget_low_s16(vsh) )));
vst1q_f32(dst + j + 12, vcvtq_f32_s32(vmovl_s16( vget_high_s16(vsh) )));
vsl = vreinterpretq_s16_u16(vsubl_u8( vget_low_u8(v_src01), vget_low_u8(v_src11)));
vsh = vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(v_src01), vget_high_u8(v_src11)));
vst1q_f32(dst + j + 16, vcvtq_f32_s32(vmovl_s16( vget_low_s16(vsl) )));
vst1q_f32(dst + j + 20, vcvtq_f32_s32(vmovl_s16( vget_high_s16(vsl) )));
vst1q_f32(dst + j + 24, vcvtq_f32_s32(vmovl_s16( vget_low_s16(vsh) )));
vst1q_f32(dst + j + 28, vcvtq_f32_s32(vmovl_s16( vget_high_s16(vsh) )));
}
for (; j < roiw8; j += 8)
{
uint8x8_t v_src0 = vld1_u8(src0 + j);
uint8x8_t v_src1 = vld1_u8(src1 + j);
int16x8_t vs = vreinterpretq_s16_u16(vsubl_u8(v_src0, v_src1));
vst1q_f32(dst + j + 0, vcvtq_f32_s32(vmovl_s16( vget_low_s16(vs) )));
vst1q_f32(dst + j + 4, vcvtq_f32_s32(vmovl_s16( vget_high_s16(vs) )));
}
for(; j < size.width; j++)
dst[j] = (f32)src0[j] - (f32)src1[j];
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
void sub(const Size2D &size,
const u8 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const s16 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (policy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src0 = vld1q_u8(src0 + j);
int16x8_t v_src00 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src0)));
int16x8_t v_src01 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src0)));
int16x8_t v_src10 = vld1q_s16(src1 + j), v_src11 = vld1q_s16(src1 + j + 8);
int16x8_t v_dst0 = vqsubq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vqsubq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src0 + j)));
int16x8_t v_src1 = vld1q_s16(src1 + j);
int16x8_t v_dst = vqsubq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = internal::saturate_cast<s16>((s32)src0[j] - (s32)src1[j]);
}
else
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
uint8x16_t v_src0 = vld1q_u8(src0 + j);
int16x8_t v_src00 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src0)));
int16x8_t v_src01 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src0)));
int16x8_t v_src10 = vld1q_s16(src1 + j), v_src11 = vld1q_s16(src1 + j + 8);
int16x8_t v_dst0 = vsubq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vsubq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src0 + j)));
int16x8_t v_src1 = vld1q_s16(src1 + j);
int16x8_t v_dst = vsubq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = (s16)((s32)src0[j] - (s32)src1[j]);
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const u8 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
size_t roiw16 = size.width >= 15 ? size.width - 15 : 0;
size_t roiw8 = size.width >= 7 ? size.width - 7 : 0;
for (size_t i = 0; i < size.height; ++i)
{
const s16 * src0 = internal::getRowPtr(src0Base, src0Stride, i);
const u8 * src1 = internal::getRowPtr(src1Base, src1Stride, i);
s16 * dst = internal::getRowPtr(dstBase, dstStride, i);
size_t j = 0;
if (policy == CONVERT_POLICY_SATURATE)
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
int16x8_t v_src00 = vld1q_s16(src0 + j), v_src01 = vld1q_s16(src0 + j + 8);
uint8x16_t v_src1 = vld1q_u8(src1 + j);
int16x8_t v_src10 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src1)));
int16x8_t v_src11 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src1)));
int16x8_t v_dst0 = vqsubq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vqsubq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vld1q_s16(src0 + j);
int16x8_t v_src1 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src1 + j)));
int16x8_t v_dst = vqsubq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = internal::saturate_cast<s16>((s32)src0[j] - (s32)src1[j]);
}
else
{
for (; j < roiw16; j += 16)
{
internal::prefetch(src0 + j);
internal::prefetch(src1 + j);
int16x8_t v_src00 = vld1q_s16(src0 + j), v_src01 = vld1q_s16(src0 + j + 8);
uint8x16_t v_src1 = vld1q_u8(src1 + j);
int16x8_t v_src10 = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(v_src1)));
int16x8_t v_src11 = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(v_src1)));
int16x8_t v_dst0 = vsubq_s16(v_src00, v_src10);
int16x8_t v_dst1 = vsubq_s16(v_src01, v_src11);
vst1q_s16(dst + j, v_dst0);
vst1q_s16(dst + j + 8, v_dst1);
}
for (; j < roiw8; j += 8)
{
int16x8_t v_src0 = vld1q_s16(src0 + j);
int16x8_t v_src1 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(src1 + j)));
int16x8_t v_dst = vsubq_s16(v_src0, v_src1);
vst1q_s16(dst + j, v_dst);
}
for (; j < size.width; j++)
dst[j] = (s16)((s32)src0[j] - (s32)src1[j]);
}
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const s8 * src0Base, ptrdiff_t src0Stride,
const s8 * src1Base, ptrdiff_t src1Stride,
s8 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<s8, s16>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<s8, s16>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const s16 * src0Base, ptrdiff_t src0Stride,
const s16 * src1Base, ptrdiff_t src1Stride,
s16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<s16, s32>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<s16, s32>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const u16 * src0Base, ptrdiff_t src0Stride,
const u16 * src1Base, ptrdiff_t src1Stride,
u16 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<u16, s32>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<u16, s32>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const s32 * src0Base, ptrdiff_t src0Stride,
const s32 * src1Base, ptrdiff_t src1Stride,
s32 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<s32, s64>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<s32, s64>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const u32 * src0Base, ptrdiff_t src0Stride,
const u32 * src1Base, ptrdiff_t src1Stride,
u32 *dstBase, ptrdiff_t dstStride,
CONVERT_POLICY policy)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
if (policy == CONVERT_POLICY_SATURATE)
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubSaturate<u32, s64>());
}
else
{
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<u32, s64>());
}
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
(void)policy;
#endif
}
void sub(const Size2D &size,
const f32 * src0Base, ptrdiff_t src0Stride,
const f32 * src1Base, ptrdiff_t src1Stride,
f32 *dstBase, ptrdiff_t dstStride)
{
internal::assertSupportedConfiguration();
#ifdef CAROTENE_NEON
internal::vtransform(size,
src0Base, src0Stride,
src1Base, src1Stride,
dstBase, dstStride,
SubWrap<f32, f32>());
#else
(void)size;
(void)src0Base;
(void)src0Stride;
(void)src1Base;
(void)src1Stride;
(void)dstBase;
(void)dstStride;
#endif
}
} // namespace CAROTENE_NS

385
3rdparty/carotene/src/sum.cpp vendored Normal file
View File

@@ -0,0 +1,385 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2012-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include "vtransform.hpp"
namespace CAROTENE_NS {
bool isSumSupported(u32 channels)
{
return (channels && channels < 5);
}
void sum(const Size2D &_size,
const u8 * srcBase, ptrdiff_t srcStride,
u32 * sumdst, u32 channels)
{
internal::assertSupportedConfiguration(isSumSupported(channels));
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
const ptrdiff_t width = size.width * channels;
for(size_t k = 0; k < size.height; ++k)
{
const u8* src = internal::getRowPtr( srcBase, srcStride, k);
ptrdiff_t i = 0;
if (channels == 3)
{
uint32x4_t vs1231 = vdupq_n_u32(0);
uint32x4_t vs3123 = vdupq_n_u32(0);
uint32x4_t vs2312 = vdupq_n_u32(0);
for (; i <= width - 257*8*3; i += 257*8*3, src += 257*8*3)
{
uint16x8_t s1 = vmovl_u8(vld1_u8(src + 0));
uint16x8_t s2 = vmovl_u8(vld1_u8(src + 8));
uint16x8_t s3 = vmovl_u8(vld1_u8(src + 16));
for (ptrdiff_t j = 8*3; j < 257*8*3; j+= 8*3)
{
internal::prefetch(src + j + 24);
s1 = vaddw_u8(s1, vld1_u8(src + j + 0));
s2 = vaddw_u8(s2, vld1_u8(src + j + 8));
s3 = vaddw_u8(s3, vld1_u8(src + j + 16));
}
vs1231 = vqaddq_u32(vs1231, vaddl_u16(vget_low_u16(s1), vget_high_u16(s2)));
vs3123 = vqaddq_u32(vs3123, vaddl_u16(vget_low_u16(s2), vget_high_u16(s3)));
vs2312 = vqaddq_u32(vs2312, vaddl_u16(vget_low_u16(s3), vget_high_u16(s1)));
}
if (i <= width - 8*3)
{
uint16x8_t s1 = vmovl_u8(vld1_u8(src + 0));
uint16x8_t s2 = vmovl_u8(vld1_u8(src + 8));
uint16x8_t s3 = vmovl_u8(vld1_u8(src + 16));
for (i += 8*3, src += 8*3; i <= width - 8*3; i += 8*3, src += 8*3)
{
internal::prefetch(src + 24);
s1 = vaddw_u8(s1, vld1_u8(src + 0));
s2 = vaddw_u8(s2, vld1_u8(src + 8));
s3 = vaddw_u8(s3, vld1_u8(src + 16));
}
vs1231 = vqaddq_u32(vs1231, vaddl_u16(vget_low_u16(s1), vget_high_u16(s2)));
vs3123 = vqaddq_u32(vs3123, vaddl_u16(vget_low_u16(s2), vget_high_u16(s3)));
vs2312 = vqaddq_u32(vs2312, vaddl_u16(vget_low_u16(s3), vget_high_u16(s1)));
}
u32 sum[12];
vst1q_u32(sum+0, vs1231);
vst1q_u32(sum+4, vs2312);
vst1q_u32(sum+8, vs3123);
for (; i < width; i += 3, src += 3)
{
sumdst[0] += src[0];
sumdst[1] += src[1];
sumdst[2] += src[2];
}
sumdst[0] += sum[0] + sum[3] + sum[6] + sum[9];
sumdst[1] += sum[1] + sum[4] + sum[7] + sum[10];
sumdst[2] += sum[2] + sum[5] + sum[8] + sum[11];
}
else
{
uint32x4_t vs = vdupq_n_u32(0);
for (; i <= width - 257*8; i += 257*8, src += 257 * 8)
{
uint16x8_t s1 = vmovl_u8(vld1_u8(src));
for (int j = 8; j < 257 * 8; j += 8)
{
internal::prefetch(src + j);
s1 = vaddw_u8(s1, vld1_u8(src + j));
}
vs = vqaddq_u32(vs, vaddl_u16(vget_low_u16(s1), vget_high_u16(s1)));
}
if (i < width - 7)
{
uint16x8_t s1 = vmovl_u8(vld1_u8(src));
for(i+=8,src+=8; i < width-7; i+=8,src+=8)
{
internal::prefetch(src);
s1 = vaddw_u8(s1, vld1_u8(src));
}
vs = vqaddq_u32(vs, vaddl_u16(vget_low_u16(s1), vget_high_u16(s1)));
}
if (channels == 1)
{
uint32x2_t vs2 = vqadd_u32(vget_low_u32(vs), vget_high_u32(vs));
uint32x2_t vs1 = vreinterpret_u32_u64(vpaddl_u32(vs2));
u32 s0 = vget_lane_u32(vs1, 0);
for(; i < width; ++i,++src)
s0 += src[0];
sumdst[0] += s0;
}
else if (channels == 4)
{
vst1q_u32(sumdst, vqaddq_u32(vs, vld1q_u32(sumdst)));
for(; i < width; i+=4,src+=4)
{
sumdst[0] += src[0];
sumdst[1] += src[1];
sumdst[2] += src[2];
sumdst[3] += src[3];
}
}
else//if (channels == 2)
{
uint32x2_t vs2 = vqadd_u32(vget_low_u32(vs), vget_high_u32(vs));
vst1_u32(sumdst, vqadd_u32(vs2, vld1_u32(sumdst)));
for(; i < width; i+=2,src+=2)
{
sumdst[0] += src[0];
sumdst[1] += src[1];
}
}
}//channels != 3
}
#else
(void)_size;
(void)srcBase;
(void)srcStride;
(void)sumdst;
(void)channels;
#endif
}
void sum(const Size2D &_size,
const f32 * srcBase, ptrdiff_t srcStride,
f64 * sumdst, u32 channels)
{
internal::assertSupportedConfiguration(isSumSupported(channels));
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width))
{
size.width *= size.height;
size.height = 1;
}
const ptrdiff_t width = size.width * channels;
for(size_t k = 0; k < size.height; ++k)
{
const f32* src = internal::getRowPtr( srcBase, srcStride, k);
ptrdiff_t i = 0;
if (channels == 3)
{
float32x4_t vs1231 = vdupq_n_f32(0);
float32x4_t vs2312 = vdupq_n_f32(0);
float32x4_t vs3123 = vdupq_n_f32(0);
for(; i <= width-12; i += 12)
{
internal::prefetch(src + i + 12);
vs1231 = vaddq_f32(vs1231, vld1q_f32(src + i + 0));
vs2312 = vaddq_f32(vs2312, vld1q_f32(src + i + 4));
vs3123 = vaddq_f32(vs3123, vld1q_f32(src + i + 8));
}
f32 s[12];
vst1q_f32(s + 0, vs1231);
vst1q_f32(s + 4, vs2312);
vst1q_f32(s + 8, vs3123);
sumdst[0] += s[0] + s[3] + s[6] + s[9];
sumdst[1] += s[1] + s[4] + s[7] + s[10];
sumdst[2] += s[2] + s[5] + s[8] + s[11];
for( ; i < width; i+=3)
{
sumdst[0] += src[i];
sumdst[1] += src[i+1];
sumdst[2] += src[i+2];
}
}
else
{
float32x4_t vs = vdupq_n_f32(0);
for(; i <= width-4; i += 4)
{
internal::prefetch(src + i);
vs = vaddq_f32(vs, vld1q_f32(src+i));
}
if (channels == 1)
{
float32x2_t vs2 = vpadd_f32(vget_low_f32(vs), vget_high_f32(vs));
f32 s[2];
vst1_f32(s, vs2);
sumdst[0] += s[0] + s[1];
for( ; i < width; i++)
sumdst[0] += src[i];
}
else if (channels == 4)
{
f32 s[4];
vst1q_f32(s, vs);
sumdst[0] += s[0];
sumdst[1] += s[1];
sumdst[2] += s[2];
sumdst[3] += s[3];
}
else//if (channels == 2)
{
float32x2_t vs2 = vadd_f32(vget_low_f32(vs), vget_high_f32(vs));
f32 s[2];
vst1_f32(s, vs2);
sumdst[0] += s[0];
sumdst[1] += s[1];
if(i < width)
{
sumdst[0] += src[i];
sumdst[1] += src[i+1];
}
}
}//channels != 3
}
#else
(void)_size;
(void)srcBase;
(void)srcStride;
(void)sumdst;
(void)channels;
#endif
}
bool isSqsumSupported(u32 channels)
{
return (channels && ((4/channels)*channels == 4));
}
void sqsum(const Size2D &_size,
const u8 * srcBase, ptrdiff_t srcStride,
f64 * sumdst, f64 * sqsumdst, u32 channels)
{
internal::assertSupportedConfiguration(isSqsumSupported(channels));
#ifdef CAROTENE_NEON
Size2D size(_size);
if (srcStride == (ptrdiff_t)(size.width*channels))
{
size.width *= size.height;
size.height = 1;
}
const size_t width = size.width * channels;
size_t blockSize0 = 1 << 23;
size_t roiw8 = width & ~7;
uint32x4_t v_zero = vdupq_n_u32(0u);
for (size_t i = 0; i < size.height; ++i)
{
const u8 * src = internal::getRowPtr(srcBase, srcStride, i);
size_t j = 0u;
while (j < roiw8)
{
size_t blockSize = std::min(roiw8 - j, blockSize0) + j;
uint32x4_t v_sum = v_zero;
uint32x4_t v_sqsum = v_zero;
for ( ; j < blockSize ; j += 8, src += 8)
{
internal::prefetch(src);
uint8x8_t v_src0 = vld1_u8(src);
uint16x8_t v_src = vmovl_u8(v_src0);
uint16x4_t v_srclo = vget_low_u16(v_src), v_srchi = vget_high_u16(v_src);
v_sum = vaddq_u32(v_sum, vaddl_u16(v_srclo, v_srchi));
v_sqsum = vmlal_u16(v_sqsum, v_srclo, v_srclo);
v_sqsum = vmlal_u16(v_sqsum, v_srchi, v_srchi);
}
u32 arsum[8];
vst1q_u32(arsum, v_sum);
vst1q_u32(arsum + 4, v_sqsum);
sumdst[0] += (f64)arsum[0];
sumdst[1 % channels] += (f64)arsum[1];
sumdst[2 % channels] += (f64)arsum[2];
sumdst[3 % channels] += (f64)arsum[3];
sqsumdst[0] += (f64)arsum[4];
sqsumdst[1 % channels] += (f64)arsum[5];
sqsumdst[2 % channels] += (f64)arsum[6];
sqsumdst[3 % channels] += (f64)arsum[7];
}
// collect a few last elements in the current row
// it's ok to process channels elements per step
// since we could handle 1,2 or 4 channels
// we always have channels-fold amount of elements remaining
for ( ; j < width; j+=channels, src+=channels)
{
for (u32 kk = 0; kk < channels; kk++)
{
u32 srcval = src[kk];
sumdst[kk] += srcval;
sqsumdst[kk] += srcval * srcval;
}
}
}
#else
(void)_size;
(void)srcBase;
(void)srcStride;
(void)sumdst;
(void)sqsumdst;
(void)channels;
#endif
}
} // namespace CAROTENE_NS

View File

@@ -0,0 +1,241 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2013-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "common.hpp"
#include <vector>
#include <cstring>
namespace CAROTENE_NS {
#define ENABLE4LINESMATCHING false //Disabled since overall time for simultaneous 4 lines matching is greater than
//time for simultaneous 2 lines matching for the same amount of data
bool isMatchTemplateSupported(const Size2D &tmplSize)
{
return isSupportedConfiguration() &&
tmplSize.width >= 8 && // Actually the function could process even shorter templates
// but there will be no NEON optimization in this case
(tmplSize.width * tmplSize.height) <= 256;
}
void matchTemplate(const Size2D &srcSize,
const u8 * srcBase, ptrdiff_t srcStride,
const Size2D &tmplSize,
const u8 * tmplBase, ptrdiff_t tmplStride,
f32 * dstBase, ptrdiff_t dstStride,
bool normalize)
{
internal::assertSupportedConfiguration(isMatchTemplateSupported(tmplSize));
#ifdef CAROTENE_NEON
const size_t tmplW = tmplSize.width;
const size_t tmplH = tmplSize.height;
const size_t dstW = srcSize.width - tmplSize.width + 1;
const size_t dstH = srcSize.height - tmplSize.height + 1;
//template correlation part
{
#if ENABLE4LINESMATCHING
const size_t dstroiw4 = dstW & ~3u;
#endif
const size_t dstroiw2 = dstW & ~1u;
const size_t tmplroiw = tmplW & ~7u;
const size_t dstride = dstStride >> 2;
f32 *corr = dstBase;
const u8 *imgrrow = srcBase;
for(size_t r = 0; r < dstH; ++r, corr+=dstride, imgrrow+=srcStride)
{
size_t c = 0;
#if ENABLE4LINESMATCHING
for(; c < dstroiw4; c+=4)
{
u32 dot[4] = {0, 0, 0, 0};
uint32x4_t vdot0 = vmovq_n_u32(0);
uint32x4_t vdot1 = vmovq_n_u32(0);
uint32x4_t vdot2 = vmovq_n_u32(0);
uint32x4_t vdot3 = vmovq_n_u32(0);
const u8 *img = imgrrow;
const u8 *tmpl = tmplBase;
for(size_t i = 0; i < tmplH; ++i, tmpl+=tmplStride, img+=srcStride)
{
size_t j = 0;
for(; j < tmplroiw; j+=8)
{
uint8x8_t vtmpl = vld1_u8(tmpl + j);
uint8x8_t vimg0 = vld1_u8(img + j + c + 0);
uint8x8_t vimg1 = vld1_u8(img + j + c + 1);
uint8x8_t vimg2 = vld1_u8(img + j + c + 2);
uint8x8_t vimg3 = vld1_u8(img + j + c + 3);
uint16x8_t vd0 = vmull_u8(vtmpl, vimg0);
uint16x8_t vd1 = vmull_u8(vtmpl, vimg1);
uint16x8_t vd2 = vmull_u8(vtmpl, vimg2);
uint16x8_t vd3 = vmull_u8(vtmpl, vimg3);
vdot0 = vpadalq_u16(vdot0, vd0);
vdot1 = vpadalq_u16(vdot1, vd1);
vdot2 = vpadalq_u16(vdot2, vd2);
vdot3 = vpadalq_u16(vdot3, vd3);
}
for(; j < tmplW; ++j)
{
dot[0] += tmpl[j] * img[j + c + 0];
dot[1] += tmpl[j] * img[j + c + 1];
dot[2] += tmpl[j] * img[j + c + 2];
dot[3] += tmpl[j] * img[j + c + 3];
}
}
uint32x4_t vdotx = vld1q_u32(dot);
uint32x2_t vdot_0 = vpadd_u32(vget_low_u32(vdot0), vget_high_u32(vdot0));
uint32x2_t vdot_1 = vpadd_u32(vget_low_u32(vdot1), vget_high_u32(vdot1));
uint32x2_t vdot_2 = vpadd_u32(vget_low_u32(vdot2), vget_high_u32(vdot2));
uint32x2_t vdot_3 = vpadd_u32(vget_low_u32(vdot3), vget_high_u32(vdot3));
uint32x2_t vdot_01 = vpadd_u32(vdot_0, vdot_1);
uint32x2_t vdot_23 = vpadd_u32(vdot_2, vdot_3);
vst1q_f32(corr + c, vcvtq_f32_u32(vaddq_u32(vdotx, vcombine_u32(vdot_01, vdot_23))));
}
#endif
for(; c < dstroiw2; c+=2)
{
u32 dot[2] = {0, 0};
uint32x4_t vdot0 = vmovq_n_u32(0);
uint32x4_t vdot1 = vmovq_n_u32(0);
const u8 *img = imgrrow;
const u8 *tmpl = tmplBase;
for(size_t i = 0; i < tmplH; ++i, tmpl+=tmplStride, img+=srcStride)
{
size_t j = 0;
for(; j < tmplroiw; j+=8)
{
uint8x8_t vtmpl = vld1_u8(tmpl + j);
uint8x8_t vimg0 = vld1_u8(img + j + c + 0);
uint8x8_t vimg1 = vld1_u8(img + j + c + 1);
uint16x8_t vd0 = vmull_u8(vtmpl, vimg0);
uint16x8_t vd1 = vmull_u8(vtmpl, vimg1);
vdot0 = vpadalq_u16(vdot0, vd0);
vdot1 = vpadalq_u16(vdot1, vd1);
}
for(; j < tmplW; ++j)
{
dot[0] += tmpl[j] * img[j + c + 0];
dot[1] += tmpl[j] * img[j + c + 1];
}
}
uint32x2_t vdotx = vld1_u32(dot);
uint32x2_t vdot_0 = vpadd_u32(vget_low_u32(vdot0), vget_high_u32(vdot0));
uint32x2_t vdot_1 = vpadd_u32(vget_low_u32(vdot1), vget_high_u32(vdot1));
uint32x2_t vdot_ = vpadd_u32(vdot_0, vdot_1);
vst1_f32(corr + c, vcvt_f32_u32(vadd_u32(vdotx, vdot_)));
}
for(; c < dstW; ++c)
{
u32 dot = 0;
uint32x4_t vdot = vmovq_n_u32(0);
const u8 *img = imgrrow;
const u8 *tmpl = tmplBase;
for(size_t i = 0; i < tmplH; ++i, tmpl+=tmplStride, img+=srcStride)
{
size_t j = 0;
for(; j < tmplroiw; j+=8)
{
uint8x8_t vtmpl = vld1_u8(tmpl + j);
uint8x8_t vimg = vld1_u8(img + j + c);
uint16x8_t vd = vmull_u8(vtmpl, vimg);
vdot = vpadalq_u16(vdot, vd);
}
for(; j < tmplW; ++j)
dot += tmpl[j] * img[j + c];
}
u32 wdot[2];
vst1_u32(wdot, vpadd_u32(vget_low_u32(vdot), vget_high_u32(vdot)));
dot += wdot[0] + wdot[1];
corr[c] = (f32)dot;
}
}
}
if(normalize)
{
f32 tn = std::sqrt((f32)normL2(tmplSize, tmplBase, tmplStride));
size_t iw = srcSize.width+1;
size_t ih = srcSize.height+1;
std::vector<f64> _sqsum(iw*ih);
f64 *sqsum = &_sqsum[0];
memset(sqsum, 0, iw*sizeof(f64));
for(size_t i = 1; i < ih; ++i)
sqsum[iw*i] = 0.;
sqrIntegral(srcSize, srcBase, srcStride, sqsum + iw + 1, iw*sizeof(f64));
for(size_t i = 0; i < dstH; ++i)
{
f32 *result = internal::getRowPtr(dstBase, dstStride, i);
for(size_t j = 0; j < dstW; ++j)
{
double s2 = sqsum[iw*i + j] +
sqsum[iw*(i + tmplSize.height) + j + tmplSize.width] -
sqsum[iw*(i + tmplSize.height) + j] -
sqsum[iw*i + j + tmplSize.width];
result[j] /= tn * std::sqrt(s2);
}
}
}
#else
(void)srcSize;
(void)srcBase;
(void)srcStride;
(void)tmplBase;
(void)tmplStride;
(void)dstBase;
(void)dstStride;
(void)normalize;
#endif
}
} // namespace CAROTENE_NS

1627
3rdparty/carotene/src/threshold.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

689
3rdparty/carotene/src/vtransform.hpp vendored Normal file
View File

@@ -0,0 +1,689 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2014-2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#ifndef CAROTENE_SRC_VTRANSFORM_HPP
#define CAROTENE_SRC_VTRANSFORM_HPP
#include "common.hpp"
#include <carotene/types.hpp>
#ifdef CAROTENE_NEON
namespace CAROTENE_NS { namespace internal {
////////////////////////////// Type Traits ///////////////////////
template <typename T, int cn = 1>
struct VecTraits;
template <> struct VecTraits< u8, 1> { typedef uint8x16_t vec128; typedef uint8x8_t vec64; typedef VecTraits< u8, 1> unsign; };
template <> struct VecTraits< s8, 1> { typedef int8x16_t vec128; typedef int8x8_t vec64; typedef VecTraits< u8, 1> unsign; };
template <> struct VecTraits<u16, 1> { typedef uint16x8_t vec128; typedef uint16x4_t vec64; typedef VecTraits< u16, 1> unsign; };
template <> struct VecTraits<s16, 1> { typedef int16x8_t vec128; typedef int16x4_t vec64; typedef VecTraits< u16, 1> unsign; };
template <> struct VecTraits<s32, 1> { typedef int32x4_t vec128; typedef int32x2_t vec64; typedef VecTraits< u32, 1> unsign; };
template <> struct VecTraits<u32, 1> { typedef uint32x4_t vec128; typedef uint32x2_t vec64; typedef VecTraits< u32, 1> unsign; };
template <> struct VecTraits<s64, 1> { typedef int64x2_t vec128; typedef int64x1_t vec64; typedef VecTraits< u64, 1> unsign; };
template <> struct VecTraits<u64, 1> { typedef uint64x2_t vec128; typedef uint64x1_t vec64; typedef VecTraits< u64, 1> unsign; };
template <> struct VecTraits<f32, 1> { typedef float32x4_t vec128; typedef float32x2_t vec64; typedef VecTraits< u32, 1> unsign; };
template <> struct VecTraits< u8, 2> { typedef uint8x16x2_t vec128; typedef uint8x8x2_t vec64; typedef VecTraits< u8, 2> unsign; };
template <> struct VecTraits< s8, 2> { typedef int8x16x2_t vec128; typedef int8x8x2_t vec64; typedef VecTraits< u8, 2> unsign; };
template <> struct VecTraits<u16, 2> { typedef uint16x8x2_t vec128; typedef uint16x4x2_t vec64; typedef VecTraits< u16, 2> unsign; };
template <> struct VecTraits<s16, 2> { typedef int16x8x2_t vec128; typedef int16x4x2_t vec64; typedef VecTraits< u16, 2> unsign; };
template <> struct VecTraits<s32, 2> { typedef int32x4x2_t vec128; typedef int32x2x2_t vec64; typedef VecTraits< u32, 2> unsign; };
template <> struct VecTraits<u32, 2> { typedef uint32x4x2_t vec128; typedef uint32x2x2_t vec64; typedef VecTraits< u32, 2> unsign; };
template <> struct VecTraits<s64, 2> { typedef int64x2x2_t vec128; typedef int64x1x2_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<u64, 2> { typedef uint64x2x2_t vec128; typedef uint64x1x2_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<f32, 2> { typedef float32x4x2_t vec128; typedef float32x2x2_t vec64; typedef VecTraits< u32, 2> unsign; };
template <> struct VecTraits< u8, 3> { typedef uint8x16x3_t vec128; typedef uint8x8x3_t vec64; typedef VecTraits< u8, 3> unsign; };
template <> struct VecTraits< s8, 3> { typedef int8x16x3_t vec128; typedef int8x8x3_t vec64; typedef VecTraits< u8, 3> unsign; };
template <> struct VecTraits<u16, 3> { typedef uint16x8x3_t vec128; typedef uint16x4x3_t vec64; typedef VecTraits< u16, 3> unsign; };
template <> struct VecTraits<s16, 3> { typedef int16x8x3_t vec128; typedef int16x4x3_t vec64; typedef VecTraits< u16, 3> unsign; };
template <> struct VecTraits<s32, 3> { typedef int32x4x3_t vec128; typedef int32x2x3_t vec64; typedef VecTraits< u32, 3> unsign; };
template <> struct VecTraits<u32, 3> { typedef uint32x4x3_t vec128; typedef uint32x2x3_t vec64; typedef VecTraits< u32, 3> unsign; };
template <> struct VecTraits<s64, 3> { typedef int64x2x3_t vec128; typedef int64x1x3_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<u64, 3> { typedef uint64x2x3_t vec128; typedef uint64x1x3_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<f32, 3> { typedef float32x4x3_t vec128; typedef float32x2x3_t vec64; typedef VecTraits< u32, 3> unsign; };
template <> struct VecTraits< u8, 4> { typedef uint8x16x4_t vec128; typedef uint8x8x4_t vec64; typedef VecTraits< u8, 3> unsign; };
template <> struct VecTraits< s8, 4> { typedef int8x16x4_t vec128; typedef int8x8x4_t vec64; typedef VecTraits< u8, 3> unsign; };
template <> struct VecTraits<u16, 4> { typedef uint16x8x4_t vec128; typedef uint16x4x4_t vec64; typedef VecTraits< u16, 3> unsign; };
template <> struct VecTraits<s16, 4> { typedef int16x8x4_t vec128; typedef int16x4x4_t vec64; typedef VecTraits< u16, 3> unsign; };
template <> struct VecTraits<s32, 4> { typedef int32x4x4_t vec128; typedef int32x2x4_t vec64; typedef VecTraits< u32, 3> unsign; };
template <> struct VecTraits<u32, 4> { typedef uint32x4x4_t vec128; typedef uint32x2x4_t vec64; typedef VecTraits< u32, 3> unsign; };
template <> struct VecTraits<s64, 4> { typedef int64x2x4_t vec128; typedef int64x1x4_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<u64, 4> { typedef uint64x2x4_t vec128; typedef uint64x1x4_t vec64; typedef VecTraits< u64, 2> unsign; };
template <> struct VecTraits<f32, 4> { typedef float32x4x4_t vec128; typedef float32x2x4_t vec64; typedef VecTraits< u32, 3> unsign; };
////////////////////////////// vld1q ///////////////////////
inline uint8x16_t vld1q(const u8 * ptr) { return vld1q_u8(ptr); }
inline int8x16_t vld1q(const s8 * ptr) { return vld1q_s8(ptr); }
inline uint16x8_t vld1q(const u16 * ptr) { return vld1q_u16(ptr); }
inline int16x8_t vld1q(const s16 * ptr) { return vld1q_s16(ptr); }
inline uint32x4_t vld1q(const u32 * ptr) { return vld1q_u32(ptr); }
inline int32x4_t vld1q(const s32 * ptr) { return vld1q_s32(ptr); }
inline float32x4_t vld1q(const f32 * ptr) { return vld1q_f32(ptr); }
////////////////////////////// vld1 ///////////////////////
inline uint8x8_t vld1(const u8 * ptr) { return vld1_u8(ptr); }
inline int8x8_t vld1(const s8 * ptr) { return vld1_s8(ptr); }
inline uint16x4_t vld1(const u16 * ptr) { return vld1_u16(ptr); }
inline int16x4_t vld1(const s16 * ptr) { return vld1_s16(ptr); }
inline uint32x2_t vld1(const u32 * ptr) { return vld1_u32(ptr); }
inline int32x2_t vld1(const s32 * ptr) { return vld1_s32(ptr); }
inline float32x2_t vld1(const f32 * ptr) { return vld1_f32(ptr); }
////////////////////////////// vld2q ///////////////////////
inline uint8x16x2_t vld2q(const u8 * ptr) { return vld2q_u8(ptr); }
inline int8x16x2_t vld2q(const s8 * ptr) { return vld2q_s8(ptr); }
inline uint16x8x2_t vld2q(const u16 * ptr) { return vld2q_u16(ptr); }
inline int16x8x2_t vld2q(const s16 * ptr) { return vld2q_s16(ptr); }
inline uint32x4x2_t vld2q(const u32 * ptr) { return vld2q_u32(ptr); }
inline int32x4x2_t vld2q(const s32 * ptr) { return vld2q_s32(ptr); }
inline float32x4x2_t vld2q(const f32 * ptr) { return vld2q_f32(ptr); }
////////////////////////////// vld2 ///////////////////////
inline uint8x8x2_t vld2(const u8 * ptr) { return vld2_u8(ptr); }
inline int8x8x2_t vld2(const s8 * ptr) { return vld2_s8(ptr); }
inline uint16x4x2_t vld2(const u16 * ptr) { return vld2_u16(ptr); }
inline int16x4x2_t vld2(const s16 * ptr) { return vld2_s16(ptr); }
inline uint32x2x2_t vld2(const u32 * ptr) { return vld2_u32(ptr); }
inline int32x2x2_t vld2(const s32 * ptr) { return vld2_s32(ptr); }
inline float32x2x2_t vld2(const f32 * ptr) { return vld2_f32(ptr); }
////////////////////////////// vld3q ///////////////////////
inline uint8x16x3_t vld3q(const u8 * ptr) { return vld3q_u8(ptr); }
inline int8x16x3_t vld3q(const s8 * ptr) { return vld3q_s8(ptr); }
inline uint16x8x3_t vld3q(const u16 * ptr) { return vld3q_u16(ptr); }
inline int16x8x3_t vld3q(const s16 * ptr) { return vld3q_s16(ptr); }
inline uint32x4x3_t vld3q(const u32 * ptr) { return vld3q_u32(ptr); }
inline int32x4x3_t vld3q(const s32 * ptr) { return vld3q_s32(ptr); }
inline float32x4x3_t vld3q(const f32 * ptr) { return vld3q_f32(ptr); }
////////////////////////////// vld3 ///////////////////////
inline uint8x8x3_t vld3(const u8 * ptr) { return vld3_u8(ptr); }
inline int8x8x3_t vld3(const s8 * ptr) { return vld3_s8(ptr); }
inline uint16x4x3_t vld3(const u16 * ptr) { return vld3_u16(ptr); }
inline int16x4x3_t vld3(const s16 * ptr) { return vld3_s16(ptr); }
inline uint32x2x3_t vld3(const u32 * ptr) { return vld3_u32(ptr); }
inline int32x2x3_t vld3(const s32 * ptr) { return vld3_s32(ptr); }
inline float32x2x3_t vld3(const f32 * ptr) { return vld3_f32(ptr); }
////////////////////////////// vld4q ///////////////////////
inline uint8x16x4_t vld4q(const u8 * ptr) { return vld4q_u8(ptr); }
inline int8x16x4_t vld4q(const s8 * ptr) { return vld4q_s8(ptr); }
inline uint16x8x4_t vld4q(const u16 * ptr) { return vld4q_u16(ptr); }
inline int16x8x4_t vld4q(const s16 * ptr) { return vld4q_s16(ptr); }
inline uint32x4x4_t vld4q(const u32 * ptr) { return vld4q_u32(ptr); }
inline int32x4x4_t vld4q(const s32 * ptr) { return vld4q_s32(ptr); }
inline float32x4x4_t vld4q(const f32 * ptr) { return vld4q_f32(ptr); }
////////////////////////////// vld4 ///////////////////////
inline uint8x8x4_t vld4(const u8 * ptr) { return vld4_u8(ptr); }
inline int8x8x4_t vld4(const s8 * ptr) { return vld4_s8(ptr); }
inline uint16x4x4_t vld4(const u16 * ptr) { return vld4_u16(ptr); }
inline int16x4x4_t vld4(const s16 * ptr) { return vld4_s16(ptr); }
inline uint32x2x4_t vld4(const u32 * ptr) { return vld4_u32(ptr); }
inline int32x2x4_t vld4(const s32 * ptr) { return vld4_s32(ptr); }
inline float32x2x4_t vld4(const f32 * ptr) { return vld4_f32(ptr); }
////////////////////////////// vst1q ///////////////////////
inline void vst1q(u8 * ptr, const uint8x16_t & v) { return vst1q_u8(ptr, v); }
inline void vst1q(s8 * ptr, const int8x16_t & v) { return vst1q_s8(ptr, v); }
inline void vst1q(u16 * ptr, const uint16x8_t & v) { return vst1q_u16(ptr, v); }
inline void vst1q(s16 * ptr, const int16x8_t & v) { return vst1q_s16(ptr, v); }
inline void vst1q(u32 * ptr, const uint32x4_t & v) { return vst1q_u32(ptr, v); }
inline void vst1q(s32 * ptr, const int32x4_t & v) { return vst1q_s32(ptr, v); }
inline void vst1q(f32 * ptr, const float32x4_t & v) { return vst1q_f32(ptr, v); }
////////////////////////////// vst1 ///////////////////////
inline void vst1(u8 * ptr, const uint8x8_t & v) { return vst1_u8(ptr, v); }
inline void vst1(s8 * ptr, const int8x8_t & v) { return vst1_s8(ptr, v); }
inline void vst1(u16 * ptr, const uint16x4_t & v) { return vst1_u16(ptr, v); }
inline void vst1(s16 * ptr, const int16x4_t & v) { return vst1_s16(ptr, v); }
inline void vst1(u32 * ptr, const uint32x2_t & v) { return vst1_u32(ptr, v); }
inline void vst1(s32 * ptr, const int32x2_t & v) { return vst1_s32(ptr, v); }
inline void vst1(f32 * ptr, const float32x2_t & v) { return vst1_f32(ptr, v); }
////////////////////////////// vst2q ///////////////////////
inline void vst2q(u8 * ptr, const uint8x16x2_t & v) { return vst2q_u8(ptr, v); }
inline void vst2q(s8 * ptr, const int8x16x2_t & v) { return vst2q_s8(ptr, v); }
inline void vst2q(u16 * ptr, const uint16x8x2_t & v) { return vst2q_u16(ptr, v); }
inline void vst2q(s16 * ptr, const int16x8x2_t & v) { return vst2q_s16(ptr, v); }
inline void vst2q(u32 * ptr, const uint32x4x2_t & v) { return vst2q_u32(ptr, v); }
inline void vst2q(s32 * ptr, const int32x4x2_t & v) { return vst2q_s32(ptr, v); }
inline void vst2q(f32 * ptr, const float32x4x2_t & v) { return vst2q_f32(ptr, v); }
////////////////////////////// vst2 ///////////////////////
inline void vst2(u8 * ptr, const uint8x8x2_t & v) { return vst2_u8(ptr, v); }
inline void vst2(s8 * ptr, const int8x8x2_t & v) { return vst2_s8(ptr, v); }
inline void vst2(u16 * ptr, const uint16x4x2_t & v) { return vst2_u16(ptr, v); }
inline void vst2(s16 * ptr, const int16x4x2_t & v) { return vst2_s16(ptr, v); }
inline void vst2(u32 * ptr, const uint32x2x2_t & v) { return vst2_u32(ptr, v); }
inline void vst2(s32 * ptr, const int32x2x2_t & v) { return vst2_s32(ptr, v); }
inline void vst2(f32 * ptr, const float32x2x2_t & v) { return vst2_f32(ptr, v); }
////////////////////////////// vst3q ///////////////////////
inline void vst3q(u8 * ptr, const uint8x16x3_t & v) { return vst3q_u8(ptr, v); }
inline void vst3q(s8 * ptr, const int8x16x3_t & v) { return vst3q_s8(ptr, v); }
inline void vst3q(u16 * ptr, const uint16x8x3_t & v) { return vst3q_u16(ptr, v); }
inline void vst3q(s16 * ptr, const int16x8x3_t & v) { return vst3q_s16(ptr, v); }
inline void vst3q(u32 * ptr, const uint32x4x3_t & v) { return vst3q_u32(ptr, v); }
inline void vst3q(s32 * ptr, const int32x4x3_t & v) { return vst3q_s32(ptr, v); }
inline void vst3q(f32 * ptr, const float32x4x3_t & v) { return vst3q_f32(ptr, v); }
////////////////////////////// vst3 ///////////////////////
inline void vst3(u8 * ptr, const uint8x8x3_t & v) { return vst3_u8(ptr, v); }
inline void vst3(s8 * ptr, const int8x8x3_t & v) { return vst3_s8(ptr, v); }
inline void vst3(u16 * ptr, const uint16x4x3_t & v) { return vst3_u16(ptr, v); }
inline void vst3(s16 * ptr, const int16x4x3_t & v) { return vst3_s16(ptr, v); }
inline void vst3(u32 * ptr, const uint32x2x3_t & v) { return vst3_u32(ptr, v); }
inline void vst3(s32 * ptr, const int32x2x3_t & v) { return vst3_s32(ptr, v); }
inline void vst3(f32 * ptr, const float32x2x3_t & v) { return vst3_f32(ptr, v); }
////////////////////////////// vst4q ///////////////////////
inline void vst4q(u8 * ptr, const uint8x16x4_t & v) { return vst4q_u8(ptr, v); }
inline void vst4q(s8 * ptr, const int8x16x4_t & v) { return vst4q_s8(ptr, v); }
inline void vst4q(u16 * ptr, const uint16x8x4_t & v) { return vst4q_u16(ptr, v); }
inline void vst4q(s16 * ptr, const int16x8x4_t & v) { return vst4q_s16(ptr, v); }
inline void vst4q(u32 * ptr, const uint32x4x4_t & v) { return vst4q_u32(ptr, v); }
inline void vst4q(s32 * ptr, const int32x4x4_t & v) { return vst4q_s32(ptr, v); }
inline void vst4q(f32 * ptr, const float32x4x4_t & v) { return vst4q_f32(ptr, v); }
////////////////////////////// vst4 ///////////////////////
inline void vst4(u8 * ptr, const uint8x8x4_t & v) { return vst4_u8(ptr, v); }
inline void vst4(s8 * ptr, const int8x8x4_t & v) { return vst4_s8(ptr, v); }
inline void vst4(u16 * ptr, const uint16x4x4_t & v) { return vst4_u16(ptr, v); }
inline void vst4(s16 * ptr, const int16x4x4_t & v) { return vst4_s16(ptr, v); }
inline void vst4(u32 * ptr, const uint32x2x4_t & v) { return vst4_u32(ptr, v); }
inline void vst4(s32 * ptr, const int32x2x4_t & v) { return vst4_s32(ptr, v); }
inline void vst4(f32 * ptr, const float32x2x4_t & v) { return vst4_f32(ptr, v); }
////////////////////////////// vabdq ///////////////////////
inline uint8x16_t vabdq(const uint8x16_t & v0, const uint8x16_t & v1) { return vabdq_u8 (v0, v1); }
inline int8x16_t vabdq(const int8x16_t & v0, const int8x16_t & v1) { return vabdq_s8 (v0, v1); }
inline uint16x8_t vabdq(const uint16x8_t & v0, const uint16x8_t & v1) { return vabdq_u16(v0, v1); }
inline int16x8_t vabdq(const int16x8_t & v0, const int16x8_t & v1) { return vabdq_s16(v0, v1); }
inline uint32x4_t vabdq(const uint32x4_t & v0, const uint32x4_t & v1) { return vabdq_u32(v0, v1); }
inline int32x4_t vabdq(const int32x4_t & v0, const int32x4_t & v1) { return vabdq_s32(v0, v1); }
inline float32x4_t vabdq(const float32x4_t & v0, const float32x4_t & v1) { return vabdq_f32(v0, v1); }
////////////////////////////// vabd ///////////////////////
inline uint8x8_t vabd(const uint8x8_t & v0, const uint8x8_t & v1) { return vabd_u8 (v0, v1); }
inline int8x8_t vabd(const int8x8_t & v0, const int8x8_t & v1) { return vabd_s8 (v0, v1); }
inline uint16x4_t vabd(const uint16x4_t & v0, const uint16x4_t & v1) { return vabd_u16(v0, v1); }
inline int16x4_t vabd(const int16x4_t & v0, const int16x4_t & v1) { return vabd_s16(v0, v1); }
inline uint32x2_t vabd(const uint32x2_t & v0, const uint32x2_t & v1) { return vabd_u32(v0, v1); }
inline int32x2_t vabd(const int32x2_t & v0, const int32x2_t & v1) { return vabd_s32(v0, v1); }
inline float32x2_t vabd(const float32x2_t & v0, const float32x2_t & v1) { return vabd_f32(v0, v1); }
////////////////////////////// vminq ///////////////////////
inline uint8x16_t vminq(const uint8x16_t & v0, const uint8x16_t & v1) { return vminq_u8 (v0, v1); }
inline int8x16_t vminq(const int8x16_t & v0, const int8x16_t & v1) { return vminq_s8 (v0, v1); }
inline uint16x8_t vminq(const uint16x8_t & v0, const uint16x8_t & v1) { return vminq_u16(v0, v1); }
inline int16x8_t vminq(const int16x8_t & v0, const int16x8_t & v1) { return vminq_s16(v0, v1); }
inline uint32x4_t vminq(const uint32x4_t & v0, const uint32x4_t & v1) { return vminq_u32(v0, v1); }
inline int32x4_t vminq(const int32x4_t & v0, const int32x4_t & v1) { return vminq_s32(v0, v1); }
inline float32x4_t vminq(const float32x4_t & v0, const float32x4_t & v1) { return vminq_f32(v0, v1); }
////////////////////////////// vmin ///////////////////////
inline uint8x8_t vmin(const uint8x8_t & v0, const uint8x8_t & v1) { return vmin_u8 (v0, v1); }
inline int8x8_t vmin(const int8x8_t & v0, const int8x8_t & v1) { return vmin_s8 (v0, v1); }
inline uint16x4_t vmin(const uint16x4_t & v0, const uint16x4_t & v1) { return vmin_u16(v0, v1); }
inline int16x4_t vmin(const int16x4_t & v0, const int16x4_t & v1) { return vmin_s16(v0, v1); }
inline uint32x2_t vmin(const uint32x2_t & v0, const uint32x2_t & v1) { return vmin_u32(v0, v1); }
inline int32x2_t vmin(const int32x2_t & v0, const int32x2_t & v1) { return vmin_s32(v0, v1); }
inline float32x2_t vmin(const float32x2_t & v0, const float32x2_t & v1) { return vmin_f32(v0, v1); }
////////////////////////////// vmaxq ///////////////////////
inline uint8x16_t vmaxq(const uint8x16_t & v0, const uint8x16_t & v1) { return vmaxq_u8 (v0, v1); }
inline int8x16_t vmaxq(const int8x16_t & v0, const int8x16_t & v1) { return vmaxq_s8 (v0, v1); }
inline uint16x8_t vmaxq(const uint16x8_t & v0, const uint16x8_t & v1) { return vmaxq_u16(v0, v1); }
inline int16x8_t vmaxq(const int16x8_t & v0, const int16x8_t & v1) { return vmaxq_s16(v0, v1); }
inline uint32x4_t vmaxq(const uint32x4_t & v0, const uint32x4_t & v1) { return vmaxq_u32(v0, v1); }
inline int32x4_t vmaxq(const int32x4_t & v0, const int32x4_t & v1) { return vmaxq_s32(v0, v1); }
inline float32x4_t vmaxq(const float32x4_t & v0, const float32x4_t & v1) { return vmaxq_f32(v0, v1); }
////////////////////////////// vmax ///////////////////////
inline uint8x8_t vmax(const uint8x8_t & v0, const uint8x8_t & v1) { return vmax_u8 (v0, v1); }
inline int8x8_t vmax(const int8x8_t & v0, const int8x8_t & v1) { return vmax_s8 (v0, v1); }
inline uint16x4_t vmax(const uint16x4_t & v0, const uint16x4_t & v1) { return vmax_u16(v0, v1); }
inline int16x4_t vmax(const int16x4_t & v0, const int16x4_t & v1) { return vmax_s16(v0, v1); }
inline uint32x2_t vmax(const uint32x2_t & v0, const uint32x2_t & v1) { return vmax_u32(v0, v1); }
inline int32x2_t vmax(const int32x2_t & v0, const int32x2_t & v1) { return vmax_s32(v0, v1); }
inline float32x2_t vmax(const float32x2_t & v0, const float32x2_t & v1) { return vmax_f32(v0, v1); }
////////////////////////////// vdupq_n ///////////////////////
inline uint8x16_t vdupq_n(const u8 & val) { return vdupq_n_u8(val); }
inline int8x16_t vdupq_n(const s8 & val) { return vdupq_n_s8(val); }
inline uint16x8_t vdupq_n(const u16 & val) { return vdupq_n_u16(val); }
inline int16x8_t vdupq_n(const s16 & val) { return vdupq_n_s16(val); }
inline uint32x4_t vdupq_n(const u32 & val) { return vdupq_n_u32(val); }
inline int32x4_t vdupq_n(const s32 & val) { return vdupq_n_s32(val); }
inline uint64x2_t vdupq_n(const u64 & val) { return vdupq_n_u64(val); }
inline int64x2_t vdupq_n(const s64 & val) { return vdupq_n_s64(val); }
inline float32x4_t vdupq_n(const f32 & val) { return vdupq_n_f32(val); }
////////////////////////////// vdup_n ///////////////////////
inline uint8x8_t vdup_n(const u8 & val) { return vdup_n_u8(val); }
inline int8x8_t vdup_n(const s8 & val) { return vdup_n_s8(val); }
inline uint16x4_t vdup_n(const u16 & val) { return vdup_n_u16(val); }
inline int16x4_t vdup_n(const s16 & val) { return vdup_n_s16(val); }
inline uint32x2_t vdup_n(const u32 & val) { return vdup_n_u32(val); }
inline int32x2_t vdup_n(const s32 & val) { return vdup_n_s32(val); }
inline uint64x1_t vdup_n(const u64 & val) { return vdup_n_u64(val); }
inline int64x1_t vdup_n(const s64 & val) { return vdup_n_s64(val); }
inline float32x2_t vdup_n(const f32 & val) { return vdup_n_f32(val); }
////////////////////////////// vget_low ///////////////////////
inline uint8x8_t vget_low(const uint8x16_t & v) { return vget_low_u8 (v); }
inline int8x8_t vget_low(const int8x16_t & v) { return vget_low_s8 (v); }
inline uint16x4_t vget_low(const uint16x8_t & v) { return vget_low_u16(v); }
inline int16x4_t vget_low(const int16x8_t & v) { return vget_low_s16(v); }
inline uint32x2_t vget_low(const uint32x4_t & v) { return vget_low_u32(v); }
inline int32x2_t vget_low(const int32x4_t & v) { return vget_low_s32(v); }
inline float32x2_t vget_low(const float32x4_t & v) { return vget_low_f32(v); }
////////////////////////////// vget_high ///////////////////////
inline uint8x8_t vget_high(const uint8x16_t & v) { return vget_high_u8 (v); }
inline int8x8_t vget_high(const int8x16_t & v) { return vget_high_s8 (v); }
inline uint16x4_t vget_high(const uint16x8_t & v) { return vget_high_u16(v); }
inline int16x4_t vget_high(const int16x8_t & v) { return vget_high_s16(v); }
inline uint32x2_t vget_high(const uint32x4_t & v) { return vget_high_u32(v); }
inline int32x2_t vget_high(const int32x4_t & v) { return vget_high_s32(v); }
inline float32x2_t vget_high(const float32x4_t & v) { return vget_high_f32(v); }
////////////////////////////// vcombine ///////////////////////
inline uint8x16_t vcombine(const uint8x8_t & v0, const uint8x8_t & v1) { return vcombine_u8 (v0, v1); }
inline int8x16_t vcombine(const int8x8_t & v0, const int8x8_t & v1) { return vcombine_s8 (v0, v1); }
inline uint16x8_t vcombine(const uint16x4_t & v0, const uint16x4_t & v1) { return vcombine_u16(v0, v1); }
inline int16x8_t vcombine(const int16x4_t & v0, const int16x4_t & v1) { return vcombine_s16(v0, v1); }
inline uint32x4_t vcombine(const uint32x2_t & v0, const uint32x2_t & v1) { return vcombine_u32(v0, v1); }
inline int32x4_t vcombine(const int32x2_t & v0, const int32x2_t & v1) { return vcombine_s32(v0, v1); }
inline float32x4_t vcombine(const float32x2_t & v0, const float32x2_t & v1) { return vcombine_f32(v0, v1); }
////////////////////////////// vaddq ///////////////////////
inline uint8x16_t vaddq(const uint8x16_t & v0, const uint8x16_t & v1) { return vaddq_u8 (v0, v1); }
inline int8x16_t vaddq(const int8x16_t & v0, const int8x16_t & v1) { return vaddq_s8 (v0, v1); }
inline uint16x8_t vaddq(const uint16x8_t & v0, const uint16x8_t & v1) { return vaddq_u16(v0, v1); }
inline int16x8_t vaddq(const int16x8_t & v0, const int16x8_t & v1) { return vaddq_s16(v0, v1); }
inline uint32x4_t vaddq(const uint32x4_t & v0, const uint32x4_t & v1) { return vaddq_u32(v0, v1); }
inline int32x4_t vaddq(const int32x4_t & v0, const int32x4_t & v1) { return vaddq_s32(v0, v1); }
inline float32x4_t vaddq(const float32x4_t & v0, const float32x4_t & v1) { return vaddq_f32(v0, v1); }
////////////////////////////// vadd ///////////////////////
inline uint8x8_t vadd(const uint8x8_t & v0, const uint8x8_t & v1) { return vadd_u8 (v0, v1); }
inline int8x8_t vadd(const int8x8_t & v0, const int8x8_t & v1) { return vadd_s8 (v0, v1); }
inline uint16x4_t vadd(const uint16x4_t & v0, const uint16x4_t & v1) { return vadd_u16(v0, v1); }
inline int16x4_t vadd(const int16x4_t & v0, const int16x4_t & v1) { return vadd_s16(v0, v1); }
inline uint32x2_t vadd(const uint32x2_t & v0, const uint32x2_t & v1) { return vadd_u32(v0, v1); }
inline int32x2_t vadd(const int32x2_t & v0, const int32x2_t & v1) { return vadd_s32(v0, v1); }
inline float32x2_t vadd(const float32x2_t & v0, const float32x2_t & v1) { return vadd_f32(v0, v1); }
////////////////////////////// vqaddq ///////////////////////
inline uint8x16_t vqaddq(const uint8x16_t & v0, const uint8x16_t & v1) { return vqaddq_u8 (v0, v1); }
inline int8x16_t vqaddq(const int8x16_t & v0, const int8x16_t & v1) { return vqaddq_s8 (v0, v1); }
inline uint16x8_t vqaddq(const uint16x8_t & v0, const uint16x8_t & v1) { return vqaddq_u16(v0, v1); }
inline int16x8_t vqaddq(const int16x8_t & v0, const int16x8_t & v1) { return vqaddq_s16(v0, v1); }
inline uint32x4_t vqaddq(const uint32x4_t & v0, const uint32x4_t & v1) { return vqaddq_u32(v0, v1); }
inline int32x4_t vqaddq(const int32x4_t & v0, const int32x4_t & v1) { return vqaddq_s32(v0, v1); }
////////////////////////////// vqadd ///////////////////////
inline uint8x8_t vqadd(const uint8x8_t & v0, const uint8x8_t & v1) { return vqadd_u8 (v0, v1); }
inline int8x8_t vqadd(const int8x8_t & v0, const int8x8_t & v1) { return vqadd_s8 (v0, v1); }
inline uint16x4_t vqadd(const uint16x4_t & v0, const uint16x4_t & v1) { return vqadd_u16(v0, v1); }
inline int16x4_t vqadd(const int16x4_t & v0, const int16x4_t & v1) { return vqadd_s16(v0, v1); }
inline uint32x2_t vqadd(const uint32x2_t & v0, const uint32x2_t & v1) { return vqadd_u32(v0, v1); }
inline int32x2_t vqadd(const int32x2_t & v0, const int32x2_t & v1) { return vqadd_s32(v0, v1); }
////////////////////////////// vsubq ///////////////////////
inline uint8x16_t vsubq(const uint8x16_t & v0, const uint8x16_t & v1) { return vsubq_u8 (v0, v1); }
inline int8x16_t vsubq(const int8x16_t & v0, const int8x16_t & v1) { return vsubq_s8 (v0, v1); }
inline uint16x8_t vsubq(const uint16x8_t & v0, const uint16x8_t & v1) { return vsubq_u16(v0, v1); }
inline int16x8_t vsubq(const int16x8_t & v0, const int16x8_t & v1) { return vsubq_s16(v0, v1); }
inline uint32x4_t vsubq(const uint32x4_t & v0, const uint32x4_t & v1) { return vsubq_u32(v0, v1); }
inline int32x4_t vsubq(const int32x4_t & v0, const int32x4_t & v1) { return vsubq_s32(v0, v1); }
inline float32x4_t vsubq(const float32x4_t & v0, const float32x4_t & v1) { return vsubq_f32(v0, v1); }
////////////////////////////// vsub ///////////////////////
inline uint8x8_t vsub(const uint8x8_t & v0, const uint8x8_t & v1) { return vsub_u8 (v0, v1); }
inline int8x8_t vsub(const int8x8_t & v0, const int8x8_t & v1) { return vsub_s8 (v0, v1); }
inline uint16x4_t vsub(const uint16x4_t & v0, const uint16x4_t & v1) { return vsub_u16(v0, v1); }
inline int16x4_t vsub(const int16x4_t & v0, const int16x4_t & v1) { return vsub_s16(v0, v1); }
inline uint32x2_t vsub(const uint32x2_t & v0, const uint32x2_t & v1) { return vsub_u32(v0, v1); }
inline int32x2_t vsub(const int32x2_t & v0, const int32x2_t & v1) { return vsub_s32(v0, v1); }
inline float32x2_t vsub(const float32x2_t & v0, const float32x2_t & v1) { return vsub_f32(v0, v1); }
////////////////////////////// vqsubq ///////////////////////
inline uint8x16_t vqsubq(const uint8x16_t & v0, const uint8x16_t & v1) { return vqsubq_u8 (v0, v1); }
inline int8x16_t vqsubq(const int8x16_t & v0, const int8x16_t & v1) { return vqsubq_s8 (v0, v1); }
inline uint16x8_t vqsubq(const uint16x8_t & v0, const uint16x8_t & v1) { return vqsubq_u16(v0, v1); }
inline int16x8_t vqsubq(const int16x8_t & v0, const int16x8_t & v1) { return vqsubq_s16(v0, v1); }
inline uint32x4_t vqsubq(const uint32x4_t & v0, const uint32x4_t & v1) { return vqsubq_u32(v0, v1); }
inline int32x4_t vqsubq(const int32x4_t & v0, const int32x4_t & v1) { return vqsubq_s32(v0, v1); }
inline uint64x2_t vqsubq(const uint64x2_t & v0, const uint64x2_t & v1) { return vqsubq_u64(v0, v1); }
inline int64x2_t vqsubq(const int64x2_t & v0, const int64x2_t & v1) { return vqsubq_s64(v0, v1); }
////////////////////////////// vqsub ///////////////////////
inline uint8x8_t vqsub(const uint8x8_t & v0, const uint8x8_t & v1) { return vqsub_u8 (v0, v1); }
inline int8x8_t vqsub(const int8x8_t & v0, const int8x8_t & v1) { return vqsub_s8 (v0, v1); }
inline uint16x4_t vqsub(const uint16x4_t & v0, const uint16x4_t & v1) { return vqsub_u16(v0, v1); }
inline int16x4_t vqsub(const int16x4_t & v0, const int16x4_t & v1) { return vqsub_s16(v0, v1); }
inline uint32x2_t vqsub(const uint32x2_t & v0, const uint32x2_t & v1) { return vqsub_u32(v0, v1); }
inline int32x2_t vqsub(const int32x2_t & v0, const int32x2_t & v1) { return vqsub_s32(v0, v1); }
inline uint64x1_t vqsub(const uint64x1_t & v0, const uint64x1_t & v1) { return vqsub_u64(v0, v1); }
inline int64x1_t vqsub(const int64x1_t & v0, const int64x1_t & v1) { return vqsub_s64(v0, v1); }
////////////////////////////// vmull ///////////////////////
inline uint16x8_t vmull(const uint8x8_t & v0, const uint8x8_t & v1) { return vmull_u8 (v0, v1); }
inline int16x8_t vmull(const int8x8_t & v0, const int8x8_t & v1) { return vmull_s8 (v0, v1); }
inline uint32x4_t vmull(const uint16x4_t & v0, const uint16x4_t & v1) { return vmull_u16(v0, v1); }
inline int32x4_t vmull(const int16x4_t & v0, const int16x4_t & v1) { return vmull_s16(v0, v1); }
inline uint64x2_t vmull(const uint32x2_t & v0, const uint32x2_t & v1) { return vmull_u32(v0, v1); }
inline int64x2_t vmull(const int32x2_t & v0, const int32x2_t & v1) { return vmull_s32(v0, v1); }
////////////////////////////// vrev64q ///////////////////////
inline uint8x16_t vrev64q(const uint8x16_t & v) { return vrev64q_u8 (v); }
inline int8x16_t vrev64q(const int8x16_t & v) { return vrev64q_s8 (v); }
inline uint16x8_t vrev64q(const uint16x8_t & v) { return vrev64q_u16(v); }
inline int16x8_t vrev64q(const int16x8_t & v) { return vrev64q_s16(v); }
inline uint32x4_t vrev64q(const uint32x4_t & v) { return vrev64q_u32(v); }
inline int32x4_t vrev64q(const int32x4_t & v) { return vrev64q_s32(v); }
inline float32x4_t vrev64q(const float32x4_t & v) { return vrev64q_f32(v); }
////////////////////////////// vrev64 ///////////////////////
inline uint8x8_t vrev64(const uint8x8_t & v) { return vrev64_u8 (v); }
inline int8x8_t vrev64(const int8x8_t & v) { return vrev64_s8 (v); }
inline uint16x4_t vrev64(const uint16x4_t & v) { return vrev64_u16(v); }
inline int16x4_t vrev64(const int16x4_t & v) { return vrev64_s16(v); }
inline uint32x2_t vrev64(const uint32x2_t & v) { return vrev64_u32(v); }
inline int32x2_t vrev64(const int32x2_t & v) { return vrev64_s32(v); }
inline float32x2_t vrev64(const float32x2_t & v) { return vrev64_f32(v); }
////////////////////////////// vceqq ///////////////////////
inline uint8x16_t vceqq(const uint8x16_t & v0, const uint8x16_t & v1) { return vceqq_u8 (v0, v1); }
inline uint8x16_t vceqq(const int8x16_t & v0, const int8x16_t & v1) { return vceqq_s8 (v0, v1); }
inline uint16x8_t vceqq(const uint16x8_t & v0, const uint16x8_t & v1) { return vceqq_u16(v0, v1); }
inline uint16x8_t vceqq(const int16x8_t & v0, const int16x8_t & v1) { return vceqq_s16(v0, v1); }
inline uint32x4_t vceqq(const uint32x4_t & v0, const uint32x4_t & v1) { return vceqq_u32(v0, v1); }
inline uint32x4_t vceqq(const int32x4_t & v0, const int32x4_t & v1) { return vceqq_s32(v0, v1); }
inline uint32x4_t vceqq(const float32x4_t & v0, const float32x4_t & v1) { return vceqq_f32(v0, v1); }
////////////////////////////// vceq ///////////////////////
inline uint8x8_t vceq(const uint8x8_t & v0, const uint8x8_t & v1) { return vceq_u8 (v0, v1); }
inline uint8x8_t vceq(const int8x8_t & v0, const int8x8_t & v1) { return vceq_s8 (v0, v1); }
inline uint16x4_t vceq(const uint16x4_t & v0, const uint16x4_t & v1) { return vceq_u16(v0, v1); }
inline uint16x4_t vceq(const int16x4_t & v0, const int16x4_t & v1) { return vceq_s16(v0, v1); }
inline uint32x2_t vceq(const uint32x2_t & v0, const uint32x2_t & v1) { return vceq_u32(v0, v1); }
inline uint32x2_t vceq(const int32x2_t & v0, const int32x2_t & v1) { return vceq_s32(v0, v1); }
inline uint32x2_t vceq(const float32x2_t & v0, const float32x2_t & v1) { return vceq_f32(v0, v1); }
////////////////////////////// vcgtq ///////////////////////
inline uint8x16_t vcgtq(const uint8x16_t & v0, const uint8x16_t & v1) { return vcgtq_u8 (v0, v1); }
inline uint8x16_t vcgtq(const int8x16_t & v0, const int8x16_t & v1) { return vcgtq_s8 (v0, v1); }
inline uint16x8_t vcgtq(const uint16x8_t & v0, const uint16x8_t & v1) { return vcgtq_u16(v0, v1); }
inline uint16x8_t vcgtq(const int16x8_t & v0, const int16x8_t & v1) { return vcgtq_s16(v0, v1); }
inline uint32x4_t vcgtq(const uint32x4_t & v0, const uint32x4_t & v1) { return vcgtq_u32(v0, v1); }
inline uint32x4_t vcgtq(const int32x4_t & v0, const int32x4_t & v1) { return vcgtq_s32(v0, v1); }
inline uint32x4_t vcgtq(const float32x4_t & v0, const float32x4_t & v1) { return vcgtq_f32(v0, v1); }
////////////////////////////// vcgt ///////////////////////
inline uint8x8_t vcgt(const uint8x8_t & v0, const uint8x8_t & v1) { return vcgt_u8 (v0, v1); }
inline uint8x8_t vcgt(const int8x8_t & v0, const int8x8_t & v1) { return vcgt_s8 (v0, v1); }
inline uint16x4_t vcgt(const uint16x4_t & v0, const uint16x4_t & v1) { return vcgt_u16(v0, v1); }
inline uint16x4_t vcgt(const int16x4_t & v0, const int16x4_t & v1) { return vcgt_s16(v0, v1); }
inline uint32x2_t vcgt(const uint32x2_t & v0, const uint32x2_t & v1) { return vcgt_u32(v0, v1); }
inline uint32x2_t vcgt(const int32x2_t & v0, const int32x2_t & v1) { return vcgt_s32(v0, v1); }
inline uint32x2_t vcgt(const float32x2_t & v0, const float32x2_t & v1) { return vcgt_f32(v0, v1); }
////////////////////////////// vcgeq ///////////////////////
inline uint8x16_t vcgeq(const uint8x16_t & v0, const uint8x16_t & v1) { return vcgeq_u8 (v0, v1); }
inline uint8x16_t vcgeq(const int8x16_t & v0, const int8x16_t & v1) { return vcgeq_s8 (v0, v1); }
inline uint16x8_t vcgeq(const uint16x8_t & v0, const uint16x8_t & v1) { return vcgeq_u16(v0, v1); }
inline uint16x8_t vcgeq(const int16x8_t & v0, const int16x8_t & v1) { return vcgeq_s16(v0, v1); }
inline uint32x4_t vcgeq(const uint32x4_t & v0, const uint32x4_t & v1) { return vcgeq_u32(v0, v1); }
inline uint32x4_t vcgeq(const int32x4_t & v0, const int32x4_t & v1) { return vcgeq_s32(v0, v1); }
inline uint32x4_t vcgeq(const float32x4_t & v0, const float32x4_t & v1) { return vcgeq_f32(v0, v1); }
////////////////////////////// vcge ///////////////////////
inline uint8x8_t vcge(const uint8x8_t & v0, const uint8x8_t & v1) { return vcge_u8 (v0, v1); }
inline uint8x8_t vcge(const int8x8_t & v0, const int8x8_t & v1) { return vcge_s8 (v0, v1); }
inline uint16x4_t vcge(const uint16x4_t & v0, const uint16x4_t & v1) { return vcge_u16(v0, v1); }
inline uint16x4_t vcge(const int16x4_t & v0, const int16x4_t & v1) { return vcge_s16(v0, v1); }
inline uint32x2_t vcge(const uint32x2_t & v0, const uint32x2_t & v1) { return vcge_u32(v0, v1); }
inline uint32x2_t vcge(const int32x2_t & v0, const int32x2_t & v1) { return vcge_s32(v0, v1); }
inline uint32x2_t vcge(const float32x2_t & v0, const float32x2_t & v1) { return vcge_f32(v0, v1); }
////////////////////////////// vandq ///////////////////////
inline uint8x16_t vandq(const uint8x16_t & v0, const uint8x16_t & v1) { return vandq_u8 (v0, v1); }
inline int8x16_t vandq(const int8x16_t & v0, const int8x16_t & v1) { return vandq_s8 (v0, v1); }
inline uint16x8_t vandq(const uint16x8_t & v0, const uint16x8_t & v1) { return vandq_u16(v0, v1); }
inline int16x8_t vandq(const int16x8_t & v0, const int16x8_t & v1) { return vandq_s16(v0, v1); }
inline uint32x4_t vandq(const uint32x4_t & v0, const uint32x4_t & v1) { return vandq_u32(v0, v1); }
inline int32x4_t vandq(const int32x4_t & v0, const int32x4_t & v1) { return vandq_s32(v0, v1); }
////////////////////////////// vand ///////////////////////
inline uint8x8_t vand(const uint8x8_t & v0, const uint8x8_t & v1) { return vand_u8 (v0, v1); }
inline int8x8_t vand(const int8x8_t & v0, const int8x8_t & v1) { return vand_s8 (v0, v1); }
inline uint16x4_t vand(const uint16x4_t & v0, const uint16x4_t & v1) { return vand_u16(v0, v1); }
inline int16x4_t vand(const int16x4_t & v0, const int16x4_t & v1) { return vand_s16(v0, v1); }
inline uint32x2_t vand(const uint32x2_t & v0, const uint32x2_t & v1) { return vand_u32(v0, v1); }
inline int32x2_t vand(const int32x2_t & v0, const int32x2_t & v1) { return vand_s32(v0, v1); }
////////////////////////////// vmovn ///////////////////////
inline uint8x8_t vmovn(const uint16x8_t & v) { return vmovn_u16(v); }
inline int8x8_t vmovn(const int16x8_t & v) { return vmovn_s16(v); }
inline uint16x4_t vmovn(const uint32x4_t & v) { return vmovn_u32(v); }
inline int16x4_t vmovn(const int32x4_t & v) { return vmovn_s32(v); }
inline uint32x2_t vmovn(const uint64x2_t & v) { return vmovn_u64(v); }
inline int32x2_t vmovn(const int64x2_t & v) { return vmovn_s64(v); }
////////////////////////////// vqmovn ///////////////////////
inline uint8x8_t vqmovn(const uint16x8_t & v) { return vqmovn_u16(v); }
inline int8x8_t vqmovn(const int16x8_t & v) { return vqmovn_s16(v); }
inline uint16x4_t vqmovn(const uint32x4_t & v) { return vqmovn_u32(v); }
inline int16x4_t vqmovn(const int32x4_t & v) { return vqmovn_s32(v); }
inline uint32x2_t vqmovn(const uint64x2_t & v) { return vqmovn_u64(v); }
inline int32x2_t vqmovn(const int64x2_t & v) { return vqmovn_s64(v); }
////////////////////////////// vmovl ///////////////////////
inline uint16x8_t vmovl(const uint8x8_t & v) { return vmovl_u8(v); }
inline int16x8_t vmovl(const int8x8_t & v) { return vmovl_s8(v); }
inline uint32x4_t vmovl(const uint16x4_t & v) { return vmovl_u16(v); }
inline int32x4_t vmovl(const int16x4_t & v) { return vmovl_s16(v); }
////////////////////////////// vmvnq ///////////////////////
inline uint8x16_t vmvnq(const uint8x16_t & v) { return vmvnq_u8 (v); }
inline int8x16_t vmvnq(const int8x16_t & v) { return vmvnq_s8 (v); }
inline uint16x8_t vmvnq(const uint16x8_t & v) { return vmvnq_u16(v); }
inline int16x8_t vmvnq(const int16x8_t & v) { return vmvnq_s16(v); }
inline uint32x4_t vmvnq(const uint32x4_t & v) { return vmvnq_u32(v); }
inline int32x4_t vmvnq(const int32x4_t & v) { return vmvnq_s32(v); }
////////////////////////////// vmvn ///////////////////////
inline uint8x8_t vmvn(const uint8x8_t & v) { return vmvn_u8 (v); }
inline int8x8_t vmvn(const int8x8_t & v) { return vmvn_s8 (v); }
inline uint16x4_t vmvn(const uint16x4_t & v) { return vmvn_u16(v); }
inline int16x4_t vmvn(const int16x4_t & v) { return vmvn_s16(v); }
inline uint32x2_t vmvn(const uint32x2_t & v) { return vmvn_u32(v); }
inline int32x2_t vmvn(const int32x2_t & v) { return vmvn_s32(v); }
////////////////////////////// vbicq ///////////////////////
inline uint8x16_t vbicq(const uint8x16_t & v0, const uint8x16_t & v1) { return vbicq_u8 (v0, v1); }
inline int8x16_t vbicq(const int8x16_t & v0, const int8x16_t & v1) { return vbicq_s8 (v0, v1); }
inline uint16x8_t vbicq(const uint16x8_t & v0, const uint16x8_t & v1) { return vbicq_u16(v0, v1); }
inline int16x8_t vbicq(const int16x8_t & v0, const int16x8_t & v1) { return vbicq_s16(v0, v1); }
inline uint32x4_t vbicq(const uint32x4_t & v0, const uint32x4_t & v1) { return vbicq_u32(v0, v1); }
inline int32x4_t vbicq(const int32x4_t & v0, const int32x4_t & v1) { return vbicq_s32(v0, v1); }
inline uint64x2_t vbicq(const uint64x2_t & v0, const uint64x2_t & v1) { return vbicq_u64(v0, v1); }
inline int64x2_t vbicq(const int64x2_t & v0, const int64x2_t & v1) { return vbicq_s64(v0, v1); }
////////////////////////////// vbic ///////////////////////
inline uint8x8_t vbic(const uint8x8_t & v0, const uint8x8_t & v1) { return vbic_u8 (v0, v1); }
inline int8x8_t vbic(const int8x8_t & v0, const int8x8_t & v1) { return vbic_s8 (v0, v1); }
inline uint16x4_t vbic(const uint16x4_t & v0, const uint16x4_t & v1) { return vbic_u16(v0, v1); }
inline int16x4_t vbic(const int16x4_t & v0, const int16x4_t & v1) { return vbic_s16(v0, v1); }
inline uint32x2_t vbic(const uint32x2_t & v0, const uint32x2_t & v1) { return vbic_u32(v0, v1); }
inline int32x2_t vbic(const int32x2_t & v0, const int32x2_t & v1) { return vbic_s32(v0, v1); }
inline uint64x1_t vbic(const uint64x1_t & v0, const uint64x1_t & v1) { return vbic_u64(v0, v1); }
inline int64x1_t vbic(const int64x1_t & v0, const int64x1_t & v1) { return vbic_s64(v0, v1); }
////////////////////////////// vtransform ///////////////////////
template <typename Op>
void vtransform(Size2D size,
const typename Op::type * src0Base, ptrdiff_t src0Stride,
const typename Op::type * src1Base, ptrdiff_t src1Stride,
typename Op::type * dstBase, ptrdiff_t dstStride, const Op & op)
{
typedef typename Op::type type;
typedef typename VecTraits<type>::vec128 vec128;
typedef typename VecTraits<type>::vec64 vec64;
if (src0Stride == src1Stride && src0Stride == dstStride &&
src0Stride == (ptrdiff_t)(size.width * sizeof(type)))
{
size.width *= size.height;
size.height = 1;
}
const size_t step_base = 32 / sizeof(type);
size_t roiw_base = size.width >= (step_base - 1) ? size.width - step_base + 1 : 0;
const size_t step_tail = 8 / sizeof(type);
size_t roiw_tail = size.width >= (step_tail - 1) ? size.width - step_tail + 1 : 0;
for (size_t y = 0; y < size.height; ++y)
{
const type * src0 = internal::getRowPtr(src0Base, src0Stride, y);
const type * src1 = internal::getRowPtr(src1Base, src1Stride, y);
typename Op::type * dst = internal::getRowPtr(dstBase, dstStride, y);
size_t x = 0;
for( ; x < roiw_base; x += step_base )
{
internal::prefetch(src0 + x);
internal::prefetch(src1 + x);
vec128 v_src00 = vld1q(src0 + x), v_src01 = vld1q(src0 + x + 16 / sizeof(type));
vec128 v_src10 = vld1q(src1 + x), v_src11 = vld1q(src1 + x + 16 / sizeof(type));
vec128 v_dst;
op(v_src00, v_src10, v_dst);
vst1q(dst + x, v_dst);
op(v_src01, v_src11, v_dst);
vst1q(dst + x + 16 / sizeof(type), v_dst);
}
for( ; x < roiw_tail; x += step_tail )
{
vec64 v_src0 = vld1(src0 + x);
vec64 v_src1 = vld1(src1 + x);
vec64 v_dst;
op(v_src0, v_src1, v_dst);
vst1(dst + x, v_dst);
}
for (; x < size.width; ++x)
{
op(src0 + x, src1 + x, dst + x);
}
}
}
} }
#endif // CAROTENE_NEON
#endif

434
3rdparty/carotene/src/warp_affine.cpp vendored Normal file
View File

@@ -0,0 +1,434 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "remap.hpp"
namespace CAROTENE_NS {
bool isWarpAffineNearestNeighborSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
bool isWarpAffineLinearSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
void warpAffineNearestNeighbor(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * m,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isWarpAffineNearestNeighborSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[BLOCK_SIZE * BLOCK_SIZE + 16];
s32 * map = alignPtr(_map, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride);
float32x4_t v_4 = vdupq_n_f32(4.0f);
float32x4_t v_m0 = vdupq_n_f32(m[0]);
float32x4_t v_m1 = vdupq_n_f32(m[1]);
float32x4_t v_m2 = vdupq_n_f32(m[2]);
float32x4_t v_m3 = vdupq_n_f32(m[3]);
float32x4_t v_m4 = vdupq_n_f32(m[4]);
float32x4_t v_m5 = vdupq_n_f32(m[5]);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m4, v_m2, v_y), v_yy = vmlaq_f32(v_m5, v_m3, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
int32x4_t v_src_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vcvtq_s32_f32(v_src_xf)));
int32x4_t v_src_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vcvtq_s32_f32(v_src_yf)));
int32x4_t v_src_index = vmlaq_s32(v_src_x, v_src_y, v_step4);
vst1q_s32(map_row + x, v_src_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[2] * y_ + m[4], yy = m[3] * y_ + m[5];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 src_x_f = m[0] * x_ + yx;
f32 src_y_f = m[1] * x_ + yy;
s32 src_x = floorf(src_x_f), src_y = floorf(src_y_f);
src_x = std::max(0, std::min<s32>(ssize.width - 1, src_x));
src_y = std::max(0, std::min<s32>(ssize.height - 1, src_y));
map_row[x] = src_y * srcStride + src_x;
}
}
// make remap
remapNearestNeighborReplicate(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
int32x4_t v_m1_4 = vdupq_n_s32(-1);
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m4, v_m2, v_y), v_yy = vmlaq_f32(v_m5, v_m3, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
int32x4_t v_src_x = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y = vcvtq_s32_f32(v_src_yf);
uint32x4_t v_mask = vandq_u32(vandq_u32(vcgeq_f32(v_src_xf, v_zero4), vcleq_s32(v_src_x, v_width4)),
vandq_u32(vcgeq_f32(v_src_yf, v_zero4), vcleq_s32(v_src_y, v_height4)));
int32x4_t v_src_index = vbslq_s32(v_mask, vmlaq_s32(v_src_x, v_src_y, v_step4), v_m1_4);
vst1q_s32(map_row + x, v_src_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[2] * y_ + m[4], yy = m[3] * y_ + m[5];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 src_x_f = m[0] * x_ + yx;
f32 src_y_f = m[1] * x_ + yy;
s32 src_x = floorf(src_x_f), src_y = floorf(src_y_f);
map_row[x] = (src_x >= 0) && (src_x < (s32)ssize.width) &&
(src_y >= 0) && (src_y < (s32)ssize.height) ? src_y * srcStride + src_x : -1;
}
}
// make remap
remapNearestNeighborConst(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)m;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
void warpAffineLinear(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * m,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isWarpAffineLinearSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[((BLOCK_SIZE * BLOCK_SIZE) << 2) + 16];
f32 _coeffs[((BLOCK_SIZE * BLOCK_SIZE) << 1) + 16];
s32 * map = alignPtr(_map, 16);
f32 * coeffs = alignPtr(_coeffs, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride), v_1 = vdupq_n_s32(1);
float32x4_t v_zero4f = vdupq_n_f32(0.0f), v_one4f = vdupq_n_f32(1.0f);
float32x4_t v_m0 = vdupq_n_f32(m[0]);
float32x4_t v_m1 = vdupq_n_f32(m[1]);
float32x4_t v_m2 = vdupq_n_f32(m[2]);
float32x4_t v_m3 = vdupq_n_f32(m[3]);
float32x4_t v_m4 = vdupq_n_f32(m[4]);
float32x4_t v_m5 = vdupq_n_f32(m[5]);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_), v_4 = vdupq_n_f32(4.0f);
float32x4_t v_yx = vmlaq_f32(v_m4, v_m2, v_y), v_yy = vmlaq_f32(v_m5, v_m3, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
int32x4_t v_src_x = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y = vcvtq_s32_f32(v_src_yf);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_src_xf, vcvtq_f32_s32(v_src_x));
v_coeff.val[1] = vsubq_f32(v_src_yf, vcvtq_f32_s32(v_src_y));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x = vbslq_s32(v_maskx, vsubq_s32(v_src_x, v_1), v_src_x);
v_src_y = vbslq_s32(v_masky, vsubq_s32(v_src_y, v_1), v_src_y);
int32x4_t v_dst0_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, v_src_x));
int32x4_t v_dst0_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, v_src_y));
int32x4_t v_dst1_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vaddq_s32(v_1, v_src_x)));
int32x4_t v_dst1_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vaddq_s32(v_1, v_src_y)));
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_dst0_x, v_dst0_y, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_dst1_x, v_dst0_y, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_dst0_x, v_dst1_y, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_dst1_x, v_dst1_y, v_step4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[2] * y_ + m[4], yy = m[3] * y_ + m[5];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 src_x_f = m[0] * x_ + yx;
f32 src_y_f = m[1] * x_ + yy;
s32 src0_x = (s32)floorf(src_x_f);
s32 src0_y = (s32)floorf(src_y_f);
coeff_row[(x << 1) + 0] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
s32 src1_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y + 1));
src0_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y));
s32 src1_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x + 1));
src0_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x));
map_row[(x << 2) + 0] = src0_y * srcStride + src0_x;
map_row[(x << 2) + 1] = src0_y * srcStride + src1_x;
map_row[(x << 2) + 2] = src1_y * srcStride + src0_x;
map_row[(x << 2) + 3] = src1_y * srcStride + src1_x;
}
}
remapLinearReplicate(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
int32x4_t v_m1_4 = vdupq_n_s32(-1);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_), v_4 = vdupq_n_f32(4.0f);
float32x4_t v_yx = vmlaq_f32(v_m4, v_m2, v_y), v_yy = vmlaq_f32(v_m5, v_m3, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
int32x4_t v_src_x0 = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y0 = vcvtq_s32_f32(v_src_yf);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_src_xf, vcvtq_f32_s32(v_src_x0));
v_coeff.val[1] = vsubq_f32(v_src_yf, vcvtq_f32_s32(v_src_y0));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x0 = vbslq_s32(v_maskx, vsubq_s32(v_src_x0, v_1), v_src_x0);
v_src_y0 = vbslq_s32(v_masky, vsubq_s32(v_src_y0, v_1), v_src_y0);
int32x4_t v_src_x1 = vaddq_s32(v_src_x0, v_1);
int32x4_t v_src_y1 = vaddq_s32(v_src_y0, v_1);
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_src_x0, v_src_y0, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_src_x1, v_src_y0, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_src_x0, v_src_y1, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_src_x1, v_src_y1, v_step4);
uint32x4_t v_mask_x0 = vandq_u32(vcgeq_f32(v_src_xf, v_zero4), vcleq_s32(v_src_x0, v_width4));
uint32x4_t v_mask_x1 = vandq_u32(vcgeq_f32(vaddq_f32(v_src_xf, v_one4f), v_zero4), vcleq_s32(v_src_x1, v_width4));
uint32x4_t v_mask_y0 = vandq_u32(vcgeq_f32(v_src_yf, v_zero4), vcleq_s32(v_src_y0, v_height4));
uint32x4_t v_mask_y1 = vandq_u32(vcgeq_f32(vaddq_f32(v_src_yf, v_one4f), v_zero4), vcleq_s32(v_src_y1, v_height4));
v_dst_index.val[0] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y0), v_dst_index.val[0], v_m1_4);
v_dst_index.val[1] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y0), v_dst_index.val[1], v_m1_4);
v_dst_index.val[2] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y1), v_dst_index.val[2], v_m1_4);
v_dst_index.val[3] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y1), v_dst_index.val[3], v_m1_4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[2] * y_ + m[4], yy = m[3] * y_ + m[5];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 src_x_f = m[0] * x_ + yx;
f32 src_y_f = m[1] * x_ + yy;
s32 src0_x = (s32)floorf(src_x_f), src1_x = src0_x + 1;
s32 src0_y = (s32)floorf(src_y_f), src1_y = src0_y + 1;
coeff_row[(x << 1) + 0] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
map_row[(x << 2) + 0] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src0_x : -1;
map_row[(x << 2) + 1] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src1_x : -1;
map_row[(x << 2) + 2] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src0_x : -1;
map_row[(x << 2) + 3] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src1_x : -1;
}
}
remapLinearConst(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)m;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

View File

@@ -0,0 +1,464 @@
/*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
*
* License Agreement
* For Open Source Computer Vision Library
* (3-clause BSD License)
*
* Copyright (C) 2015, NVIDIA Corporation, all rights reserved.
* Third party copyrights are property of their respective owners.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the names of the copyright holders nor the names of the contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and
* any express or implied warranties, including, but not limited to, the implied
* warranties of merchantability and fitness for a particular purpose are disclaimed.
* In no event shall copyright holders or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* (including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused
* and on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out of
* the use of this software, even if advised of the possibility of such damage.
*/
#include "remap.hpp"
namespace CAROTENE_NS {
bool isWarpPerspectiveNearestNeighborSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
bool isWarpPerspectiveLinearSupported(const Size2D &ssize)
{
#if SIZE_MAX > UINT32_MAX
return !(ssize.width > 0xffffFFFF || ssize.height > 0xffffFFFF) && // Restrict image size since internal index evaluation
// is performed with u32
isSupportedConfiguration();
#else
(void)ssize;
return isSupportedConfiguration();
#endif
}
void warpPerspectiveNearestNeighbor(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * m,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isWarpPerspectiveNearestNeighborSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[BLOCK_SIZE * BLOCK_SIZE + 16];
s32 * map = alignPtr(_map, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride);
float32x4_t v_4 = vdupq_n_f32(4.0f);
float32x4_t v_m0 = vdupq_n_f32(m[0]);
float32x4_t v_m1 = vdupq_n_f32(m[1]);
float32x4_t v_m2 = vdupq_n_f32(m[2]);
float32x4_t v_m3 = vdupq_n_f32(m[3]);
float32x4_t v_m4 = vdupq_n_f32(m[4]);
float32x4_t v_m5 = vdupq_n_f32(m[5]);
float32x4_t v_m6 = vdupq_n_f32(m[6]);
float32x4_t v_m7 = vdupq_n_f32(m[7]);
float32x4_t v_m8 = vdupq_n_f32(m[8]);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m6, v_m3, v_y), v_yy = vmlaq_f32(v_m7, v_m4, v_y),
v_yw = vmlaq_f32(v_m8, v_m5, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
float32x4_t v_wf = vrecpq_f32(vmlaq_f32(v_yw, v_m2, v_x));
v_src_xf = vmulq_f32(v_wf, v_src_xf);
v_src_yf = vmulq_f32(v_wf, v_src_yf);
int32x4_t v_src_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vcvtq_s32_f32(v_src_xf)));
int32x4_t v_src_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vcvtq_s32_f32(v_src_yf)));
int32x4_t v_src_index = vmlaq_s32(v_src_x, v_src_y, v_step4);
vst1q_s32(map_row + x, v_src_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[3] * y_ + m[6], yy = m[4] * y_ + m[7], yw = m[5] * y_ + m[8];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 w_f = 1.0f / (m[2] * x_ + yw);
f32 src_x_f = (m[0] * x_ + yx) * w_f;
f32 src_y_f = (m[1] * x_ + yy) * w_f;
s32 src_x = floorf(src_x_f), src_y = floorf(src_y_f);
src_x = std::max(0, std::min<s32>(ssize.width - 1, src_x));
src_y = std::max(0, std::min<s32>(ssize.height - 1, src_y));
map_row[x] = src_y * srcStride + src_x;
}
}
// make remap
remapNearestNeighborReplicate(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
int32x4_t v_m1_4 = vdupq_n_s32(-1);
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(&map[0], blockWidth * sizeof(s32), y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m6, v_m3, v_y), v_yy = vmlaq_f32(v_m7, v_m4, v_y),
v_yw = vmlaq_f32(v_m8, v_m5, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
float32x4_t v_wf = vrecpq_f32(vmlaq_f32(v_yw, v_m2, v_x));
v_src_xf = vmulq_f32(v_wf, v_src_xf);
v_src_yf = vmulq_f32(v_wf, v_src_yf);
int32x4_t v_src_x = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y = vcvtq_s32_f32(v_src_yf);
uint32x4_t v_mask = vandq_u32(vandq_u32(vcgeq_f32(v_src_xf, v_zero4), vcleq_s32(v_src_x, v_width4)),
vandq_u32(vcgeq_f32(v_src_yf, v_zero4), vcleq_s32(v_src_y, v_height4)));
int32x4_t v_src_index = vbslq_s32(v_mask, vmlaq_s32(v_src_x, v_src_y, v_step4), v_m1_4);
vst1q_s32(map_row + x, v_src_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[3] * y_ + m[6], yy = m[4] * y_ + m[7], yw = m[5] * y_ + m[8];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 w_f = 1.0f / (m[2] * x_ + yw);
f32 src_x_f = (m[0] * x_ + yx) * w_f;
f32 src_y_f = (m[1] * x_ + yy) * w_f;
s32 src_x = floorf(src_x_f), src_y = floorf(src_y_f);
map_row[x] = (src_x >= 0) && (src_x < (s32)ssize.width) &&
(src_y >= 0) && (src_y < (s32)ssize.height) ? src_y * srcStride + src_x : -1;
}
}
// make remap
remapNearestNeighborConst(Size2D(blockWidth, blockHeight), srcBase, &map[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)m;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
void warpPerspectiveLinear(const Size2D &ssize, const Size2D &dsize,
const u8 * srcBase, ptrdiff_t srcStride,
const f32 * m,
u8 * dstBase, ptrdiff_t dstStride,
BORDER_MODE borderMode, u8 borderValue)
{
internal::assertSupportedConfiguration(isWarpPerspectiveLinearSupported(ssize));
#ifdef CAROTENE_NEON
using namespace internal;
s32 _map[((BLOCK_SIZE * BLOCK_SIZE) << 2) + 16];
f32 _coeffs[((BLOCK_SIZE * BLOCK_SIZE) << 1) + 16];
s32 * map = alignPtr(_map, 16);
f32 * coeffs = alignPtr(_coeffs, 16);
int32x4_t v_width4 = vdupq_n_s32(ssize.width - 1), v_height4 = vdupq_n_s32(ssize.height - 1);
int32x4_t v_step4 = vdupq_n_s32(srcStride), v_1 = vdupq_n_s32(1);
float32x4_t v_zero4f = vdupq_n_f32(0.0f), v_one4f = vdupq_n_f32(1.0f);
float32x4_t v_4 = vdupq_n_f32(4.0f);
float32x4_t v_m0 = vdupq_n_f32(m[0]);
float32x4_t v_m1 = vdupq_n_f32(m[1]);
float32x4_t v_m2 = vdupq_n_f32(m[2]);
float32x4_t v_m3 = vdupq_n_f32(m[3]);
float32x4_t v_m4 = vdupq_n_f32(m[4]);
float32x4_t v_m5 = vdupq_n_f32(m[5]);
float32x4_t v_m6 = vdupq_n_f32(m[6]);
float32x4_t v_m7 = vdupq_n_f32(m[7]);
float32x4_t v_m8 = vdupq_n_f32(m[8]);
if (borderMode == BORDER_MODE_REPLICATE)
{
int32x4_t v_zero4 = vdupq_n_s32(0);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m6, v_m3, v_y), v_yy = vmlaq_f32(v_m7, v_m4, v_y),
v_yw = vmlaq_f32(v_m8, v_m5, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
float32x4_t v_wf = vrecpq_f32(vmlaq_f32(v_yw, v_m2, v_x));
v_src_xf = vmulq_f32(v_wf, v_src_xf);
v_src_yf = vmulq_f32(v_wf, v_src_yf);
int32x4_t v_src_x = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y = vcvtq_s32_f32(v_src_yf);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_src_xf, vcvtq_f32_s32(v_src_x));
v_coeff.val[1] = vsubq_f32(v_src_yf, vcvtq_f32_s32(v_src_y));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x = vbslq_s32(v_maskx, vsubq_s32(v_src_x, v_1), v_src_x);
v_src_y = vbslq_s32(v_masky, vsubq_s32(v_src_y, v_1), v_src_y);
int32x4_t v_dst0_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, v_src_x));
int32x4_t v_dst0_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, v_src_y));
int32x4_t v_dst1_x = vmaxq_s32(v_zero4, vminq_s32(v_width4, vaddq_s32(v_1, v_src_x)));
int32x4_t v_dst1_y = vmaxq_s32(v_zero4, vminq_s32(v_height4, vaddq_s32(v_1, v_src_y)));
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_dst0_x, v_dst0_y, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_dst1_x, v_dst0_y, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_dst0_x, v_dst1_y, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_dst1_x, v_dst1_y, v_step4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[3] * y_ + m[6], yy = m[4] * y_ + m[7], yw = m[5] * y_ + m[8];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 w_f = 1.0f / (m[2] * x_ + yw);
f32 src_x_f = (m[0] * x_ + yx) * w_f;
f32 src_y_f = (m[1] * x_ + yy) * w_f;
s32 src0_x = (s32)floorf(src_x_f);
s32 src0_y = (s32)floorf(src_y_f);
coeff_row[(x << 1) + 0] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
s32 src1_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y + 1));
src0_y = std::max(0, std::min<s32>(ssize.height - 1, src0_y));
s32 src1_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x + 1));
src0_x = std::max(0, std::min<s32>(ssize.width - 1, src0_x));
map_row[(x << 2) + 0] = src0_y * srcStride + src0_x;
map_row[(x << 2) + 1] = src0_y * srcStride + src1_x;
map_row[(x << 2) + 2] = src1_y * srcStride + src0_x;
map_row[(x << 2) + 3] = src1_y * srcStride + src1_x;
}
}
remapLinearReplicate(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride);
}
}
}
else if (borderMode == BORDER_MODE_CONSTANT)
{
float32x4_t v_zero4 = vdupq_n_f32(0.0f);
int32x4_t v_m1_4 = vdupq_n_s32(-1);
for (size_t i = 0; i < dsize.height; i += BLOCK_SIZE)
{
size_t blockHeight = std::min<size_t>(BLOCK_SIZE, dsize.height - i);
for (size_t j = 0; j < dsize.width; j += BLOCK_SIZE)
{
size_t blockWidth = std::min<size_t>(BLOCK_SIZE, dsize.width - j);
// compute table
for (size_t y = 0; y < blockHeight; ++y)
{
s32 * map_row = getRowPtr(map, blockWidth * sizeof(s32) * 4, y);
f32 * coeff_row = getRowPtr(coeffs, blockWidth * sizeof(f32) * 2, y);
size_t x = 0, y_ = y + i;
f32 indeces[4] = { j + 0.0f, j + 1.0f, j + 2.0f, j + 3.0f };
float32x4_t v_x = vld1q_f32(indeces), v_y = vdupq_n_f32(y_);
float32x4_t v_yx = vmlaq_f32(v_m6, v_m3, v_y), v_yy = vmlaq_f32(v_m7, v_m4, v_y),
v_yw = vmlaq_f32(v_m8, v_m5, v_y);
for ( ; x + 4 <= blockWidth; x += 4)
{
float32x4_t v_src_xf = vmlaq_f32(v_yx, v_m0, v_x);
float32x4_t v_src_yf = vmlaq_f32(v_yy, v_m1, v_x);
float32x4_t v_wf = vrecpq_f32(vmlaq_f32(v_yw, v_m2, v_x));
v_src_xf = vmulq_f32(v_wf, v_src_xf);
v_src_yf = vmulq_f32(v_wf, v_src_yf);
int32x4_t v_src_x0 = vcvtq_s32_f32(v_src_xf);
int32x4_t v_src_y0 = vcvtq_s32_f32(v_src_yf);
float32x4x2_t v_coeff;
v_coeff.val[0] = vsubq_f32(v_src_xf, vcvtq_f32_s32(v_src_x0));
v_coeff.val[1] = vsubq_f32(v_src_yf, vcvtq_f32_s32(v_src_y0));
uint32x4_t v_maskx = vcltq_f32(v_coeff.val[0], v_zero4f);
uint32x4_t v_masky = vcltq_f32(v_coeff.val[1], v_zero4f);
v_coeff.val[0] = vbslq_f32(v_maskx, vaddq_f32(v_one4f, v_coeff.val[0]), v_coeff.val[0]);
v_coeff.val[1] = vbslq_f32(v_masky, vaddq_f32(v_one4f, v_coeff.val[1]), v_coeff.val[1]);
v_src_x0 = vbslq_s32(v_maskx, vsubq_s32(v_src_x0, v_1), v_src_x0);
v_src_y0 = vbslq_s32(v_masky, vsubq_s32(v_src_y0, v_1), v_src_y0);
int32x4_t v_src_x1 = vaddq_s32(v_src_x0, v_1);
int32x4_t v_src_y1 = vaddq_s32(v_src_y0, v_1);
int32x4x4_t v_dst_index;
v_dst_index.val[0] = vmlaq_s32(v_src_x0, v_src_y0, v_step4);
v_dst_index.val[1] = vmlaq_s32(v_src_x1, v_src_y0, v_step4);
v_dst_index.val[2] = vmlaq_s32(v_src_x0, v_src_y1, v_step4);
v_dst_index.val[3] = vmlaq_s32(v_src_x1, v_src_y1, v_step4);
uint32x4_t v_mask_x0 = vandq_u32(vcgeq_f32(v_src_xf, v_zero4), vcleq_s32(v_src_x0, v_width4));
uint32x4_t v_mask_x1 = vandq_u32(vcgeq_f32(vaddq_f32(v_src_xf, v_one4f), v_zero4), vcleq_s32(v_src_x1, v_width4));
uint32x4_t v_mask_y0 = vandq_u32(vcgeq_f32(v_src_yf, v_zero4), vcleq_s32(v_src_y0, v_height4));
uint32x4_t v_mask_y1 = vandq_u32(vcgeq_f32(vaddq_f32(v_src_yf, v_one4f), v_zero4), vcleq_s32(v_src_y1, v_height4));
v_dst_index.val[0] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y0), v_dst_index.val[0], v_m1_4);
v_dst_index.val[1] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y0), v_dst_index.val[1], v_m1_4);
v_dst_index.val[2] = vbslq_s32(vandq_u32(v_mask_x0, v_mask_y1), v_dst_index.val[2], v_m1_4);
v_dst_index.val[3] = vbslq_s32(vandq_u32(v_mask_x1, v_mask_y1), v_dst_index.val[3], v_m1_4);
vst2q_f32(coeff_row + (x << 1), v_coeff);
vst4q_s32(map_row + (x << 2), v_dst_index);
v_x = vaddq_f32(v_x, v_4);
}
f32 yx = m[3] * y_ + m[6], yy = m[4] * y_ + m[7], yw = m[5] * y_ + m[8];
for (ptrdiff_t x_ = x + j; x < blockWidth; ++x, ++x_)
{
f32 w_f = 1.0f / (m[2] * x_ + yw);
f32 src_x_f = (m[0] * x_ + yx) * w_f;
f32 src_y_f = (m[1] * x_ + yy) * w_f;
s32 src0_x = (s32)floorf(src_x_f), src1_x = src0_x + 1;
s32 src0_y = (s32)floorf(src_y_f), src1_y = src0_y + 1;
coeff_row[(x << 1) + 0] = src_x_f - src0_x;
coeff_row[(x << 1) + 1] = src_y_f - src0_y;
map_row[(x << 2) + 0] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src0_x : -1;
map_row[(x << 2) + 1] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src0_y >= 0) && (src0_y < (s32)ssize.height) ? src0_y * srcStride + src1_x : -1;
map_row[(x << 2) + 2] = (src0_x >= 0) && (src0_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src0_x : -1;
map_row[(x << 2) + 3] = (src1_x >= 0) && (src1_x < (s32)ssize.width) &&
(src1_y >= 0) && (src1_y < (s32)ssize.height) ? src1_y * srcStride + src1_x : -1;
}
}
remapLinearConst(Size2D(blockWidth, blockHeight),
srcBase, &map[0], &coeffs[0],
getRowPtr(dstBase, dstStride, i) + j, dstStride, borderValue);
}
}
}
#else
(void)ssize;
(void)dsize;
(void)srcBase;
(void)srcStride;
(void)m;
(void)dstBase;
(void)dstStride;
(void)borderMode;
(void)borderValue;
#endif
}
} // namespace CAROTENE_NS

35
3rdparty/cpufeatures/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,35 @@
if(NOT ANDROID)
message("cpufeatures is ANDROID project")
endif()
ocv_update(OPENCV_CPUFEATURES_TARGET_NAME libcpufeatures)
set(CPUFEATURES_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "Android cpufeatures project sources (for example, <android-ndk>/sources/android/cpufeatures)")
set(CPUFEATURES_INCLUDE_DIRS ${CPUFEATURES_ROOT} CACHE INTERNAL "")
set(CPUFEATURES_LIBRARIES "${OPENCV_CPUFEATURES_TARGET_NAME}" CACHE INTERNAL "")
if(NOT DEFINED CPUFEATURES_SOURCES)
set(CPUFEATURES_SOURCES ${CPUFEATURES_ROOT}/cpu-features.c ${CPUFEATURES_ROOT}/cpu-features.h)
endif()
include_directories(${CPUFEATURES_INCLUDE_DIRS})
add_library(${OPENCV_CPUFEATURES_TARGET_NAME} STATIC ${CPUFEATURES_SOURCES})
set_target_properties(${OPENCV_CPUFEATURES_TARGET_NAME}
PROPERTIES OUTPUT_NAME cpufeatures
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
COMPILE_PDB_NAME cpufeatures
COMPILE_PDB_NAME_DEBUG "cpufeatures${OPENCV_DEBUG_POSTFIX}"
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
)
if(ENABLE_SOLUTION_FOLDERS)
set_target_properties(${OPENCV_CPUFEATURES_TARGET_NAME} PROPERTIES FOLDER "3rdparty")
endif()
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(${OPENCV_CPUFEATURES_TARGET_NAME} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
ocv_install_3rdparty_licenses(cpufeatures LICENSE README.md)

13
3rdparty/cpufeatures/LICENSE vendored Normal file
View File

@@ -0,0 +1,13 @@
Copyright (C) 2016 The Android Open Source Project
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.

4
3rdparty/cpufeatures/README.md vendored Normal file
View File

@@ -0,0 +1,4 @@
The Android NDK provides a small library named cpufeatures that your app can use at runtime to detect the target device's CPU family and the optional features it supports.
It is designed to work as-is on all official Android platform versions.
https://developer.android.com/ndk/guides/cpu-features.html

View File

@@ -27,6 +27,10 @@
*/
/* ChangeLog for this library:
*
* NDK r10e?: Add MIPS MSA feature.
*
* NDK r10: Support for 64-bit CPUs (Intel, ARM & MIPS).
*
* NDK r8d: Add android_setCpu().
*
@@ -56,16 +60,17 @@
*
* NDK r4: Initial release
*/
#include <sys/system_properties.h>
#ifdef __arm__
#include <machine/cpu-features.h>
#endif
#include <pthread.h>
#include "cpu-features.h"
#include <dlfcn.h>
#include <errno.h>
#include <fcntl.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/system_properties.h>
#include <unistd.h>
static pthread_once_t g_once;
static int g_inited;
@@ -73,16 +78,12 @@ static AndroidCpuFamily g_cpuFamily;
static uint64_t g_cpuFeatures;
static int g_cpuCount;
static const int android_cpufeatures_debug = 0;
#ifdef __arm__
# define DEFAULT_CPU_FAMILY ANDROID_CPU_FAMILY_ARM
#elif defined __i386__
# define DEFAULT_CPU_FAMILY ANDROID_CPU_FAMILY_X86
#else
# define DEFAULT_CPU_FAMILY ANDROID_CPU_FAMILY_UNKNOWN
static uint32_t g_cpuIdArm;
#endif
static const int android_cpufeatures_debug = 0;
#define D(...) \
do { \
if (android_cpufeatures_debug) { \
@@ -109,6 +110,25 @@ static __inline__ void x86_cpuid(int func, int values[4])
values[2] = c;
values[3] = d;
}
#elif defined(__x86_64__)
static __inline__ void x86_cpuid(int func, int values[4])
{
int64_t a, b, c, d;
/* We need to preserve ebx since we're compiling PIC code */
/* this means we can't use "=b" for the second output register */
__asm__ __volatile__ ( \
"push %%rbx\n"
"cpuid\n" \
"mov %%rbx, %1\n"
"pop %%rbx\n"
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
: "a" (func) \
);
values[0] = a;
values[1] = b;
values[2] = c;
values[3] = d;
}
#endif
/* Get the size of a file by reading it until the end. This is needed
@@ -118,7 +138,8 @@ static __inline__ void x86_cpuid(int func, int values[4])
static int
get_file_size(const char* pathname)
{
int fd, ret, result = 0;
int fd, result = 0;
char buffer[256];
fd = open(pathname, O_RDONLY);
@@ -178,6 +199,7 @@ read_file(const char* pathname, char* buffer, size_t buffsize)
return count;
}
#ifdef __arm__
/* Extract the content of a the first occurence of a given field in
* the content of /proc/cpuinfo and return it as a heap-allocated
* string that must be freed by the caller.
@@ -190,12 +212,11 @@ extract_cpuinfo_field(const char* buffer, int buflen, const char* field)
int fieldlen = strlen(field);
const char* bufend = buffer + buflen;
char* result = NULL;
int len, ignore;
int len;
const char *p, *q;
/* Look for first field occurence, and ensures it starts the line. */
p = buffer;
bufend = buffer + buflen;
for (;;) {
p = memmem(p, bufend-p, field, fieldlen);
if (p == NULL)
@@ -232,10 +253,6 @@ EXIT:
return result;
}
/* Like strlen(), but for constant string literals */
#define STRLEN_CONST(x) ((sizeof(x)-1)
/* Checks that a space-separated list of items contains one given 'item'.
* Returns 1 if found, 0 otherwise.
*/
@@ -268,8 +285,9 @@ has_list_item(const char* list, const char* item)
}
return 0;
}
#endif /* __arm__ */
/* Parse an decimal integer starting from 'input', but not going further
/* Parse a number starting from 'input', but not going further
* than 'limit'. Return the value into '*result'.
*
* NOTE: Does not skip over leading spaces, or deal with sign characters.
@@ -280,15 +298,23 @@ has_list_item(const char* list, const char* item)
* be <= 'limit').
*/
static const char*
parse_decimal(const char* input, const char* limit, int* result)
parse_number(const char* input, const char* limit, int base, int* result)
{
const char* p = input;
int val = 0;
while (p < limit) {
int d = (*p - '0');
if ((unsigned)d >= 10U)
break;
val = val*10 + d;
if ((unsigned)d >= 10U) {
d = (*p - 'a');
if ((unsigned)d >= 6U)
d = (*p - 'A');
if ((unsigned)d >= 6U)
break;
d += 10;
}
if (d >= base)
break;
val = val*base + d;
p++;
}
if (p == input)
@@ -298,6 +324,20 @@ parse_decimal(const char* input, const char* limit, int* result)
return p;
}
static const char*
parse_decimal(const char* input, const char* limit, int* result)
{
return parse_number(input, limit, 10, result);
}
#ifdef __arm__
static const char*
parse_hexadecimal(const char* input, const char* limit, int* result)
{
return parse_number(input, limit, 16, result);
}
#endif /* __arm__ */
/* This small data type is used to represent a CPU list / mask, as read
* from sysfs on Linux. See http://www.kernel.org/doc/Documentation/cputopology.txt
*
@@ -408,6 +448,18 @@ cpulist_read_from(CpuList* list, const char* filename)
cpulist_parse(list, file, filelen);
}
#if defined(__aarch64__)
// see <uapi/asm/hwcap.h> kernel header
#define HWCAP_FP (1 << 0)
#define HWCAP_ASIMD (1 << 1)
#define HWCAP_AES (1 << 3)
#define HWCAP_PMULL (1 << 4)
#define HWCAP_SHA1 (1 << 5)
#define HWCAP_SHA2 (1 << 6)
#define HWCAP_CRC32 (1 << 7)
#endif
#if defined(__arm__)
// See <asm/hwcap.h> kernel header.
#define HWCAP_VFP (1 << 6)
@@ -419,27 +471,104 @@ cpulist_read_from(CpuList* list, const char* filename)
#define HWCAP_IDIVA (1 << 17)
#define HWCAP_IDIVT (1 << 18)
// see <uapi/asm/hwcap.h> kernel header
#define HWCAP2_AES (1 << 0)
#define HWCAP2_PMULL (1 << 1)
#define HWCAP2_SHA1 (1 << 2)
#define HWCAP2_SHA2 (1 << 3)
#define HWCAP2_CRC32 (1 << 4)
// This is the list of 32-bit ARMv7 optional features that are _always_
// supported by ARMv8 CPUs, as mandated by the ARM Architecture Reference
// Manual.
#define HWCAP_SET_FOR_ARMV8 \
( HWCAP_VFP | \
HWCAP_NEON | \
HWCAP_VFPv3 | \
HWCAP_VFPv4 | \
HWCAP_IDIVA | \
HWCAP_IDIVT )
#endif
#if defined(__mips__)
// see <uapi/asm/hwcap.h> kernel header
#define HWCAP_MIPS_R6 (1 << 0)
#define HWCAP_MIPS_MSA (1 << 1)
#endif
#if defined(__arm__) || defined(__aarch64__) || defined(__mips__)
#define AT_HWCAP 16
#define AT_HWCAP2 26
// Probe the system's C library for a 'getauxval' function and call it if
// it exits, or return 0 for failure. This function is available since API
// level 20.
//
// This code does *NOT* check for '__ANDROID_API__ >= 20' to support the
// edge case where some NDK developers use headers for a platform that is
// newer than the one really targetted by their application.
// This is typically done to use newer native APIs only when running on more
// recent Android versions, and requires careful symbol management.
//
// Note that getauxval() can't really be re-implemented here, because
// its implementation does not parse /proc/self/auxv. Instead it depends
// on values that are passed by the kernel at process-init time to the
// C runtime initialization layer.
#if 1
// OpenCV calls CPU features check during library initialization stage
// (under other dlopen() call).
// Unfortunatelly, calling dlopen() recursively is not supported on some old
// Android versions. Android fix is here:
// - https://android-review.googlesource.com/#/c/32951/
// - GitHub mirror: https://github.com/android/platform_bionic/commit/e19d702b8e330cef87e0983733c427b5f7842144
__attribute__((weak)) unsigned long getauxval(unsigned long); // Lets linker to handle this symbol
static uint32_t
get_elf_hwcap_from_getauxval(int hwcap_type) {
uint32_t ret = 0;
if(getauxval != 0) {
ret = (uint32_t)getauxval(hwcap_type);
} else {
D("getauxval() is not available\n");
}
return ret;
}
#else
static uint32_t
get_elf_hwcap_from_getauxval(int hwcap_type) {
typedef unsigned long getauxval_func_t(unsigned long);
dlerror();
void* libc_handle = dlopen("libc.so", RTLD_NOW);
if (!libc_handle) {
D("Could not dlopen() C library: %s\n", dlerror());
return 0;
}
uint32_t ret = 0;
getauxval_func_t* func = (getauxval_func_t*)
dlsym(libc_handle, "getauxval");
if (!func) {
D("Could not find getauxval() in C library\n");
} else {
// Note: getauxval() returns 0 on failure. Doesn't touch errno.
ret = (uint32_t)(*func)(hwcap_type);
}
dlclose(libc_handle);
return ret;
}
#endif
#endif
#if defined(__arm__)
/* Compute the ELF HWCAP flags.
*/
// Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the
// current CPU. Note that this file is not accessible from regular
// application processes on some Android platform releases.
// On success, return new ELF hwcaps, or 0 on failure.
static uint32_t
get_elf_hwcap(const char* cpuinfo, int cpuinfo_len)
{
/* IMPORTANT:
* Accessing /proc/self/auxv doesn't work anymore on all
* platform versions. More specifically, when running inside
* a regular application process, most of /proc/self/ will be
* non-readable, including /proc/self/auxv. This doesn't
* happen however if the application is debuggable, or when
* running under the "shell" UID, which is why this was not
* detected appropriately.
*/
#if 0
uint32_t result = 0;
get_elf_hwcap_from_proc_self_auxv(void) {
const char filepath[] = "/proc/self/auxv";
int fd = open(filepath, O_RDONLY);
int fd = TEMP_FAILURE_RETRY(open(filepath, O_RDONLY));
if (fd < 0) {
D("Could not open %s: %s\n", filepath, strerror(errno));
return 0;
@@ -447,11 +576,10 @@ get_elf_hwcap(const char* cpuinfo, int cpuinfo_len)
struct { uint32_t tag; uint32_t value; } entry;
uint32_t result = 0;
for (;;) {
int ret = read(fd, (char*)&entry, sizeof entry);
int ret = TEMP_FAILURE_RETRY(read(fd, (char*)&entry, sizeof entry));
if (ret < 0) {
if (errno == EINTR)
continue;
D("Error while reading %s: %s\n", filepath, strerror(errno));
break;
}
@@ -465,12 +593,33 @@ get_elf_hwcap(const char* cpuinfo, int cpuinfo_len)
}
close(fd);
return result;
#else
// Recreate ELF hwcaps by parsing /proc/cpuinfo Features tag.
}
/* Compute the ELF HWCAP flags from the content of /proc/cpuinfo.
* This works by parsing the 'Features' line, which lists which optional
* features the device's CPU supports, on top of its reference
* architecture.
*/
static uint32_t
get_elf_hwcap_from_proc_cpuinfo(const char* cpuinfo, int cpuinfo_len) {
uint32_t hwcaps = 0;
long architecture = 0;
char* cpuArch = extract_cpuinfo_field(cpuinfo, cpuinfo_len, "CPU architecture");
if (cpuArch) {
architecture = strtol(cpuArch, NULL, 10);
free(cpuArch);
if (architecture >= 8L) {
// This is a 32-bit ARM binary running on a 64-bit ARM64 kernel.
// The 'Features' line only lists the optional features that the
// device's CPU supports, compared to its reference architecture
// which are of no use for this process.
D("Faking 32-bit ARM HWCaps on ARMv%ld CPU\n", architecture);
return HWCAP_SET_FOR_ARMV8;
}
}
char* cpuFeatures = extract_cpuinfo_field(cpuinfo, cpuinfo_len, "Features");
if (cpuFeatures != NULL) {
D("Found cpuFeatures = '%s'\n", cpuFeatures);
@@ -496,7 +645,6 @@ get_elf_hwcap(const char* cpuinfo, int cpuinfo_len)
free(cpuFeatures);
}
return hwcaps;
#endif
}
#endif /* __arm__ */
@@ -526,12 +674,19 @@ get_cpu_count(void)
static void
android_cpuInitFamily(void)
{
#if defined(__ARM_ARCH__)
#if defined(__arm__)
g_cpuFamily = ANDROID_CPU_FAMILY_ARM;
#elif defined(__i386__)
g_cpuFamily = ANDROID_CPU_FAMILY_X86;
#elif defined(_MIPS_ARCH)
#elif defined(__mips64)
/* Needs to be before __mips__ since the compiler defines both */
g_cpuFamily = ANDROID_CPU_FAMILY_MIPS64;
#elif defined(__mips__)
g_cpuFamily = ANDROID_CPU_FAMILY_MIPS;
#elif defined(__aarch64__)
g_cpuFamily = ANDROID_CPU_FAMILY_ARM64;
#elif defined(__x86_64__)
g_cpuFamily = ANDROID_CPU_FAMILY_X86_64;
#else
g_cpuFamily = ANDROID_CPU_FAMILY_UNKNOWN;
#endif
@@ -576,11 +731,8 @@ android_cpuInit(void)
D("found cpuCount = %d\n", g_cpuCount);
#ifdef __ARM_ARCH__
#ifdef __arm__
{
char* features = NULL;
char* architecture = NULL;
/* Extract architecture from the "CPU Architecture" field.
* The list is well-known, unlike the the output of
* the 'Processor' field which can vary greatly.
@@ -601,10 +753,7 @@ android_cpuInit(void)
/* read the initial decimal number, ignore the rest */
archNumber = strtol(cpuArch, &end, 10);
/* Here we assume that ARMv8 will be upwards compatible with v7
* in the future. Unfortunately, there is no 'Features' field to
* indicate that Thumb-2 is supported.
*/
/* Note that ARMv8 is upwards compatible with ARMv7. */
if (end > cpuArch && archNumber >= 7) {
hasARMv7 = 1;
}
@@ -645,7 +794,19 @@ android_cpuInit(void)
}
/* Extract the list of CPU features from ELF hwcaps */
uint32_t hwcaps = get_elf_hwcap(cpuinfo, cpuinfo_len);
uint32_t hwcaps = 0;
hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
if (!hwcaps) {
D("Parsing /proc/self/auxv to extract ELF hwcaps!\n");
hwcaps = get_elf_hwcap_from_proc_self_auxv();
}
if (!hwcaps) {
// Parsing /proc/self/auxv will fail from regular application
// processes on some Android platform versions, when this happens
// parse proc/cpuinfo instead.
D("Parsing /proc/cpuinfo to extract ELF hwcaps!\n");
hwcaps = get_elf_hwcap_from_proc_cpuinfo(cpuinfo, cpuinfo_len);
}
if (hwcaps != 0) {
int has_vfp = (hwcaps & HWCAP_VFP);
@@ -697,22 +858,163 @@ android_cpuInit(void)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv2 |
ANDROID_CPU_ARM_FEATURE_ARMv7;
// Note that some buggy kernels do not report these even when
// the CPU actually support the division instructions. However,
// assume that if 'vfpv4' is detected, then the CPU supports
// sdiv/udiv properly.
if (has_idiva || has_vfpv4)
if (has_idiva)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;
if (has_idivt || has_vfpv4)
if (has_idivt)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2;
if (has_iwmmxt)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_iWMMXt;
}
}
#endif /* __ARM_ARCH__ */
#ifdef __i386__
/* Extract the list of CPU features from ELF hwcaps2 */
uint32_t hwcaps2 = 0;
hwcaps2 = get_elf_hwcap_from_getauxval(AT_HWCAP2);
if (hwcaps2 != 0) {
int has_aes = (hwcaps2 & HWCAP2_AES);
int has_pmull = (hwcaps2 & HWCAP2_PMULL);
int has_sha1 = (hwcaps2 & HWCAP2_SHA1);
int has_sha2 = (hwcaps2 & HWCAP2_SHA2);
int has_crc32 = (hwcaps2 & HWCAP2_CRC32);
if (has_aes)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_AES;
if (has_pmull)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_PMULL;
if (has_sha1)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA1;
if (has_sha2)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA2;
if (has_crc32)
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_CRC32;
}
/* Extract the cpuid value from various fields */
// The CPUID value is broken up in several entries in /proc/cpuinfo.
// This table is used to rebuild it from the entries.
static const struct CpuIdEntry {
const char* field;
char format;
char bit_lshift;
char bit_length;
} cpu_id_entries[] = {
{ "CPU implementer", 'x', 24, 8 },
{ "CPU variant", 'x', 20, 4 },
{ "CPU part", 'x', 4, 12 },
{ "CPU revision", 'd', 0, 4 },
};
size_t i;
D("Parsing /proc/cpuinfo to recover CPUID\n");
for (i = 0;
i < sizeof(cpu_id_entries)/sizeof(cpu_id_entries[0]);
++i) {
const struct CpuIdEntry* entry = &cpu_id_entries[i];
char* value = extract_cpuinfo_field(cpuinfo,
cpuinfo_len,
entry->field);
if (value == NULL)
continue;
D("field=%s value='%s'\n", entry->field, value);
char* value_end = value + strlen(value);
int val = 0;
const char* start = value;
const char* p;
if (value[0] == '0' && (value[1] == 'x' || value[1] == 'X')) {
start += 2;
p = parse_hexadecimal(start, value_end, &val);
} else if (entry->format == 'x')
p = parse_hexadecimal(value, value_end, &val);
else
p = parse_decimal(value, value_end, &val);
if (p > (const char*)start) {
val &= ((1 << entry->bit_length)-1);
val <<= entry->bit_lshift;
g_cpuIdArm |= (uint32_t) val;
}
free(value);
}
// Handle kernel configuration bugs that prevent the correct
// reporting of CPU features.
static const struct CpuFix {
uint32_t cpuid;
uint64_t or_flags;
} cpu_fixes[] = {
/* The Nexus 4 (Qualcomm Krait) kernel configuration
* forgets to report IDIV support. */
{ 0x510006f2, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |
ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },
{ 0x510006f3, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |
ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },
};
size_t n;
for (n = 0; n < sizeof(cpu_fixes)/sizeof(cpu_fixes[0]); ++n) {
const struct CpuFix* entry = &cpu_fixes[n];
if (g_cpuIdArm == entry->cpuid)
g_cpuFeatures |= entry->or_flags;
}
// Special case: The emulator-specific Android 4.2 kernel fails
// to report support for the 32-bit ARM IDIV instruction.
// Technically, this is a feature of the virtual CPU implemented
// by the emulator. Note that it could also support Thumb IDIV
// in the future, and this will have to be slightly updated.
char* hardware = extract_cpuinfo_field(cpuinfo,
cpuinfo_len,
"Hardware");
if (hardware) {
if (!strcmp(hardware, "Goldfish") &&
g_cpuIdArm == 0x4100c080 &&
(g_cpuFamily & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) {
g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;
}
free(hardware);
}
}
#endif /* __arm__ */
#ifdef __aarch64__
{
/* Extract the list of CPU features from ELF hwcaps */
uint32_t hwcaps = 0;
hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
if (hwcaps != 0) {
int has_fp = (hwcaps & HWCAP_FP);
int has_asimd = (hwcaps & HWCAP_ASIMD);
int has_aes = (hwcaps & HWCAP_AES);
int has_pmull = (hwcaps & HWCAP_PMULL);
int has_sha1 = (hwcaps & HWCAP_SHA1);
int has_sha2 = (hwcaps & HWCAP_SHA2);
int has_crc32 = (hwcaps & HWCAP_CRC32);
if(has_fp == 0) {
D("ERROR: Floating-point unit missing, but is required by Android on AArch64 CPUs\n");
}
if(has_asimd == 0) {
D("ERROR: ASIMD unit missing, but is required by Android on AArch64 CPUs\n");
}
if (has_fp)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_FP;
if (has_asimd)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_ASIMD;
if (has_aes)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_AES;
if (has_pmull)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_PMULL;
if (has_sha1)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA1;
if (has_sha2)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA2;
if (has_crc32)
g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_CRC32;
}
}
#endif /* __aarch64__ */
#if defined(__i386__) || defined(__x86_64__)
int regs[4];
/* According to http://en.wikipedia.org/wiki/CPUID */
@@ -732,10 +1034,50 @@ android_cpuInit(void)
if ((regs[2] & (1 << 23)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_POPCNT;
}
if ((regs[2] & (1 << 19)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_1;
}
if ((regs[2] & (1 << 20)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_2;
}
if (vendorIsIntel && (regs[2] & (1 << 22)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_MOVBE;
}
if ((regs[2] & (1 << 25)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AES_NI;
}
if ((regs[2] & (1 << 28)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AVX;
}
if ((regs[2] & (1 << 30)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_RDRAND;
}
x86_cpuid(7, regs);
if ((regs[1] & (1 << 5)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AVX2;
}
if ((regs[1] & (1 << 29)) != 0) {
g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SHA_NI;
}
#endif
#if defined( __mips__)
{ /* MIPS and MIPS64 */
/* Extract the list of CPU features from ELF hwcaps */
uint32_t hwcaps = 0;
hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
if (hwcaps != 0) {
int has_r6 = (hwcaps & HWCAP_MIPS_R6);
int has_msa = (hwcaps & HWCAP_MIPS_MSA);
if (has_r6)
g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;
if (has_msa)
g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;
}
}
#endif /* __mips__ */
free(cpuinfo);
}
@@ -785,6 +1127,25 @@ android_setCpu(int cpu_count, uint64_t cpu_features)
return 1;
}
#ifdef __arm__
uint32_t
android_getCpuIdArm(void)
{
pthread_once(&g_once, android_cpuInit);
return g_cpuIdArm;
}
int
android_setCpuArm(int cpu_count, uint64_t cpu_features, uint32_t cpu_id)
{
if (!android_setCpu(cpu_count, cpu_features))
return 0;
g_cpuIdArm = cpu_id;
return 1;
}
#endif /* __arm__ */
/*
* Technical note: Making sense of ARM's FPU architecture versions.
*

View File

@@ -33,21 +33,40 @@
__BEGIN_DECLS
/* A list of valid values returned by android_getCpuFamily().
* They describe the CPU Architecture of the current process.
*/
typedef enum {
ANDROID_CPU_FAMILY_UNKNOWN = 0,
ANDROID_CPU_FAMILY_ARM,
ANDROID_CPU_FAMILY_X86,
ANDROID_CPU_FAMILY_MIPS,
ANDROID_CPU_FAMILY_ARM64,
ANDROID_CPU_FAMILY_X86_64,
ANDROID_CPU_FAMILY_MIPS64,
ANDROID_CPU_FAMILY_MAX /* do not remove */
} AndroidCpuFamily;
/* Return family of the device's CPU */
extern AndroidCpuFamily android_getCpuFamily(void);
/* Return the CPU family of the current process.
*
* Note that this matches the bitness of the current process. I.e. when
* running a 32-bit binary on a 64-bit capable CPU, this will return the
* 32-bit CPU family value.
*/
extern AndroidCpuFamily android_getCpuFamily(void);
/* The list of feature flags for ARM CPUs that can be recognized by the
* library. Value details are:
/* Return a bitmap describing a set of optional CPU features that are
* supported by the current device's CPU. The exact bit-flags returned
* depend on the value returned by android_getCpuFamily(). See the
* documentation for the ANDROID_CPU_*_FEATURE_* flags below for details.
*/
extern uint64_t android_getCpuFeatures(void);
/* The list of feature flags for ANDROID_CPU_FAMILY_ARM that can be
* recognized by the library (see note below for 64-bit ARM). Value details
* are:
*
* VFPv2:
* CPU supports the VFPv2 instruction set. Many, but not all, ARMv6 CPUs
@@ -103,6 +122,27 @@ extern AndroidCpuFamily android_getCpuFamily(void);
* ARM CPU. This is only available on a few XScale-based CPU designs
* sold by Marvell. Pretty rare in practice.
*
* AES:
* CPU supports AES instructions. These instructions are only
* available for 32-bit applications running on ARMv8 CPU.
*
* CRC32:
* CPU supports CRC32 instructions. These instructions are only
* available for 32-bit applications running on ARMv8 CPU.
*
* SHA2:
* CPU supports SHA2 instructions. These instructions are only
* available for 32-bit applications running on ARMv8 CPU.
*
* SHA1:
* CPU supports SHA1 instructions. These instructions are only
* available for 32-bit applications running on ARMv8 CPU.
*
* PMULL:
* CPU supports 64-bit PMULL and PMULL2 instructions. These
* instructions are only available for 32-bit applications
* running on ARMv8 CPU.
*
* If you want to tell the compiler to generate code that targets one of
* the feature set above, you should probably use one of the following
* flags (for more details, see technical note at the end of this file):
@@ -150,6 +190,13 @@ extern AndroidCpuFamily android_getCpuFamily(void);
*
* -mcpu=iwmmxt
* Allows the use of iWMMXt instrinsics with GCC.
*
* IMPORTANT NOTE: These flags should only be tested when
* android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM, i.e. this is a
* 32-bit process.
*
* When running a 64-bit ARM process on an ARMv8 CPU,
* android_getCpuFeatures() will return a different set of bitflags
*/
enum {
ANDROID_CPU_ARM_FEATURE_ARMv7 = (1 << 0),
@@ -164,18 +211,84 @@ enum {
ANDROID_CPU_ARM_FEATURE_IDIV_ARM = (1 << 9),
ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 = (1 << 10),
ANDROID_CPU_ARM_FEATURE_iWMMXt = (1 << 11),
ANDROID_CPU_ARM_FEATURE_AES = (1 << 12),
ANDROID_CPU_ARM_FEATURE_PMULL = (1 << 13),
ANDROID_CPU_ARM_FEATURE_SHA1 = (1 << 14),
ANDROID_CPU_ARM_FEATURE_SHA2 = (1 << 15),
ANDROID_CPU_ARM_FEATURE_CRC32 = (1 << 16),
};
/* The bit flags corresponding to the output of android_getCpuFeatures()
* when android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM64. Value details
* are:
*
* FP:
* CPU has Floating-point unit.
*
* ASIMD:
* CPU has Advanced SIMD unit.
*
* AES:
* CPU supports AES instructions.
*
* CRC32:
* CPU supports CRC32 instructions.
*
* SHA2:
* CPU supports SHA2 instructions.
*
* SHA1:
* CPU supports SHA1 instructions.
*
* PMULL:
* CPU supports 64-bit PMULL and PMULL2 instructions.
*/
enum {
ANDROID_CPU_ARM64_FEATURE_FP = (1 << 0),
ANDROID_CPU_ARM64_FEATURE_ASIMD = (1 << 1),
ANDROID_CPU_ARM64_FEATURE_AES = (1 << 2),
ANDROID_CPU_ARM64_FEATURE_PMULL = (1 << 3),
ANDROID_CPU_ARM64_FEATURE_SHA1 = (1 << 4),
ANDROID_CPU_ARM64_FEATURE_SHA2 = (1 << 5),
ANDROID_CPU_ARM64_FEATURE_CRC32 = (1 << 6),
};
/* The bit flags corresponding to the output of android_getCpuFeatures()
* when android_getCpuFamily() returns ANDROID_CPU_FAMILY_X86 or
* ANDROID_CPU_FAMILY_X86_64.
*/
enum {
ANDROID_CPU_X86_FEATURE_SSSE3 = (1 << 0),
ANDROID_CPU_X86_FEATURE_POPCNT = (1 << 1),
ANDROID_CPU_X86_FEATURE_MOVBE = (1 << 2),
ANDROID_CPU_X86_FEATURE_SSE4_1 = (1 << 3),
ANDROID_CPU_X86_FEATURE_SSE4_2 = (1 << 4),
ANDROID_CPU_X86_FEATURE_AES_NI = (1 << 5),
ANDROID_CPU_X86_FEATURE_AVX = (1 << 6),
ANDROID_CPU_X86_FEATURE_RDRAND = (1 << 7),
ANDROID_CPU_X86_FEATURE_AVX2 = (1 << 8),
ANDROID_CPU_X86_FEATURE_SHA_NI = (1 << 9),
};
/* The bit flags corresponding to the output of android_getCpuFeatures()
* when android_getCpuFamily() returns ANDROID_CPU_FAMILY_MIPS
* or ANDROID_CPU_FAMILY_MIPS64. Values are:
*
* R6:
* CPU executes MIPS Release 6 instructions natively, and
* supports obsoleted R1..R5 instructions only via kernel traps.
*
* MSA:
* CPU supports Mips SIMD Architecture instructions.
*/
enum {
ANDROID_CPU_MIPS_FEATURE_R6 = (1 << 0),
ANDROID_CPU_MIPS_FEATURE_MSA = (1 << 1),
};
extern uint64_t android_getCpuFeatures(void);
/* Return the number of CPU cores detected on this device. */
extern int android_getCpuCount(void);
extern int android_getCpuCount(void);
/* The following is used to force the CPU count and features
* mask in sandboxed processes. Under 4.1 and higher, these processes
@@ -190,6 +303,21 @@ extern int android_getCpuCount(void);
extern int android_setCpu(int cpu_count,
uint64_t cpu_features);
#ifdef __arm__
/* Retrieve the ARM 32-bit CPUID value from the kernel.
* Note that this cannot work on sandboxed processes under 4.1 and
* higher, unless you called android_setCpuArm() before.
*/
extern uint32_t android_getCpuIdArm(void);
/* An ARM-specific variant of android_setCpu() that also allows you
* to set the ARM CPUID field.
*/
extern int android_setCpuArm(int cpu_count,
uint64_t cpu_features,
uint32_t cpu_id);
#endif
__END_DECLS
#endif /* CPU_FEATURES_H */

View File

@@ -1,25 +1,37 @@
# Binary branch name: ffmpeg/master_20150703
# Binaries were created for OpenCV: e379ea6ed60b0caad4d4e3eea096e9d850cb8c86
set(FFMPEG_BINARIES_COMMIT "8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb")
set(FFMPEG_FILE_HASH_BIN32 "89c783eee1c47bfc733f08334ec2e31c")
set(FFMPEG_FILE_HASH_BIN64 "35fe6ccdda6d7a04e9056b0d73b98e76")
set(FFMPEG_FILE_HASH_CMAKE "8606f947a780071f8fcce8cbf39ceef5")
# Binaries branch name: ffmpeg/master_20180220
# Binaries were created for OpenCV: 9819ebc0954c2df62943ebbd5936d325e5dc89e1
ocv_update(FFMPEG_BINARIES_COMMIT "0a0e88972a7ea97708378d0488a65f83e7cc5e69")
ocv_update(FFMPEG_FILE_HASH_BIN32 "b8120c07962d591e2e9071a1bf566fd0")
ocv_update(FFMPEG_FILE_HASH_BIN64 "dc9c50e7b05482acc25d6ce0ac61bf1d")
ocv_update(FFMPEG_FILE_HASH_CMAKE "3b90f67f4b429e77d3da36698cef700c")
set(FFMPEG_DOWNLOAD_URL ${OPENCV_FFMPEG_URL};$ENV{OPENCV_FFMPEG_URL};https://raw.githubusercontent.com/Itseez/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/)
function(download_win_ffmpeg script_var)
set(${script_var} "" PARENT_SCOPE)
ocv_download(PACKAGE opencv_ffmpeg.dll
HASH ${FFMPEG_FILE_HASH_BIN32}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
set(ids BIN32 BIN64 CMAKE)
set(name_BIN32 "opencv_ffmpeg.dll")
set(name_BIN64 "opencv_ffmpeg_64.dll")
set(name_CMAKE "ffmpeg_version.cmake")
ocv_download(PACKAGE opencv_ffmpeg_64.dll
HASH ${FFMPEG_FILE_HASH_BIN64}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
set(FFMPEG_DOWNLOAD_DIR "${OpenCV_BINARY_DIR}/3rdparty/ffmpeg")
ocv_download(PACKAGE ffmpeg_version.cmake
HASH ${FFMPEG_FILE_HASH_CMAKE}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
set(status TRUE)
foreach(id ${ids})
ocv_download(FILENAME ${name_${id}}
HASH ${FFMPEG_FILE_HASH_${id}}
URL
"$ENV{OPENCV_FFMPEG_URL}"
"${OPENCV_FFMPEG_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/"
DESTINATION_DIR ${FFMPEG_DOWNLOAD_DIR}
ID FFMPEG
RELATIVE_URL
STATUS res)
if(NOT res)
set(status FALSE)
endif()
endforeach()
if(status)
set(${script_var} "${FFMPEG_DOWNLOAD_DIR}/ffmpeg_version.cmake" PARENT_SCOPE)
endif()
endfunction()

View File

@@ -16,19 +16,18 @@
The binaries are opencv_ffmpeg.dll (version for 32-bit Windows) and
opencv_ffmpeg_64.dll (version for 64-bit Windows).
See build_win32.txt for the build instructions, if you want to rebuild opencv_ffmpeg*.dll from scratch.
The pre-built opencv_ffmpeg*.dll is:
* LGPL library, not BSD libraries.
* Loaded at runtime by opencv_videoio module.
If it succeeds, ffmpeg can be used to decode/encode videos;
otherwise, other API is used.
FFMPEG build contains H264 encoder based on the OpenH264 library, that should be installed separatelly.
FFMPEG build includes support for H264 encoder based on the OpenH264 library.
OpenH264 Video Codec provided by Cisco Systems, Inc.
See https://github.com/cisco/openh264/releases for details and OpenH264 license.
Downloaded binary file can be placed into global system path (System32 or SysWOW64) or near application binaries.
You can also specify location of binary file via OPENH264_LIBRARY_PATH environment variable.
OpenH264 library should be installed separatelly. Downloaded binary file can be placed into global system path
(System32 or SysWOW64) or near application binaries (check documentation of "LoadLibrary" Win32 function from MSDN).
Or you can specify location of binary file via OPENH264_LIBRARY environment variable.
If LGPL/GPL software can not be supplied with your OpenCV-based product, simply exclude
opencv_ffmpeg*.dll from your distribution; OpenCV will stay fully functional except for the ability to

View File

@@ -1,110 +0,0 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER within this package.
*/
#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
#define NONAMELESSUNION 1
#endif
#if defined(NONAMELESSSTRUCT) && \
!defined(NONAMELESSUNION)
#define NONAMELESSUNION 1
#endif
#if defined(NONAMELESSUNION) && \
!defined(NONAMELESSSTRUCT)
#define NONAMELESSSTRUCT 1
#endif
#ifndef __ANONYMOUS_DEFINED
#define __ANONYMOUS_DEFINED
#if defined(__GNUC__) || defined(__GNUG__)
#define _ANONYMOUS_UNION __extension__
#define _ANONYMOUS_STRUCT __extension__
#else
#define _ANONYMOUS_UNION
#define _ANONYMOUS_STRUCT
#endif
#ifndef NONAMELESSUNION
#define _UNION_NAME(x)
#define _STRUCT_NAME(x)
#else /* NONAMELESSUNION */
#define _UNION_NAME(x) x
#define _STRUCT_NAME(x) x
#endif
#endif /* __ANONYMOUS_DEFINED */
#ifndef DUMMYUNIONNAME
# ifdef NONAMELESSUNION
# define DUMMYUNIONNAME u
# define DUMMYUNIONNAME1 u1 /* Wine uses this variant */
# define DUMMYUNIONNAME2 u2
# define DUMMYUNIONNAME3 u3
# define DUMMYUNIONNAME4 u4
# define DUMMYUNIONNAME5 u5
# define DUMMYUNIONNAME6 u6
# define DUMMYUNIONNAME7 u7
# define DUMMYUNIONNAME8 u8
# define DUMMYUNIONNAME9 u9
# else /* NONAMELESSUNION */
# define DUMMYUNIONNAME
# define DUMMYUNIONNAME1 /* Wine uses this variant */
# define DUMMYUNIONNAME2
# define DUMMYUNIONNAME3
# define DUMMYUNIONNAME4
# define DUMMYUNIONNAME5
# define DUMMYUNIONNAME6
# define DUMMYUNIONNAME7
# define DUMMYUNIONNAME8
# define DUMMYUNIONNAME9
# endif
#endif /* DUMMYUNIONNAME */
#if !defined(DUMMYUNIONNAME1) /* MinGW does not define this one */
# ifdef NONAMELESSUNION
# define DUMMYUNIONNAME1 u1 /* Wine uses this variant */
# else
# define DUMMYUNIONNAME1 /* Wine uses this variant */
# endif
#endif /* DUMMYUNIONNAME1 */
#ifndef DUMMYSTRUCTNAME
# ifdef NONAMELESSUNION
# define DUMMYSTRUCTNAME s
# define DUMMYSTRUCTNAME1 s1 /* Wine uses this variant */
# define DUMMYSTRUCTNAME2 s2
# define DUMMYSTRUCTNAME3 s3
# define DUMMYSTRUCTNAME4 s4
# define DUMMYSTRUCTNAME5 s5
# else
# define DUMMYSTRUCTNAME
# define DUMMYSTRUCTNAME1 /* Wine uses this variant */
# define DUMMYSTRUCTNAME2
# define DUMMYSTRUCTNAME3
# define DUMMYSTRUCTNAME4
# define DUMMYSTRUCTNAME5
# endif
#endif /* DUMMYSTRUCTNAME */
/* These are for compatibility with the Wine source tree */
#ifndef WINELIB_NAME_AW
# ifdef __MINGW_NAME_AW
# define WINELIB_NAME_AW __MINGW_NAME_AW
# else
# ifdef UNICODE
# define WINELIB_NAME_AW(func) func##W
# else
# define WINELIB_NAME_AW(func) func##A
# endif
# endif
#endif /* WINELIB_NAME_AW */
#ifndef DECL_WINELIB_TYPE_AW
# ifdef __MINGW_TYPEDEF_AW
# define DECL_WINELIB_TYPE_AW __MINGW_TYPEDEF_AW
# else
# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type;
# endif
#endif /* DECL_WINELIB_TYPE_AW */

View File

@@ -1,33 +0,0 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#if !defined(_INC_CRT_UNICODE_MACROS)
/* _INC_CRT_UNICODE_MACROS defined based on UNICODE flag */
#if defined(UNICODE)
# define _INC_CRT_UNICODE_MACROS 1
# define __MINGW_NAME_AW(func) func##W
# define __MINGW_NAME_AW_EXT(func,ext) func##W##ext
# define __MINGW_NAME_UAW(func) func##_W
# define __MINGW_NAME_UAW_EXT(func,ext) func##_W_##ext
# define __MINGW_STRING_AW(str) L##str /* same as TEXT() from winnt.h */
# define __MINGW_PROCNAMEEXT_AW "W"
#else
# define _INC_CRT_UNICODE_MACROS 2
# define __MINGW_NAME_AW(func) func##A
# define __MINGW_NAME_AW_EXT(func,ext) func##A##ext
# define __MINGW_NAME_UAW(func) func##_A
# define __MINGW_NAME_UAW_EXT(func,ext) func##_A_##ext
# define __MINGW_STRING_AW(str) str /* same as TEXT() from winnt.h */
# define __MINGW_PROCNAMEEXT_AW "A"
#endif
#define __MINGW_TYPEDEF_AW(type) \
typedef __MINGW_NAME_AW(type) type;
#define __MINGW_TYPEDEF_UAW(type) \
typedef __MINGW_NAME_UAW(type) type;
#endif /* !defined(_INC_CRT_UNICODE_MACROS) */

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +0,0 @@
#ifndef _AUDEVCOD_H
#define _AUDEVCOD_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef enum _tagSND_DEVICE_ERROR {
SNDDEV_ERROR_Open = 1,
SNDDEV_ERROR_Close = 2,
SNDDEV_ERROR_GetCaps = 3,
SNDDEV_ERROR_PrepareHeader = 4,
SNDDEV_ERROR_UnprepareHeader = 5,
SNDDEV_ERROR_Reset = 6,
SNDDEV_ERROR_Restart = 7,
SNDDEV_ERROR_GetPosition = 8,
SNDDEV_ERROR_Write = 9,
SNDDEV_ERROR_Pause = 10,
SNDDEV_ERROR_Stop = 11,
SNDDEV_ERROR_Start = 12,
SNDDEV_ERROR_AddBuffer = 13,
SNDDEV_ERROR_Query = 14
} SNDDEV_ERR;
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,32 +0,0 @@
#ifndef _BDATYPES_H
#define _BDATYPES_H
#if __GNUC__ >= 3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*--- DirectShow Reference - DirectShow Enumerated Types */
typedef enum {
MEDIA_TRANSPORT_PACKET,
MEDIA_ELEMENTARY_STREAM,
MEDIA_MPEG2_PSI,
MEDIA_TRANSPORT_PAYLOAD
} MEDIA_SAMPLE_CONTENT;
/*--- DirectShow Reference - DirectShow Structures */
typedef struct {
DWORD dwOffset;
DWORD dwPacketLength;
DWORD dwStride;
} MPEG2_TRANSPORT_STRIDE;
typedef struct {
ULONG ulPID;
MEDIA_SAMPLE_CONTENT MediaSampleContent ;
} PID_MAP;
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,61 +0,0 @@
/*
* Copyright (C) 2002 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __DSHOW_INCLUDED__
#define __DSHOW_INCLUDED__
#define AM_NOVTABLE
#ifndef __WINESRC__
# include <windows.h>
# include <windowsx.h>
#else
# include <windef.h>
# include <wingdi.h>
# include <objbase.h>
#endif
#include <olectl.h>
#include <dshow/ddraw.h>
#include <mmsystem.h>
/* FIXME: #include <strsafe.h>*/
#ifndef NUMELMS
#define NUMELMS(array) (sizeof(array)/sizeof((array)[0]))
#endif
#include <dshow/strmif.h>
#include <dshow/amvideo.h>
#ifdef DSHOW_USE_AMAUDIO
/* FIXME: #include <amaudio.h>*/
#endif
#include <dshow/control.h>
#include <dshow/evcode.h>
#include <dshow/uuids.h>
#include <dshow/errors.h>
/* FIXME: #include <edevdefs.h> */
#include <dshow/audevcod.h>
/* FIXME: #include <dvdevcod.h> */
#ifndef OATRUE
#define OATRUE (-1)
#endif
#ifndef OAFALSE
#define OAFALSE (0)
#endif
#endif /* __DSHOW_INCLUDED__ */

File diff suppressed because it is too large Load Diff

View File

@@ -1,75 +0,0 @@
/*
* Copyright (C) 2008 Maarten Lankhorst
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __DVDMEDIA_H__
#define __DVDMEDIA_H__
#define AMCONTROL_USED 0x00000001
#define AMCONTROL_PAD_TO_4x3 0x00000002
#define AMCONTROL_PAD_TO_16x9 0x00000004
enum AM_MPEG2Level {
AM_MPEG2Level_Low = 1,
AM_MPEG2Level_Main,
AM_MPEG2Level_High1440,
AM_MPEG2Level_High
};
enum AM_MPEG2Profile {
AM_MPEG2Profile_Simple = 1,
AM_MPEG2Profile_Main,
AM_MPEG2Profile_SNRScalable,
AM_MPEG2Profile_SpatiallyScalable,
AM_MPEG2Profile_High
};
typedef enum {
AM_RATE_ChangeRate = 1,
AM_RATE_FullDataRateMax = 2,
AM_RATE_ReverseDecode = 3,
AM_RATE_DecoderPosition = 4,
AM_RATE_DecoderVersion = 5
} AM_PROPERTY_DVD_RATE_CHANGE;
typedef struct tagVIDEOINFOHEADER2 {
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
DWORD dwInterlaceFlags;
DWORD dwCopyProtectFlags;
DWORD dwPictAspectRatioX;
DWORD dwPictAspectRatioY;
union {
DWORD dwControlFlags;
DWORD dwReserved1;
} DUMMYUNIONNAME;
DWORD dwReserved2;
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER2;
typedef struct tagMPEG2VIDEOINFO {
VIDEOINFOHEADER2 hdr;
DWORD dwStartTimeCode;
DWORD cbSequenceHeader;
DWORD dwProfile;
DWORD dwLevel;
DWORD dwFlags;
DWORD dwSequenceHeader[1];
} MPEG2VIDEOINFO;
#endif /* __DVDMEDIA_H__ */

View File

@@ -1,169 +0,0 @@
#ifndef _ERRORS_H
#define _ERRORS_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*--- DirectShow Reference - Constants and GUIDs - Error and Success Codes */
#define VFW_S_NO_MORE_ITEMS 0x00040103
#define VFW_S_DUPLICATE_NAME 0x0004022D
#define VFW_S_STATE_INTERMEDIATE 0x00040237
#define VFW_S_PARTIAL_RENDER 0x00040242
#define VFW_S_SOME_DATA_IGNORED 0x00040245
#define VFW_S_CONNECTIONS_DEFERRED 0x00040246
#define VFW_S_RESOURCE_NOT_NEEDED 0x00040250
#define VFW_S_MEDIA_TYPE_IGNORED 0x00040254
#define VFW_S_VIDEO_NOT_RENDERED 0x00040257
#define VFW_S_AUDIO_NOT_RENDERED 0x00040258
#define VFW_S_RPZA 0x0004025A
#define VFW_S_ESTIMATED 0x00040260
#define VFW_S_RESERVED 0x00040263
#define VFW_S_STREAM_OFF 0x00040267
#define VFW_S_CANT_CUE 0x00040268
#define VFW_S_NOPREVIEWPIN 0x0004027E
#define VFW_S_DVD_NON_ONE_SEQUENTIAL 0x00040280
#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE 0x0004028C
#define VFW_S_DVD_NOT_ACCURATE 0x0004028D
#define VFW_E_INVALIDMEDIATYPE 0x80040200
#define VFW_E_INVALIDSUBTYPE 0x80040201
#define VFW_E_NEED_OWNER 0x80040202
#define VFW_E_ENUM_OUT_OF_SYNC 0x80040203
#define VFW_E_ALREADY_CONNECTED 0x80040204
#define VFW_E_FILTER_ACTIVE 0x80040205
#define VFW_E_NO_TYPES 0x80040206
#define VFW_E_NO_ACCEPTABLE_TYPES 0x80040207
#define VFW_E_INVALID_DIRECTION 0x80040208
#define VFW_E_NOT_CONNECTED 0x80040209
#define VFW_E_NO_ALLOCATOR 0x8004020A
#define VFW_E_RUNTIME_ERROR 0x8004020B
#define VFW_E_BUFFER_NOTSET 0x8004020C
#define VFW_E_BUFFER_OVERFLOW 0x8004020D
#define VFW_E_BADALIGN 0x8004020E
#define VFW_E_ALREADY_COMMITTED 0x8004020F
#define VFW_E_BUFFERS_OUTSTANDING 0x80040210
#define VFW_E_NOT_COMMITTED 0x80040211
#define VFW_E_SIZENOTSET 0x80040212
#define VFW_E_NO_CLOCK 0x80040213
#define VFW_E_NO_SINK 0x80040214
#define VFW_E_NO_INTERFACE 0x80040215
#define VFW_E_NOT_FOUND 0x80040216
#define VFW_E_CANNOT_CONNECT 0x80040217
#define VFW_E_CANNOT_RENDER 0x80040218
#define VFW_E_CHANGING_FORMAT 0x80040219
#define VFW_E_NO_COLOR_KEY_SET 0x8004021A
#define VFW_E_NOT_OVERLAY_CONNECTION 0x8004021B
#define VFW_E_NOT_SAMPLE_CONNECTION 0x8004021C
#define VFW_E_PALETTE_SET 0x8004021D
#define VFW_E_COLOR_KEY_SET 0x8004021E
#define VFW_E_NO_COLOR_KEY_FOUND 0x8004021F
#define VFW_E_NO_PALETTE_AVAILABLE 0x80040220
#define VFW_E_NO_DISPLAY_PALETTE 0x80040221
#define VFW_E_TOO_MANY_COLORS 0x80040222
#define VFW_E_STATE_CHANGED 0x80040223
#define VFW_E_NOT_STOPPED 0x80040224
#define VFW_E_NOT_PAUSED 0x80040225
#define VFW_E_NOT_RUNNING 0x80040226
#define VFW_E_WRONG_STATE 0x80040227
#define VFW_E_START_TIME_AFTER_END 0x80040228
#define VFW_E_INVALID_RECT 0x80040229
#define VFW_E_TYPE_NOT_ACCEPTED 0x8004022A
#define VFW_E_SAMPLE_REJECTED 0x8004022B
#define VFW_E_SAMPLE_REJECTED_EOS 0x8004022C
#define VFW_E_DUPLICATE_NAME 0x8004022D
#define VFW_E_TIMEOUT 0x8004022E
#define VFW_E_INVALID_FILE_FORMAT 0x8004022F
#define VFW_E_ENUM_OUT_OF_RANGE 0x80040230
#define VFW_E_CIRCULAR_GRAPH 0x80040231
#define VFW_E_NOT_ALLOWED_TO_SAVE 0x80040232
#define VFW_E_TIME_ALREADY_PASSED 0x80040233
#define VFW_E_ALREADY_CANCELLED 0x80040234
#define VFW_E_CORRUPT_GRAPH_FILE 0x80040235
#define VFW_E_ADVISE_ALREADY_SET 0x80040236
#define VFW_E_NO_MODEX_AVAILABLE 0x80040238
#define VFW_E_NO_ADVISE_SET 0x80040239
#define VFW_E_NO_FULLSCREEN 0x8004023A
#define VFW_E_IN_FULLSCREEN_MODE 0x8004023B
#define VFW_E_UNKNOWN_FILE_TYPE 0x80040240
#define VFW_E_CANNOT_LOAD_SOURCE_FILTER 0x80040241
#define VFW_E_FILE_TOO_SHORT 0x80040243
#define VFW_E_INVALID_FILE_VERSION 0x80040244
#define VFW_E_INVALID_CLSID 0x80040247
#define VFW_E_INVALID_MEDIA_TYPE 0x80040248
#define VFW_E_SAMPLE_TIME_NOT_SET 0x80040249
#define VFW_E_MEDIA_TIME_NOT_SET 0x80040251
#define VFW_E_NO_TIME_FORMAT_SET 0x80040252
#define VFW_E_MONO_AUDIO_HW 0x80040253
#define VFW_E_NO_DECOMPRESSOR 0x80040255
#define VFW_E_NO_AUDIO_HARDWARE 0x80040256
#define VFW_E_RPZA 0x80040259
#define VFW_E_PROCESSOR_NOT_SUITABLE 0x8004025B
#define VFW_E_UNSUPPORTED_AUDIO 0x8004025C
#define VFW_E_UNSUPPORTED_VIDEO 0x8004025D
#define VFW_E_MPEG_NOT_CONSTRAINED 0x8004025E
#define VFW_E_NOT_IN_GRAPH 0x8004025F
#define VFW_E_NO_TIME_FORMAT 0x80040261
#define VFW_E_READ_ONLY 0x80040262
#define VFW_E_BUFFER_UNDERFLOW 0x80040264
#define VFW_E_UNSUPPORTED_STREAM 0x80040265
#define VFW_E_NO_TRANSPORT 0x80040266
#define VFW_E_BAD_VIDEOCD 0x80040269
#define VFW_S_NO_STOP_TIME 0x80040270
#define VFW_E_OUT_OF_VIDEO_MEMORY 0x80040271
#define VFW_E_VP_NEGOTIATION_FAILED 0x80040272
#define VFW_E_DDRAW_CAPS_NOT_SUITABLE 0x80040273
#define VFW_E_NO_VP_HARDWARE 0x80040274
#define VFW_E_NO_CAPTURE_HARDWARE 0x80040275
#define VFW_E_DVD_OPERATION_INHIBITED 0x80040276
#define VFW_E_DVD_INVALIDDOMAIN 0x80040277
#define VFW_E_DVD_NO_BUTTON 0x80040278
#define VFW_E_DVD_GRAPHNOTREADY 0x80040279
#define VFW_E_DVD_RENDERFAIL 0x8004027A
#define VFW_E_DVD_DECNOTENOUGH 0x8004027B
#define VFW_E_DDRAW_VERSION_NOT_SUITABLE 0x8004027C
#define VFW_E_COPYPROT_FAILED 0x8004027D
#define VFW_E_TIME_EXPIRED 0x8004027F
#define VFW_E_DVD_WRONG_SPEED 0x80040281
#define VFW_E_DVD_MENU_DOES_NOT_EXIST 0x80040282
#define VFW_E_DVD_CMD_CANCELLED 0x80040283
#define VFW_E_DVD_STATE_WRONG_VERSION 0x80040284
#define VFW_E_DVD_STATE_CORRUPT 0x80040285
#define VFW_E_DVD_STATE_WRONG_DISC 0x80040286
#define VFW_E_DVD_INCOMPATIBLE_REGION 0x80040287
#define VFW_E_DVD_NO_ATTRIBUTES 0x80040288
#define VFW_E_DVD_NO_GOUP_PGC 0x80040289
#define VFW_E_DVD_LOW_PARENTAL_LEVEL 0x8004028A
#define VFW_E_DVD_NOT_IN_KARAOKE_MODE 0x8004028B
#define VFW_E_FRAME_STEP_UNSUPPORTED 0x8004028E
#define VFW_E_DVD_STREAM_DISABLED 0x8004028F
#define VFW_E_DVD_TITLE_UNKNOWN 0x80040290
#define VFW_E_DVD_INVALID_DISC 0x80040291
#define VFW_E_DVD_NO_RESUME_INFORMATION 0x80040292
#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD 0x80040293
#define VFW_E_PIN_ALREADY_BLOCKED 0x80040294
#define VFW_E_CERTIFICATION_FAILURE 0x80040295
#define VFW_E_VMR_NOT_IN_MIXER_MODE 0x80040296
#define VFW_E_VMR_NO_AP_SUPPLIED 0x80040297
#define VFW_E_VMR_NO_DEINTERLACE_HW 0x80040298
#define VFW_E_VMR_NO_PROCAMP_HW 0x80040299
#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC 0x8004029A
#define VFW_E_NO_COPP_HW 0x8004029B
#define VFW_E_BAD_KEY 0x800403F2
/*--- DirectShow Reference - Functions */
#define MAX_ERROR_TEXT_LEN 160
/*--- DirectShow Reference - Functions */
DWORD WINAPI AMGetErrorTextA(HRESULT,CHAR*,DWORD);
DWORD WINAPI AMGetErrorTextW(HRESULT,WCHAR*,DWORD);
#ifdef UNICODE
#define AMGetErrorText AMGetErrorTextW
#else
#define AMGetErrorText AMGetErrorTextA
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,68 +0,0 @@
#ifndef _EVCODE_H
#define _EVCODE_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*--- DirectShow Reference - Constants and GUIDs - Event Notification Codes */
#define EC_ACTIVATE 0x0013
#define EC_BUFFERING_DATA 0x0011
#define EC_BUILT 0x0300
#define EC_CLOCK_CHANGED 0x000D
#define EC_CLOCK_UNSET 0x0051
#define EC_CODECAPI_EVENT 0x0057
#define EC_COMPLETE 0x0001
#define EC_DEVICE_LOST 0x001F
#define EC_DISPLAY_CHANGED 0x0016
#define EC_END_OF_SEGMENT 0x001C
#define EC_ERROR_STILLPLAYING 0x0008
#define EC_ERRORABORT 0x0003
#define EC_EXTDEVICE_MODE_CHANGE 0x0031
#define EC_FULLSCREEN_LOST 0x0012
#define EC_GRAPH_CHANGED 0x0050
#define EC_LENGTH_CHANGED 0x001E
#define EC_NEED_RESTART 0x0014
#define EC_NOTIFY_WINDOW 0x0019
#define EC_OLE_EVENT 0x0018
#define EC_OPENING_FILE 0x0010
#define EC_PALETTE_CHANGED 0x0009
#define EC_PAUSED 0x000E
#define EC_PREPROCESS_COMPLETE 0x0056
#define EC_QUALITY_CHANGE 0x000B
#define EC_REPAINT 0x0005
#define EC_SEGMENT_STARTED 0x001D
#define EC_SHUTTING_DOWN 0x000C
#define EC_SNDDEV_IN_ERROR 0x0200
#define EC_SNDDEV_OUT_ERROR 0x0201
#define EC_STARVATION 0x0017
#define EC_STATE_CHANGE 0x0032
#define EC_STEP_COMPLETE 0x0024
#define EC_STREAM_CONTROL_STARTED 0x001B
#define EC_STREAM_CONTROL_STOPPED 0x001A
#define EC_STREAM_ERROR_STILLPLAYING 0x0007
#define EC_STREAM_ERROR_STOPPED 0x0006
#define EC_TIMECODE_AVAILABLE 0x0030
#define EC_UNBUILT 0x0301
#define EC_USERABORT 0x0002
#define EC_VIDEO_SIZE_CHANGED 0x000A
#define EC_VMR_RENDERDEVICE_SET 0x0053
#define EC_VMR_SURFACE_FLIPPED 0x0054
#define EC_VMR_RECONNECTION_FAILED 0x0055
#define EC_WINDOW_DESTROYED 0x0015
#define EC_WMT_EVENT 0x0252
#define EC_WMT_INDEX_EVENT 0x0251
#define EC_USER 0x8000
/*--- DirectShow Reference - DirectShow Structures */
typedef struct {
HRESULT hrStatus;
void *pData;
} AM_WMT_EVENT_DATA;
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,191 +0,0 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK,
0x36523B13,0x8EE5,0x11d1,0x8C,0xA3,0x00,0x60,0xB0,0x57,0x66,0x4A)
OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES,
0xe06d8020,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_WMDRM_TRANSPORT,
0x18BEC4EA,0x4676,0x450e,0xB4,0x78,0x0C,0xD8,0x4C,0x54,0xB3,0x27)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO,
0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO,
0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_VIDEOINFO2,
0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x0,0x0,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM,
0xe06d8022,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT,
0xe06d8023,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO,
0xe06d802b,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3,
0xe06d802c,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE,
0xe06d802d,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO,
0xe06d8032,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK,
0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x04f,0xc3,0x1d,0x60)
OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION,
0xe06d802e,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI,
0xe06d802f,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI,
0xe06d8030,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER,
0xe06d8031,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_MPEG2Video,
0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_DolbyAC3,
0xe06d80e4,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_MPEG2Audio,
0xe06d80e5,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio,
0xe06d80e6,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(AM_KSPROPSETID_AC3,
0xBFABE720,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00)
OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic,
0xac390460,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9)
OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt,
0x0E8A0A40,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3)
OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange,
0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0)
OUR_GUID_ENTRY(AM_KSPROPSETID_MPEG4_MediaType_Attributes,
0xff6c4bfa,0x7a9,0x4c7b,0xa2,0x37,0x67,0x2f,0x9d,0x68,0x6,0x5f)
OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE,
0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER,
0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR,
0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO,
0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO,
0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER,
0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR,
0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO,
0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)
OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC,
0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f)
OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER,
0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
OUR_GUID_ENTRY(IID_IKsInterfaceHandler,
0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(IID_IKsDataTypeHandler,
0x5FFBAA02L,0x49A3,0x11D0,0x9F,0x36,0x00,0xAA,0x00,0xA2,0x16,0xA1)
OUR_GUID_ENTRY(IID_IKsPin,
0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1)
OUR_GUID_ENTRY(IID_IKsControl,
0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(IID_IKsPinFactory,
0xCD5EBE6BL,0x8B6E,0x11D1,0x8A,0xE0,0x00,0xA0,0xC9,0x22,0x31,0x96)
OUR_GUID_ENTRY(AM_INTERFACESETID_Standard,
0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS,
0x455f176c,0x4b06,0x47ce,0x9a,0xef,0x8c,0xae,0xf7,0x3d,0xf7,0xb5)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VERSIONED_TABLES,
0x1ed988b0,0x3ffc,0x4523,0x87,0x25,0x34,0x7b,0xee,0xc1,0xa8,0xa0)
OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI,
0xb3c7397c,0xd303,0x414d,0xb3,0x3c,0x4e,0xd2,0xc9,0xd2,0x97,0x33)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI,
0xe9dd31a3,0x221d,0x4adb,0x85,0x32,0x9a,0xf3,0x9,0xc1,0xa4,0x8)
OUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SI,
0xe89ad298,0x3601,0x4b06,0xaa,0xec,0x9d,0xde,0xed,0xcc,0x5b,0xd0)
OUR_GUID_ENTRY(MEDIASUBTYPE_TIF_SI,
0xec232eb2,0xcb96,0x4191,0xb2,0x26,0xe,0xa1,0x29,0xf3,0x82,0x50)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA,
0xc892e55b,0x252d,0x42b5,0xa3,0x16,0xd9,0x97,0xe7,0xa5,0xd9,0x95)
#endif
/* ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) ||
(NTDDI_VERSION >= NTDDI_WS03SP1) */
#if (NTDDI_VERSION >= NTDDI_WINXP)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE,
0x138aa9a4,0x1ee2,0x4c5b,0x98,0x8e,0x19,0xab,0xfd,0xbc,0x8a,0x11)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_UDCR_TRANSPORT,
0x18BEC4EA,0x4676,0x450e,0xB4,0x78,0x0C,0xD8,0x4C,0x54,0xB3,0x27)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_RAW,
0x0d7aed42,0xcb9a,0x11db,0x97,0x5,0x0,0x50,0x56,0xc0,0x0,0x8)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_PROCESSED,
0xaf748dd4,0xd80,0x11db,0x97,0x5,0x0,0x50,0x56,0xc0,0x0,0x8)
OUR_GUID_ENTRY(MEDIASUBTYPE_DTS,
0xe06d8033,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS,
0xe06d8034,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)
OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange,
0x3577eb09,0x9582,0x477f,0xb2,0x9c,0xb0,0xc4,0x52,0xa4,0xff,0x9a)
OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke,
0xae4720ae,0xaa71,0x42d8,0xb8,0x2a,0xff,0xfd,0xf5,0x8b,0x76,0xfd)
OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep,
0xc830acbd,0xab07,0x492f,0x88,0x52,0x45,0xb6,0x98,0x7c,0x29,0x79)
#endif /* NTDDI_VERSION >= NTDDI_WINXP */
#if (NTDDI_VERSION >= NTDDI_WS03SP1)
OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI,
0x9c24a977,0x951,0x451a,0x80,0x6,0xe,0x49,0xbd,0x28,0xcd,0x5f)
#endif /* NTDDI_VERSION >= NTDDI_WS03SP1 */

File diff suppressed because it is too large Load Diff

View File

@@ -1,368 +0,0 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef OUR_GUID_ENTRY
#define OUR_GUID_ENTRY(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8);
#endif
#define MEDIATYPE_NULL GUID_NULL
#define MEDIASUBTYPE_NULL GUID_NULL
OUR_GUID_ENTRY(MEDIASUBTYPE_None,0xe436eb8e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIATYPE_Video,0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_Audio,0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_Text,0x73747874,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_Midi,0x7364696D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_Stream,0xe436eb83,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIATYPE_Interleaved,0x73766169,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_File,0x656c6966,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_ScriptCommand,0x73636d64,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data,0x670aea80,0x3a82,0x11d0,0xb7,0x9b,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(MEDIATYPE_VBI,0xf72a76e1,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(MEDIATYPE_Timecode,0x482dee3,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIATYPE_LMRT,0x74726c6d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIATYPE_URL_STREAM,0x736c7275,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_CLPL,0x4C504C43,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_YUYV,0x56595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IYUV,0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_YVU9,0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Y411,0x31313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Y41P,0x50313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_YUY2,0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_YVYU,0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_UYVY,0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Y211,0x31313259,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_CLJR,0x524a4c43,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IF09,0x39304649,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_CPLA,0x414c5043,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_MJPG,0x47504A4D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ,0x4A4D5654,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_WAKE,0x454B4157,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_CFCC,0x43434643,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IJPG,0x47504A49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Plum,0x6D756C50,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVCS,0x53435644,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_DVSD,0x44535644,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_MDVF,0x4656444D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB1,0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB4,0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB8,0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB565,0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB555,0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB24,0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32,0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555,0x297c55af,0xe209,0x4cb3,0xb7,0x57,0xc7,0x6d,0x6b,0x9c,0x88,0xa8)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444,0x6e6415e6,0x5c24,0x425f,0x93,0xcd,0x80,0x10,0x2b,0x3d,0x1c,0xca)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32,0x773c9ac0,0x3274,0x11d0,0xb7,0x24,0x0,0xaa,0x0,0x6c,0x1a,0x1)
OUR_GUID_ENTRY(MEDIASUBTYPE_A2R10G10B10,0x2f8bb76d,0xb644,0x4550,0xac,0xf3,0xd3,0x0c,0xaa,0x65,0xd5,0xc5)
OUR_GUID_ENTRY(MEDIASUBTYPE_A2B10G10R10,0x576f7893,0xbdf6,0x48c4,0x87,0x5f,0xae,0x7b,0x81,0x83,0x45,0x67)
OUR_GUID_ENTRY(MEDIASUBTYPE_AYUV,0x56555941,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_AI44,0x34344941,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IA44,0x34344149,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX7_RT,0x32335237,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX7_RT,0x36315237,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX7_RT,0x38384137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX7_RT,0x34344137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX7_RT,0x35314137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX9_RT,0x32335239,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX9_RT,0x36315239,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX9_RT,0x38384139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX9_RT,0x34344139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX9_RT,0x35314139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
#define MEDIASUBTYPE_HASALPHA(mt) (((mt).subtype==MEDIASUBTYPE_ARGB4444) || ((mt).subtype==MEDIASUBTYPE_ARGB32) || ((mt).subtype==MEDIASUBTYPE_AYUV) || ((mt).subtype==MEDIASUBTYPE_AI44) || ((mt).subtype==MEDIASUBTYPE_IA44) || ((mt).subtype==MEDIASUBTYPE_ARGB1555) || ((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT))
#define MEDIASUBTYPE_HASALPHA7(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT))
#define MEDIASUBTYPE_D3D_DX7_RT(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_RGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_RGB16_D3D_DX7_RT))
#define MEDIASUBTYPE_HASALPHA9(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT))
#define MEDIASUBTYPE_D3D_DX9_RT(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_RGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_RGB16_D3D_DX9_RT))
OUR_GUID_ENTRY(MEDIASUBTYPE_YV12,0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_NV12,0x3231564E,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IMC1,0x31434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IMC2,0x32434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IMC3,0x33434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IMC4,0x34434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_S340,0x30343353,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_S342,0x32343353,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Overlay,0xe436eb7f,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet,0xe436eb80,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload,0xe436eb81,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload,0x00000050,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71)
OUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream,0xe436eb82,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System,0xe436eb84,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD,0xe436eb85,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video,0xe436eb86,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio,0xe436eb87,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_Avi,0xe436eb88,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_Asf,0x3db80f90,0x9412,0x11d1,0xad,0xed,0x0,0x0,0xf8,0x75,0x4b,0x99)
OUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie,0xe436eb89,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza,0x617a7072,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc,0x20636d73,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_QTRle,0x20656c72,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg,0x6765706a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete,0xe436eb8a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_PCM,0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_WAVE,0xe436eb8b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_AU,0xe436eb8c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_AIFF,0xe436eb8d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(MEDIASUBTYPE_dvsd,0x64737664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_dvhd,0x64687664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_dvsl,0x6c737664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_dv25,0x35327664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_dv50,0x30357664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_dvh1,0x31687664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair,0x6e8d4a22,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket,0x6e8d4a23,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData,0x6e8d4a24,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(MEDIASUBTYPE_TELETEXT,0xf72a76e3,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(MEDIASUBTYPE_WSS,0x2791D576,0x8E7A,0x466F,0x9E,0x90,0x5D,0x3F,0x30,0x83,0x73,0x8B)
OUR_GUID_ENTRY(MEDIASUBTYPE_VPS,0xa1b3f620,0x9792,0x4d8d,0x81,0xa4,0x86,0xaf,0x25,0x77,0x20,0x90)
OUR_GUID_ENTRY(MEDIASUBTYPE_DRM_Audio,0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_IEEE_FLOAT,0x00000003,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3_SPDIF,0x00000092,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_RAW_SPORT,0x00000240,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_SPDIF_TAG_241h,0x00000241,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71)
OUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo,0xa0af4f81,0xe163,0x11d0,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio,0xa0af4f82,0xe163,0x11d0,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo,0x5a9b6a40,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI,0x5a9b6a41,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder,0xBF87B6E0,0x8C27,0x11d0,0xB3,0xF0,0x0,0xAA,0x00,0x37,0x61,0xC5)
OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2,0xBF87B6E1,0x8C27,0x11d0,0xB3,0xF0,0x0,0xAA,0x00,0x37,0x61,0xC5)
OUR_GUID_ENTRY(CLSID_ProtoFilterGraph,0xe436ebb0,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_SystemClock,0xe436ebb1,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_FilterMapper,0xe436ebb2,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_FilterGraph,0xe436ebb3,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_FilterGraphNoThread,0xe436ebb8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_MPEG1Doc,0xe4bbd160,0x4269,0x11ce,0x83,0x8d,0x0,0xaa,0x0,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_FileSource,0x701722e0,0x8ae3,0x11ce,0xa8,0x5c,0x00,0xaa,0x00,0x2f,0xea,0xb5)
OUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer,0x26c25940,0x4ca9,0x11ce,0xa8,0x28,0x0,0xaa,0x0,0x2f,0xea,0xb5)
OUR_GUID_ENTRY(CLSID_MPEG1Splitter,0x336475d0,0x942a,0x11ce,0xa8,0x70,0x00,0xaa,0x00,0x2f,0xea,0xb5)
OUR_GUID_ENTRY(CLSID_CMpegVideoCodec,0xfeb50740,0x7bef,0x11ce,0x9b,0xd9,0x0,0x0,0xe2,0x2,0x59,0x9c)
OUR_GUID_ENTRY(CLSID_CMpegAudioCodec,0x4a2286e0,0x7bef,0x11ce,0x9b,0xd9,0x0,0x0,0xe2,0x2,0x59,0x9c)
OUR_GUID_ENTRY(CLSID_TextRender,0xe30629d3,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66)
OUR_GUID_ENTRY(CLSID_InfTee,0xf8388a40,0xd5bb,0x11d0,0xbe,0x5a,0x0,0x80,0xc7,0x6,0x56,0x8e)
OUR_GUID_ENTRY(CLSID_AviSplitter,0x1b544c20,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e)
OUR_GUID_ENTRY(CLSID_AviReader,0x1b544c21,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e)
OUR_GUID_ENTRY(CLSID_VfwCapture,0x1b544c22,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e)
OUR_GUID_ENTRY(CLSID_CaptureProperties,0x1B544c22,0xFD0B,0x11ce,0x8C,0x63,0x00,0xAA,0x00,0x44,0xB5,0x1F)
OUR_GUID_ENTRY(CLSID_FGControl,0xe436ebb4,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_MOVReader,0x44584800,0xf8ee,0x11ce,0xb2,0xd4,0x00,0xdd,0x1,0x10,0x1b,0x85)
OUR_GUID_ENTRY(CLSID_QuickTimeParser,0xd51bd5a0,0x7548,0x11cf,0xa5,0x20,0x0,0x80,0xc7,0x7e,0xf5,0x8a)
OUR_GUID_ENTRY(CLSID_QTDec,0xfdfe9681,0x74a3,0x11d0,0xaf,0xa7,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_AVIDoc,0xd3588ab0,0x0781,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0xb,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_VideoRenderer,0x70e102b0,0x5556,0x11ce,0x97,0xc0,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_Colour,0x1643e180,0x90f5,0x11ce,0x97,0xd5,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_Dither,0x1da08500,0x9edc,0x11cf,0xbc,0x10,0x00,0xaa,0x00,0xac,0x74,0xf6)
OUR_GUID_ENTRY(CLSID_ModexRenderer,0x7167665,0x5011,0x11cf,0xbf,0x33,0x0,0xaa,0x0,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_AudioRender,0xe30629d1,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66)
OUR_GUID_ENTRY(CLSID_AudioProperties,0x05589faf,0xc356,0x11ce,0xbf,0x01,0x0,0xaa,0x0,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_DSoundRender,0x79376820,0x07D0,0x11CF,0xA2,0x4D,0x0,0x20,0xAF,0xD7,0x97,0x67)
OUR_GUID_ENTRY(CLSID_AudioRecord,0xe30629d2,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66)
OUR_GUID_ENTRY(CLSID_AudioInputMixerProperties,0x2ca8ca52,0x3c3f,0x11d2,0xb7,0x3d,0x0,0xc0,0x4f,0xb6,0xbd,0x3d)
OUR_GUID_ENTRY(CLSID_AVIDec,0xcf49d4e0,0x1115,0x11ce,0xb0,0x3a,0x0,0x20,0xaf,0xb,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_AVIDraw,0xa888df60,0x1e90,0x11cf,0xac,0x98,0x0,0xaa,0x0,0x4c,0xf,0xa9)
OUR_GUID_ENTRY(CLSID_ACMWrapper,0x6a08cf80,0x0e18,0x11cf,0xa2,0x4d,0x0,0x20,0xaf,0xd7,0x97,0x67)
OUR_GUID_ENTRY(CLSID_AsyncReader,0xe436ebb5,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_URLReader,0xe436ebb6,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_PersistMonikerPID,0xe436ebb7,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70)
OUR_GUID_ENTRY(CLSID_AVICo,0xd76e2820,0x1563,0x11cf,0xac,0x98,0x0,0xaa,0x0,0x4c,0xf,0xa9)
OUR_GUID_ENTRY(CLSID_FileWriter,0x8596e5f0,0xda5,0x11d0,0xbd,0x21,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AviDest,0xe2510970,0xf137,0x11ce,0x8b,0x67,0x0,0xaa,0x0,0xa3,0xf1,0xa6)
OUR_GUID_ENTRY(CLSID_AviMuxProptyPage,0xc647b5c0,0x157c,0x11d0,0xbd,0x23,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AviMuxProptyPage1,0xa9ae910,0x85c0,0x11d0,0xbd,0x42,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AVIMIDIRender,0x07b65360,0xc445,0x11ce,0xaf,0xde,0x00,0xaa,0x00,0x6c,0x14,0xf4)
OUR_GUID_ENTRY(CLSID_WMAsfReader,0x187463a0,0x5bb7,0x11d3,0xac,0xbe,0x0,0x80,0xc7,0x5e,0x24,0x6e)
OUR_GUID_ENTRY(CLSID_WMAsfWriter,0x7c23220e,0x55bb,0x11d3,0x8b,0x16,0x0,0xc0,0x4f,0xb6,0xbd,0x3d)
OUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer,0xafb6c280,0x2c41,0x11d3,0x8a,0x60,0x00,0x00,0xf8,0x1e,0x0e,0x4a)
OUR_GUID_ENTRY(CLSID_MMSPLITTER,0x3ae86b20,0x7be8,0x11d1,0xab,0xe6,0x00,0xa0,0xc9,0x05,0xf3,0x75)
OUR_GUID_ENTRY(CLSID_StreamBufferSink,0x2db47ae5,0xcf39,0x43c2,0xb4,0xd6,0xc,0xd8,0xd9,0x9,0x46,0xf4)
OUR_GUID_ENTRY(CLSID_StreamBufferSource,0xc9f5fe02,0xf851,0x4eb5,0x99,0xee,0xad,0x60,0x2a,0xf1,0xe6,0x19)
OUR_GUID_ENTRY(CLSID_StreamBufferConfig,0xfa8a68b2,0xc864,0x4ba2,0xad,0x53,0xd3,0x87,0x6a,0x87,0x49,0x4b)
OUR_GUID_ENTRY(CLSID_Mpeg2VideoStreamAnalyzer,0x6cfad761,0x735d,0x4aa5,0x8a,0xfc,0xaf,0x91,0xa7,0xd6,0x1e,0xba)
OUR_GUID_ENTRY(CLSID_StreamBufferRecordingAttributes,0xccaa63ac,0x1057,0x4778,0xae,0x92,0x12,0x6,0xab,0x9a,0xce,0xe6)
OUR_GUID_ENTRY(CLSID_StreamBufferComposeRecording,0xd682c4ba,0xa90a,0x42fe,0xb9,0xe1,0x3,0x10,0x98,0x49,0xc4,0x23)
OUR_GUID_ENTRY(CLSID_DVVideoCodec,0xb1b77c00,0xc3e4,0x11cf,0xaf,0x79,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_DVVideoEnc,0x13aa3650,0xbb6f,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_DVSplitter,0x4eb31670,0x9fc6,0x11cf,0xaf,0x6e,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_DVMux,0x129d7e40,0xc10d,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_SeekingPassThru,0x60af76c,0x68dd,0x11d0,0x8f,0xc1,0x0,0xc0,0x4f,0xd9,0x18,0x9d)
OUR_GUID_ENTRY(CLSID_Line21Decoder,0x6e8d4a20,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(CLSID_Line21Decoder2,0xe4206432,0x01a1,0x4bee,0xb3,0xe1,0x37,0x02,0xc8,0xed,0xc5,0x74)
OUR_GUID_ENTRY(CLSID_OverlayMixer,0xcd8743a1,0x3736,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(CLSID_VBISurfaces,0x814b9800,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(CLSID_WSTDecoder,0x70bc06e0,0x5666,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33)
OUR_GUID_ENTRY(CLSID_MjpegDec,0x301056d0,0x6dff,0x11d2,0x9e,0xeb,0x0,0x60,0x8,0x3,0x9e,0x37)
OUR_GUID_ENTRY(CLSID_MJPGEnc,0xb80ab0a0,0x7416,0x11d2,0x9e,0xeb,0x0,0x60,0x8,0x3,0x9e,0x37)
OUR_GUID_ENTRY(CLSID_SystemDeviceEnum,0x62BE5D10,0x60EB,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_CDeviceMoniker,0x4315D437,0x5B8C,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory,0x860BB310,0x5D01,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_CVidCapClassManager,0x860BB310,0x5D01,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory,0x083863F1,0x70DE,0x11d0,0xBD,0x40,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_CQzFilterClassManager,0x083863F1,0x70DE,0x11d0,0xBD,0x40,0x00,0xA0,0xC9,0x11,0xCE,0x86)
OUR_GUID_ENTRY(CLSID_VideoCompressorCategory,0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_CIcmCoClassManager,0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AudioCompressorCategory,0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_CAcmCoClassManager,0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory,0x33d9a762,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_CWaveinClassManager,0x33d9a762,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_AudioRendererCategory,0xe0f158e1,0xcb04,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_CWaveOutClassManager,0xe0f158e1,0xcb04,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_MidiRendererCategory,0x4EfE2452,0x168A,0x11d1,0xBC,0x76,0x0,0xc0,0x4F,0xB9,0x45,0x3B)
OUR_GUID_ENTRY(CLSID_CMidiOutClassManager,0x4EfE2452,0x168A,0x11d1,0xBC,0x76,0x0,0xc0,0x4F,0xB9,0x45,0x3B)
OUR_GUID_ENTRY(CLSID_TransmitCategory,0xcc7bfb41,0xf175,0x11d1,0xa3,0x92,0x0,0xe0,0x29,0x1f,0x39,0x59)
OUR_GUID_ENTRY(CLSID_DeviceControlCategory,0xcc7bfb46,0xf175,0x11d1,0xa3,0x92,0x0,0xe0,0x29,0x1f,0x39,0x59)
OUR_GUID_ENTRY(CLSID_ActiveMovieCategories,0xda4e3da0,0xd07d,0x11d0,0xbd,0x50,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory,0x2721AE20,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)
OUR_GUID_ENTRY(CLSID_MediaEncoderCategory,0x7D22E920,0x5CA9,0x4787,0x8C,0x2B,0xA6,0x77,0x9B,0xD1,0x17,0x81)
OUR_GUID_ENTRY(CLSID_MediaMultiplexerCategory,0x236C9559,0xADCE,0x4736,0xBF,0x72,0xBA,0xB3,0x4E,0x39,0x21,0x96)
OUR_GUID_ENTRY(CLSID_FilterMapper2,0xcda42200,0xbd88,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_MemoryAllocator,0x1e651cc0,0xb199,0x11d0,0x82,0x12,0x00,0xc0,0x4f,0xc3,0x2c,0x45)
OUR_GUID_ENTRY(CLSID_MediaPropertyBag,0xcdbd8d00,0xc193,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86)
OUR_GUID_ENTRY(CLSID_DvdGraphBuilder,0xFCC152B7,0xF372,0x11d0,0x8E,0x00,0x00,0xC0,0x4F,0xD7,0xC0,0x8B)
OUR_GUID_ENTRY(CLSID_DVDNavigator,0x9b8c4620,0x2c1a,0x11d0,0x84,0x93,0x0,0xa0,0x24,0x38,0xad,0x48)
OUR_GUID_ENTRY(CLSID_DVDState,0xf963c5cf,0xa659,0x4a93,0x96,0x38,0xca,0xf3,0xcd,0x27,0x7d,0x13)
OUR_GUID_ENTRY(CLSID_SmartTee,0xcc58e280,0x8aa1,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5)
OUR_GUID_ENTRY(FORMAT_None,0x0F6417D6,0xc318,0x11d0,0xa4,0x3f,0x00,0xa0,0xc9,0x22,0x31,0x96)
OUR_GUID_ENTRY(FORMAT_VideoInfo,0x05589f80,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(FORMAT_VideoInfo2,0xf72a76A0,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(FORMAT_WaveFormatEx,0x05589f81,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(FORMAT_MPEGVideo,0x05589f82,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(FORMAT_MPEGStreams,0x05589f83,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(FORMAT_DvInfo,0x05589f84,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_DirectDrawProperties,0x944d4c00,0xdd52,0x11ce,0xbf,0x0e,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(CLSID_PerformanceProperties,0x59ce6880,0xacf8,0x11cf,0xb5,0x6e,0x00,0x80,0xc7,0xc4,0xb6,0x8a)
OUR_GUID_ENTRY(CLSID_QualityProperties,0x418afb70,0xf8b8,0x11ce,0xaa,0xc6,0x00,0x20,0xaf,0x0b,0x99,0xa3)
OUR_GUID_ENTRY(IID_IBaseVideoMixer,0x61ded640,0xe912,0x11ce,0xa0,0x99,0x00,0xaa,0x00,0x47,0x9a,0x58)
OUR_GUID_ENTRY(IID_IDirectDrawVideo,0x36d39eb0,0xdd75,0x11ce,0xbf,0x0e,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(IID_IQualProp,0x1bd0ecb0,0xf8e2,0x11ce,0xaa,0xc6,0x00,0x20,0xaf,0x0b,0x99,0xa3)
OUR_GUID_ENTRY(CLSID_VPObject,0xce292861,0xfc88,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IVPObject,0xce292862,0xfc88,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IVPControl,0x25df12c1,0x3de0,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(CLSID_VPVBIObject,0x814b9801,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(IID_IVPVBIObject,0x814b9802,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(IID_IVPConfig,0xbc29a660,0x30e3,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IVPNotify,0xc76794a1,0xd6c5,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IVPNotify2,0xebf47183,0x8764,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IVPVBIConfig,0xec529b00,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(IID_IVPVBINotify,0xec529b01,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a)
OUR_GUID_ENTRY(IID_IMixerPinConfig,0x593cdde1,0x759,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
OUR_GUID_ENTRY(IID_IMixerPinConfig2,0xebf47182,0x8764,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b)
#ifndef __DDRAW_INCLUDED__
OUR_GUID_ENTRY(CLSID_DirectDraw,0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35)
OUR_GUID_ENTRY(CLSID_DirectDrawClipper,0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56)
OUR_GUID_ENTRY(IID_IDirectDraw,0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60)
OUR_GUID_ENTRY(IID_IDirectDraw2,0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56)
OUR_GUID_ENTRY(IID_IDirectDrawSurface,0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60)
OUR_GUID_ENTRY(IID_IDirectDrawSurface2,0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27)
OUR_GUID_ENTRY(IID_IDirectDrawSurface3,0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB)
OUR_GUID_ENTRY(IID_IDirectDrawSurface4,0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B)
OUR_GUID_ENTRY(IID_IDirectDrawSurface7,0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b)
OUR_GUID_ENTRY(IID_IDirectDrawPalette,0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60)
OUR_GUID_ENTRY(IID_IDirectDrawClipper,0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60)
OUR_GUID_ENTRY(IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8)
#endif
#ifndef __DVP_INCLUDED__
OUR_GUID_ENTRY(IID_IDDVideoPortContainer,0x6C142760,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60)
#endif
#ifndef __DDKM_INCLUDED__
OUR_GUID_ENTRY(IID_IDirectDrawKernel,0x8D56C120,0x6A08,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8)
OUR_GUID_ENTRY(IID_IDirectDrawSurfaceKernel,0x60755DA0,0x6A40,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8)
#endif
OUR_GUID_ENTRY(CLSID_ModexProperties,0x0618aa30,0x6bc4,0x11cf,0xbf,0x36,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(IID_IFullScreenVideo,0xdd1d7110,0x7836,0x11cf,0xbf,0x47,0x00,0xaa,0x00,0x55,0x59,0x5a)
OUR_GUID_ENTRY(IID_IFullScreenVideoEx,0x53479470,0xf1dd,0x11cf,0xbc,0x42,0x00,0xaa,0x00,0xac,0x74,0xf6)
OUR_GUID_ENTRY(CLSID_DVDecPropertiesPage,0x101193c0,0xbfe,0x11d0,0xaf,0x91,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_DVEncPropertiesPage,0x4150f050,0xbb6f,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(CLSID_DVMuxPropertyPage,0x4db880e0,0xc10d,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42)
OUR_GUID_ENTRY(IID_IAMDirectSound,0x546f4260,0xd53e,0x11cf,0xb3,0xf0,0x0,0xaa,0x0,0x37,0x61,0xc5)
OUR_GUID_ENTRY(IID_IMpegAudioDecoder,0xb45dd570,0x3c77,0x11d1,0xab,0xe1,0x00,0xa0,0xc9,0x05,0xf3,0x75)
OUR_GUID_ENTRY(IID_IAMLine21Decoder,0x6e8d4a21,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7)
OUR_GUID_ENTRY(IID_IAMWstDecoder,0xc056de21,0x75c2,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33)
OUR_GUID_ENTRY(CLSID_WstDecoderPropertyPage,0x4e27f80,0x91e4,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33)
OUR_GUID_ENTRY(FORMAT_AnalogVideo,0x482dde0,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIATYPE_AnalogVideo,0x482dde1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M,0x482dde2,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B,0x482dde5,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D,0x482dde6,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G,0x482dde7,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H,0x482dde8,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I,0x482dde9,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M,0x482ddea,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N,0x482ddeb,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N_COMBO,0x482ddec,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B,0x482ddf0,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D,0x482ddf1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G,0x482ddf2,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H,0x482ddf3,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K,0x482ddf4,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1,0x482ddf5,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L,0x482ddf6,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(MEDIATYPE_AnalogAudio,0x482dee1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
#include "dshow/ksuuids.h"
OUR_GUID_ENTRY(TIME_FORMAT_NONE,0L,0,0,0,0,0,0,0,0,0,0)
OUR_GUID_ENTRY(TIME_FORMAT_FRAME,0x7b785570,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6)
OUR_GUID_ENTRY(TIME_FORMAT_BYTE,0x7b785571,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6)
OUR_GUID_ENTRY(TIME_FORMAT_SAMPLE,0x7b785572,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6)
OUR_GUID_ENTRY(TIME_FORMAT_FIELD,0x7b785573,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6)
OUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME,0x7b785574,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6)
OUR_GUID_ENTRY(AMPROPSETID_Pin,0x9b00f101,0x1567,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5)
OUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE,0xfb6c4281,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW,0xfb6c4282,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN,0xfb6c4283,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_VBI,0xfb6c4284,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT,0xfb6c4285,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_NABTS,0xfb6c4286,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_EDS,0xfb6c4287,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT,0xfb6c4288,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_CC,0xfb6c4289,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_STILL,0xfb6c428a,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE,0xfb6c428b,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI,0xfb6c428c,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba)
OUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY,0xac798be0,0x98e3,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5)
OUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY,0xac798be1,0x98e3,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5)
OUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage,0x266eee41,0x6c63,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65)
OUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage,0x71f96461,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage,0x71f96463,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage,0x71f96464,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_CameraControlPropertyPage,0x71f96465,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage,0x71f96466,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage,0x71f96467,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56)
OUR_GUID_ENTRY(CLSID_AudioRendererAdvancedProperties,0x37e92a92,0xd9aa,0x11d2,0xbf,0x84,0x8e,0xf2,0xb1,0x55,0x5a,0xed)
OUR_GUID_ENTRY(CLSID_VideoMixingRenderer,0xB87BEB7B,0x8D29,0x423f,0xAE,0x4D,0x65,0x82,0xC1,0x01,0x75,0xAC)
OUR_GUID_ENTRY(CLSID_VideoRendererDefault,0x6BC1CFFA,0x8FC1,0x4261,0xAC,0x22,0xCF,0xB4,0xCC,0x38,0xDB,0x50)
OUR_GUID_ENTRY(CLSID_AllocPresenter,0x99d54f63,0x1a69,0x41ae,0xaa,0x4d,0xc9,0x76,0xeb,0x3f,0x07,0x13)
OUR_GUID_ENTRY(CLSID_AllocPresenterDDXclMode,0x4444ac9e,0x242e,0x471b,0xa3,0xc7,0x45,0xdc,0xd4,0x63,0x52,0xbc)
OUR_GUID_ENTRY(CLSID_VideoPortManager,0x6f26a6cd,0x967b,0x47fd,0x87,0x4a,0x7a,0xed,0x2c,0x9d,0x25,0xa2)
OUR_GUID_ENTRY(CLSID_VideoMixingRenderer9,0x51b4abf3,0x748f,0x4e3b,0xa2,0x76,0xc8,0x28,0x33,0x0e,0x92,0x6a)
OUR_GUID_ENTRY(CLSID_ATSCNetworkProvider,0x0dad2fdd,0x5fd7,0x11d3,0x8f,0x50,0x00,0xc0,0x4f,0x79,0x71,0xe2)
OUR_GUID_ENTRY(CLSID_ATSCNetworkPropertyPage,0xe3444d16,0x5ac4,0x4386,0x88,0xdf,0x13,0xfd,0x23,0x0e,0x1d,0xda)
OUR_GUID_ENTRY(CLSID_DVBSNetworkProvider,0xfa4b375a,0x45b4,0x4d45,0x84,0x40,0x26,0x39,0x57,0xb1,0x16,0x23)
OUR_GUID_ENTRY(CLSID_DVBTNetworkProvider,0x216c62df,0x6d7f,0x4e9a,0x85,0x71,0x5,0xf1,0x4e,0xdb,0x76,0x6a)
OUR_GUID_ENTRY(CLSID_DVBCNetworkProvider,0xdc0c0fe7,0x485,0x4266,0xb9,0x3f,0x68,0xfb,0xf8,0xe,0xd8,0x34)
OUR_GUID_ENTRY(CLSID_DShowTVEFilter,0x05500280,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8)
OUR_GUID_ENTRY(CLSID_TVEFilterTuneProperties,0x05500281,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8)
OUR_GUID_ENTRY(CLSID_TVEFilterCCProperties,0x05500282,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8)
OUR_GUID_ENTRY(CLSID_TVEFilterStatsProperties,0x05500283,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8)
OUR_GUID_ENTRY(CLSID_IVideoEncoderProxy,0xb43c4eec,0x8c32,0x4791,0x91,0x2,0x50,0x8a,0xda,0x5e,0xe8,0xe7)
OUR_GUID_ENTRY(CLSID_ICodecAPIProxy,0x7ff0997a,0x1999,0x4286,0xa7,0x3c,0x62,0x2b,0x88,0x14,0xe7,0xeb)
OUR_GUID_ENTRY(CLSID_IVideoEncoderCodecAPIProxy,0xb05dabd9,0x56e5,0x4fdc,0xaf,0xa4,0x8a,0x47,0xe9,0x1f,0x1c,0x9c)
#ifndef __ENCODER_API_GUIDS__
#define __ENCODER_API_GUIDS__
OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE,0x49cc4c43,0xca83,0x4ad4,0xa9,0xaf,0xf3,0x69,0x6a,0xf6,0x66,0xdf)
OUR_GUID_ENTRY(ENCAPIPARAM_PEAK_BITRATE,0x703f16a9,0x3d48,0x44a1,0xb0,0x77,0x1,0x8d,0xff,0x91,0x5d,0x19)
OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE_MODE,0xee5fb25c,0xc713,0x40d1,0x9d,0x58,0xc0,0xd7,0x24,0x1e,0x25,0xf)
OUR_GUID_ENTRY(CODECAPI_CHANGELISTS,0x62b12acf,0xf6b0,0x47d9,0x94,0x56,0x96,0xf2,0x2c,0x4e,0x0b,0x9d)
OUR_GUID_ENTRY(CODECAPI_VIDEO_ENCODER,0x7112e8e1,0x3d03,0x47ef,0x8e,0x60,0x03,0xf1,0xcf,0x53,0x73,0x01)
OUR_GUID_ENTRY(CODECAPI_AUDIO_ENCODER,0xb9d19a3e,0xf897,0x429c,0xbc,0x46,0x81,0x38,0xb7,0x27,0x2b,0x2d)
OUR_GUID_ENTRY(CODECAPI_SETALLDEFAULTS,0x6c5e6a7c,0xacf8,0x4f55,0xa9,0x99,0x1a,0x62,0x81,0x09,0x05,0x1b)
OUR_GUID_ENTRY(CODECAPI_ALLSETTINGS,0x6a577e92,0x83e1,0x4113,0xad,0xc2,0x4f,0xce,0xc3,0x2f,0x83,0xa1)
OUR_GUID_ENTRY(CODECAPI_SUPPORTSEVENTS,0x0581af97,0x7693,0x4dbd,0x9d,0xca,0x3f,0x9e,0xbd,0x65,0x85,0xa1)
OUR_GUID_ENTRY(CODECAPI_CURRENTCHANGELIST,0x1cb14e83,0x7d72,0x4657,0x83,0xfd,0x47,0xa2,0xc5,0xb9,0xd1,0x3d)
#endif
#undef OUR_GUID_ENTRY

View File

@@ -1,301 +0,0 @@
// ISO C9x compliant inttypes.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
//
// Copyright (c) 2006 Alexander Chemeris
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. The name of the author may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_VER // [
#error "Use this header only with Microsoft Visual C++ compilers!"
#endif // _MSC_VER ]
#ifndef _MSC_INTTYPES_H_ // [
#define _MSC_INTTYPES_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <msc_stdint.h>
// 7.8 Format conversion of integer types
typedef struct {
intmax_t quot;
intmax_t rem;
} imaxdiv_t;
// 7.8.1 Macros for format specifiers
// The fprintf macros for signed integers are:
#define PRId8 "d"
#define PRIi8 "i"
#define PRIdLEAST8 "d"
#define PRIiLEAST8 "i"
#define PRIdFAST8 "d"
#define PRIiFAST8 "i"
#define PRId16 "hd"
#define PRIi16 "hi"
#define PRIdLEAST16 "hd"
#define PRIiLEAST16 "hi"
#define PRIdFAST16 "hd"
#define PRIiFAST16 "hi"
#define PRId32 "I32d"
#define PRIi32 "I32i"
#define PRIdLEAST32 "I32d"
#define PRIiLEAST32 "I32i"
#define PRIdFAST32 "I32d"
#define PRIiFAST32 "I32i"
#define PRId64 "I64d"
#define PRIi64 "I64i"
#define PRIdLEAST64 "I64d"
#define PRIiLEAST64 "I64i"
#define PRIdFAST64 "I64d"
#define PRIiFAST64 "I64i"
#define PRIdMAX "I64d"
#define PRIiMAX "I64i"
#define PRIdPTR "Id"
#define PRIiPTR "Ii"
// The fprintf macros for unsigned integers are:
#define PRIo8 "o"
#define PRIu8 "u"
#define PRIx8 "x"
#define PRIX8 "X"
#define PRIoLEAST8 "o"
#define PRIuLEAST8 "u"
#define PRIxLEAST8 "x"
#define PRIXLEAST8 "X"
#define PRIoFAST8 "o"
#define PRIuFAST8 "u"
#define PRIxFAST8 "x"
#define PRIXFAST8 "X"
#define PRIo16 "ho"
#define PRIu16 "hu"
#define PRIx16 "hx"
#define PRIX16 "hX"
#define PRIoLEAST16 "ho"
#define PRIuLEAST16 "hu"
#define PRIxLEAST16 "hx"
#define PRIXLEAST16 "hX"
#define PRIoFAST16 "ho"
#define PRIuFAST16 "hu"
#define PRIxFAST16 "hx"
#define PRIXFAST16 "hX"
#define PRIo32 "I32o"
#define PRIu32 "I32u"
#define PRIx32 "I32x"
#define PRIX32 "I32X"
#define PRIoLEAST32 "I32o"
#define PRIuLEAST32 "I32u"
#define PRIxLEAST32 "I32x"
#define PRIXLEAST32 "I32X"
#define PRIoFAST32 "I32o"
#define PRIuFAST32 "I32u"
#define PRIxFAST32 "I32x"
#define PRIXFAST32 "I32X"
#define PRIo64 "I64o"
#define PRIu64 "I64u"
#define PRIx64 "I64x"
#define PRIX64 "I64X"
#define PRIoLEAST64 "I64o"
#define PRIuLEAST64 "I64u"
#define PRIxLEAST64 "I64x"
#define PRIXLEAST64 "I64X"
#define PRIoFAST64 "I64o"
#define PRIuFAST64 "I64u"
#define PRIxFAST64 "I64x"
#define PRIXFAST64 "I64X"
#define PRIoMAX "I64o"
#define PRIuMAX "I64u"
#define PRIxMAX "I64x"
#define PRIXMAX "I64X"
#define PRIoPTR "Io"
#define PRIuPTR "Iu"
#define PRIxPTR "Ix"
#define PRIXPTR "IX"
// The fscanf macros for signed integers are:
#define SCNd8 "d"
#define SCNi8 "i"
#define SCNdLEAST8 "d"
#define SCNiLEAST8 "i"
#define SCNdFAST8 "d"
#define SCNiFAST8 "i"
#define SCNd16 "hd"
#define SCNi16 "hi"
#define SCNdLEAST16 "hd"
#define SCNiLEAST16 "hi"
#define SCNdFAST16 "hd"
#define SCNiFAST16 "hi"
#define SCNd32 "ld"
#define SCNi32 "li"
#define SCNdLEAST32 "ld"
#define SCNiLEAST32 "li"
#define SCNdFAST32 "ld"
#define SCNiFAST32 "li"
#define SCNd64 "I64d"
#define SCNi64 "I64i"
#define SCNdLEAST64 "I64d"
#define SCNiLEAST64 "I64i"
#define SCNdFAST64 "I64d"
#define SCNiFAST64 "I64i"
#define SCNdMAX "I64d"
#define SCNiMAX "I64i"
#ifdef _WIN64 // [
# define SCNdPTR "I64d"
# define SCNiPTR "I64i"
#else // _WIN64 ][
# define SCNdPTR "ld"
# define SCNiPTR "li"
#endif // _WIN64 ]
// The fscanf macros for unsigned integers are:
#define SCNo8 "o"
#define SCNu8 "u"
#define SCNx8 "x"
#define SCNX8 "X"
#define SCNoLEAST8 "o"
#define SCNuLEAST8 "u"
#define SCNxLEAST8 "x"
#define SCNXLEAST8 "X"
#define SCNoFAST8 "o"
#define SCNuFAST8 "u"
#define SCNxFAST8 "x"
#define SCNXFAST8 "X"
#define SCNo16 "ho"
#define SCNu16 "hu"
#define SCNx16 "hx"
#define SCNX16 "hX"
#define SCNoLEAST16 "ho"
#define SCNuLEAST16 "hu"
#define SCNxLEAST16 "hx"
#define SCNXLEAST16 "hX"
#define SCNoFAST16 "ho"
#define SCNuFAST16 "hu"
#define SCNxFAST16 "hx"
#define SCNXFAST16 "hX"
#define SCNo32 "lo"
#define SCNu32 "lu"
#define SCNx32 "lx"
#define SCNX32 "lX"
#define SCNoLEAST32 "lo"
#define SCNuLEAST32 "lu"
#define SCNxLEAST32 "lx"
#define SCNXLEAST32 "lX"
#define SCNoFAST32 "lo"
#define SCNuFAST32 "lu"
#define SCNxFAST32 "lx"
#define SCNXFAST32 "lX"
#define SCNo64 "I64o"
#define SCNu64 "I64u"
#define SCNx64 "I64x"
#define SCNX64 "I64X"
#define SCNoLEAST64 "I64o"
#define SCNuLEAST64 "I64u"
#define SCNxLEAST64 "I64x"
#define SCNXLEAST64 "I64X"
#define SCNoFAST64 "I64o"
#define SCNuFAST64 "I64u"
#define SCNxFAST64 "I64x"
#define SCNXFAST64 "I64X"
#define SCNoMAX "I64o"
#define SCNuMAX "I64u"
#define SCNxMAX "I64x"
#define SCNXMAX "I64X"
#ifdef _WIN64 // [
# define SCNoPTR "I64o"
# define SCNuPTR "I64u"
# define SCNxPTR "I64x"
# define SCNXPTR "I64X"
#else // _WIN64 ][
# define SCNoPTR "lo"
# define SCNuPTR "lu"
# define SCNxPTR "lx"
# define SCNXPTR "lX"
#endif // _WIN64 ]
// 7.8.2 Functions for greatest-width integer types
// 7.8.2.1 The imaxabs function
#define imaxabs _abs64
// 7.8.2.2 The imaxdiv function
// This is modified version of div() function from Microsoft's div.c found
// in %MSVC.NET%\crt\src\div.c
#ifdef STATIC_IMAXDIV // [
static
#else // STATIC_IMAXDIV ][
_inline
#endif // STATIC_IMAXDIV ]
imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
{
imaxdiv_t result;
result.quot = numer / denom;
result.rem = numer % denom;
if (numer < 0 && result.rem > 0) {
// did division wrong; must fix up
++result.quot;
result.rem -= denom;
}
return result;
}
// 7.8.2.3 The strtoimax and strtoumax functions
#define strtoimax _strtoi64
#define strtoumax _strtoui64
// 7.8.2.4 The wcstoimax and wcstoumax functions
#define wcstoimax _wcstoi64
#define wcstoumax _wcstoui64
#endif // _MSC_INTTYPES_H_ ]

View File

@@ -1,219 +0,0 @@
// ISO C9x compliant stdint.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
//
// Copyright (c) 2006 Alexander Chemeris
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. The name of the author may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_STDINT_H_ // [
#define _MSC_STDINT_H_
#include <limits.h>
// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
// or compiler give many errors like this:
// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
#if (_MSC_VER < 1300) && defined(__cplusplus)
extern "C++" {
#endif
# include <wchar.h>
#if (_MSC_VER < 1300) && defined(__cplusplus)
}
#endif
#if defined __GNUC__ || _MSC_VER >= 1600
#include "stdint.h"
#else
// 7.18.1 Integer types
// 7.18.1.1 Exact-width integer types
typedef __int8 int8_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
// 7.18.1.2 Minimum-width integer types
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;
// 7.18.1.3 Fastest minimum-width integer types
typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
// 7.18.1.4 Integer types capable of holding object pointers
#ifdef _WIN64 // [
typedef __int64 intptr_t;
typedef unsigned __int64 uintptr_t;
#else // _WIN64 ][
typedef int intptr_t;
typedef unsigned int uintptr_t;
#endif // _WIN64 ]
// 7.18.1.5 Greatest-width integer types
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
// 7.18.2 Limits of specified-width integer types
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
// 7.18.2.1 Limits of exact-width integer types
#define INT8_MIN _I8_MIN
#define INT8_MAX _I8_MAX
#define INT16_MIN _I16_MIN
#define INT16_MAX _I16_MAX
#define INT32_MIN _I32_MIN
#define INT32_MAX _I32_MAX
#define INT64_MIN _I64_MIN
#define INT64_MAX _I64_MAX
#define UINT8_MAX _UI8_MAX
#define UINT16_MAX _UI16_MAX
#define UINT32_MAX _UI32_MAX
#define UINT64_MAX _UI64_MAX
// 7.18.2.2 Limits of minimum-width integer types
#define INT_LEAST8_MIN INT8_MIN
#define INT_LEAST8_MAX INT8_MAX
#define INT_LEAST16_MIN INT16_MIN
#define INT_LEAST16_MAX INT16_MAX
#define INT_LEAST32_MIN INT32_MIN
#define INT_LEAST32_MAX INT32_MAX
#define INT_LEAST64_MIN INT64_MIN
#define INT_LEAST64_MAX INT64_MAX
#define UINT_LEAST8_MAX UINT8_MAX
#define UINT_LEAST16_MAX UINT16_MAX
#define UINT_LEAST32_MAX UINT32_MAX
#define UINT_LEAST64_MAX UINT64_MAX
// 7.18.2.3 Limits of fastest minimum-width integer types
#define INT_FAST8_MIN INT8_MIN
#define INT_FAST8_MAX INT8_MAX
#define INT_FAST16_MIN INT16_MIN
#define INT_FAST16_MAX INT16_MAX
#define INT_FAST32_MIN INT32_MIN
#define INT_FAST32_MAX INT32_MAX
#define INT_FAST64_MIN INT64_MIN
#define INT_FAST64_MAX INT64_MAX
#define UINT_FAST8_MAX UINT8_MAX
#define UINT_FAST16_MAX UINT16_MAX
#define UINT_FAST32_MAX UINT32_MAX
#define UINT_FAST64_MAX UINT64_MAX
// 7.18.2.4 Limits of integer types capable of holding object pointers
#ifdef _WIN64 // [
# define INTPTR_MIN INT64_MIN
# define INTPTR_MAX INT64_MAX
# define UINTPTR_MAX UINT64_MAX
#else // _WIN64 ][
# define INTPTR_MIN INT32_MIN
# define INTPTR_MAX INT32_MAX
# define UINTPTR_MAX UINT32_MAX
#endif // _WIN64 ]
// 7.18.2.5 Limits of greatest-width integer types
#define INTMAX_MIN INT64_MIN
#define INTMAX_MAX INT64_MAX
#define UINTMAX_MAX UINT64_MAX
// 7.18.3 Limits of other integer types
#ifdef _WIN64 // [
# define PTRDIFF_MIN _I64_MIN
# define PTRDIFF_MAX _I64_MAX
#else // _WIN64 ][
# define PTRDIFF_MIN _I32_MIN
# define PTRDIFF_MAX _I32_MAX
#endif // _WIN64 ]
#define SIG_ATOMIC_MIN INT_MIN
#define SIG_ATOMIC_MAX INT_MAX
#ifndef SIZE_MAX // [
# ifdef _WIN64 // [
# define SIZE_MAX _UI64_MAX
# else // _WIN64 ][
# define SIZE_MAX _UI32_MAX
# endif // _WIN64 ]
#endif // SIZE_MAX ]
// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
#ifndef WCHAR_MIN // [
# define WCHAR_MIN 0
#endif // WCHAR_MIN ]
#ifndef WCHAR_MAX // [
# define WCHAR_MAX _UI16_MAX
#endif // WCHAR_MAX ]
#define WINT_MIN 0
#define WINT_MAX _UI16_MAX
#endif // __STDC_LIMIT_MACROS ]
// 7.18.4 Limits of other integer types
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
// 7.18.4.1 Macros for minimum-width integer constants
#define INT8_C(val) val
#define INT16_C(val) val
#define INT32_C(val) val##L
#define INT64_C(val) val##i64
#define UINT8_C(val) val
#define UINT16_C(val) val
#define UINT32_C(val) val##UL
#define UINT64_C(val) val##Ui64
// 7.18.4.2 Macros for greatest-width integer constants
#define INTMAX_C INT64_C
#define UINTMAX_C UINT64_C
#endif // __STDC_CONSTANT_MACROS ]
#endif
#endif // _MSC_STDINT_H_ ]

25
3rdparty/include/opencl/LICENSE.txt vendored Normal file
View File

@@ -0,0 +1,25 @@
Copyright (c) 2008-2015 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.
MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
https://www.khronos.org/registry/
THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.

View File

@@ -1,2 +0,0 @@
downloads/
unpack/

45
3rdparty/ippicv/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,45 @@
# ----------------------------------------------------------------------------
# CMake file for IPP IW. See root CMakeLists.txt
#
# ----------------------------------------------------------------------------
project(${IPP_IW_LIBRARY})
ocv_include_directories(${IPP_INCLUDE_DIRS} ${IPP_IW_PATH}/include)
add_definitions(-DIW_BUILD)
if(HAVE_IPP_ICV)
add_definitions(-DICV_BASE)
endif()
file(GLOB lib_srcs ${IPP_IW_PATH}/src/*.c)
file(GLOB lib_hdrs ${IPP_IW_PATH}/include/*.h ${IPP_IW_PATH}/include/iw/*.h ${IPP_IW_PATH}/include/iw++/*.hpp)
# ----------------------------------------------------------------------------------
# Define the library target:
# ----------------------------------------------------------------------------------
add_library(${IPP_IW_LIBRARY} STATIC ${lib_srcs} ${lib_hdrs})
if(UNIX)
if(CMAKE_COMPILER_IS_GNUCXX OR CV_ICC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function -Wno-missing-braces -Wno-missing-field-initializers")
endif()
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-self-assign")
endif()
endif()
set_target_properties(${IPP_IW_LIBRARY}
PROPERTIES OUTPUT_NAME ${IPP_IW_LIBRARY}
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
COMPILE_PDB_NAME ${IPP_IW_LIBRARY}
COMPILE_PDB_NAME_DEBUG "${IPP_IW_LIBRARY}${OPENCV_DEBUG_POSTFIX}"
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
)
if(ENABLE_SOLUTION_FOLDERS)
set_target_properties(${IPP_IW_LIBRARY} PROPERTIES FOLDER "3rdparty")
endif()
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(${IPP_IW_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()

View File

@@ -1,110 +0,0 @@
#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#
function(_icv_downloader)
# Commit SHA in the opencv_3rdparty repo
set(IPPICV_BINARIES_COMMIT "81a676001ca8075ada498583e4166079e5744668")
# Define actual ICV versions
if(APPLE)
set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20151201.tgz")
set(OPENCV_ICV_PACKAGE_HASH "4ff1fde9a7cfdfe7250bfcd8334e0f2f")
set(OPENCV_ICV_PLATFORM "macosx")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
elseif(UNIX)
if(ANDROID AND NOT (ANDROID_ABI STREQUAL x86 OR ANDROID_ABI STREQUAL x86_64))
return()
endif()
set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20151201.tgz")
set(OPENCV_ICV_PACKAGE_HASH "808b791a6eac9ed78d32a7666804320e")
set(OPENCV_ICV_PLATFORM "linux")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
elseif(WIN32 AND NOT ARM)
set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20151201.zip")
set(OPENCV_ICV_PACKAGE_HASH "04e81ce5d0e329c3fbc606ae32cad44d")
set(OPENCV_ICV_PLATFORM "windows")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
else()
return() # Not supported
endif()
set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")
if(DEFINED OPENCV_ICV_PACKAGE_DOWNLOADED
AND OPENCV_ICV_PACKAGE_DOWNLOADED STREQUAL OPENCV_ICV_PACKAGE_HASH
AND EXISTS ${OPENCV_ICV_PATH})
# Package has been downloaded and checked by the previous build
set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
return()
else()
if(EXISTS ${OPENCV_ICV_UNPACK_PATH})
message(STATUS "ICV: Removing previous unpacked package: ${OPENCV_ICV_UNPACK_PATH}")
file(REMOVE_RECURSE ${OPENCV_ICV_UNPACK_PATH})
endif()
endif()
unset(OPENCV_ICV_PACKAGE_DOWNLOADED CACHE)
set(OPENCV_ICV_PACKAGE_ARCHIVE "${CMAKE_CURRENT_LIST_DIR}/downloads/${OPENCV_ICV_PLATFORM}-${OPENCV_ICV_PACKAGE_HASH}/${OPENCV_ICV_PACKAGE_NAME}")
get_filename_component(OPENCV_ICV_PACKAGE_ARCHIVE_DIR "${OPENCV_ICV_PACKAGE_ARCHIVE}" PATH)
if(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5)
if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH)
message(WARNING "ICV: Local copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})")
file(REMOVE "${OPENCV_ICV_PACKAGE_ARCHIVE}")
file(REMOVE_RECURSE "${OPENCV_ICV_PACKAGE_ARCHIVE_DIR}")
endif()
endif()
if(NOT EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
if(NOT DEFINED OPENCV_ICV_URL)
if(DEFINED ENV{OPENCV_ICV_URL})
set(OPENCV_ICV_URL $ENV{OPENCV_ICV_URL})
else()
set(OPENCV_ICV_URL "https://raw.githubusercontent.com/Itseez/opencv_3rdparty/${IPPICV_BINARIES_COMMIT}/ippicv")
endif()
endif()
file(MAKE_DIRECTORY ${OPENCV_ICV_PACKAGE_ARCHIVE_DIR})
message(STATUS "ICV: Downloading ${OPENCV_ICV_PACKAGE_NAME}...")
file(DOWNLOAD "${OPENCV_ICV_URL}/${OPENCV_ICV_PACKAGE_NAME}" "${OPENCV_ICV_PACKAGE_ARCHIVE}"
TIMEOUT 600 STATUS __status
EXPECTED_MD5 ${OPENCV_ICV_PACKAGE_HASH})
if(NOT __status EQUAL 0)
message(FATAL_ERROR "ICV: Failed to download ICV package: ${OPENCV_ICV_PACKAGE_NAME}. Status=${__status}")
else()
# Don't remove this code, because EXPECTED_MD5 parameter doesn't fail "file(DOWNLOAD)" step
# on wrong hash
file(MD5 "${OPENCV_ICV_PACKAGE_ARCHIVE}" archive_md5)
if(NOT archive_md5 STREQUAL OPENCV_ICV_PACKAGE_HASH)
message(FATAL_ERROR "ICV: Downloaded copy of ICV package has invalid MD5 hash: ${archive_md5} (expected: ${OPENCV_ICV_PACKAGE_HASH})")
endif()
endif()
endif()
ocv_assert(EXISTS "${OPENCV_ICV_PACKAGE_ARCHIVE}")
ocv_assert(NOT EXISTS "${OPENCV_ICV_UNPACK_PATH}")
file(MAKE_DIRECTORY ${OPENCV_ICV_UNPACK_PATH})
ocv_assert(EXISTS "${OPENCV_ICV_UNPACK_PATH}")
message(STATUS "ICV: Unpacking ${OPENCV_ICV_PACKAGE_NAME} to ${OPENCV_ICV_UNPACK_PATH}...")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${OPENCV_ICV_PACKAGE_ARCHIVE}"
WORKING_DIRECTORY "${OPENCV_ICV_UNPACK_PATH}"
RESULT_VARIABLE __result)
if(NOT __result EQUAL 0)
message(FATAL_ERROR "ICV: Failed to unpack ICV package from ${OPENCV_ICV_PACKAGE_ARCHIVE} to ${OPENCV_ICV_UNPACK_PATH} with error ${__result}")
endif()
ocv_assert(EXISTS "${OPENCV_ICV_PATH}")
set(OPENCV_ICV_PACKAGE_DOWNLOADED "${OPENCV_ICV_PACKAGE_HASH}" CACHE INTERNAL "ICV package hash")
message(STATUS "ICV: Package successfully downloaded")
set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()
_icv_downloader()

56
3rdparty/ippicv/ippicv.cmake vendored Normal file
View File

@@ -0,0 +1,56 @@
function(download_ippicv root_var)
set(${root_var} "" PARENT_SCOPE)
# Commit SHA in the opencv_3rdparty repo
set(IPPICV_COMMIT "dfe3162c237af211e98b8960018b564bc209261d")
# Define actual ICV versions
if(APPLE)
set(OPENCV_ICV_PLATFORM "macosx")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_mac")
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2017u3_mac_intel64_general_20170822.tgz")
set(OPENCV_ICV_HASH "c1ebb5dfa5b7f54b0c44e1917805a463")
else()
set(OPENCV_ICV_NAME "ippicv_2017u3_mac_ia32_general_20170822.tgz")
set(OPENCV_ICV_HASH "49b05a669042753ae75895a445ebd612")
endif()
elseif((UNIX AND NOT ANDROID) OR (UNIX AND ANDROID_ABI MATCHES "x86"))
set(OPENCV_ICV_PLATFORM "linux")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_lnx")
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2017u3_lnx_intel64_general_20170822.tgz")
set(OPENCV_ICV_HASH "4e0352ce96473837b1d671ce87f17359")
else()
set(OPENCV_ICV_NAME "ippicv_2017u3_lnx_ia32_general_20170822.tgz")
set(OPENCV_ICV_HASH "dcdb0ba4b123f240596db1840cd59a76")
endif()
elseif(WIN32 AND NOT ARM)
set(OPENCV_ICV_PLATFORM "windows")
set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_win")
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2017u3_win_intel64_general_20170822.zip")
set(OPENCV_ICV_HASH "0421e642bc7ad741a2236d3ec4190bdd")
else()
set(OPENCV_ICV_NAME "ippicv_2017u3_win_ia32_general_20170822.zip")
set(OPENCV_ICV_HASH "8a7680ae352c192de2e2e34936164bd0")
endif()
else()
return()
endif()
set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")
ocv_download(FILENAME ${OPENCV_ICV_NAME}
HASH ${OPENCV_ICV_HASH}
URL
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
DESTINATION_DIR "${THE_ROOT}"
ID IPPICV
STATUS res
UNPACK RELATIVE_URL)
if(res)
set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
endif()
endfunction()

64
3rdparty/ittnotify/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,64 @@
# ----------------------------------------------------------------------------
# CMake file for Intel ITT API. See root CMakeLists.txt
#
# ----------------------------------------------------------------------------
if(NOT ITT_LIBRARY)
set(ITT_LIBRARY "ittnotify")
endif()
project(${ITT_LIBRARY} C)
if(NOT WIN32)
include(CheckLibraryExists)
if(COMMAND CHECK_LIBRARY_EXISTS)
CHECK_LIBRARY_EXISTS(dl dlerror "" HAVE_DL_LIBRARY)
endif()
endif()
ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
set(ITT_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(ITT_PUBLIC_HDRS
include/ittnotify.h
include/jitprofiling.h
include/libittnotify.h
include/llvm_jit_event_listener.hpp
)
set(ITT_PRIVATE_HDRS
src/ittnotify/disable_warnings.h
src/ittnotify/ittnotify_config.h
src/ittnotify/ittnotify_static.h
src/ittnotify/ittnotify_types.h
)
set(ITT_SRCS
src/ittnotify/ittnotify_static.c
src/ittnotify/jitprofiling.c
)
add_library(${ITT_LIBRARY} STATIC ${ITT_SRCS} ${ITT_PUBLIC_HDRS} ${ITT_PRIVATE_HDRS})
if(NOT WIN32)
if(HAVE_DL_LIBRARY)
target_link_libraries(${ITT_LIBRARY} dl)
endif()
endif()
set_target_properties(${ITT_LIBRARY} PROPERTIES
OUTPUT_NAME ${ITT_LIBRARY}
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
COMPILE_PDB_NAME ${ITT_LIBRARY}
COMPILE_PDB_NAME_DEBUG "${ITT_LIBRARY}${OPENCV_DEBUG_POSTFIX}"
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
)
ocv_warnings_disable(CMAKE_C_FLAGS -Wundef -Wsign-compare)
if(ENABLE_SOLUTION_FOLDERS)
set_target_properties(${ITT_LIBRARY} PROPERTIES FOLDER "3rdparty")
endif()
if(NOT BUILD_SHARED_LIBS)
ocv_install_target(${ITT_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
ocv_install_3rdparty_licenses(ittnotify src/ittnotify/LICENSE.BSD src/ittnotify/LICENSE.GPL)

4123
3rdparty/ittnotify/include/ittnotify.h vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,694 @@
/* <copyright>
This file is provided under a dual BSD/GPLv2 license. When using or
redistributing this file, you may do so under either license.
GPL LICENSE SUMMARY
Copyright (c) 2005-2014 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution
in the file called LICENSE.GPL.
Contact Information:
http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/
BSD LICENSE
Copyright (c) 2005-2014 Intel Corporation. All rights reserved.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of Intel Corporation nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</copyright> */
#ifndef __JITPROFILING_H__
#define __JITPROFILING_H__
/**
* @brief JIT Profiling APIs
*
* The JIT Profiling API is used to report information about just-in-time
* generated code that can be used by performance tools. The user inserts
* calls in the code generator to report information before JIT-compiled
* code goes to execution. This information is collected at runtime and used
* by tools like Intel(R) VTune(TM) Amplifier to display performance metrics
* associated with JIT-compiled code.
*
* These APIs can be used to\n
* - **Profile trace-based and method-based JIT-compiled
* code**. Some examples of environments that you can profile with these APIs:
* dynamic JIT compilation of JavaScript code traces, JIT execution in OpenCL(TM)
* software technology, Java/.NET managed execution environments, and custom
* ISV JIT engines.
* @code
* #include <jitprofiling.h>
*
* if (iJIT_IsProfilingActive != iJIT_SAMPLING_ON) {
* return;
* }
*
* iJIT_Method_Load jmethod = {0};
* jmethod.method_id = iJIT_GetNewMethodID();
* jmethod.method_name = "method_name";
* jmethod.class_file_name = "class_name";
* jmethod.source_file_name = "source_file_name";
* jmethod.method_load_address = code_addr;
* jmethod.method_size = code_size;
*
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&jmethod);
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_SHUTDOWN, NULL);
* @endcode
*
* * Expected behavior:
* * If any iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites an
* already reported method, then such a method becomes invalid and its
* memory region is treated as unloaded. VTune Amplifier displays the metrics
* collected by the method until it is overwritten.
* * If supplied line number information contains multiple source lines for
* the same assembly instruction (code location), then VTune Amplifier picks up
* the first line number.
* * Dynamically generated code can be associated with a module name.
* Use the iJIT_Method_Load_V2 structure.\n
* Clarification of some cases:
* * If you register a function with the same method ID multiple times,
* specifying different module names, then the VTune Amplifier picks up
* the module name registered first. If you want to distinguish the same
* function between different JIT engines, supply different method IDs for
* each function. Other symbolic information (for example, source file)
* can be identical.
*
* - **Analyze split functions** (multiple joint or disjoint code regions
* belonging to the same function) **including re-JIT**
* with potential overlapping of code regions in time, which is common in
* resource-limited environments.
* @code
* #include <jitprofiling.h>
*
* unsigned int method_id = iJIT_GetNewMethodID();
*
* iJIT_Method_Load a = {0};
* a.method_id = method_id;
* a.method_load_address = 0x100;
* a.method_size = 0x20;
*
* iJIT_Method_Load b = {0};
* b.method_id = method_id;
* b.method_load_address = 0x200;
* b.method_size = 0x30;
*
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&a);
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&b);
* @endcode
*
* * Expected behaviour:
* * If a iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites an
* already reported method, then such a method becomes invalid and
* its memory region is treated as unloaded.
* * All code regions reported with the same method ID are considered as
* belonging to the same method. Symbolic information (method name,
* source file name) will be taken from the first notification, and all
* subsequent notifications with the same method ID will be processed
* only for line number table information. So, the VTune Amplifier will map
* samples to a source line using the line number table from the current
* notification while taking the source file name from the very first one.\n
* Clarification of some cases:\n
* * If you register a second code region with a different source file
* name and the same method ID, then this information will be saved and
* will not be considered as an extension of the first code region, but
* VTune Amplifier will use the source file of the first code region and map
* performance metrics incorrectly.
* * If you register a second code region with the same source file as
* for the first region and the same method ID, then the source file will be
* discarded but VTune Amplifier will map metrics to the source file correctly.
* * If you register a second code region with a null source file and
* the same method ID, then provided line number info will be associated
* with the source file of the first code region.
*
* - **Explore inline functions** including multi-level hierarchy of
* nested inline methods which shows how performance metrics are distributed through them.
* @code
* #include <jitprofiling.h>
*
* // method_id parent_id
* // [-- c --] 3000 2000
* // [---- d -----] 2001 1000
* // [---- b ----] 2000 1000
* // [------------ a ----------------] 1000 n/a
*
* iJIT_Method_Load a = {0};
* a.method_id = 1000;
*
* iJIT_Method_Inline_Load b = {0};
* b.method_id = 2000;
* b.parent_method_id = 1000;
*
* iJIT_Method_Inline_Load c = {0};
* c.method_id = 3000;
* c.parent_method_id = 2000;
*
* iJIT_Method_Inline_Load d = {0};
* d.method_id = 2001;
* d.parent_method_id = 1000;
*
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&a);
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&b);
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&c);
* iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&d);
* @endcode
*
* * Requirements:
* * Each inline (iJIT_Method_Inline_Load) method should be associated
* with two method IDs: one for itself; one for its immediate parent.
* * Address regions of inline methods of the same parent method cannot
* overlap each other.
* * Execution of the parent method must not be started until it and all
* its inline methods are reported.
* * Expected behaviour:
* * In case of nested inline methods an order of
* iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED events is not important.
* * If any event overwrites either inline method or top parent method,
* then the parent, including inline methods, becomes invalid and its memory
* region is treated as unloaded.
*
* **Life time of allocated data**\n
* The client sends an event notification to the agent with event-specific
* data, which is a structure. The pointers in the structure refer to memory
* allocated by the client, which responsible for releasing it. The pointers are
* used by the iJIT_NotifyEvent method to copy client's data in a trace file,
* and they are not used after the iJIT_NotifyEvent method returns.
*/
/**
* @defgroup jitapi JIT Profiling
* @ingroup internal
* @{
*/
/**
* @brief Enumerator for the types of notifications
*/
typedef enum iJIT_jvm_event
{
iJVM_EVENT_TYPE_SHUTDOWN = 2, /**<\brief Send this to shutdown the agent.
* Use NULL for event data. */
iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED = 13, /**<\brief Send when dynamic code is
* JIT compiled and loaded into
* memory by the JIT engine, but
* before the code is executed.
* Use iJIT_Method_Load as event
* data. */
/** @cond exclude_from_documentation */
iJVM_EVENT_TYPE_METHOD_UNLOAD_START, /**<\brief Send when compiled dynamic
* code is being unloaded from memory.
* Use iJIT_Method_Load as event data.*/
/** @endcond */
iJVM_EVENT_TYPE_METHOD_UPDATE, /**<\brief Send to provide new content for
* a previously reported dynamic code.
* The previous content will be invalidated
* starting from the time of the notification.
* Use iJIT_Method_Load as event data but
* required fields are following:
* - method_id identify the code to update.
* - method_load_address specify start address
* within identified code range
* where update should be started.
* - method_size specify length of updated code
* range. */
iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, /**<\brief Send when an inline dynamic
* code is JIT compiled and loaded
* into memory by the JIT engine,
* but before the parent code region
* starts executing.
* Use iJIT_Method_Inline_Load as event data.*/
/** @cond exclude_from_documentation */
iJVM_EVENT_TYPE_METHOD_UPDATE_V2,
/** @endcond */
iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2 = 21, /**<\brief Send when a dynamic code is
* JIT compiled and loaded into
* memory by the JIT engine, but
* before the code is executed.
* Use iJIT_Method_Load_V2 as event data. */
iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V3 /**<\brief Send when a dynamic code is
* JIT compiled and loaded into
* memory by the JIT engine, but
* before the code is executed.
* Use iJIT_Method_Load_V3 as event data. */
} iJIT_JVM_EVENT;
/**
* @brief Enumerator for the agent's mode
*/
typedef enum _iJIT_IsProfilingActiveFlags
{
iJIT_NOTHING_RUNNING = 0x0000, /**<\brief The agent is not running;
* iJIT_NotifyEvent calls will
* not be processed. */
iJIT_SAMPLING_ON = 0x0001, /**<\brief The agent is running and
* ready to process notifications. */
} iJIT_IsProfilingActiveFlags;
/**
* @brief Description of a single entry in the line number information of a code region.
* @details A table of line number entries gives information about how the reported code region
* is mapped to source file.
* Intel(R) VTune(TM) Amplifier uses line number information to attribute
* the samples (virtual address) to a line number. \n
* It is acceptable to report different code addresses for the same source line:
* @code
* Offset LineNumber
* 1 2
* 12 4
* 15 2
* 18 1
* 21 30
*
* VTune Amplifier constructs the following table using the client data
*
* Code subrange Line number
* 0-1 2
* 1-12 4
* 12-15 2
* 15-18 1
* 18-21 30
* @endcode
*/
typedef struct _LineNumberInfo
{
unsigned int Offset; /**<\brief Offset from the begining of the code region. */
unsigned int LineNumber; /**<\brief Matching source line number offset (from beginning of source file). */
} *pLineNumberInfo, LineNumberInfo;
/**
* @brief Enumerator for the code architecture.
*/
typedef enum _iJIT_CodeArchitecture
{
iJIT_CA_NATIVE = 0, /**<\brief Native to the process architecture that is calling it. */
iJIT_CA_32, /**<\brief 32-bit machine code. */
iJIT_CA_64 /**<\brief 64-bit machine code. */
} iJIT_CodeArchitecture;
#pragma pack(push, 8)
/**
* @brief Description of a JIT-compiled method
* @details When you use the iJIT_Method_Load structure to describe
* the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED
* as an event type to report it.
*/
typedef struct _iJIT_Method_Load
{
unsigned int method_id; /**<\brief Unique method ID. Cannot be 0.
* You must either use the API function
* iJIT_GetNewMethodID to get a valid and unique
* method ID, or else manage ID uniqueness
* and correct range by yourself.\n
* You must use the same method ID for all code
* regions of the same method, otherwise different
* method IDs specify different methods. */
char* method_name; /**<\brief The name of the method. It can be optionally
* prefixed with its class name and appended with
* its complete signature. Can't be NULL. */
void* method_load_address; /**<\brief The start virtual address of the method code
* region. If NULL, data provided with
* event are not accepted. */
unsigned int method_size; /**<\brief The code size of the method in memory.
* If 0, then data provided with the event are not
* accepted. */
unsigned int line_number_size; /**<\brief The number of entries in the line number
* table.0 if none. */
pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info
* array. Can be NULL if
* line_number_size is 0. See
* LineNumberInfo Structure for a
* description of a single entry in
* the line number info array */
unsigned int class_id; /**<\brief This field is obsolete. */
char* class_file_name; /**<\brief Class name. Can be NULL.*/
char* source_file_name; /**<\brief Source file name. Can be NULL.*/
} *piJIT_Method_Load, iJIT_Method_Load;
/**
* @brief Description of a JIT-compiled method
* @details When you use the iJIT_Method_Load_V2 structure to describe
* the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2
* as an event type to report it.
*/
typedef struct _iJIT_Method_Load_V2
{
unsigned int method_id; /**<\brief Unique method ID. Cannot be 0.
* You must either use the API function
* iJIT_GetNewMethodID to get a valid and unique
* method ID, or else manage ID uniqueness
* and correct range by yourself.\n
* You must use the same method ID for all code
* regions of the same method, otherwise different
* method IDs specify different methods. */
char* method_name; /**<\brief The name of the method. It can be optionally
* prefixed with its class name and appended with
* its complete signature. Can't be NULL. */
void* method_load_address; /**<\brief The start virtual address of the method code
* region. If NULL, then data provided with the
* event are not accepted. */
unsigned int method_size; /**<\brief The code size of the method in memory.
* If 0, then data provided with the event are not
* accepted. */
unsigned int line_number_size; /**<\brief The number of entries in the line number
* table. 0 if none. */
pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info
* array. Can be NULL if
* line_number_size is 0. See
* LineNumberInfo Structure for a
* description of a single entry in
* the line number info array. */
char* class_file_name; /**<\brief Class name. Can be NULL. */
char* source_file_name; /**<\brief Source file name. Can be NULL. */
char* module_name; /**<\brief Module name. Can be NULL.
The module name can be useful for distinguishing among
different JIT engines. VTune Amplifier will display
reported methods grouped by specific module. */
} *piJIT_Method_Load_V2, iJIT_Method_Load_V2;
/**
* @brief Description of a JIT-compiled method
* @details The iJIT_Method_Load_V3 structure is the same as iJIT_Method_Load_V2
* with a newly introduced 'arch' field that specifies architecture of the code region.
* When you use the iJIT_Method_Load_V3 structure to describe
* the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V3
* as an event type to report it.
*/
typedef struct _iJIT_Method_Load_V3
{
unsigned int method_id; /**<\brief Unique method ID. Cannot be 0.
* You must either use the API function
* iJIT_GetNewMethodID to get a valid and unique
* method ID, or manage ID uniqueness
* and correct range by yourself.\n
* You must use the same method ID for all code
* regions of the same method, otherwise they are
* treated as regions of different methods. */
char* method_name; /**<\brief The name of the method. It can be optionally
* prefixed with its class name and appended with
* its complete signature. Cannot be NULL. */
void* method_load_address; /**<\brief The start virtual address of the method code
* region. If NULL, then data provided with the
* event are not accepted. */
unsigned int method_size; /**<\brief The code size of the method in memory.
* If 0, then data provided with the event are not
* accepted. */
unsigned int line_number_size; /**<\brief The number of entries in the line number
* table. 0 if none. */
pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info
* array. Can be NULL if
* line_number_size is 0. See
* LineNumberInfo Structure for a
* description of a single entry in
* the line number info array. */
char* class_file_name; /**<\brief Class name. Can be NULL. */
char* source_file_name; /**<\brief Source file name. Can be NULL. */
char* module_name; /**<\brief Module name. Can be NULL.
* The module name can be useful for distinguishing among
* different JIT engines. VTune Amplifier will display
* reported methods grouped by specific module. */
iJIT_CodeArchitecture module_arch; /**<\brief Architecture of the method's code region.
* By default, it is the same as the process
* architecture that is calling it.
* For example, you can use it if your 32-bit JIT
* engine generates 64-bit code.
*
* If JIT engine reports both 32-bit and 64-bit types
* of methods then VTune Amplifier splits the methods
* with the same module name but with different
* architectures in two different modules. VTune Amplifier
* modifies the original name provided with a 64-bit method
* version by ending it with '(64)' */
} *piJIT_Method_Load_V3, iJIT_Method_Load_V3;
/**
* @brief Description of an inline JIT-compiled method
* @details When you use the_iJIT_Method_Inline_Load structure to describe
* the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED
* as an event type to report it.
*/
typedef struct _iJIT_Method_Inline_Load
{
unsigned int method_id; /**<\brief Unique method ID. Cannot be 0.
* You must either use the API function
* iJIT_GetNewMethodID to get a valid and unique
* method ID, or else manage ID uniqueness
* and correct range by yourself. */
unsigned int parent_method_id; /**<\brief Unique immediate parent's method ID.
* Cannot be 0.
* You must either use the API function
* iJIT_GetNewMethodID to get a valid and unique
* method ID, or else manage ID uniqueness
* and correct range by yourself. */
char* method_name; /**<\brief The name of the method. It can be optionally
* prefixed with its class name and appended with
* its complete signature. Can't be NULL. */
void* method_load_address; /** <\brief The virtual address on which the method
* is inlined. If NULL, then data provided with
* the event are not accepted. */
unsigned int method_size; /**<\brief The code size of the method in memory.
* If 0, then data provided with the event are not
* accepted. */
unsigned int line_number_size; /**<\brief The number of entries in the line number
* table. 0 if none. */
pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info
* array. Can be NULL if
* line_number_size is 0. See
* LineNumberInfo Structure for a
* description of a single entry in
* the line number info array */
char* class_file_name; /**<\brief Class name. Can be NULL.*/
char* source_file_name; /**<\brief Source file name. Can be NULL.*/
} *piJIT_Method_Inline_Load, iJIT_Method_Inline_Load;
/** @cond exclude_from_documentation */
/**
* @brief Description of a segment type
* @details Use the segment type to specify a type of data supplied
* with the iJVM_EVENT_TYPE_METHOD_UPDATE_V2 event to be applied to
* a certain code trace.
*/
typedef enum _iJIT_SegmentType
{
iJIT_CT_UNKNOWN = 0,
iJIT_CT_CODE, /**<\brief Executable code. */
iJIT_CT_DATA, /**<\brief Data (not executable code).
* VTune Amplifier uses the format string
* (see iJIT_Method_Update) to represent
* this data in the VTune Amplifier GUI */
iJIT_CT_KEEP, /**<\brief Use the previous markup for the trace.
* Can be used for the following
* iJVM_EVENT_TYPE_METHOD_UPDATE_V2 events,
* if the type of the previously reported segment
* type is the same. */
iJIT_CT_EOF
} iJIT_SegmentType;
/**
* @brief Description of a dynamic update of the content within JIT-compiled method
* @details The JIT engine may generate the methods that are updated at runtime
* partially by mixed (data + executable code) content. When you use the iJIT_Method_Update
* structure to describe the update of the content within a JIT-compiled method,
* use iJVM_EVENT_TYPE_METHOD_UPDATE_V2 as an event type to report it.
*
* On the first Update event, VTune Amplifier copies the original code range reported by
* the iJVM_EVENT_TYPE_METHOD_LOAD event, then modifies it with the supplied bytes and
* adds the modified range to the original method. For next update events, VTune Amplifier
* does the same but it uses the latest modified version of a code region for update.
* Eventually, VTune Amplifier GUI displays multiple code ranges for the method reported by
* the iJVM_EVENT_TYPE_METHOD_LOAD event.
* Notes:
* - Multiple update events with different types for the same trace are allowed
* but they must be reported for the same code ranges.
* Example,
* @code
* [-- data---] Allowed
* [-- code --] Allowed
* [code] Ignored
* [-- data---] Allowed
* [-- code --] Allowed
* [------------ trace ---------]
* @endcode
* - The types of previously reported events can be changed but they must be reported
* for the same code ranges.
* Example,
* @code
* [-- data---] Allowed
* [-- code --] Allowed
* [-- data---] Allowed
* [-- code --] Allowed
* [------------ trace ---------]
* @endcode
*/
typedef struct _iJIT_Method_Update
{
void* load_address; /**<\brief Start address of the update within a method */
unsigned int size; /**<\brief The update size */
iJIT_SegmentType type; /**<\brief Type of the update */
const char* data_format; /**<\brief C string that contains a format string
* that follows the same specifications as format in printf.
* The format string is used for iJIT_CT_CODE only
* and cannot be NULL.
* Format can be changed on the fly. */
} *piJIT_Method_Update, iJIT_Method_Update;
/** @endcond */
#pragma pack(pop)
/** @cond exclude_from_documentation */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef JITAPI_CDECL
# if defined WIN32 || defined _WIN32
# define JITAPI_CDECL __cdecl
# else /* defined WIN32 || defined _WIN32 */
# if defined _M_IX86 || defined __i386__
# define JITAPI_CDECL __attribute__ ((cdecl))
# else /* _M_IX86 || __i386__ */
# define JITAPI_CDECL /* actual only on x86_64 platform */
# endif /* _M_IX86 || __i386__ */
# endif /* defined WIN32 || defined _WIN32 */
#endif /* JITAPI_CDECL */
#define JITAPI JITAPI_CDECL
/** @endcond */
/**
* @brief Generates a new unique method ID.
*
* You must use this API to obtain unique and valid method IDs for methods or
* traces reported to the agent if you don't have your own mechanism to generate
* unique method IDs.
*
* @return a new unique method ID. When out of unique method IDs, this API
* returns 0, which is not an accepted value.
*/
unsigned int JITAPI iJIT_GetNewMethodID(void);
/**
* @brief Returns the current mode of the agent.
*
* @return iJIT_SAMPLING_ON, indicating that agent is running, or
* iJIT_NOTHING_RUNNING if no agent is running.
*/
iJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive(void);
/**
* @brief Reports infomation about JIT-compiled code to the agent.
*
* The reported information is used to attribute samples obtained from any
* Intel(R) VTune(TM) Amplifier collector. This API needs to be called
* after JIT compilation and before the first entry into the JIT-compiled
* code.
*
* @param[in] event_type - type of the data sent to the agent
* @param[in] EventSpecificData - pointer to event-specific data
*
* @returns 1 on success, otherwise 0.
*/
int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/** @endcond */
/** @} jitapi group */
#endif /* __JITPROFILING_H__ */

Some files were not shown because too many files have changed in this diff Show More