Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import org.opencv.android.Utils;
- import org.opencv.core.Core;
- import org.opencv.core.CvType;
- import org.opencv.core.Mat;
- import org.opencv.imgproc.Imgproc;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.hardware.Camera;
- import android.hardware.Camera.PreviewCallback;
- import android.util.Log;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- public class CameraViewAndroid extends SurfaceView implements SurfaceHolder.Callback, Runnable {
- private static final String TAG = "Sample::SurfaceView";
- private Camera mCamera;
- private SurfaceHolder mHolder;
- private byte[] mFrame;
- private Mat mYuv;
- private Mat mRgba;
- public CameraViewAndroid(Context context) {
- super(context);
- mHolder = getHolder();
- mHolder.addCallback(this);
- Log.i(TAG, "Instantiated new " + this.getClass());
- }
- public void surfaceChanged(SurfaceHolder _holder, int format, int width, int height) {
- Log.i(TAG, "surfaceCreated");
- if (mCamera != null) {
- Camera.Parameters params = mCamera.getParameters();
- params.setPreviewSize(640,480);
- mCamera.setParameters(params);
- try {
- mCamera.setPreviewDisplay(null);
- } catch (IOException e) {
- Log.e(TAG, "mCamera.setPreviewDisplay fails: " + e);
- }
- mCamera.startPreview();
- }
- }
- public void surfaceCreated(SurfaceHolder holder) {
- Log.i(TAG, "surfaceCreated");
- mYuv = new Mat(480 + 480 / 2, 640, CvType.CV_8UC1);
- mRgba = new Mat();
- mCamera = Camera.open();
- mCamera.setPreviewCallback(new PreviewCallback() {
- public void onPreviewFrame(byte[] data, Camera camera) {
- synchronized (CameraViewAndroid.this) {
- mFrame = data;
- CameraViewAndroid.this.notify();
- }
- }
- });
- (new Thread(this)).start();
- }
- public void surfaceDestroyed(SurfaceHolder holder) {
- Log.i(TAG, "surfaceDestroyed");
- if (mCamera != null) {
- synchronized (this) {
- mCamera.stopPreview();
- mCamera.setPreviewCallback(null);
- mCamera.release();
- mCamera = null;
- }
- }
- }
- public double timet(double l){
- return ((Core.getTickCount() - l)/Core.getTickFrequency()) * 1000;
- }
- public void run() {
- int i = 0 ;
- double d, total = 0;
- while (true) {
- d = Core.getTickCount();
- Bitmap bmp = null;
- synchronized (this) {
- try {
- this.wait();
- mYuv.put(0, 0, mFrame);
- Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4);
- bmp = Bitmap.createBitmap(640,480, Bitmap.Config.ARGB_8888);
- Utils.matToBitmap(mRgba, bmp);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- if (bmp != null) {
- Canvas canvas = mHolder.lockCanvas();
- if (canvas != null) {
- canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth()) / 2, (canvas.getHeight() - bmp.getHeight()) / 2, null);
- mHolder.unlockCanvasAndPost(canvas);
- }
- bmp.recycle();
- }
- total += timet(d);
- if((i++ % 100) == 0){
- Log.w("Android Camera", "Average frame time: " + total/100 + "ms" + " ##Frame Rate:" + (100000/(total)) + "fps");
- total = 0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement