nareshmlx/opencv-pr huggingface dataset:
**File:** modules/gapi/src/backends/ov/govbackend.cpp
**Change Type:** modified
**Context:** PR #24938: G-API OV backend requires cv::MediaFrame

**Code Changes:**
```diff
@@ -129,7 +129,7 @@ static int toCV(const ov::element::Type &type) {
 static void copyFromOV(const ov::Tensor &tensor, cv::Mat &mat) {
     const auto total = mat.total() * mat.channels();
     if (toCV(tensor.get_element_type()) != mat.depth() ||
-        tensor.get_size()               != total ) {
+        tensor.get_size()               != total) {
         std::stringstream ss;
         ss << "Failed to copy data from ov::Tensor to cv::Mat."
            << " Data type or number of elements mismatch."
@@ -151,6 +151,30 @@ static void copyFromOV(const ov::Tensor &tensor, cv::Mat &mat) {
```

Review comment:
It's `OV` backend, not `IE`
**File:** modules/gapi/src/backends/ov/govbackend.cpp
**Change Type:** modified
**Context:** PR #24938: G-API OV backend requires cv::MediaFrame
**Review Line:** 935

**Code Changes:**
```diff
-        if (isImage(matdesc, input_shape)) {
+        auto isMat = cv::util::holds_alternative<cv::GMatDesc>(input_meta);
+        auto prec  = isMat ? cv::util::get<cv::GMatDesc>(input_meta).depth : CV_8U;
+        m_ppp.input(input_name).tensor().set_element_type(toOV(prec));
+
+        const auto &matdesc   = isMat ? cv::util::get<cv::GMatDesc>(input_meta) : cv::GMatDesc();
+        const auto &framedesc = !isMat ? cv::util::get<cv::GFrameDesc>(input_meta) : cv::GFrameDesc();
+        if (isImage(input_meta, input_shape)) {
             // NB: Image case - all necessary preprocessng is configured automatically.
             GAPI_LOG_DEBUG(NULL, "OV Backend: Input: \"" << input_name << "\" is image.");
-            if (explicit_in_tensor_layout &&
```

Review comment:
Tried this, can't be done, it will cause an error due to different types of `cv::util::get<GMatDesc>(input_meta)` and `cv::util::get<GFrameDesc>(input_meta)`.
**File:** cmake/OpenCVFindIPP.cmake
**Change Type:** modified
**Context:** PR #25317: fix for IPP 2021.10 with OneAPI 2024
**Review Line:** 87

**Code Changes:**
```diff
@@ -84,7 +84,7 @@ endmacro()
 # This macro uses IPP_ROOT_DIR variable
 # TODO Cleanup code after ICV package stabilization
 macro(ipp_detect_version)
-  set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include)
+  get_filename_component(IPP_INCLUDE_DIRS ${IPP_VERSION_FILE} PATH)
 
   set(__msg)
   if(EXISTS ${IPP_ROOT_DIR}/include/ippicv_redefs.h)
@@ -271,7 +271,9 @@ if(NOT DEFINED IPPROOT)
 endif()
```

Review comment:
Check on the line 93 may fail and fail IPP detection completelly.
**File:** cmake/OpenCVFindIPP.cmake
**Change Type:** modified
**Context:** PR #25317: fix for IPP 2021.10 with OneAPI 2024
**Review Line:** 87

**Code Changes:**
```diff
@@ -84,7 +84,7 @@ endmacro()
 # This macro uses IPP_ROOT_DIR variable
 # TODO Cleanup code after ICV package stabilization
 macro(ipp_detect_version)
-  set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include)
+  get_filename_component(IPP_INCLUDE_DIRS ${IPP_VERSION_FILE} PATH)
 
   set(__msg)
   if(EXISTS ${IPP_ROOT_DIR}/include/ippicv_redefs.h)
@@ -271,7 +271,9 @@ if(NOT DEFINED IPPROOT)
 endif()
```

