Code review coments fixed. Lint wornings fixed.
This commit is contained in:

committed by
Andrey Kamaev

parent
4c06d0834e
commit
a942747046
@@ -1,4 +1,4 @@
|
||||
package org.opencv.framework;
|
||||
package org.opencv.android;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -26,7 +26,7 @@ import android.view.SurfaceView;
|
||||
* The clients shall implement CvCameraViewListener
|
||||
* TODO: add method to control the format in which the frames will be delivered to CvCameraViewListener
|
||||
*/
|
||||
public abstract class OpenCvCameraBridgeViewBase extends SurfaceView implements SurfaceHolder.Callback {
|
||||
public abstract class CameraBridgeViewBase extends SurfaceView implements SurfaceHolder.Callback {
|
||||
|
||||
private static final int MAX_UNSPECIFIED = -1;
|
||||
|
||||
@@ -40,7 +40,7 @@ public abstract class OpenCvCameraBridgeViewBase extends SurfaceView implements
|
||||
|
||||
private Bitmap mCacheBitmap;
|
||||
|
||||
public OpenCvCameraBridgeViewBase(Context context, AttributeSet attrs) {
|
||||
public CameraBridgeViewBase(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
getHolder().addCallback(this);
|
||||
mMaxWidth = MAX_UNSPECIFIED;
|
||||
@@ -74,7 +74,7 @@ public abstract class OpenCvCameraBridgeViewBase extends SurfaceView implements
|
||||
private static final int STOPPED = 0;
|
||||
private static final int STARTED = 1;
|
||||
|
||||
private static final String TAG = "OpenCvCameraBridge";
|
||||
private static final String TAG = "CameraBridge";
|
||||
|
||||
private CvCameraViewListener mListener;
|
||||
private int mState = STOPPED;
|
@@ -1,4 +1,4 @@
|
||||
package org.opencv.framework;
|
||||
package org.opencv.android;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@@ -29,10 +29,10 @@ import org.opencv.imgproc.Imgproc;
|
||||
* When frame is delivered via callback from Camera - it processed via OpenCV to be
|
||||
* converted to RGBA32 and then passed to the external callback for modifications if required.
|
||||
*/
|
||||
public class OpenCvJavaCameraView extends OpenCvCameraBridgeViewBase implements PreviewCallback {
|
||||
public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallback {
|
||||
|
||||
private static final int MAGIC_TEXTURE_ID = 10;
|
||||
private static final String TAG = "OpenCvJavaCameraView";
|
||||
private static final String TAG = "JavaCameraView";
|
||||
|
||||
private Mat mBaseMat;
|
||||
private byte mBuffer[];
|
||||
@@ -55,7 +55,7 @@ public class OpenCvJavaCameraView extends OpenCvCameraBridgeViewBase implements
|
||||
|
||||
private Camera mCamera;
|
||||
|
||||
public OpenCvJavaCameraView(Context context, AttributeSet attrs) {
|
||||
public JavaCameraView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ public class OpenCvJavaCameraView extends OpenCvCameraBridgeViewBase implements
|
||||
/* now we can start update thread */
|
||||
Log.d(TAG, "Starting processing thread");
|
||||
mStopThread = false;
|
||||
mThread = new Thread(new CameraWorker(getWidth(), getHeight()));
|
||||
mThread = new Thread(new CameraWorker());
|
||||
mThread.start();
|
||||
|
||||
return true;
|
||||
@@ -202,20 +202,11 @@ public class OpenCvJavaCameraView extends OpenCvCameraBridgeViewBase implements
|
||||
|
||||
private class CameraWorker implements Runnable {
|
||||
|
||||
private Mat mRgba = new Mat();
|
||||
private int mWidth;
|
||||
private int mHeight;
|
||||
|
||||
CameraWorker(int w, int h) {
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
do {
|
||||
synchronized (OpenCvJavaCameraView.this) {
|
||||
synchronized (JavaCameraView.this) {
|
||||
try {
|
||||
OpenCvJavaCameraView.this.wait();
|
||||
JavaCameraView.this.wait();
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
@@ -1,14 +1,11 @@
|
||||
package org.opencv.framework;
|
||||
package org.opencv.android;
|
||||
|
||||
import org.opencv.android.Utils;
|
||||
import org.opencv.core.Mat;
|
||||
import org.opencv.core.Size;
|
||||
import org.opencv.highgui.Highgui;
|
||||
import org.opencv.highgui.VideoCapture;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -17,31 +14,32 @@ import android.util.Log;
|
||||
* Due to the big amount of work done, by the base class this child is only responsible
|
||||
* for creating camera, destroying camera and delivering frames while camera is enabled
|
||||
*/
|
||||
public class OpenCvNativeCameraView extends OpenCvCameraBridgeViewBase {
|
||||
public class NativeCameraView extends CameraBridgeViewBase {
|
||||
|
||||
public static final String TAG = "OpenCvNativeCameraView";
|
||||
public static final String TAG = "NativeCameraView";
|
||||
private boolean mStopThread;
|
||||
private Thread mThread;
|
||||
private VideoCapture mCamera;
|
||||
|
||||
|
||||
public OpenCvNativeCameraView(Context context, AttributeSet attrs) {
|
||||
public NativeCameraView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void connectCamera(int width, int height) {
|
||||
protected boolean connectCamera(int width, int height) {
|
||||
|
||||
/* 1. We need to instantiate camera
|
||||
* 2. We need to start thread which will be getting frames
|
||||
*/
|
||||
/* First step - initialize camera connection */
|
||||
initializeCamera(getWidth(), getHeight());
|
||||
if (!initializeCamera(getWidth(), getHeight()))
|
||||
return false;
|
||||
|
||||
/* now we can start update thread */
|
||||
mThread = new Thread(new CameraWorker(getWidth(), getHeight()));
|
||||
mThread = new Thread(new CameraWorker());
|
||||
mThread.start();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,7 +59,6 @@ public class OpenCvNativeCameraView extends OpenCvCameraBridgeViewBase {
|
||||
|
||||
/* Now release camera */
|
||||
releaseCamera();
|
||||
|
||||
}
|
||||
|
||||
public static class OpenCvSizeAccessor implements ListItemAccessor {
|
||||
@@ -78,32 +75,39 @@ public class OpenCvNativeCameraView extends OpenCvCameraBridgeViewBase {
|
||||
|
||||
}
|
||||
|
||||
private void initializeCamera(int width, int height) {
|
||||
mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID);
|
||||
//TODO: improve error handling
|
||||
private boolean initializeCamera(int width, int height) {
|
||||
synchronized (this) {
|
||||
mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID);
|
||||
|
||||
java.util.List<Size> sizes = mCamera.getSupportedPreviewSizes();
|
||||
if (mCamera == null)
|
||||
return false;
|
||||
|
||||
/* Select the size that fits surface considering maximum size allowed */
|
||||
FrameSize frameSize = calculateCameraFrameSize(sizes, new OpenCvSizeAccessor(), width, height);
|
||||
//TODO: improve error handling
|
||||
|
||||
java.util.List<Size> sizes = mCamera.getSupportedPreviewSizes();
|
||||
|
||||
double frameWidth = frameSize.width;
|
||||
double frameHeight = frameSize.height;
|
||||
/* Select the size that fits surface considering maximum size allowed */
|
||||
Size frameSize = calculateCameraFrameSize(sizes, new OpenCvSizeAccessor(), width, height);
|
||||
|
||||
mFrameWidth = (int)frameSize.width;
|
||||
mFrameHeight = (int)frameSize.height;
|
||||
|
||||
mCamera.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, frameWidth);
|
||||
mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, frameHeight);
|
||||
AllocateCache();
|
||||
|
||||
mFrameWidth = (int)frameWidth;
|
||||
mFrameHeight = (int)frameHeight;
|
||||
mCamera.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, frameSize.width);
|
||||
mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, frameSize.height);
|
||||
}
|
||||
|
||||
Log.i(TAG, "Selected camera frame size = (" + mFrameWidth + ", " + mFrameHeight + ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void releaseCamera() {
|
||||
if (mCamera != null) {
|
||||
mCamera.release();
|
||||
synchronized (this) {
|
||||
if (mCamera != null) {
|
||||
mCamera.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,18 +115,8 @@ public class OpenCvNativeCameraView extends OpenCvCameraBridgeViewBase {
|
||||
|
||||
private Mat mRgba = new Mat();
|
||||
private Mat mGray = new Mat();
|
||||
private int mWidth;
|
||||
private int mHeight;
|
||||
|
||||
CameraWorker(int w, int h) {
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
Mat modified;
|
||||
|
||||
|
||||
do {
|
||||
if (!mCamera.grab()) {
|
||||
Log.e(TAG, "Camera frame grab failed");
|
Reference in New Issue
Block a user