opencv: update/refresh for NXP's lf-6.6.52-2.2.1 release

https://onedigi.atlassian.net/browse/DEL-9748

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
Javier Viguera 2025-09-05 19:41:10 +02:00
parent e3d8b314b8
commit b12c17ac38
6 changed files with 146 additions and 213 deletions

View File

@ -0,0 +1,29 @@
From 0a1c77e4c810999632d648f63775b7ea265bc25c Mon Sep 17 00:00:00 2001
From: Eric Guo <eric.guo@nxp.com>
Date: Tue, 9 Nov 2021 14:38:00 +0800
Subject: [PATCH 1/4] MGS-6470 [#ccc] Modify host ptr alignment size in UMAT
change CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR from 4 to 64
Upstream-Status: Inappropriate [i.MX specific]
Signed-off-by: Eric Guo <eric.guo@nxp.com>
---
modules/core/src/ocl.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp
index 8479667fd7..6eb7b5e425 100644
--- a/modules/core/src/ocl.cpp
+++ b/modules/core/src/ocl.cpp
@@ -245,7 +245,7 @@ static String getBuildExtraOptions()
}
static const bool CV_OPENCL_ENABLE_MEM_USE_HOST_PTR = utils::getConfigurationParameterBool("OPENCV_OPENCL_ENABLE_MEM_USE_HOST_PTR", true);
-static const size_t CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR = utils::getConfigurationParameterSizeT("OPENCV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR", 4);
+static const size_t CV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR = utils::getConfigurationParameterSizeT("OPENCV_OPENCL_ALIGNMENT_MEM_USE_HOST_PTR", 64);
struct UMat2D
--
2.34.1

View File