Review comment:
https://github.com/opencv/opencv/blob/c577b2440643bf98942cfd8c49478c545c3fa56b/cmake/OpenCVFindIPP.cmake#L90-L97 > In OneAPI 2024, `inlcude/ipp.h` is the only one that has not moved to the directory `include/ipp/`. ``` $ tree /opt/intel/oneapi/ipp/2021.11/include/ -L 2 /opt/intel/oneapi/ipp/2021.11/include/ ├── ipp │ ├── ippbase.h ... │ ├── ippvm.h │ ├── iw │ └── iw++ └── ipp.h ```
**File:** cmake/OpenCVFindIPP.cmake
**Change Type:** modified
**Context:** PR #25317: fix for IPP 2021.10 with OneAPI 2024
**Review Line:** 87

**Code Changes:**
```diff
@@ -84,7 +84,7 @@ endmacro()
 # This macro uses IPP_ROOT_DIR variable
 # TODO Cleanup code after ICV package stabilization
 macro(ipp_detect_version)
-  set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include)
+  get_filename_component(IPP_INCLUDE_DIRS ${IPP_VERSION_FILE} PATH)
 
   set(__msg)
   if(EXISTS ${IPP_ROOT_DIR}/include/ippicv_redefs.h)
@@ -271,7 +271,9 @@ if(NOT DEFINED IPPROOT)
 endif()
```

Review comment:
Well, top-level ipp.h is just a shim: ``` #include <ipp/ipp.h> ```
**File:** modules/features2d/test/ocl/test_feature2d.cpp
**Change Type:** modified
**Context:** PR #25424: features2d: reduce accuracy test avg memory consumption - **Merge with contrib**: https://github.com/opencv/opencv_contrib/pull/3722 I've o...
**Review Line:** 19

**Code Changes:**
```diff
 #ifdef HAVE_OPENCL
 
@@ -16,7 +17,7 @@ namespace ocl {
     "../stitching/a3.png", \
     "../stitching/s2.jpg")
 
-PARAM_TEST_CASE(Feature2DFixture, Ptr<Feature2D>, std::string)
+PARAM_TEST_CASE(Feature2DFixture, std::function<Ptr<Feature2D>()>, std::string)
 {
     std::string filename;
     Mat image, descriptors;
```

Review comment:
I got the idea, to make detector initialization lazy and move it from GTest cases generator inside the test body. I propose to add comment with the solution description. Without the memory consumption knowledge the test design looks very strange and ambiguous.
**File:** modules/features2d/test/test_descriptors_invariance.impl.hpp
**Change Type:** modified
**Context:** PR #25424: features2d: reduce accuracy test avg memory consumption - **Merge with contrib**: https://github.com/opencv/opencv_contrib/pull/3722 I've o...
**Review Line:** 11

**Code Changes:**
```diff
+#include <functional>
 
 namespace opencv_test { namespace {
 
 #define SHOW_DEBUG_LOG 1
 
-typedef tuple<std::string, Ptr<FeatureDetector>, Ptr<DescriptorExtractor>, float>
+// NOTE: using factory function (function<Ptr<Type>()>) instead of object instance (Ptr<Type>) as a
+// test parameter, because parameters exist during whole test program run and consume a lot of memory
+typedef std::function<cv::Ptr<cv::FeatureDetector>()> DetectorFactory;
+typedef std::function<cv::Ptr<cv::DescriptorExtractor>()> ExtractorFactory;
```

Review comment:
Please add comment with design decision here too.
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.

**Code Changes:**
```diff
@@ -603,4 +603,34 @@ INSTANTIATE_TEST_CASE_P(/*nothting*/, Layer_FullyConnected_Test,
                             std::vector<int>({4})
 ));
 
+typedef testing::TestWithParam<tuple<std::vector<int>>> Layer_Const_Test;
+TEST_P(Layer_Const_Test, Accuracy_01D)
+{
+    std::vector<int> input_shape = get<0>(GetParam());
+
+    LayerParams lp;
```

Review comment:
Easier to make shapes as parameter
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.
**Review Line:** 626

