summaryrefslogtreecommitdiffstats
path: root/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java')
-rw-r--r--android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java
new file mode 100644
index 0000000..41efe68
--- /dev/null
+++ b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java
@@ -0,0 +1,108 @@
+/*
+ * Barebones implementation of displaying camera preview.
+ *
+ * Created by lisah0 on 2012-02-24
+ */
+package net.sourceforge.zbar.android.CameraTest;
+
+import java.io.IOException;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import android.util.Log;
+
+import android.view.View;
+import android.view.Surface;
+import android.view.SurfaceView;
+import android.view.SurfaceHolder;
+
+import android.content.Context;
+
+import android.hardware.Camera;
+import android.hardware.Camera.PreviewCallback;
+import android.hardware.Camera.AutoFocusCallback;
+import android.hardware.Camera.Parameters;
+
+/** A basic Camera preview class */
+public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
+ private SurfaceHolder mHolder;
+ private Camera mCamera;
+ private PreviewCallback previewCallback;
+ private AutoFocusCallback autoFocusCallback;
+
+ public CameraPreview(Context context, Camera camera,
+ PreviewCallback previewCb,
+ AutoFocusCallback autoFocusCb) {
+ super(context);
+ mCamera = camera;
+ previewCallback = previewCb;
+ autoFocusCallback = autoFocusCb;
+
+ /*
+ * Set camera to continuous focus if supported, otherwise use
+ * software auto-focus. Only works for API level >=9.
+ */
+ /*
+ Camera.Parameters parameters = camera.getParameters();
+ for (String f : parameters.getSupportedFocusModes()) {
+ if (f == Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
+ mCamera.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
+ autoFocusCallback = null;
+ break;
+ }
+ }
+ */
+
+ // Install a SurfaceHolder.Callback so we get notified when the
+ // underlying surface is created and destroyed.
+ mHolder = getHolder();
+ mHolder.addCallback(this);
+
+ // deprecated setting, but required on Android versions prior to 3.0
+ mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ }
+
+ public void surfaceCreated(SurfaceHolder holder) {
+ // The Surface has been created, now tell the camera where to draw the preview.
+ try {
+ mCamera.setPreviewDisplay(holder);
+ } catch (IOException e) {
+ Log.d("DBG", "Error setting camera preview: " + e.getMessage());
+ }
+ }
+
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ // Camera preview released in activity
+ }
+
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+ /*
+ * If your preview can change or rotate, take care of those events here.
+ * Make sure to stop the preview before resizing or reformatting it.
+ */
+ if (mHolder.getSurface() == null){
+ // preview surface does not exist
+ return;
+ }
+
+ // stop preview before making changes
+ try {
+ mCamera.stopPreview();
+ } catch (Exception e){
+ // ignore: tried to stop a non-existent preview
+ }
+
+ try {
+ // Hard code camera surface rotation 90 degs to match Activity view in portrait
+ mCamera.setDisplayOrientation(90);
+
+ mCamera.setPreviewDisplay(mHolder);
+ mCamera.setPreviewCallback(previewCallback);
+ mCamera.startPreview();
+ mCamera.autoFocus(autoFocusCallback);
+ } catch (Exception e){
+ Log.d("DBG", "Error starting camera preview: " + e.getMessage());
+ }
+ }
+}