nareshmlx/opencv-pr huggingface dataset:
**File:** modules/3d/src/fisheye.cpp
**Change Type:** added
**Context:** PR #24084: Finalize calib3d module split for fisheye part
**Review Line:** 5

**Code Changes:**
```diff
@@ -0,0 +1,596 @@
+// 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.
+
+#include "precomp.hpp"
+
+namespace cv {
+
+struct JacobianRow
+{
```

Review comment:
the license is missing
**File:** modules/3d/test/test_fisheye.cpp
**Change Type:** added
**Context:** PR #24084: Finalize calib3d module split for fisheye part
**Review Line:** 5

**Code Changes:**
```diff
@@ -0,0 +1,388 @@
+// 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.
+
+#include "test_precomp.hpp"
+#include <opencv2/ts/cuda_test.hpp> // EXPECT_MAT_NEAR
+#include "opencv2/videoio.hpp"
+
+namespace opencv_test { namespace {
+
```

Review comment:
the license is missing
**File:** modules/stereo/test/test_geometry.cpp
**Change Type:** added
**Context:** PR #24084: Finalize calib3d module split for fisheye part
**Review Line:** 5

**Code Changes:**
```diff
@@ -0,0 +1,347 @@
+// 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.
+
+#include "test_precomp.hpp"
+#include <opencv2/ts/cuda_test.hpp> // EXPECT_MAT_NEAR
+#include "opencv2/3d.hpp"
+#include <opencv2/core/utils/logger.hpp>
+
+namespace opencv_test { namespace {
```

Review comment:
the license is missing
**File:** modules/python/src2/gen2.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -1,16 +1,34 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
-import hdr_parser, sys, re, os
+import hdr_parser, sys, re
 from string import Template
-from pprint import pprint
 from collections import namedtuple
+from itertools import chain
```

Review comment:
There is an existing class in OpenCV Python -> `cv2.UMat` so this type alias is redundant.
**File:** modules/python/python_loader.cmake
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -45,8 +45,6 @@ foreach(fname ${PYTHON_LOADER_FILES})
   endif()
 endforeach()
 
-
-
 if(WIN32)
   if(CMAKE_GENERATOR MATCHES "Visual Studio")
     list(APPEND CMAKE_PYTHON_BINARIES_PATH "'${EXECUTABLE_OUTPUT_PATH}/Release'")  # TODO: CMAKE_BUILD_TYPE is not defined
@@ -126,3 +124,20 @@ if(NOT "${OPENCV_PYTHON_EXTRA_MODULES_PATH}" STREQUAL "")
```

Review comment:
`TOUCH` is available only since CMake 3.12. Prefer to use version with wider compatibility: ```cmake execute_process( COMMAND ${CMAKE_COMMAND} -E touch "py.typed" WORKING_DIRECTORY "${__loader_path}/cv2" ) ```
**File:** modules/python/src2/gen2.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -1,16 +1,34 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
-import hdr_parser, sys, re, os
+import hdr_parser, sys, re
 from string import Template
-from pprint import pprint
 from collections import namedtuple
+from itertools import chain
```

Review comment:
dont think you need to import Dict "use built-in generics (list, dict, tuple, set), instead of importing them from typing, except in type aliases, in base classes, and for arbitrary length tuples (Tuple[int, ...]);" https://github.com/python/typeshed/blob/master/CONTRIBUTING.md
**File:** modules/python/src2/gen2.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -1,16 +1,34 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
-import hdr_parser, sys, re, os
+import hdr_parser, sys, re
 from string import Template
-from pprint import pprint
 from collections import namedtuple
+from itertools import chain
```

Review comment:
This. Same thing for `Union` and `Optional`: you should use `|` instead. Collections (Callable, Sequence, Iterable), should be imported from `collections.abc`.
**File:** modules/python/src2/gen2.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -1,16 +1,34 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
-import hdr_parser, sys, re, os
+import hdr_parser, sys, re
 from string import Template
-from pprint import pprint
 from collections import namedtuple
+from itertools import chain
```

Review comment:
This patch targeting Python 3.6+ since it is default on many platforms in production.
**File:** modules/python/src2/gen2.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -1,16 +1,34 @@
 #!/usr/bin/env python
 
 from __future__ import print_function
-import hdr_parser, sys, re, os
+import hdr_parser, sys, re
 from string import Template
-from pprint import pprint
 from collections import namedtuple
+from itertools import chain
```