**Code Changes:**
```diff
+
+    std::vector<Mat> inputs; // No inputs are needed for a ConstLayer
+    std::vector<Mat> outputs;
+    runLayer(layer, inputs, outputs);
+    ASSERT_EQ(outputs.size(), 1);
+    ASSERT_EQ(shape(output_ref), shape(outputs[0]));
+    normAssert(output_ref, outputs[0]);
+}
+INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Const_Test, testing::Values(
+    std::vector<int>({}),
+    std::vector<int>({1}),
```

Review comment:
It is redundant. Shapes are already checked in `normAssert`.
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.

**Code Changes:**
```diff
@@ -603,4 +603,34 @@ INSTANTIATE_TEST_CASE_P(/*nothting*/, Layer_FullyConnected_Test,
                             std::vector<int>({4})
 ));
 
+typedef testing::TestWithParam<tuple<std::vector<int>>> Layer_Const_Test;
+TEST_P(Layer_Const_Test, Accuracy_01D)
+{
+    std::vector<int> input_shape = get<0>(GetParam());
+
+    LayerParams lp;
```

Review comment:
```suggestion constBlob = Mat(input_shape.size(), input_shape.data(), CV_32F); ```
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.

**Code Changes:**
```diff
@@ -603,4 +603,34 @@ INSTANTIATE_TEST_CASE_P(/*nothting*/, Layer_FullyConnected_Test,
                             std::vector<int>({4})
 ));
 
+typedef testing::TestWithParam<tuple<std::vector<int>>> Layer_Const_Test;
+TEST_P(Layer_Const_Test, Accuracy_01D)
+{
+    std::vector<int> input_shape = get<0>(GetParam());
+
+    LayerParams lp;
```

Review comment:
I have tried it, it does too work for `0D` case. Mat created like that can not filled with random value. I know it look ugly, but lets keep like it is
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.

**Code Changes:**
```diff
@@ -603,4 +603,34 @@ INSTANTIATE_TEST_CASE_P(/*nothting*/, Layer_FullyConnected_Test,
                             std::vector<int>({4})
 ));
 
+typedef testing::TestWithParam<tuple<std::vector<int>>> Layer_Const_Test;
+TEST_P(Layer_Const_Test, Accuracy_01D)
+{
+    std::vector<int> input_shape = get<0>(GetParam());
+
+    LayerParams lp;
```

Review comment:
Make test name more representative to 0D/1D subset
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.
**Review Line:** 624

**Code Changes:**
```diff
+    lp.blobs.push_back(constBlob);
+    Ptr<Layer> layer = ConstLayer::create(lp);
+
+    std::vector<Mat> inputs; // No inputs are needed for a ConstLayer
+    std::vector<Mat> outputs;
+    runLayer(layer, inputs, outputs);
+    ASSERT_EQ(outputs.size(), 1);
+    ASSERT_EQ(shape(output_ref), shape(outputs[0]));
+    normAssert(output_ref, outputs[0]);
+}
+INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Const_Test, testing::Values(
```

Review comment:
insert `ASSERT_EQ(outputs.size(), 1)`
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.
**Review Line:** 626

**Code Changes:**
```diff
+
+    std::vector<Mat> inputs; // No inputs are needed for a ConstLayer
+    std::vector<Mat> outputs;
+    runLayer(layer, inputs, outputs);
+    ASSERT_EQ(outputs.size(), 1);
+    ASSERT_EQ(shape(output_ref), shape(outputs[0]));
+    normAssert(output_ref, outputs[0]);
+}
+INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Const_Test, testing::Values(
+    std::vector<int>({}),
+    std::vector<int>({1}),
```

Review comment:
This is not redundant. normAssert does not check for shapes, and for that reason was an explicit check introduced. Otherwise layer might outputs incorrect shape
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.
**Review Line:** 624

**Code Changes:**
```diff
+    lp.blobs.push_back(constBlob);
+    Ptr<Layer> layer = ConstLayer::create(lp);
+
+    std::vector<Mat> inputs; // No inputs are needed for a ConstLayer
+    std::vector<Mat> outputs;
+    runLayer(layer, inputs, outputs);
+    ASSERT_EQ(outputs.size(), 1);
+    ASSERT_EQ(shape(output_ref), shape(outputs[0]));
+    normAssert(output_ref, outputs[0]);
+}
+INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Const_Test, testing::Values(
```

