nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Please implement this as `static inline` function near `getNumberOfCPUs()` (line 830)
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
This gets taken care of in the return, if 0.
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Can you suggest another name :) ? I think it's easier if we include __EMSCRIPTEN__
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
I'm about the case with CPU=0.5
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
> /sys/devices/system/cpu/possible This is valid on regular Linux too.
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Just split this block on 4 cases through sequence (moving "return" to the end would allow that). `sched_getaffinity()` is applicable on Android too.
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Oh, I assumed we take floor so we return 0. Should I take ceil?
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Rounding with truncation is fine except range (0, 1). I believe this should work better: ``` max(1u, (unsigned)cfs_quota/cfs_period); ```
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
HAIKU is not Linux distribution, it's OSS BeOS implementation with it's own kernel and it does not support CGroups. GLIBC is not requirement for it too. I propose to stay with condition `#if (defined __linux__ && !defined __ANDROID__)`
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
It should be `CV_HAVE_CGROUPS`
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
BTW, Why is `/possible` here? (I know that it was here before patch) See https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu: > online: cpus that are online and being scheduled. > possible: cpus that have been allocated resources and can be brought online if they are present. I believe we should use `/online` instead: ``` # cat /sys/devices/system/cpu/online /sys/devices/system/cpu/possible 0-3 0-3 root ~# echo 0 > /sys/devices/system/cpu/cpu3/online root ~# cat /sys/devices/system/cpu/online /sys/devices/system/cpu/possible 0-2 0-3 ``` or even both: https://devtalk.nvidia.com/default/topic/1042662/jetson-tx1/-sys-devices-system-cpu-cpu-online-missing-in-the-latest-jetpack-l4t-release/ and select minimal as regular
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
Yeah, I think I'll restructure the way we handle Linux, probably just split up the Linux group as there are many uncommon blocks
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
This is very true, `/possible` is showing the hardware count, 128 in my case over just `6` for the VM. I saw a few more options and `online` seems to be right. But Android also has CGroups apparently, Can I add it to CGroups list?
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
> Android > Can I add it to CGroups list? I believe - yes. It is harmless (just a check for missing files in worst case)
**File:** modules/core/src/parallel.cpp
**Change Type:** modified
**Context:** PR #16457: Fixed getCPUCount | Issue #16268 -  #### This pullrequest changes Fixed getCPUCount to account for cgroups. Added common code to parse CPU ...

**Code Changes:**
```diff
@@ -58,13 +58,20 @@
     #include <unistd.h>
     #include <stdio.h>
     #include <sys/types.h>
+    #include <fstream>
     #if defined __ANDROID__
         #include <sys/sysconf.h>
+        #include <sys/syscall.h>
+        #include <sched.h>
     #elif defined __APPLE__
```

Review comment:
You can remove the condition, it's already handled in line 94.
**File:** samples/python/tutorial_code/videoio/video-input-psnr-ssim.py
**Change Type:** added
**Context:** PR #16586: add python version of video-input-psnr-ssim

**Code Changes:**
```diff
@@ -0,0 +1,148 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Python 2/3 compatibility
+from __future__ import print_function
+
+import numpy as np
+import cv2 as cv
+import argparse
```

Review comment:
please move it to global import list in the beginning of the file.
**File:** samples/python/tutorial_code/videoio/video-input-psnr-ssim.py
**Change Type:** added
**Context:** PR #16586: add python version of video-input-psnr-ssim
**Review Line:** 135

**Code Changes:**
```diff
+        if (psnrv < psnrTriggerValue and psnrv):
+            mssimv = getMSSISM(frameReference, frameUnderTest)
+            print("MSSISM: R {}% G {}% B {}%".format(round(mssimv[2] * 100, 2), round(mssimv[1] * 100, 2),
+                                                     round(mssimv[0] * 100, 2)), end=" ")
+
+        print()
+
+        cv.imshow(WIN_RF, frameReference)
+        cv.imshow(WIN_UT, frameUnderTest)
+
+        k = cv.waitKey(delay)
```

Review comment:
`print` call is redundant here.
**File:** samples/python/tutorial_code/videoio/video-input-psnr-ssim.py
**Change Type:** added
**Context:** PR #16586: add python version of video-input-psnr-ssim
**Review Line:** 80

**Code Changes:**
```diff
+    parser.add_argument("-d", "--delay", type=int, default=30, help=" Time delay")
+    parser.add_argument("-v", "--psnrtriggervalue", type=int, default=30, help="PSNR Trigger Value")
+    parser.add_argument("-r", "--ref", type=str, default="Megamind.avi", help="Path to reference video")
+    parser.add_argument("-t", "--undertest", type=str, default="Megamind_bugy.avi",
+                        help="Path to the video to be tested")
+    args = parser.parse_args()
+
+    sourceReference = args.ref
+    sourceCompareWith = args.undertest
+    delay = args.delay
+    psnrTriggerValue = args.psnrtriggervalue
```