Review comment:
> This patch targeting Python 3.6+ since it is default on many platforms in production. Stub files are not restricted to a python version, since they are never executed. You should always use the most modern syntax supported by type-checkers. That's also why `from __future__ import annotations` is a useless statement in stubs. Type-checkers also don't actively support EOL versions. That being said, mypy *does* have some bugs left with pipe unions when checking against python 3.7 .
**File:** modules/python/src2/copy_typings_stubs_on_success.py
**Change Type:** added
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -0,0 +1,45 @@
+import argparse
+import warnings
+import os
+import sys
+
+if sys.version_info >= (3, 8, ):
+    # shutil.copytree received the `dirs_exist_ok` parameter
+    from functools import partial
+    import shutil
```

Review comment:
`distutils` is deprecated: https://peps.python.org/pep-0632/
**File:** modules/python/bindings/CMakeLists.txt
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -76,18 +76,25 @@ set(cv2_generated_files
 
 string(REPLACE ";" "\n" opencv_hdrs_ "${opencv_hdrs}")
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs_}")
+file(GLOB_RECURSE typing_stubs_generation_files "${PYTHON_SOURCE_DIR}/src2/typing_stubs_generation/*.py")
 add_custom_command(
     OUTPUT ${cv2_generated_files}
     COMMAND "${PYTHON_DEFAULT_EXECUTABLE}" "${PYTHON_SOURCE_DIR}/src2/gen2.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
     DEPENDS "${PYTHON_SOURCE_DIR}/src2/gen2.py"
             "${PYTHON_SOURCE_DIR}/src2/hdr_parser.py"
```

