diff --git a/modules/java/android/.classpath b/modules/java/android/.classpath index 8d62247791..dd19757ca5 100644 --- a/modules/java/android/.classpath +++ b/modules/java/android/.classpath @@ -3,5 +3,5 @@ - + diff --git a/samples/android/1-java/src/org/opencv/samples/s1/Sample1Java.java b/samples/android/1-java/src/org/opencv/samples/s1/Sample1Java.java index 82cbf6de98..67862b75df 100644 --- a/samples/android/1-java/src/org/opencv/samples/s1/Sample1Java.java +++ b/samples/android/1-java/src/org/opencv/samples/s1/Sample1Java.java @@ -8,45 +8,47 @@ import android.view.MenuItem; import android.view.Window; public class Sample1Java extends Activity { - private static final String TAG = "Sample1Java::Activity"; + private static final String TAG = "Sample::Activity"; - public static final int VIEW_MODE_RGBA = 0; - public static final int VIEW_MODE_GRAY = 1; - public static final int VIEW_MODE_CANNY = 2; - public static final int VIEW_MODE_SOBEL = 3; - public static final int VIEW_MODE_BLUR = 4; + public static final int VIEW_MODE_RGBA = 0; + public static final int VIEW_MODE_GRAY = 1; + public static final int VIEW_MODE_CANNY = 2; + public static final int VIEW_MODE_SOBEL = 3; + public static final int VIEW_MODE_BLUR = 4; - private MenuItem mItemPreviewRGBA; - private MenuItem mItemPreviewGray; - private MenuItem mItemPreviewCanny; - private MenuItem mItemPreviewSobel; - private MenuItem mItemPreviewBlur; + private MenuItem mItemPreviewRGBA; + private MenuItem mItemPreviewGray; + private MenuItem mItemPreviewCanny; + private MenuItem mItemPreviewSobel; + private MenuItem mItemPreviewBlur; - public static int viewMode = VIEW_MODE_RGBA; - - public Sample1Java(){ - Log.i(TAG, "Instantiated new " + this.getClass()); + public static int viewMode = VIEW_MODE_RGBA; + + public Sample1Java() { + Log.i(TAG, "Instantiated new " + this.getClass()); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { - Log.i(TAG, "onCreate"); + Log.i(TAG, "onCreate"); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new Sample1View(this)); } + @Override public boolean onCreateOptionsMenu(Menu menu) { - Log.i(TAG, "onCreateOptionsMenu"); - mItemPreviewRGBA = menu.add("Preview RGBA"); - mItemPreviewGray = menu.add("Preview GRAY"); + Log.i(TAG, "onCreateOptionsMenu"); + mItemPreviewRGBA = menu.add("Preview RGBA"); + mItemPreviewGray = menu.add("Preview GRAY"); mItemPreviewCanny = menu.add("Canny"); mItemPreviewSobel = menu.add("Sobel"); - mItemPreviewBlur = menu.add("Blur"); + mItemPreviewBlur = menu.add("Blur"); return true; } + @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "Menu Item selected " + item); if (item == mItemPreviewRGBA) diff --git a/samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java b/samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java index 2c0066443e..c74bbca67e 100644 --- a/samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java +++ b/samples/android/1-java/src/org/opencv/samples/s1/Sample1View.java @@ -15,40 +15,32 @@ class Sample1View extends SampleViewBase { public Sample1View(Context context) { super(context); } - + @Override public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) { - super.surfaceChanged(_holder, format, width, height); + super.surfaceChanged(_holder, format, width, height); - synchronized (this) { - // initialize all required Mats before usage to minimize number of auxiliary jni calls - if(mYuv != null) mYuv.dispose(); - mYuv = new Mat(getFrameHeight()+getFrameHeight()/2, getFrameWidth(), CvType.CV_8UC1); - - if(mRgba != null) mRgba.dispose(); - mRgba = new Mat(getFrameHeight(), getFrameWidth(), CvType.CV_8UC4); - - if(mGraySubmat != null) mGraySubmat.dispose(); - mGraySubmat = mYuv.submat(0, getFrameHeight(), 0, getFrameWidth()); + synchronized (this) { + // initialize Mats before usage + mYuv = new Mat(getFrameHeight() + getFrameHeight() / 2, getFrameWidth(), CvType.CV_8UC1); + mGraySubmat = mYuv.submat(0, getFrameHeight(), 0, getFrameWidth()); - if(mIntermediateMat != null) mIntermediateMat.dispose(); - mIntermediateMat = new Mat(getFrameHeight(), getFrameWidth(), CvType.CV_8UC1); - } + mRgba = new Mat(); + mIntermediateMat = new Mat(); + } } @Override - protected Bitmap processFrame(byte[] data) - { - mYuv.put(0, 0, data); - - switch(Sample1Java.viewMode) - { + protected Bitmap processFrame(byte[] data) { + mYuv.put(0, 0, data); + + switch (Sample1Java.viewMode) { case Sample1Java.VIEW_MODE_GRAY: imgproc.cvtColor(mGraySubmat, mRgba, imgproc.CV_GRAY2RGBA, 4); break; case Sample1Java.VIEW_MODE_RGBA: imgproc.cvtColor(mYuv, mRgba, imgproc.CV_YUV420i2RGB, 4); - core.putText(mRgba, "OpenCV + Android", new Point(10,100), 3/*CV_FONT_HERSHEY_COMPLEX*/, 2, new Scalar(255, 0, 0, 255), 3); + core.putText(mRgba, "OpenCV + Android", new Point(10, 100), 3/* CV_FONT_HERSHEY_COMPLEX */, 2, new Scalar(255, 0, 0, 255), 3); break; case Sample1Java.VIEW_MODE_CANNY: imgproc.Canny(mGraySubmat, mIntermediateMat, 80, 100); @@ -64,32 +56,34 @@ class Sample1View extends SampleViewBase { imgproc.blur(mRgba, mRgba, new Size(15, 15)); break; } - + Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888); - android.MatToBitmap(mRgba, bmp); - - return bmp; + + if (android.MatToBitmap(mRgba, bmp)) + return bmp; + + bmp.recycle(); + return null; } - + @Override public void run() { - super.run(); - - // Explicitly deallocate Mats - if(mYuv != null) { - mYuv.dispose(); + super.run(); + + synchronized (this) { + // Explicitly deallocate Mats + if (mYuv != null) + mYuv.dispose(); + if (mRgba != null) + mRgba.dispose(); + if (mGraySubmat != null) + mGraySubmat.dispose(); + if (mIntermediateMat != null) + mIntermediateMat.dispose(); + mYuv = null; - } - if(mRgba != null) { - mRgba.dispose(); mRgba = null; - } - if(mGraySubmat != null) { - mGraySubmat.dispose(); mGraySubmat = null; - } - if(mIntermediateMat != null) { - mIntermediateMat.dispose(); mIntermediateMat = null; } } diff --git a/samples/android/1-java/src/org/opencv/samples/s1/SampleViewBase.java b/samples/android/1-java/src/org/opencv/samples/s1/SampleViewBase.java index cfcf98fc31..5671f029d4 100644 --- a/samples/android/1-java/src/org/opencv/samples/s1/SampleViewBase.java +++ b/samples/android/1-java/src/org/opencv/samples/s1/SampleViewBase.java @@ -12,110 +12,108 @@ import android.view.SurfaceHolder; import android.view.SurfaceView; public abstract class SampleViewBase extends SurfaceView implements SurfaceHolder.Callback, Runnable { - private static final String TAG = "SampleViewBase"; - - private Camera mCamera; - private SurfaceHolder mHolder; - private int mFrameWidth; - private int mFrameHeight; - private byte[] mFrame; - private boolean mThreadRun; + private static final String TAG = "Sample::SurfaceView"; - public SampleViewBase(Context context) { - super(context); + private Camera mCamera; + private SurfaceHolder mHolder; + private int mFrameWidth; + private int mFrameHeight; + private byte[] mFrame; + private boolean mThreadRun; + + public SampleViewBase(Context context) { + super(context); mHolder = getHolder(); mHolder.addCallback(this); Log.i(TAG, "Instantiated new " + this.getClass()); - } + } - public int getFrameWidth() { - return mFrameWidth; - } + public int getFrameWidth() { + return mFrameWidth; + } - public int getFrameHeight() { - return mFrameHeight; - } + public int getFrameHeight() { + return mFrameHeight; + } - public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) { - Log.i(TAG, "surfaceCreated"); - if ( mCamera != null) { - Camera.Parameters params = mCamera.getParameters(); - List sizes = params.getSupportedPreviewSizes(); - mFrameWidth = width; - mFrameHeight = height; - - //selecting optimal camera preview size - { - double minDiff = Double.MAX_VALUE; - for (Camera.Size size : sizes) { - if (Math.abs(size.height - height) < minDiff) { - mFrameWidth = size.width; - mFrameHeight = size.height; - minDiff = Math.abs(size.height - height); - } - } - } + public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) { + Log.i(TAG, "surfaceCreated"); + if (mCamera != null) { + Camera.Parameters params = mCamera.getParameters(); + List sizes = params.getSupportedPreviewSizes(); + mFrameWidth = width; + mFrameHeight = height; - params.setPreviewSize(getFrameWidth(), getFrameHeight()); - mCamera.setParameters(params); - mCamera.startPreview(); - } - } + // selecting optimal camera preview size + { + double minDiff = Double.MAX_VALUE; + for (Camera.Size size : sizes) { + if (Math.abs(size.height - height) < minDiff) { + mFrameWidth = size.width; + mFrameHeight = size.height; + minDiff = Math.abs(size.height - height); + } + } + } - public void surfaceCreated(SurfaceHolder holder) { - Log.i(TAG, "surfaceCreated"); - mCamera = Camera.open(); - mCamera.setPreviewCallback( - new PreviewCallback() { - public void onPreviewFrame(byte[] data, Camera camera) { - synchronized(SampleViewBase.this) { - mFrame = data; - SampleViewBase.this.notify(); - } - } - } - ); - (new Thread(this)).start(); - } + params.setPreviewSize(getFrameWidth(), getFrameHeight()); + mCamera.setParameters(params); + mCamera.startPreview(); + } + } - public void surfaceDestroyed(SurfaceHolder holder) { - Log.i(TAG, "surfaceDestroyed"); - mThreadRun = false; - if(mCamera != null) { - synchronized(this) { - mCamera.stopPreview(); - mCamera.setPreviewCallback(null); - mCamera.release(); - mCamera = null; - } - } - } - - protected abstract Bitmap processFrame(byte[] data); + public void surfaceCreated(SurfaceHolder holder) { + Log.i(TAG, "surfaceCreated"); + mCamera = Camera.open(); + mCamera.setPreviewCallback(new PreviewCallback() { + public void onPreviewFrame(byte[] data, Camera camera) { + synchronized (SampleViewBase.this) { + mFrame = data; + SampleViewBase.this.notify(); + } + } + }); + (new Thread(this)).start(); + } - public void run() { - mThreadRun = true; - Log.i(TAG, "Starting processing thread"); - while(mThreadRun) { - Bitmap bmp = null; - - synchronized(this) { - try { - this.wait(); - bmp = processFrame(mFrame); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - if (bmp != null) { - Canvas canvas = mHolder.lockCanvas(); - if (canvas != null){ - canvas.drawBitmap(bmp, (canvas.getWidth()-getFrameWidth())/2, (canvas.getHeight()-getFrameHeight())/2, null); - mHolder.unlockCanvasAndPost(canvas); - } - bmp.recycle(); - } - } - } + public void surfaceDestroyed(SurfaceHolder holder) { + Log.i(TAG, "surfaceDestroyed"); + mThreadRun = false; + if (mCamera != null) { + synchronized (this) { + mCamera.stopPreview(); + mCamera.setPreviewCallback(null); + mCamera.release(); + mCamera = null; + } + } + } + + protected abstract Bitmap processFrame(byte[] data); + + public void run() { + mThreadRun = true; + Log.i(TAG, "Starting processing thread"); + while (mThreadRun) { + Bitmap bmp = null; + + synchronized (this) { + try { + this.wait(); + bmp = processFrame(mFrame); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if (bmp != null) { + Canvas canvas = mHolder.lockCanvas(); + if (canvas != null) { + canvas.drawBitmap(bmp, (canvas.getWidth() - getFrameWidth()) / 2, (canvas.getHeight() - getFrameHeight()) / 2, null); + mHolder.unlockCanvasAndPost(canvas); + } + bmp.recycle(); + } + } + } } \ No newline at end of file