diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0101-MGS-6470-ccc-Modify-host-ptr-alignment-size-in-UMAT.patch b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0101-MGS-6470-ccc-Modify-host-ptr-alignment-size-in-UMAT.patch new file mode 100644 index 000000000..82afd5c72 --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0101-MGS-6470-ccc-Modify-host-ptr-alignment-size-in-UMAT.patch @@ -0,0 +1,29 @@ +From 0a1c77e4c810999632d648f63775b7ea265bc25c Mon Sep 17 00:00:00 2001 +From: Eric Guo +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 +--- + 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 + diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0102-MGS-6470-ccc-Add-configuration-parameter-to-force-en.patch b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0102-MGS-6470-ccc-Add-configuration-parameter-to-force-en.patch new file mode 100644 index 000000000..50240093c --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0102-MGS-6470-ccc-Add-configuration-parameter-to-force-en.patch @@ -0,0 +1,32 @@ +From 965365fff0815b8afc9833102d8e4e6c4ee1dda3 Mon Sep 17 00:00:00 2001 +From: Eric Guo +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 +--- + 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 + diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0103-MGS-6470-ccc-Change-configuration-to-enable-hostptr-.patch b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0103-MGS-6470-ccc-Change-configuration-to-enable-hostptr-.patch new file mode 100644 index 000000000..3b429b383 --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0103-MGS-6470-ccc-Change-configuration-to-enable-hostptr-.patch @@ -0,0 +1,28 @@ +From 352b992c7daeeede261cf52e06b5beac485df897 Mon Sep 17 00:00:00 2001 +From: Eric Guo +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 +--- + 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 + diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0104-MGS-8011-ccc-Fix-the-problem-of-syntax-error-at-doub.patch b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0104-MGS-8011-ccc-Fix-the-problem-of-syntax-error-at-doub.patch new file mode 100644 index 000000000..ebca4ce35 --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/0104-MGS-8011-ccc-Fix-the-problem-of-syntax-error-at-doub.patch @@ -0,0 +1,43 @@ +From 2766330540d5106e1cc5c44ab14f021e306859cb Mon Sep 17 00:00:00 2001 +From: jiajia Qian +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 +--- + 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 + diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch deleted file mode 100644 index 265d723c6..000000000 --- a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 75f7475fcfb35cbe4d8f5ccf5c4ac8bc78f2dc30 Mon Sep 17 00:00:00 2001 -From: Kumataro -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()); diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv_4.10.0.imx.bb b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv_4.10.0.imx.bb index 1f7649f28..98cd85356 100644 --- a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv_4.10.0.imx.bb +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-support/opencv/opencv_4.10.0.imx.bb @@ -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