source: other-projects/tipple-android/tipple-ar/tipple-standalone-hpg/src/org/greenstone/android/tipple/base/CameraPreview.java@ 26528

Last change on this file since 26528 was 26528, checked in by davidb, 11 years ago

Code developed by the Tipple-AR Smoke and Mirrors team, based on the main tipple trunk

File size: 1.9 KB
Line 
1package org.greenstone.android.tipple.base;
2
3import android.content.Context;
4import android.hardware.Camera;
5import android.view.SurfaceHolder;
6import android.view.SurfaceView;
7
8public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
9
10 Camera camera;
11
12 public CameraPreview(Context context) {
13 super(context);
14 getHolder().addCallback(this);
15 getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
16 }
17
18 @Override
19 public void surfaceCreated(SurfaceHolder holder) {
20 System.err.println("*** CameraPreview::surfaceCreated()");
21 camera = Camera.open();
22 try {
23 camera.setPreviewDisplay(holder);
24 } catch (Exception e) {
25 e.printStackTrace();
26 }
27 }
28
29 @Override
30 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
31 System.err.println("*** CameraPreview::surfaceChanged()");
32
33 Camera.Parameters parameters = camera.getParameters();
34 Camera.Size size = getBestPreviewSize(width, height, parameters);
35
36 if (size != null) {
37 parameters.setPreviewSize(size.width, size.height);
38 camera.setParameters(parameters);
39 camera.startPreview();
40 } else {
41 System.err.println("Could not find a good camera preview size");
42 }
43 }
44
45 @Override
46 public void surfaceDestroyed(SurfaceHolder holder) {
47 System.err.println("*** CameraPreview::surfaceDestroyed()");
48 camera.stopPreview();
49 camera.release();
50 camera = null;
51 }
52
53 private Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters) {
54 Camera.Size result = null;
55
56 for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
57 if (size.width <= width && size.height <= height) {
58 if (result == null) {
59 result = size;
60 } else {
61 int resultArea = result.width * result.height;
62 int newArea = size.width * size.height;
63 if (newArea > resultArea) {
64 result = size;
65 }
66 }
67 }
68 }
69
70 return (result);
71 }
72}
Note: See TracBrowser for help on using the repository browser.