@ -0,0 +1,32 @@
From 965365fff0815b8afc9833102d8e4e6c4ee1dda3 Mon Sep 17 00:00:00 2001
From: Eric Guo <eric.guo@nxp.com>
Date: Wed, 17 Nov 2021 15:04:23 +0800
Subject: [PATCH 2/4] MGS-6470 [#ccc] Add configuration parameter to force
enable hostptr in OpenCL
USAGE: `set OPENCV_OPENCL_ALIGNMENT_MEM_ALLOC_HOST_PTR=true`
Upstream-Status: Inappropriate [i.MX specific]
Signed-off-by: Eric Guo <eric.guo@nxp.com>
---
modules/core/src/ocl.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp
index 6eb7b5e425..5c50b06865 100644
--- a/modules/core/src/ocl.cpp
+++ b/modules/core/src/ocl.cpp
@@ -5416,7 +5416,9 @@ public:
{
const Device& dev = ctx.device(0);
createFlags = 0;
- if ((usageFlags & USAGE_ALLOCATE_HOST_MEMORY) != 0)
+ bool allocHostPtr = utils::getConfigurationParameterBool("OPENCV_OPENCL_ALIGNMENT_MEM_ALLOC_HOST_PTR", false);
+
+ if ((usageFlags & USAGE_ALLOCATE_HOST_MEMORY) != 0 || allocHostPtr)
createFlags |= CL_MEM_ALLOC_HOST_PTR;
if (!isOpenCLCopyingForced() &&
--
2.34.1

View File

@ -0,0 +1,28 @@
From 352b992c7daeeede261cf52e06b5beac485df897 Mon Sep 17 00:00:00 2001
From: Eric Guo <eric.guo@nxp.com>
Date: Thu, 9 Dec 2021 15:25:42 +0800
Subject: [PATCH 3/4] MGS-6470 [#ccc] Change configuration to enable hostptr in
OpenCL by default.
Upstream-Status: Inappropriate [i.MX specific]
Signed-off-by: Eric Guo <eric.guo@nxp.com>
---
modules/core/src/ocl.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp
index 5c50b06865..db75190f13 100644
--- a/modules/core/src/ocl.cpp
+++ b/modules/core/src/ocl.cpp
@@ -5416,7 +5416,7 @@ public:
{
const Device& dev = ctx.device(0);
createFlags = 0;
- bool allocHostPtr = utils::getConfigurationParameterBool("OPENCV_OPENCL_ALIGNMENT_MEM_ALLOC_HOST_PTR", false);
+ bool allocHostPtr = utils::getConfigurationParameterBool("OPENCV_OPENCL_ALIGNMENT_MEM_ALLOC_HOST_PTR", true);
if ((usageFlags & USAGE_ALLOCATE_HOST_MEMORY) != 0 || allocHostPtr)
createFlags |= CL_MEM_ALLOC_HOST_PTR;
--
2.34.1

View File

@ -0,0 +1,43 @@
From 2766330540d5106e1cc5c44ab14f021e306859cb Mon Sep 17 00:00:00 2001
From: jiajia Qian <jiajia.qian@nxp.com>
Date: Tue, 7 Jan 2025 16:42:34 +0800
Subject: [PATCH 4/4] MGS-8011 [#ccc] Fix the problem of syntax error at
'double4' in opencv_test_imgproc.
Since our driver does not support cl_khr_fp64 format data,
disabled the related ocl function in opencv_test_imgproc to avoid the following error log:
error: syntax error at 'double4'
Upstream-Status: Inappropriate [i.MX specific]
Signed-off-by: jiajia Qian <jiajia.qian@nxp.com>
---
modules/imgproc/src/imgwarp.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/modules/imgproc/src/imgwarp.cpp b/modules/imgproc/src/imgwarp.cpp
index dfc718bf87..0e8b9ce142 100644
--- a/modules/imgproc/src/imgwarp.cpp
+++ b/modules/imgproc/src/imgwarp.cpp
@@ -1349,6 +1349,7 @@ static bool ocl_remap(InputArray _src, OutputArray _dst, InputArray _map1, Input
interpolation &= ~WARP_RELATIVE_MAP;
const ocl::Device & dev = ocl::Device::getDefault();
+ bool doubleSupport = dev.doubleFPConfig() > 0;
int cn = _src.channels(), type = _src.type(), depth = _src.depth(),
rowsPerWI = dev.isIntel() ? 4 : 1;
@@ -1356,6 +1357,9 @@ static bool ocl_remap(InputArray _src, OutputArray _dst, InputArray _map1, Input
|| _map1.type() == CV_16SC1 || _map2.type() == CV_16SC1)
return false;
+ if (!doubleSupport && depth == CV_64F )
+ return false;
+
UMat src = _src.getUMat(), map1 = _map1.getUMat(), map2 = _map2.getUMat();
if( (map1.type() == CV_16SC2 && (map2.type() == CV_16UC1 || map2.empty())) ||
--
2.34.1

View File

@ -1,203 +0,0 @@
From 75f7475fcfb35cbe4d8f5ccf5c4ac8bc78f2dc30 Mon Sep 17 00:00:00 2001
From: Kumataro <Kumataro@users.noreply.github.com>
Date: Thu, 19 Oct 2023 14:45:08 +0900
Subject: [PATCH] Merge pull request #24372 from Kumataro:fix24369
Supporting protobuf v22 and later(with abseil-cpp/C++17) #24372
fix https://github.com/opencv/opencv/issues/24369
related https://github.com/opencv/opencv/issues/23791
1. This patch supports external protobuf v22 and later, it required abseil-cpp and c++17.
Even if the built-in protobuf is upgraded to v22 or later,
the dependency on abseil-cpp and the requirement for C++17 will continue.
2. Some test for caffe required patched protobuf, so this patch disable them.
This patch is tested by following libraries.
- Protobuf: /usr/local/lib/libprotobuf.so (4.24.4)
- abseil-cpp: YES (20230125)
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
Upstream-Status: Backport [https://github.com/opencv/opencv/commit/6e4280ea81b59c6dca45bb9801b758377beead55]
---
cmake/OpenCVFindProtobuf.cmake | 35 +++++++++++++++++++++++++++-----
modules/dnn/CMakeLists.txt | 6 ++++++
modules/dnn/test/test_layers.cpp | 24 ++++++++++++++++++----
3 files changed, 56 insertions(+), 9 deletions(-)
diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
index 8835347d1d..5b1e17529f 100644
--- a/cmake/OpenCVFindProtobuf.cmake
+++ b/cmake/OpenCVFindProtobuf.cmake
@@ -30,8 +30,14 @@ if(BUILD_PROTOBUF)
set(Protobuf_LIBRARIES "libprotobuf")
set(HAVE_PROTOBUF TRUE)
else()
+ # we still need this for command PROTOBUF_GENERATE_CPP.
+ set(protobuf_MODULE_COMPATIBLE ON)
+
unset(Protobuf_VERSION CACHE)
- find_package(Protobuf QUIET)
+ find_package(Protobuf QUIET CONFIG)
+ if(NOT Protobuf_FOUND)
+ find_package(Protobuf QUIET)
+ endif()
# Backwards compatibility
# Define camel case versions of input variables
@@ -67,6 +73,20 @@ else()
endif()
endif()
+# See https://github.com/opencv/opencv/issues/24369
+# In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
+# Details: https://protobuf.dev/news/2022-08-03/
+# And if std::text_view is in abseil-cpp requests C++17 and later.
+
+if(HAVE_PROTOBUF)
+ if(NOT (Protobuf_VERSION VERSION_LESS 22))
+ if((CMAKE_CXX_STANDARD EQUAL 98) OR (CMAKE_CXX_STANDARD LESS 17))
+ message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} is too old to support protobuf(${Protobuf_VERSION}) and/or abseil-cpp. Use C++17 or later. Turning HAVE_PROTOBUF off")
+ set(HAVE_PROTOBUF FALSE)
+ endif()
+ endif()
+endif()
+
if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
endif()
@@ -74,15 +94,20 @@ endif()
if(HAVE_PROTOBUF)
list(APPEND CUSTOM_STATUS protobuf)
if(NOT BUILD_PROTOBUF)
+ unset( __location)
if(TARGET "${Protobuf_LIBRARIES}")
get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION_RELEASE)
if(NOT __location)
get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION)
endif()
- elseif(Protobuf_LIBRARY)
- set(__location "${Protobuf_LIBRARY}")
- else()
- set(__location "${Protobuf_LIBRARIES}")
+ endif()
+
+ if(NOT __location)
+ if(Protobuf_LIBRARY)
+ set(__location "${Protobuf_LIBRARY}")
+ else()
+ set(__location "${Protobuf_LIBRARIES}")
+ endif()
endif()
endif()
list(APPEND CUSTOM_STATUS_protobuf " Protobuf:"
diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
index 804b78ead2..9fcc460909 100644
--- a/modules/dnn/CMakeLists.txt
+++ b/modules/dnn/CMakeLists.txt
@@ -245,6 +245,12 @@ ocv_create_module(${libs} ${dnn_runtime_libs})
ocv_add_samples()
ocv_add_accuracy_tests(${dnn_runtime_libs})
+if(NOT BUILD_PROTOBUF)
+ if(TARGET opencv_test_dnn)
+ ocv_target_compile_definitions(opencv_test_dnn PRIVATE "OPENCV_DNN_EXTERNAL_PROTOBUF=1")
+ endif()
+endif()
+
set(perf_path "${CMAKE_CURRENT_LIST_DIR}/perf")
file(GLOB_RECURSE perf_srcs "${perf_path}/*.cpp")
file(GLOB_RECURSE perf_hdrs "${perf_path}/*.hpp" "${perf_path}/*.h")
diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp
index 763d94b99c..6cb6d54b3f 100644
--- a/modules/dnn/test/test_layers.cpp
+++ b/modules/dnn/test/test_layers.cpp
@@ -756,11 +756,15 @@ TEST_F(Layer_RNN_Test, get_set_test)
TEST_P(Test_Caffe_layers, Accum)
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
+#else
if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
testLayerUsingCaffeModels("accum", false, false, 0.0, 0.0, 2);
testLayerUsingCaffeModels("accum_ref", false, false, 0.0, 0.0, 2);
+#endif
}
TEST_P(Test_Caffe_layers, FlowWarp)
@@ -780,27 +784,39 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
TEST_P(Test_Caffe_layers, DataAugmentation)
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
+#else
if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
testLayerUsingCaffeModels("data_augmentation", true, false);
testLayerUsingCaffeModels("data_augmentation_2x1", true, false);
testLayerUsingCaffeModels("data_augmentation_8x6", true, false);
+#endif
}
TEST_P(Test_Caffe_layers, Resample)
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
+#else
if (backend != DNN_BACKEND_OPENCV)
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
testLayerUsingCaffeModels("nearest_2inps", false, false, 0.0, 0.0, 2);
testLayerUsingCaffeModels("nearest", false, false);
+#endif
}
TEST_P(Test_Caffe_layers, Correlation)
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
+#else
if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
testLayerUsingCaffeModels("correlation", false, false, 0.0, 0.0, 2);
+#endif
}
TEST_P(Test_Caffe_layers, Convolution2Inputs)
@@ -1641,12 +1657,11 @@ private:
int outWidth, outHeight, zoomFactor;
};
-#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
TEST_P(Test_Caffe_layers, Interp)
-#else
-TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (available in OpenCV source tree only)
-#endif
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
+#else
#if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
@@ -1670,6 +1685,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (availa
// Test an implemented layer.
testLayerUsingCaffeModels("layer_interp", false, false);
+#endif
}
INSTANTIATE_TEST_CASE_P(/*nothing*/, Test_Caffe_layers, dnnBackendsAndTargets());

View File

@ -1,6 +1,7 @@
# This recipe is for the i.MX fork of opencv. For ease of
# maintenance, the top section is a verbatim copy of an OE-core
# recipe. The second section customizes the recipe for i.MX.
# This recipe is modified for i.MX.
# For ease of maintenance, the top section is a verbatim copy
# of an OE-core recipe, and the second section customizes the
# recipe for i.MX.
########## meta-openembedded copy ###########
# Upstream hash: b149b1e6a1de2bdea10b0a6de34d5a5bbba4a657
@ -17,7 +18,7 @@ ARM_INSTRUCTION_SET:armv5 = "arm"
DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp"
SRCREV_opencv = "93bb210db7cb5ae3dcd80dd6e3f8e5cfb42aa5fa"
SRCREV_opencv = "1ebbfb4aeeb558d03a76f3efa5bd9020f3e4397c"
SRCREV_contrib = "c7602a8f74205e44389bd6a4e8d727d32e7e27b4"
SRCREV_boostdesc = "34e4206aef44d50e6bbcd0ab06354b52e7466d26"
SRCREV_vgg = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d"
@ -224,12 +225,15 @@ SUMMARY = "Opencv : The Open Computer Vision Library, i.MX Fork"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
# Replace the opencv URL with the fork
SRC_URI:remove = "git://github.com/opencv/opencv.git;name=opencv;branch=4.x;protocol=https"
SRC_URI =+ "${OPENCV_SRC};branch=${SRCBRANCH_opencv};name=opencv"
OPENCV_SRC ?= "git://github.com/nxp-imx/opencv-imx.git;protocol=https;branch=master"
SRCBRANCH_opencv = "4.10.0_imx"
SRCREV_opencv = "93bb210db7cb5ae3dcd80dd6e3f8e5cfb42aa5fa"
# i.MX patches
SRC_URI += " \
file://0101-MGS-6470-ccc-Modify-host-ptr-alignment-size-in-UMAT.patch \
file://0102-MGS-6470-ccc-Add-configuration-parameter-to-force-en.patch \
file://0103-MGS-6470-ccc-Change-configuration-to-enable-hostptr-.patch \
file://0104-MGS-8011-ccc-Fix-the-problem-of-syntax-error-at-doub.patch \
"
SRCREV_opencv = "71d3237a093b60a27601c20e9ee6c3e52154e8b1"
SRCREV_contrib = "1ed3dd2c53888e3289afdb22ec4e9ebbff3dba87"
# Add opencv_extra