Review comment:
It's not common to use abbreviations with capital letters as argument keys. I propose to use the same style for command line options and short it to single letter.
**File:** samples/python/tutorial_code/videoio/video-input-psnr-ssim.py
**Change Type:** added
**Context:** PR #16586: add python version of video-input-psnr-ssim
**Review Line:** 135

**Code Changes:**
```diff
+        if (psnrv < psnrTriggerValue and psnrv):
+            mssimv = getMSSISM(frameReference, frameUnderTest)
+            print("MSSISM: R {}% G {}% B {}%".format(round(mssimv[2] * 100, 2), round(mssimv[1] * 100, 2),
+                                                     round(mssimv[0] * 100, 2)), end=" ")
+
+        print()
+
+        cv.imshow(WIN_RF, frameReference)
+        cv.imshow(WIN_UT, frameUnderTest)
+
+        k = cv.waitKey(delay)
```

Review comment:
the ```print()``` here is required as the two print statements above it don't have end of line characters so when the condition ``` if (psnrv < psnrTriggerValue and psnrv)``` holds true program writes the frame number and the MSSISM in the same line and then moves to a line. If this print() is removed then after the if statement program will start writing the values of the next frame in the same line.
**File:** modules/core/include/opencv2/core/matx.hpp
**Change Type:** modified
**Context:** PR #13928: Add division operators for Matx. - Add the following operations for `Matx`: <cut/> ``` { Matx31d P1(1, 2, 3); P1 /= 2; std::cout << "P1: " ...

**Code Changes:**
```diff
@@ -1275,6 +1275,34 @@ Matx<_Tp, m, n> operator * (double alpha, const Matx<_Tp, m, n>& a)
     return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp());
 }
 
+template<typename _Tp, int m, int n> static inline
+Matx<_Tp, m, n>& operator /= (Matx<_Tp, m, n>& a, float alpha)
+{
+    for( int i = 0; i < m*n; i++ )
+        a.val[i] = a.val[i] / alpha;
+    return a;
```

Review comment:
Matx usually makes sense (used) with floating point numbers (float/double). So "int" scalar looks out of scope here. Do we really need it? For floating point computations we can replace multiple divisions by multiplications (they are still more effective than divisions): ``` _Tp alpha_inv = (_Tp)1.0f / alpha; for( int i = 0; i < m*n; i++ ) a.val[i] = a.val[i] * alpha_inv; ``` `saturate_cast()` is not used for floating point numbers too.
**File:** samples/python/drawing.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+'''
+    This program demonstrates OpenCV drawing and text output functions by drawing different shapes and text strings
+    Usage :
+        python3 drawing.py
+    Press any button to exit
+    '''
+
+# Python 2/3 compatibility
```

Review comment:
> cv.destroyAllWindows() This should not be called on the module level. Please take a look on other python samples about used skeleton.
**File:** samples/python/drawing.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+'''
+    This program demonstrates OpenCV drawing and text output functions by drawing different shapes and text strings
+    Usage :
+        python3 drawing.py
+    Press any button to exit
+    '''
+
+# Python 2/3 compatibility
```

Review comment:
This code can be wrapped into function to call "return" instead of "break". Refer to Python samples template: https://github.com/opencv/opencv/wiki/Coding_Style_Guide#python-samples outer braces `()` are not necessary.
**File:** samples/python/drawing.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+'''
+    This program demonstrates OpenCV drawing and text output functions by drawing different shapes and text strings
+    Usage :
+        python3 drawing.py
+    Press any button to exit
+    '''
+
+# Python 2/3 compatibility
```

Review comment:
Remove ';' from Python code.
**File:** samples/python/drawing.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+'''
+    This program demonstrates OpenCV drawing and text output functions by drawing different shapes and text strings
+    Usage :
+        python3 drawing.py
+    Press any button to exit
+    '''
+
+# Python 2/3 compatibility
```

Review comment:
> col = > color = values are not used
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...
**Review Line:** 26

**Code Changes:**
```diff
+
+def main():
+    # Declare the variables we are going to use
+    ddepth = cv.CV_16S
+    smoothType = "MedianBlur"
+    sigma = 3
+    if len(sys.argv)==4:
+        ddepth = sys.argv[1]
+        smoothType = sys.argv[2]
+        sigma = sys.argv[3]
+    # Taking input from the camera
```