Review comment:
Signature for `_EQ` is `ASSERT_EQ(expected_reference, actual_result);`. Correct order of parameters are required to emit valid error messages. Reference: https://github.com/opencv/opencv/blob/4.0.0/modules/ts/include/opencv2/ts/ts_gtest.h#L8196-L8200 ``` GTEST_API_ AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const std::string& expected_value, const std::string& actual_value, bool ignoring_case); ```
**File:** modules/dnn/test/test_layers_1d.cpp
**Change Type:** modified
**Context:** PR #25231: Constant layer 0/1D test.
**Review Line:** 625

**Code Changes:**
```diff
+    Ptr<Layer> layer = ConstLayer::create(lp);
+
+    std::vector<Mat> inputs; // No inputs are needed for a ConstLayer
+    std::vector<Mat> outputs;
+    runLayer(layer, inputs, outputs);
+    ASSERT_EQ(outputs.size(), 1);
+    ASSERT_EQ(shape(output_ref), shape(outputs[0]));
+    normAssert(output_ref, outputs[0]);
+}
+INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Const_Test, testing::Values(
+    std::vector<int>({}),
```

Review comment:
Invalid call due to prior comments.
**File:** samples/dnn/colorization.cpp
**Change Type:** modified
**Context:** PR #25433: Replaced caffe model with onnx for colorization sample

**Code Changes:**
```diff
@@ -1,128 +1,117 @@
 // This file is part of OpenCV project.
 // It is subject to the license terms in the LICENSE file found in the top-level directory
 // of this distribution and at http://opencv.org/license.html
+// To download the onnx model, see: https://storage.googleapis.com/ailia-models/colorization/colorizer.onnx
 
 #include <opencv2/dnn.hpp>
 #include <opencv2/imgproc.hpp>
+#include <opencv2/imgcodecs.hpp>
+#include "common.hpp"
```

Review comment:
You can use `IMREAD_GRAYSCALE` option for `imread` and re-use lena.jpg image. No need to add the new file.
**File:** samples/dnn/colorization.cpp
**Change Type:** modified
**Context:** PR #25433: Replaced caffe model with onnx for colorization sample

**Code Changes:**
```diff
@@ -1,128 +1,117 @@
 // This file is part of OpenCV project.
 // It is subject to the license terms in the LICENSE file found in the top-level directory
 // of this distribution and at http://opencv.org/license.html
+// To download the onnx model, see: https://storage.googleapis.com/ailia-models/colorization/colorizer.onnx
 
 #include <opencv2/dnn.hpp>
 #include <opencv2/imgproc.hpp>
+#include <opencv2/imgcodecs.hpp>
+#include "common.hpp"
```

Review comment:
I propose to implement the same options for DNN backend selection like in https://github.com/opencv/opencv/blob/5.x/samples/dnn/classification.cpp. I mean back-end, target, etc.
**File:** samples/dnn/colorization.cpp
**Change Type:** modified
**Context:** PR #25433: Replaced caffe model with onnx for colorization sample

**Code Changes:**
```diff
@@ -1,128 +1,117 @@
 // This file is part of OpenCV project.
 // It is subject to the license terms in the LICENSE file found in the top-level directory
 // of this distribution and at http://opencv.org/license.html
+// To download the onnx model, see: https://storage.googleapis.com/ailia-models/colorization/colorizer.onnx
 
 #include <opencv2/dnn.hpp>
 #include <opencv2/imgproc.hpp>
+#include <opencv2/imgcodecs.hpp>
+#include "common.hpp"
```

Review comment:
why not use baboon.jpg, messi5.jpg building.jpg?
**File:** samples/dnn/colorization.cpp
**Change Type:** modified
**Context:** PR #25433: Replaced caffe model with onnx for colorization sample

