/* * Copyright (C) 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.cellbots.ioioshoot; import android.content.Context; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.hardware.Camera.PreviewCallback; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import java.io.IOException; /** * View for handling the camera. * * @author clchen@google.com (Charles L. Chen) */ public class CameraView extends SurfaceView implements Callback { private Camera mCamera; private SurfaceHolder holder; private byte[] mCallbackBuffer = new byte[460800]; private FaceDetectThread faceDetectorCallback; public interface Callback { public void imageReady(byte[] data, int width, int height, int format, boolean reversed); } /** * @param context */ public CameraView(Context context) { super(context); // TODO Auto-generated constructor stub holder = getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void addCallback(FaceDetectThread faceDetectThread) { faceDetectorCallback = faceDetectThread; } public void surfaceCreated(SurfaceHolder holder) { acquireCamera(holder); } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { final Parameters params = mCamera.getParameters(); Log.e("debug 1", params.getPreviewSize().width + ", " + params.getPreviewSize().height); mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() { public void onPreviewFrame(byte[] imageData, Camera arg1) { if (faceDetectorCallback != null) { faceDetectorCallback.imageReady(imageData, params.getPreviewSize().width, params.getPreviewSize().height, params.getPreviewFormat(), false); } if (mCamera != null) { mCamera.addCallbackBuffer(mCallbackBuffer); } } }); mCamera.addCallbackBuffer(mCallbackBuffer); mCamera.startPreview(); } public void surfaceDestroyed(SurfaceHolder holder) { releaseCamera(); } public void acquireCamera(SurfaceHolder holder) { mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } } public void releaseCamera() { mCamera.stopPreview(); mCamera.release(); mCamera = null; } }