Review comment:
Sample should accept command-line parameters instead of hard-coded values.
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+'''
+    This program demonstrates Laplace point/edge detection using
+    OpenCV function Laplacian()
+    It captures from the camera of your choice: 0, 1, ... default 0
+    Usage:
+        python laplace.py <ddepth> <smoothType> <sigma>
+        If no arguments given default arguments will be used.
```

Review comment:
`while True:`
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+'''
+    This program demonstrates Laplace point/edge detection using
+    OpenCV function Laplacian()
+    It captures from the camera of your choice: 0, 1, ... default 0
+    Usage:
+        python laplace.py <ddepth> <smoothType> <sigma>
+        If no arguments given default arguments will be used.
```

Review comment:
> & 0xFF Not needed anymore, see waitKey/waitKeyEx documentation
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...

**Code Changes:**
```diff
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+'''
+    This program demonstrates Laplace point/edge detection using
+    OpenCV function Laplacian()
+    It captures from the camera of your choice: 0, 1, ... default 0
+    Usage:
+        python laplace.py <ddepth> <smoothType> <sigma>
+        If no arguments given default arguments will be used.
```

Review comment:
Why is not ESC (27)?
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...
**Review Line:** 6

**Code Changes:**
```diff
+#!/usr/bin/env python
+
+'''
+    This program demonstrates Laplace point/edge detection using
+    OpenCV function Laplacian()
+    It captures from the camera of your choice: 0, 1, ... default 0
+    Usage:
+        python laplace.py <ddepth> <smoothType> <sigma>
+        If no arguments given default arguments will be used.
+
+    Keyboard Shortcuts:
```

Review comment:
Sample should accept command-line parameters
**File:** samples/python/laplace.py
**Change Type:** added
**Context:** PR #14107: Adding python codes to samples/python - There are some files in samples/cpp whose python samples are not available. So, this PR is just add...
**Review Line:** 12

**Code Changes:**
```diff
+    Usage:
+        python laplace.py <ddepth> <smoothType> <sigma>
+        If no arguments given default arguments will be used.
+
+    Keyboard Shortcuts:
+    Press space bar to exit the program.
+    '''
+
+# Python 2/3 compatibility
+from __future__ import print_function
+
```

Review comment:
The comment is not relevant any more. The example uses <ESC> button for exit.
**File:** modules/dnn/src/dnn.cpp
**Change Type:** modified
**Context:** PR #16161: cuda4dnn(concat): write outputs from previous layers directly into concat's output - ### This pullrequest changes - optimizes out concat la...

**Code Changes:**
```diff
@@ -2450,7 +2450,9 @@ struct Net::Impl
                      ld.layerInstance->type != "Concat")) )
                     continue;
 
-                if (preferableBackend == DNN_BACKEND_CUDA && IS_DNN_CUDA_TARGET(preferableTarget) && ld.layerInstance->type != "Convolution")
+                if (preferableBackend == DNN_BACKEND_CUDA && IS_DNN_CUDA_TARGET(preferableTarget)
+                    && ld.layerInstance->type != "Convolution"
+                    && ld.layerInstance->type != "Concat")
                     continue;
 
```

Review comment:
Here is an opportunity for a future regression. If somebody adds a layer which computes the final output on CPU (like region layer) but they forget to add an entry here and also does not test what would happen if their layer appears before a concat (who would even think about a test like this), assertions from `CUDABackendWrapper` fail. Possible solutions: - have a test which would connect every layer that exists in OCV DNN to a concat - use a whitelist instead of a blacklist - allow concat fusion for few types of input layers like Convolution, Pooling, etc. (this is what OCL is doing currently)
**File:** modules/dnn/src/dnn.cpp
**Change Type:** modified
**Context:** PR #16161: cuda4dnn(concat): write outputs from previous layers directly into concat's output - ### This pullrequest changes - optimizes out concat la...

**Code Changes:**
```diff
@@ -2450,7 +2450,9 @@ struct Net::Impl
                      ld.layerInstance->type != "Concat")) )
                     continue;
 
-                if (preferableBackend == DNN_BACKEND_CUDA && IS_DNN_CUDA_TARGET(preferableTarget) && ld.layerInstance->type != "Convolution")
+                if (preferableBackend == DNN_BACKEND_CUDA && IS_DNN_CUDA_TARGET(preferableTarget)
+                    && ld.layerInstance->type != "Convolution"
+                    && ld.layerInstance->type != "Concat")
                     continue;
 
```

Review comment:
let's use whitelist. Stability has higher priority than performance optimization for rare cases.
**File:** modules/gapi/include/opencv2/gapi/cpu/gcpukernel.hpp
**Change Type:** modified
**Context:** PR #16213: G-API: Using functors as kernel implementation -  ### This pullrequest changes ``` build_gapi_standalone:Linux x64=ade-0.1.1f build_gapi_st...

**Code Changes:**
```diff
@@ -72,6 +72,17 @@ namespace cpu
      */
     GAPI_EXPORTS cv::gapi::GBackend backend();
     /** @} */
+
+    class GOCVFunctor;
+
+    //! @cond IGNORED
+    template<typename K, typename Callable>
+    GOCVFunctor ocv_kernel(const Callable& c);
```

Review comment:
`Callable&&`