Review comment:
> python_loader This path is handled by `modules/python/python_loader.cmake` script. `python_loader.cmake` controls: - [ ] installation rules (currently missing in this PR), including sub-modules - [ ] support for standalone mode of Python bindings ([example](http://pullrequest.opencv.org/buildbot/builders/4_x_winpack-build-win64-vc14/builds/100022))
**File:** modules/python/package/setup.py
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation
**Review Line:** 5

**Code Changes:**
```diff
-import platform
 import setuptools
 
-SCRIPT_DIR=os.path.dirname(os.path.abspath(__file__))
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+
+
+def collect_module_typing_stub_files(root_module_path):
+    stub_files = []
+    for module_path, _, files in os.walk(root_module_path):
```

Review comment:
To succeed with merge we need to be ready for features on 5.x branch. The source of problem is here: #19156 Possible way 1: - backport from 5.x this feature (only python part) and add some standalone test for python bindings - update PR to handle "named arguments" Possible way 2: - open a second PR for 5.x branch with typing stubs update which handles "named arguments" Cons 2: - synchronization issues between 4.x and 5.x PRs - no Python PRs during the "Merge 4.x" as changes from 4.x are ignored (changes from .x PR are used). Cons 1: - extra work to add "standalone" Python binding test (without modification of OpenCV C++ API).
**File:** modules/python/bindings/CMakeLists.txt
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -76,18 +76,25 @@ set(cv2_generated_files
 
 string(REPLACE ";" "\n" opencv_hdrs_ "${opencv_hdrs}")
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs_}")
+file(GLOB_RECURSE typing_stubs_generation_files "${PYTHON_SOURCE_DIR}/src2/typing_stubs_generation/*.py")
 add_custom_command(
     OUTPUT ${cv2_generated_files}
     COMMAND "${PYTHON_DEFAULT_EXECUTABLE}" "${PYTHON_SOURCE_DIR}/src2/gen2.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
     DEPENDS "${PYTHON_SOURCE_DIR}/src2/gen2.py"
             "${PYTHON_SOURCE_DIR}/src2/hdr_parser.py"
```

Review comment:
Can you elaborate a bit more about > support for standalone mode of Python bindings I'm not familiar with OpenCV Python standalone build
**File:** modules/python/bindings/CMakeLists.txt
**Change Type:** modified
**Context:** PR #20370: Python typing stub generation

**Code Changes:**
```diff
@@ -76,18 +76,25 @@ set(cv2_generated_files
 
 string(REPLACE ";" "\n" opencv_hdrs_ "${opencv_hdrs}")
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs_}")
+file(GLOB_RECURSE typing_stubs_generation_files "${PYTHON_SOURCE_DIR}/src2/typing_stubs_generation/*.py")
 add_custom_command(
     OUTPUT ${cv2_generated_files}
     COMMAND "${PYTHON_DEFAULT_EXECUTABLE}" "${PYTHON_SOURCE_DIR}/src2/gen2.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
     DEPENDS "${PYTHON_SOURCE_DIR}/src2/gen2.py"
             "${PYTHON_SOURCE_DIR}/src2/hdr_parser.py"
```

Review comment:
OpenCV Python standalone build used to build binding without full OpenCV project (through using `find_package(OpenCV)`): - https://github.com/opencv/opencv/blame/4.7.0/modules/python/standalone.cmake
**File:** modules/calib/src/multiview_calibration.cpp
**Change Type:** modified
**Context:** PR #23957: add error in the first camera to the cost function

**Code Changes:**
```diff
@@ -328,12 +328,13 @@ static void optimizeLM (std::vector<double> &param, const RobustFunction &robust
         cnt_valid_frame = 0;
         for (int i = 0; i < NUM_FRAMES; i++ ) {
             if (!valid_frames[i]) continue;
-            for (int k = 1; k < NUM_CAMERAS; k++ ) { // skip first camera as there is nothing to optimize
+            for (int k = 0; k < NUM_CAMERAS; k++ ) {
+                // Pose for camera #0 is not optimized, but it's re-projection error is taken into account
                 if (!detection_mask_mat[k][i]) continue;
                 const int cam_idx = (k-1)*6; // camera extrinsics
-                const auto * const pose_k = param_p + cam_idx;
```

Review comment:
if not the first frame -> if not the first camera
**File:** modules/calib/src/multiview_calibration.cpp
**Change Type:** modified
**Context:** PR #23957: add error in the first camera to the cost function

**Code Changes:**
```diff
@@ -328,12 +328,13 @@ static void optimizeLM (std::vector<double> &param, const RobustFunction &robust
         cnt_valid_frame = 0;
         for (int i = 0; i < NUM_FRAMES; i++ ) {
             if (!valid_frames[i]) continue;
-            for (int k = 1; k < NUM_CAMERAS; k++ ) { // skip first camera as there is nothing to optimize
+            for (int k = 0; k < NUM_CAMERAS; k++ ) {
+                // Pose for camera #0 is not optimized, but it's re-projection error is taken into account
                 if (!detection_mask_mat[k][i]) continue;
                 const int cam_idx = (k-1)*6; // camera extrinsics
-                const auto * const pose_k = param_p + cam_idx;
```

Review comment:
The comment is not clear. I propose to state: Pose for camera #0 is not optimized (coordinates center), but it's re-projection error is taken into account.
**File:** modules/videoio/src/cap_v4l.cpp
**Change Type:** modified
**Context:** PR #18498: Add V4L2_PIX_FMT_Y16_BE pixel format

**Code Changes:**
```diff
@@ -268,6 +268,14 @@ typedef uint32_t __u32;
 #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ')
 #endif
 
+#ifndef V4L2_PIX_FMT_Y16
+#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ')
+#endif
+
+#ifndef V4L2_PIX_FMT_Y16_BE
+#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ')
```

Review comment:
> `temp2.ForEach` Extraction through `cv::split()` from `CV_8UC2` should perform better.
**File:** modules/videoio/test/test_precomp.hpp
**Change Type:** modified
**Context:** PR #18498: Add V4L2_PIX_FMT_Y16_BE pixel format
**Review Line:** 64

**Code Changes:**
```diff
 inline std::string fourccToStringSafe(int fourcc)
 {
     std::string res = fourccToString(fourcc);
-    std::replace_if(res.begin(), res.end(), [](uint8_t c){ return c < '0' || c > 'z'; }, '_');
+    // TODO: return hex values for invalid characters
+    std::transform(res.begin(), res.end(), res.begin(), [](uint8_t c) { return (c >= '0' && c <= 'z') ? c : (c == ' ' ? '_' : 'x'); });
     return res;
 }
 
```

Review comment:
There is build regression with MSVS2019/2017: https://pullrequest.opencv.org/buildbot/builders/4_x-win64-vc16/builds/100191
**File:** modules/videoio/test/test_precomp.hpp
**Change Type:** modified
**Context:** PR #18498: Add V4L2_PIX_FMT_Y16_BE pixel format
**Review Line:** 64

**Code Changes:**
```diff
 inline std::string fourccToStringSafe(int fourcc)
 {
     std::string res = fourccToString(fourcc);
-    std::replace_if(res.begin(), res.end(), [](uint8_t c){ return c < '0' || c > 'z'; }, '_');
+    // TODO: return hex values for invalid characters
+    std::transform(res.begin(), res.end(), res.begin(), [](uint8_t c) { return (c >= '0' && c <= 'z') ? c : (c == ' ' ? '_' : 'x'); });
     return res;
 }
 
```

Review comment:
Related CI issue: https://github.com/opencv/ci-gha-workflow/issues/108
**File:** modules/videoio/test/test_precomp.hpp
**Change Type:** modified
**Context:** PR #18498: Add V4L2_PIX_FMT_Y16_BE pixel format
**Review Line:** 64

**Code Changes:**
```diff
 inline std::string fourccToStringSafe(int fourcc)
 {
     std::string res = fourccToString(fourcc);
-    std::replace_if(res.begin(), res.end(), [](uint8_t c){ return c < '0' || c > 'z'; }, '_');
+    // TODO: return hex values for invalid characters
+    std::transform(res.begin(), res.end(), res.begin(), [](uint8_t c) { return (c >= '0' && c <= 'z') ? c : (c == ' ' ? '_' : 'x'); });
     return res;
 }
 
```

Review comment:
Created PR #24087
**File:** modules/java/jar/CMakeLists.txt
**Change Type:** modified
**Context:** PR #23724: Build Java without ANT
**Review Line:** 76

**Code Changes:**
```diff
+  )
+
+  list(APPEND CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 ${OPENCV_EXTRA_JAVA_COMPILE_FLAGS})
+
+  add_jar(${the_module}_jar
+          SOURCES "@${OPENCV_JAVA_DIR}/java_sources"
+          MANIFEST "${OPENCV_JAVA_DIR}/MANIFEST.MF"
+          OUTPUT_NAME "${JAR_NAME_WE}"
+          OUTPUT_DIR "${OPENCV_JAR_DIR}")
+
+  add_dependencies(${the_module}_jar ${the_module}_jar_sources)
```

Review comment:
requires CMake 3.4, so probably need to add `cmake_minimum_required`?
**File:** modules/java/jar/CMakeLists.txt
**Change Type:** modified
**Context:** PR #23724: Build Java without ANT
**Review Line:** 76

**Code Changes:**
```diff
+  )
+
+  list(APPEND CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 ${OPENCV_EXTRA_JAVA_COMPILE_FLAGS})
+
+  add_jar(${the_module}_jar
+          SOURCES "@${OPENCV_JAVA_DIR}/java_sources"
+          MANIFEST "${OPENCV_JAVA_DIR}/MANIFEST.MF"
+          OUTPUT_NAME "${JAR_NAME_WE}"
+          OUTPUT_DIR "${OPENCV_JAR_DIR}")
+
+  add_dependencies(${the_module}_jar ${the_module}_jar_sources)
```

Review comment:
OpenCV 4.x requires CMake 3.5.1 (base version for Ubuntu 16.04)
**File:** modules/dnn/src/opencl/activations.cl
**Change Type:** modified
**Context:** PR #24056: PReLU with element-wise scales

**Code Changes:**
```diff
@@ -73,14 +73,23 @@ __kernel void ReLU6Forward(const int count, __global const T* in, __global T* ou
   }
 }
 
+__kernel void ChannelsPReLUForward(const int count, const int channels, const int plane_size,
+                                   __global const T* in, __global T* out,
+                                   __global const KERNEL_ARG_DTYPE* slope_data)
+{
+  int index = get_global_id(0);
+  int c = (index / plane_size) % channels;
```

Review comment:
formatting issue.
**File:** modules/dnn/src/opencl/activations.cl
**Change Type:** modified
**Context:** PR #24056: PReLU with element-wise scales

**Code Changes:**
```diff
@@ -73,14 +73,23 @@ __kernel void ReLU6Forward(const int count, __global const T* in, __global T* ou
   }
 }
 
+__kernel void ChannelsPReLUForward(const int count, const int channels, const int plane_size,
+                                   __global const T* in, __global T* out,
+                                   __global const KERNEL_ARG_DTYPE* slope_data)
+{
+  int index = get_global_id(0);
+  int c = (index / plane_size) % channels;
```

Review comment:
formatting issue
**File:** modules/dnn/src/layers/elementwise_layers.cpp
**Change Type:** modified
**Context:** PR #24056: PReLU with element-wise scales

**Code Changes:**
```diff
@@ -138,7 +138,7 @@ class ElementWiseLayer : public Func::Layer
             {
                 const float* srcptr = src_->ptr<float>(i) + stripeStart;
                 float* dstptr = dst_->ptr<float>(i) + stripeStart;
-                func_->apply(srcptr, dstptr, (int)(stripeEnd - stripeStart), planeSize, 0, outCn);
+                func_->apply(srcptr, dstptr, stripeStart, (int)(stripeEnd - stripeStart), planeSize, 0, outCn);
             }
         }
     };
@@ -268,7 +268,7 @@ class ElementWiseLayer : public Func::Layer
```

Review comment:
I propose to restore new parameter name and use `CV_UNUSED()` for it. It makes code cleaner for readers.
**File:** modules/dnn/src/layers/elementwise_layers.cpp
**Change Type:** modified
**Context:** PR #24056: PReLU with element-wise scales

**Code Changes:**
```diff
@@ -138,7 +138,7 @@ class ElementWiseLayer : public Func::Layer
             {
                 const float* srcptr = src_->ptr<float>(i) + stripeStart;
                 float* dstptr = dst_->ptr<float>(i) + stripeStart;
-                func_->apply(srcptr, dstptr, (int)(stripeEnd - stripeStart), planeSize, 0, outCn);
+                func_->apply(srcptr, dstptr, stripeStart, (int)(stripeEnd - stripeStart), planeSize, 0, outCn);
             }
         }
     };
@@ -268,7 +268,7 @@ class ElementWiseLayer : public Func::Layer
```

Review comment:
Sure, fixed that
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #22700: log a debug message if a capture backend is generally available but isn't capabable of a capture mode

**Code Changes:**
```diff
@@ -188,14 +188,25 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
             else
             {
                 CV_CAPTURE_LOG_DEBUG(NULL,
-                                     cv::format("VIDEOIO(%s): backend is not available "
+                                    cv::format("VIDEOIO(%s): backend is not available "
                                                 "(plugin is missing, or can't be loaded due "
                                                 "dependencies or it is not compatible)",
-                                                 info.name));
+                                                info.name));
```

Review comment:
I believe `CV_LOG_WARNING` could be used in this case directly (without preconditions).
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #22700: log a debug message if a capture backend is generally available but isn't capabable of a capture mode

**Code Changes:**
```diff
@@ -188,14 +188,25 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
             else
             {
                 CV_CAPTURE_LOG_DEBUG(NULL,
-                                     cv::format("VIDEOIO(%s): backend is not available "
+                                    cv::format("VIDEOIO(%s): backend is not available "
                                                 "(plugin is missing, or can't be loaded due "
                                                 "dependencies or it is not compatible)",
-                                                 info.name));
+                                                info.name));
```

Review comment:
Instead of scanning in multiple places we could add internal call: `const VideoBackendInfo& cv::videoio_registry::getBackendInfo(VideoCaptureAPIs api)` (similar to `cv::videoio_registry::getBackendName()` but non-public). And then use `VideoBackendInfo::mode` field directly.
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #22700: log a debug message if a capture backend is generally available but isn't capabable of a capture mode

**Code Changes:**
```diff
@@ -188,14 +188,25 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
             else
             {
                 CV_CAPTURE_LOG_DEBUG(NULL,
-                                     cv::format("VIDEOIO(%s): backend is not available "
+                                    cv::format("VIDEOIO(%s): backend is not available "
                                                 "(plugin is missing, or can't be loaded due "
                                                 "dependencies or it is not compatible)",
-                                                 info.name));
+                                                info.name));
```

Review comment:
Sounds like a plan
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #22700: log a debug message if a capture backend is generally available but isn't capabable of a capture mode

**Code Changes:**
```diff
@@ -188,14 +188,25 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
             else
             {
                 CV_CAPTURE_LOG_DEBUG(NULL,
-                                     cv::format("VIDEOIO(%s): backend is not available "
+                                    cv::format("VIDEOIO(%s): backend is not available "
                                                 "(plugin is missing, or can't be loaded due "
                                                 "dependencies or it is not compatible)",
-                                                 info.name));
+                                                info.name));
```

Review comment:
I am not sure what internal in that case means. ```cv::videoio_registry::internal```?
**File:** modules/videoio/src/cap.cpp
**Change Type:** modified
**Context:** PR #22700: log a debug message if a capture backend is generally available but isn't capabable of a capture mode

**Code Changes:**
```diff
@@ -188,14 +188,25 @@ bool VideoCapture::open(const String& filename, int apiPreference, const std::ve
             else
             {
                 CV_CAPTURE_LOG_DEBUG(NULL,
-                                     cv::format("VIDEOIO(%s): backend is not available "
+                                    cv::format("VIDEOIO(%s): backend is not available "
                                                 "(plugin is missing, or can't be loaded due "
                                                 "dependencies or it is not compatible)",
-                                                 info.name));
+                                                info.name));
```

Review comment:
"internal" means that it should not be a part of OpenCV **public** API. - declaration should go to `src/videoio_registry.hpp` - definition/implementation `src/videoio_registry.cpp` You could add `::internal` nested namespace as your wish.