nareshmlx/opencv-pr huggingface dataset:
**File:** modules/java/generator/src/java/android+JavaCameraView.java
**Change Type:** modified
**Context:** PR #1431: MediaRecorder hint enabled for all Android devices with API level 14 and above. - It increases performance on some devices like Nexus4; Targ...
**Review Line:** 150

**Code Changes:**
```diff
@@ -146,6 +146,9 @@ protected boolean initializeCamera(int width, int height) {
                     Log.d(TAG, "Set preview size to " + Integer.valueOf((int)frameSize.width) + "x" + Integer.valueOf((int)frameSize.height));
                     params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
 
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
+                        params.setRecordingHint(true);
+
                     List<String> FocusModes = params.getSupportedFocusModes();
                     if (FocusModes != null && FocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
                     {
```

Review comment:
Hmm, doesn't this mean that this class won't load on Android < 4.0?
**File:** modules/java/generator/src/java/android+JavaCameraView.java
**Change Type:** modified
**Context:** PR #1431: MediaRecorder hint enabled for all Android devices with API level 14 and above. - It increases performance on some devices like Nexus4; Targ...
**Review Line:** 150

**Code Changes:**
```diff
@@ -146,6 +146,9 @@ protected boolean initializeCamera(int width, int height) {
                     Log.d(TAG, "Set preview size to " + Integer.valueOf((int)frameSize.width) + "x" + Integer.valueOf((int)frameSize.height));
                     params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
 
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
+                        params.setRecordingHint(true);
+
                     List<String> FocusModes = params.getSupportedFocusModes();
                     if (FocusModes != null && FocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
                     {
```

