From a9508d2f6773b3984b3b406f83c6c43ce9ad5d7f Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Fri, 15 Jul 2011 04:46:24 +0000 Subject: [PATCH] Fixed android sample --- .../org/opencv/samples/s1/Sample1Java.java | 9 ++- .../org/opencv/samples/s1/Sample1View.java | 40 +++------ .../org/opencv/samples/s1/SampleViewBase.java | 81 ++++++++++--------- 3 files changed, 62 insertions(+), 68 deletions(-) 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 4f424d3e00..82cbf6de98 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 @@ -22,18 +22,23 @@ public class Sample1Java extends Activity { private MenuItem mItemPreviewSobel; private MenuItem mItemPreviewBlur; - public int viewMode; + 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"); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new Sample1View(this)); - viewMode = VIEW_MODE_RGBA; } public boolean onCreateOptionsMenu(Menu menu) { + Log.i(TAG, "onCreateOptionsMenu"); mItemPreviewRGBA = menu.add("Preview RGBA"); mItemPreviewGray = menu.add("Preview GRAY"); mItemPreviewCanny = menu.add("Canny"); 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 2ae461c585..2c0066443e 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 @@ -1,21 +1,12 @@ package org.opencv.samples.s1; +import org.opencv.*; + import android.content.Context; import android.graphics.Bitmap; -import android.util.Log; import android.view.SurfaceHolder; -import org.opencv.CvType; -import org.opencv.Mat; -import org.opencv.Point; -import org.opencv.Scalar; -import org.opencv.Size; -import org.opencv.core; -import org.opencv.imgproc; -import org.opencv.android; - - -class Sample1View extends SampleViewBase implements SurfaceHolder.Callback { +class Sample1View extends SampleViewBase { Mat mYuv; Mat mRgba; Mat mGraySubmat; @@ -28,35 +19,29 @@ class Sample1View extends SampleViewBase implements SurfaceHolder.Callback { @Override public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) { super.surfaceChanged(_holder, format, width, height); - Log.e("SAMP1", "surfaceChanged begin"); + synchronized (this) { - Log.e("SAMP1", "surfaceChanged sync"); // initialize all required Mats before usage to minimize number of auxiliary jni calls if(mYuv != null) mYuv.dispose(); - mYuv = new Mat(mFrameHeight+mFrameHeight/2, mFrameWidth, CvType.CV_8UC1); + mYuv = new Mat(getFrameHeight()+getFrameHeight()/2, getFrameWidth(), CvType.CV_8UC1); if(mRgba != null) mRgba.dispose(); - mRgba = new Mat(mFrameHeight, mFrameWidth, CvType.CV_8UC4); + mRgba = new Mat(getFrameHeight(), getFrameWidth(), CvType.CV_8UC4); if(mGraySubmat != null) mGraySubmat.dispose(); - mGraySubmat = mYuv.submat(0, mFrameHeight, 0, mFrameWidth); + mGraySubmat = mYuv.submat(0, getFrameHeight(), 0, getFrameWidth()); if(mIntermediateMat != null) mIntermediateMat.dispose(); - mIntermediateMat = new Mat(mFrameHeight, mFrameWidth, CvType.CV_8UC1); + mIntermediateMat = new Mat(getFrameHeight(), getFrameWidth(), CvType.CV_8UC1); } - Log.e("SAMP1", "surfaceChanged end"); } @Override protected Bitmap processFrame(byte[] data) { - //Log.e("SAMP1", "processFrame begin"); - mYuv.put(0, 0, data); - Sample1Java a = (Sample1Java)getContext(); - - switch(a.viewMode) + switch(Sample1Java.viewMode) { case Sample1Java.VIEW_MODE_GRAY: imgproc.cvtColor(mGraySubmat, mRgba, imgproc.CV_GRAY2RGBA, 4); @@ -80,20 +65,17 @@ class Sample1View extends SampleViewBase implements SurfaceHolder.Callback { break; } - Bitmap bmp = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.ARGB_8888); + Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888); android.MatToBitmap(mRgba, bmp); - //Log.e("SAMP1", "processFrame end"); return bmp; } @Override public void run() { - Log.e("SAMP1", "run"); super.run(); - Log.e("SAMP1", "run2"); - // Explicitly release Mats + // Explicitly deallocate Mats if(mYuv != null) { mYuv.dispose(); mYuv = 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 44efe910f4..cfcf98fc31 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,12 +12,12 @@ import android.view.SurfaceHolder; import android.view.SurfaceView; public abstract class SampleViewBase extends SurfaceView implements SurfaceHolder.Callback, Runnable { - - private static final String TAG = "Sample::ViewBase"; + private static final String TAG = "SampleViewBase"; + private Camera mCamera; private SurfaceHolder mHolder; - protected int mFrameWidth; - protected int mFrameHeight; + private int mFrameWidth; + private int mFrameHeight; private byte[] mFrame; private boolean mThreadRun; @@ -25,43 +25,52 @@ public abstract class SampleViewBase extends SurfaceView implements SurfaceHolde super(context); mHolder = getHolder(); mHolder.addCallback(this); + Log.i(TAG, "Instantiated new " + this.getClass()); + } + + public int getFrameWidth() { + return mFrameWidth; + } + + public int getFrameHeight() { + return mFrameHeight; } public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) { - 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); - } - } - } - params.setPreviewSize(mFrameWidth, mFrameHeight); - mCamera.setParameters(params); - mCamera.startPreview(); - } + 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); + } + } } + params.setPreviewSize(getFrameWidth(), getFrameHeight()); + mCamera.setParameters(params); + mCamera.startPreview(); + } + } + public void surfaceCreated(SurfaceHolder holder) { - Log.i("SAMP1", "surfaceCreated"); + Log.i(TAG, "surfaceCreated"); mCamera = Camera.open(); mCamera.setPreviewCallback( new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { synchronized(SampleViewBase.this) { mFrame = data; - //Log.i("SAMP1", "before notify"); SampleViewBase.this.notify(); - //Log.i("SAMP1", "after notify"); } } } @@ -70,7 +79,7 @@ public abstract class SampleViewBase extends SurfaceView implements SurfaceHolde } public void surfaceDestroyed(SurfaceHolder holder) { - Log.i("SAMP1", "surfaceDestroyed"); + Log.i(TAG, "surfaceDestroyed"); mThreadRun = false; if(mCamera != null) { synchronized(this) { @@ -86,28 +95,26 @@ public abstract class SampleViewBase extends SurfaceView implements SurfaceHolde public void run() { mThreadRun = true; - Log.i(TAG, "Starting thread"); - Bitmap bmp = null; + Log.i(TAG, "Starting processing thread"); while(mThreadRun) { - //Log.i("SAMP1", "before synchronized"); + Bitmap bmp = null; + synchronized(this) { - //Log.i("SAMP1", "in synchronized"); try { this.wait(); - //Log.i("SAMP1", "before processFrame"); bmp = processFrame(mFrame); - //Log.i("SAMP1", "after processFrame"); } catch (InterruptedException e) { e.printStackTrace(); } } - if (bmp != null){ + if (bmp != null) { Canvas canvas = mHolder.lockCanvas(); if (canvas != null){ - canvas.drawBitmap(bmp, (canvas.getWidth()-mFrameWidth)/2, (canvas.getHeight()-mFrameHeight)/2, null); + canvas.drawBitmap(bmp, (canvas.getWidth()-getFrameWidth())/2, (canvas.getHeight()-getFrameHeight())/2, null); mHolder.unlockCanvasAndPost(canvas); } + bmp.recycle(); } } } -- GitLab