**Code Changes:**
```diff
@@ -1,128 +1,117 @@
 // This file is part of OpenCV project.
 // It is subject to the license terms in the LICENSE file found in the top-level directory
 // of this distribution and at http://opencv.org/license.html
+// To download the onnx model, see: https://storage.googleapis.com/ailia-models/colorization/colorizer.onnx
 
 #include <opencv2/dnn.hpp>
 #include <opencv2/imgproc.hpp>
+#include <opencv2/imgcodecs.hpp>
+#include "common.hpp"
```

Review comment:
they should work too.
**File:** modules/imgproc/src/smooth.dispatch.cpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -683,8 +683,22 @@ void GaussianBlur(InputArray _src, OutputArray _dst, Size ksize,
 
             if (src.data == dst.data)
                 src = src.clone();
+
+            if ((sigma1 == 0.0) && (sigma2 == 0.0) && (ksize.height == ksize.width))
+            {
+                Point ofs;
+                Size wsz(src.cols, src.rows);
+                Mat src2 = src;
```

Review comment:
Again, HAL should not be called before OpenCL (line 663) according to existed "Transparent API" guidelines. OpenCL may "fail" (even with `useOpenCL`) and we still want to call the fastest CPU implementation.
**File:** modules/imgproc/src/smooth.dispatch.cpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -683,8 +683,22 @@ void GaussianBlur(InputArray _src, OutputArray _dst, Size ksize,
 
             if (src.data == dst.data)
                 src = src.clone();
+
+            if ((sigma1 == 0.0) && (sigma2 == 0.0) && (ksize.height == ksize.width))
+            {
+                Point ofs;
+                Size wsz(src.cols, src.rows);
+                Mat src2 = src;
```

Review comment:
remove border isolated.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -855,7 +855,7 @@ inline int hal_ni_boxFilter(const uchar* src_data, size_t src_step, uchar* dst_d
 //! @endcond
 
 /**
-   @brief Blurs an image using a Gaussian filter.
+   @brief Blurs an image using a generic Gaussian filter.
    @param src_data Source image data
    @param src_step Source image step
    @param dst_data Destination image data
@@ -880,6 +880,29 @@ inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* ds
```

Review comment:
1. ksize: `size_t => int` to match `width` and `height` types 2. add `int roi_x, int roi_y, int roi_width, int roi_height` to support ROI and external multi-threading 3. add `const uchar* border_value`
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -855,7 +855,7 @@ inline int hal_ni_boxFilter(const uchar* src_data, size_t src_step, uchar* dst_d
 //! @endcond
 
 /**
-   @brief Blurs an image using a Gaussian filter.
+   @brief Blurs an image using a generic Gaussian filter.
    @param src_data Source image data
    @param src_step Source image step
    @param dst_data Destination image data
@@ -880,6 +880,29 @@ inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* ds
```

Review comment:
classic gaussianBlur uses size_t for kernel size too: ``` inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* dst_data, size_t dst_step, int width, int height, int depth, int cn, size_t margin_left, size_t margin_top, size_t margin_right, size_t margin_bottom, size_t ksize_width, size_t ksize_height, double sigmaX, double sigmaY, int border_type) { return CV_HAL_ERROR_NOT_IMPLEMENTED; } ```
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -855,7 +855,7 @@ inline int hal_ni_boxFilter(const uchar* src_data, size_t src_step, uchar* dst_d
 //! @endcond
 
 /**
-   @brief Blurs an image using a Gaussian filter.
+   @brief Blurs an image using a generic Gaussian filter.
    @param src_data Source image data
    @param src_step Source image step
    @param dst_data Destination image data
@@ -880,6 +880,29 @@ inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* ds
```

Review comment:
also, why word "Symmetric" in the name? All Gaussian kernels are symmetric by definition
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -855,7 +855,7 @@ inline int hal_ni_boxFilter(const uchar* src_data, size_t src_step, uchar* dst_d
 //! @endcond
 
 /**
-   @brief Blurs an image using a Gaussian filter.
+   @brief Blurs an image using a generic Gaussian filter.
    @param src_data Source image data
    @param src_step Source image step
    @param dst_data Destination image data
@@ -880,6 +880,29 @@ inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* ds
```

Review comment:
Let it be Binomial
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25397: Added HAL function for popular bit-exact branch of GaussianBlur with sigma=0

**Code Changes:**
```diff
@@ -855,7 +855,7 @@ inline int hal_ni_boxFilter(const uchar* src_data, size_t src_step, uchar* dst_d
 //! @endcond
 
 /**
-   @brief Blurs an image using a Gaussian filter.
+   @brief Blurs an image using a generic Gaussian filter.
    @param src_data Source image data
    @param src_step Source image step
    @param dst_data Destination image data
@@ -880,6 +880,29 @@ inline int hal_ni_gaussianBlur(const uchar* src_data, size_t src_step, uchar* ds
```

Review comment:
"add const uchar* border_value" - I'll do with dedicated PR. Need to change public API first.
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #25399: New HAL API for remap

**Code Changes:**
```diff
@@ -1799,7 +1799,6 @@ void cv::remap( InputArray _src, OutputArray _dst,
     _dst.create( map1.size(), src.type() );
     Mat dst = _dst.getMat();
 
-
     CV_OVX_RUN(
         src.type() == CV_8UC1 && dst.type() == CV_8UC1 &&
         !ovx::skipSmallImages<VX_KERNEL_REMAP>(src.cols, src.rows) &&
@@ -1816,6 +1815,12 @@ void cv::remap( InputArray _src, OutputArray _dst,
     if( dst.data == src.data )
```

Review comment:
In general HAL API should be called unconditionally. Or we need to rename API and apply `32f` suffix.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25399: New HAL API for remap

**Code Changes:**
```diff
@@ -298,6 +298,36 @@ inline int hal_ni_warpPerspective(int src_type, const uchar *src_data, size_t sr
 #define cv_hal_warpPerspective hal_ni_warpPerspective
 //! @endcond
 
+/**
+   @brief hal_remap with floating point maps
+   @param src_type source and destination image type
+   @param src_data source image data
+   @param src_step source image step
+   @param src_width source image width
```

Review comment:
1. borderValue should be changed to `const uchar* border_value` and assume that caller (OpenCV) converted border_value to the proper type. 2. borderType uses different naming scheme from other parameters. Should be `border_type` perhaps 3. I don't see `depth` and `nchannels` parameters, like in GaussianBlur etc.
**File:** modules/imgproc/src/hal_replacement.hpp
**Change Type:** modified
**Context:** PR #25399: New HAL API for remap

**Code Changes:**
```diff
@@ -298,6 +298,36 @@ inline int hal_ni_warpPerspective(int src_type, const uchar *src_data, size_t sr
 #define cv_hal_warpPerspective hal_ni_warpPerspective
 //! @endcond
 
+/**
+   @brief hal_remap with floating point maps
+   @param src_type source and destination image type
+   @param src_data source image data
+   @param src_step source image step
+   @param src_width source image width
```

Review comment:
borderValue should be changed to const uchar* border_value and assume that caller (OpenCV) converted border_value to the proper type. - It's incompatible with cv::Scalar. It's polymorphic.
**File:** modules/photo/test/test_inpaint.cpp
**Change Type:** modified
**Context:** PR #25402: Handle top and left border masked pixels correctly in inpaint method

**Code Changes:**
```diff
@@ -157,4 +157,30 @@ TEST(Photo_InpaintBorders, regression)
     ASSERT_TRUE(countNonZero(diff) == 0);
 }
 
+typedef testing::TestWithParam<tuple<perf::MatType>> Photo_InpaintSmallBorders;
+
+TEST_P(Photo_InpaintSmallBorders, regression)
+{
+    int type = get<0>(GetParam());
+    Mat img(5, 5, type, Scalar::all(128));
```

Review comment:
``` Mat img(5, 5, CV_8U, Scalar::all(128)); img(Rect(1, 1, 3, 3)) = 0; Mat mask = Mat::zeros(5, 5, CV_8U); mask(Rect(1, 1, 3, 3)) = 255; Mat expected(5, 5, img.type(), Scalar::all(128)); ```