mirror of
https://github.com/opencv/opencv.git
synced 2025-06-08 10:03:15 +08:00
Merge pull request #8168 from jmgomezpoveda:issue_8166
* Use the YV12 format in the Android emulator to avoid image issues * Removed trailing spaces * Added exception in else case * Removed tab
This commit is contained in:
parent
9a92777fc1
commit
6f39f9a6a0
@ -41,6 +41,7 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
protected Camera mCamera;
|
protected Camera mCamera;
|
||||||
protected JavaCameraFrame[] mCameraFrame;
|
protected JavaCameraFrame[] mCameraFrame;
|
||||||
private SurfaceTexture mSurfaceTexture;
|
private SurfaceTexture mSurfaceTexture;
|
||||||
|
private int mPreviewFormat = ImageFormat.NV21;
|
||||||
|
|
||||||
public static class JavaCameraSizeAccessor implements ListItemAccessor {
|
public static class JavaCameraSizeAccessor implements ListItemAccessor {
|
||||||
|
|
||||||
@ -145,7 +146,14 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
/* Select the size that fits surface considering maximum size allowed */
|
/* Select the size that fits surface considering maximum size allowed */
|
||||||
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
|
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
|
||||||
|
|
||||||
|
/* Image format NV21 causes issues in the Android emulators */
|
||||||
|
if (Build.BRAND.equalsIgnoreCase("generic") || Build.BRAND.equalsIgnoreCase("Android"))
|
||||||
|
params.setPreviewFormat(ImageFormat.YV12); // "generic" or "android" = android emulator
|
||||||
|
else
|
||||||
params.setPreviewFormat(ImageFormat.NV21);
|
params.setPreviewFormat(ImageFormat.NV21);
|
||||||
|
|
||||||
|
mPreviewFormat = params.getPreviewFormat();
|
||||||
|
|
||||||
Log.d(TAG, "Set preview size to " + Integer.valueOf((int)frameSize.width) + "x" + Integer.valueOf((int)frameSize.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);
|
params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
|
||||||
|
|
||||||
@ -303,7 +311,13 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mat rgba() {
|
public Mat rgba() {
|
||||||
|
if (mPreviewFormat == ImageFormat.NV21)
|
||||||
Imgproc.cvtColor(mYuvFrameData, mRgba, Imgproc.COLOR_YUV2RGBA_NV21, 4);
|
Imgproc.cvtColor(mYuvFrameData, mRgba, Imgproc.COLOR_YUV2RGBA_NV21, 4);
|
||||||
|
else if (mPreviewFormat == ImageFormat.YV12)
|
||||||
|
Imgproc.cvtColor(mYuvFrameData, mRgba, Imgproc.COLOR_YUV2RGB_I420, 4); // COLOR_YUV2RGBA_YV12 produces inverted colors
|
||||||
|
else
|
||||||
|
throw new IllegalArgumentException("Preview Format can be NV21 or YV12");
|
||||||
|
|
||||||
return mRgba;
|
return mRgba;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user