Review comment:
No, params.setRecordingHint(true) call does not execute on old Androids, nothing else.
**File:** modules/photo/src/contrast_preserve.cpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,210 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Could you remove this include directive? `highgui` module is not used in this file. Also you can move other include directives to `precomp.hpp`.
**File:** modules/photo/src/seamless_cloning.cpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,193 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Again, please remove `highgui.hpp` header. It is not used, but leads to link errors under Windows.
**File:** samples/cpp/cloning_gui.cpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,546 @@
+/*
+* cloning.cpp
+*
+* Author:
+* Siddharth Kherada <siddharthkherada27[at]gmail[dot]com>
+*
+* This tutorial demonstrates how to use OpenCV seamless cloning
+* module.
+*
```

Review comment:
use `for(;;)`
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Why not using CV_PI instead?
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Sobel filter does exactly the same (here: http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html#sobel-derivatives you can find more on that) I'd suggest replacing getGradientX and getGradientY with Sobel.
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
This method looks unclear to me. What do variables gtest and gfinal mean? Could you please rename them in more meaningful names? What do also fac and complex1 mean?
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
I'd suggest another way: <pre> Mat bound (img.rows, img.cols, CV_8UC1, Scalar(0)); rectangle(bound, Rect(0, 0, img.cols, img.rows), Scalar::all(255)); </pre>
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Why not <pre> lap = gxx + gyy; </pre>
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Could you please give a meaningful name to f_bp?
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Again, what is gtest?
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
I guess, here the Poisson matrix is solved. Maybe it'll be more convenient to move it into a separate function?
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
It's better to use split from OpenCV here
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Again, split is what you need:)
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
And here split is needed again
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
<pre> sgx.copyTo(srx32, smask); sgy.copyTo(sry32, smask); </pre> is much readable and faster.
**File:** modules/photo/src/seamless_cloning.cpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,193 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Rect roi(minx, miny, lenx, leny); cs_mask(roi).copyTo(src(roi), gray);
**File:** modules/photo/src/seamless_cloning.cpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,193 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
The same magic can be applied here:)
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Mat zeros(sgx.size(), CV_32FC1); zeros.setTo(0); Mat zerosMask = (out != 255); zeros.copyTo(sgx, zerosMask); zeros.copyTo(sgy, zerosMask);
**File:** modules/photo/src/contrast_preserve.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,432 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Gray -= minval; Gray /= maxval - minval;
**File:** modules/photo/src/npr.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,582 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
temp.at<Vec3f>(i, j) = temp.at<Vec3f>(i, j) + (temp.at<Vec3f>(i, j-1) - temp.at<Vec3f>(i, j) \* V.at<float>(i, j); (no cycle for channels is needed)
**File:** modules/photo/src/npr.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,582 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
The same here:)
**File:** modules/photo/src/seamless_cloning.hpp
**Change Type:** added
**Context:** PR #1447: Pull Request for Computational Photography

**Code Changes:**
```diff
@@ -0,0 +1,594 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
This is more readable: if(abs(sgx.at&lt;Vec3f>(i,j) - sgy.at&lt;Vec3f>(i,j)) > abs(grx.at&lt;Vec3f>(i,j) - gry.at&lt;Vec3f>(i,j))) { srx32.at&lt;Vec3f>(i,j) = sgx.at&lt;Vec3f>(i,j) \* smask.at&lt;float>(i,j); sry32.at&lt;Vec3f>(i,j) = sgy.at&lt;Vec3f>(i,j) \* smask.at&lt;float>(i,j); } else { srx32.at&lt;Vec3f>(i,j) = grx.at&lt;Vec3f>(i,j) \* smask.at&lt;float>(i,j); sry32.at&lt;Vec3f>(i,j) = gry.at&lt;Vec3f>(i,j) \* smask.at&lt;float>(i,j); }
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #1387: accelerated resize, warpAffine, warpPerspective using IPP - the main patch is by Klim with some subsequent updates and fixes
**Review Line:** 3743

**Code Changes:**
```diff
+            }
+            bool ok;
+            Range range(0, dst.rows);
+            IPPwarpPerspectiveInvoker invoker(src, dst, coeffs, mode, borderType, borderValue, ippFunc, &ok);
+            parallel_for_(range, invoker, dst.total()/(double)(1<<16));
+            if( ok )
+                return;
+        }
+    }
+#endif
+
```

Review comment:
I dislike it, because if for some undefined reason IPP resize fails and the flag ok is false, then plain version of algo will be run. That is we have "two invocations of resize" in one call. But may be it is a common practise when IPP optimizations take place
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #1387: accelerated resize, warpAffine, warpPerspective using IPP - the main patch is by Klim with some subsequent updates and fixes
**Review Line:** 1855

**Code Changes:**
```diff
     int k, sx, sy, dx, dy;
 
+#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
+    int mode = interpolation == INTER_LINEAR ? IPPI_INTER_LINEAR : 0;
+    int type = src.type();
+    ippiResizeSqrPixelFunc ippFunc =
+        type == CV_8UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C1R :
+        type == CV_8UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C3R :
+        type == CV_8UC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C4R :
+        type == CV_16UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C1R :
+        type == CV_16UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C3R :
```

Review comment:
IPP says that this resize API is deprecated, that's okay?
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #1387: accelerated resize, warpAffine, warpPerspective using IPP - the main patch is by Klim with some subsequent updates and fixes
**Review Line:** 3743

**Code Changes:**
```diff
+            }
+            bool ok;
+            Range range(0, dst.rows);
+            IPPwarpPerspectiveInvoker invoker(src, dst, coeffs, mode, borderType, borderValue, ippFunc, &ok);
+            parallel_for_(range, invoker, dst.total()/(double)(1<<16));
+            if( ok )
+                return;
+        }
+    }
+#endif
+
```

Review comment:
this is the way it should be - if IPP function fails, OpenCV function should fall back to its own implementation
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #1387: accelerated resize, warpAffine, warpPerspective using IPP - the main patch is by Klim with some subsequent updates and fixes
**Review Line:** 1855

**Code Changes:**
```diff
     int k, sx, sy, dx, dy;
 
+#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
+    int mode = interpolation == INTER_LINEAR ? IPPI_INTER_LINEAR : 0;
+    int type = src.type();
+    ippiResizeSqrPixelFunc ippFunc =
+        type == CV_8UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C1R :
+        type == CV_8UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C3R :
+        type == CV_8UC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C4R :
+        type == CV_16UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C1R :
+        type == CV_16UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C3R :
```

Review comment:
Klim (submitter of the original patch) said that newer functions are significantly slower. So let's stick to the deprecated functions for now
**File:** platforms/scripts/ABI_compat_generator.py
**Change Type:** modified
**Context:** PR #1386: Some improvements in ABI compatibility checker config generator. - JNI check became optional; Pathes to SDK, NDK and Java API level can be d...

**Code Changes:**
```diff
@@ -47,7 +47,7 @@ def GetClasses(root, prefix):
 
 
 def GetJavaHHeaders():
-    print('\nGenerating JNI headers for Java API ...')
+    print('Generating JNI headers for Java API ...')
 
     javahHeaders = os.path.join(managerDir, 'javah_generated_headers')
     if os.path.exists(javahHeaders):
@@ -70,7 +70,7 @@ def GetJavaHHeaders():
```

Review comment:
You forgot to update the usage string.
**File:** platforms/scripts/ABI_compat_generator.py
**Change Type:** modified
**Context:** PR #1386: Some improvements in ABI compatibility checker config generator. - JNI check became optional; Pathes to SDK, NDK and Java API level can be d...

**Code Changes:**
```diff
@@ -47,7 +47,7 @@ def GetClasses(root, prefix):
 
 
 def GetJavaHHeaders():
-    print('\nGenerating JNI headers for Java API ...')
+    print('Generating JNI headers for Java API ...')
 
     javahHeaders = os.path.join(managerDir, 'javah_generated_headers')
     if os.path.exists(javahHeaders):
@@ -70,7 +70,7 @@ def GetJavaHHeaders():
```

Review comment:
These defaults are rather subjective. They even hardcode the NDK version! I'm not sure if they should be here.
**File:** platforms/scripts/ABI_compat_generator.py
**Change Type:** modified
**Context:** PR #1386: Some improvements in ABI compatibility checker config generator. - JNI check became optional; Pathes to SDK, NDK and Java API level can be d...

**Code Changes:**
```diff
@@ -47,7 +47,7 @@ def GetClasses(root, prefix):
 
 
 def GetJavaHHeaders():
-    print('\nGenerating JNI headers for Java API ...')
+    print('Generating JNI headers for Java API ...')
 
     javahHeaders = os.path.join(managerDir, 'javah_generated_headers')
     if os.path.exists(javahHeaders):
@@ -70,7 +70,7 @@ def GetJavaHHeaders():
```

Review comment:
It's a bit awkward to have words in command line options separated by underscores. It's a matter of preference, of course, but why not dashes?
**File:** platforms/scripts/ABI_compat_generator.py
**Change Type:** modified
**Context:** PR #1386: Some improvements in ABI compatibility checker config generator. - JNI check became optional; Pathes to SDK, NDK and Java API level can be d...

**Code Changes:**
```diff
@@ -47,7 +47,7 @@ def GetClasses(root, prefix):
 
 
 def GetJavaHHeaders():
-    print('\nGenerating JNI headers for Java API ...')
+    print('Generating JNI headers for Java API ...')
 
     javahHeaders = os.path.join(managerDir, 'javah_generated_headers')
     if os.path.exists(javahHeaders):
@@ -70,7 +70,7 @@ def GetJavaHHeaders():
```

Review comment:
It seems all you do with this variable is negate it. Maybe just change it into `include_jni`? It's also a bit strange that the option is to _exclude_, but the message talks about _including_.
**File:** platforms/scripts/ABI_compat_generator.py
**Change Type:** modified
**Context:** PR #1386: Some improvements in ABI compatibility checker config generator. - JNI check became optional; Pathes to SDK, NDK and Java API level can be d...

**Code Changes:**
```diff
@@ -47,7 +47,7 @@ def GetClasses(root, prefix):
 
 
 def GetJavaHHeaders():
-    print('\nGenerating JNI headers for Java API ...')
+    print('Generating JNI headers for Java API ...')
 
     javahHeaders = os.path.join(managerDir, 'javah_generated_headers')
     if os.path.exists(javahHeaders):
@@ -70,7 +70,7 @@ def GetJavaHHeaders():
```

Review comment:
Still using underscores here. I think at this point you should just replace it with `[options]`.