Skip to content

Commit 011bee5

Browse files
committed
Moar API methods + constructors
Signed-off-by: Umair Khan <[email protected]>
1 parent ba6f0bc commit 011bee5

File tree

1 file changed

+135
-118
lines changed

1 file changed

+135
-118
lines changed

src/in/omerjerk/processing/video/android/Capture.java

Lines changed: 135 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import java.util.ArrayList;
55
import java.util.List;
66

7-
import javax.print.attribute.Size2DSyntax;
8-
97
import android.content.Context;
108
import android.hardware.Camera;
119
import android.hardware.Camera.Size;
@@ -20,72 +18,85 @@
2018

2119
@SuppressWarnings("deprecation")
2220
public class Capture extends PImage implements PConstants {
23-
21+
2422
private static final boolean DEBUG = true;
25-
public static void log(String log) {if (DEBUG) System.out.println(log);}
26-
23+
24+
public static void log(String log) {
25+
if (DEBUG)
26+
System.out.println(log);
27+
}
28+
2729
private PApplet context;
28-
30+
2931
private Camera mCamera;
3032
private Camera.Parameters parameters;
3133
private Size previewSize;
32-
34+
35+
private int previewWidth, previewHeight;
36+
3337
private static ArrayList<String> camerasList = new ArrayList<String>();
34-
38+
3539
private static final String KEY_FRONT_CAMERA = "front-camera-%d";
3640
private static final String KEY_BACK_CAMERA = "back-camera-%d";
37-
41+
3842
private int selectedCamera = 0;
39-
40-
public Capture (PApplet context) {
43+
44+
public Capture(PApplet context) {
45+
this(context, -1, -1);
46+
}
47+
48+
public Capture(PApplet context, int width, int height) {
4149
this.context = context;
50+
this.width = width;
51+
this.height = height;
4252
}
43-
53+
4454
public void setCamera(String camera) {
4555
if (camera == null || camera.equals("")) {
4656
selectedCamera = 0;
4757
} else {
4858
selectedCamera = camerasList.indexOf(camera);
4959
}
5060
log("Selected camera = " + selectedCamera);
51-
createPreviewWindow();
61+
try {
62+
mCamera = Camera.open(selectedCamera);
63+
createPreviewWindow();
64+
} catch (Exception e) {
65+
log("Couldn't open the Camera");
66+
e.printStackTrace();
67+
}
5268
}
53-
69+
5470
private void createPreviewWindow() {
5571
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
56-
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
57-
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
58-
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
59-
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
60-
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
72+
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
73+
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
74+
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
75+
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
76+
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
6177

62-
params.gravity = Gravity.TOP | Gravity.LEFT;
63-
params.height = 1;
64-
params.width = 1;
78+
params.gravity = Gravity.TOP | Gravity.LEFT;
79+
params.height = 1;
80+
params.width = 1;
6581

66-
try {
67-
mCamera = Camera.open(selectedCamera);
68-
parameters = mCamera.getParameters();
69-
setMinimumPreviewSize();
70-
mCamera.setParameters(parameters);
71-
previewSize = parameters.getPreviewSize();
72-
init(previewSize.height, previewSize.width, ARGB);
73-
74-
log("Width = " + previewSize.width);
75-
log("height = " + previewSize.height);
76-
final WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
77-
context.runOnUiThread(new Runnable() {
78-
@Override
79-
public void run() {
80-
CameraPreview mPreview = new CameraPreview(context, mCamera);
81-
windowManager.addView(mPreview, params);
82-
mCamera.setPreviewCallback(previewCallback);
83-
}
84-
});
85-
} catch (Exception e) {
86-
System.err.println("Camera not avaialble to use.");
87-
e.printStackTrace();
88-
}
82+
parameters = mCamera.getParameters();
83+
setPreviewSize();
84+
mCamera.setParameters(parameters);
85+
previewSize = parameters.getPreviewSize();
86+
init(previewSize.height, previewSize.width, ARGB);
87+
88+
log("Width = " + previewSize.width);
89+
log("height = " + previewSize.height);
90+
final WindowManager windowManager = (WindowManager) context
91+
.getSystemService(Context.WINDOW_SERVICE);
92+
context.runOnUiThread(new Runnable() {
93+
@Override
94+
public void run() {
95+
CameraPreview mPreview = new CameraPreview(context, mCamera);
96+
windowManager.addView(mPreview, params);
97+
mCamera.setPreviewCallback(previewCallback);
98+
}
99+
});
89100
}
90101

91102
public String[] list() {
@@ -97,7 +108,7 @@ public String[] list() {
97108
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
98109
camerasList.add(String.format(KEY_FRONT_CAMERA, i));
99110
} else {
100-
//Back Camera
111+
// Back Camera
101112
camerasList.add(String.format(KEY_BACK_CAMERA, i));
102113
}
103114
}
@@ -107,96 +118,102 @@ public String[] list() {
107118
}
108119
return null;
109120
}
110-
121+
111122
private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
112-
123+
113124
@Override
114125
public void onPreviewFrame(byte[] frame, Camera camera) {
115-
pixels = Utils.convertYUV420_NV21toRGB8888(frame, previewSize.width, previewSize.height);
116-
pixels = Utils.rotateRGBDegree90(pixels, previewSize.width, previewSize.height);
126+
pixels = Utils.convertYUV420_NV21toRGB8888(frame,
127+
previewSize.width, previewSize.height);
128+
pixels = Utils.rotateRGBDegree90(pixels, previewSize.width,
129+
previewSize.height);
117130
updatePixels();
118131
}
119132
};
120-
121-
private class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
122-
133+
134+
private class CameraPreview extends SurfaceView implements
135+
SurfaceHolder.Callback {
136+
123137
private Camera mCamera;
124138
private SurfaceHolder mHolder;
125-
139+
126140
public CameraPreview(Context context, Camera camera) {
127141
super(context);
128142
this.mCamera = camera;
129-
143+
130144
mHolder = getHolder();
131145
mHolder.addCallback(this);
132146
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
133147
}
134-
148+
135149
@Override
136-
public void surfaceCreated(SurfaceHolder holder) {
150+
public void surfaceCreated(SurfaceHolder holder) {
137151
try {
138-
mCamera.setPreviewDisplay(holder);
139-
mCamera.startPreview();
140-
} catch (IOException e) {
141-
Log.d("PROCESSING", "Error setting camera preview: " + e.getMessage());
142-
e.printStackTrace();
143-
}
144-
}
145-
146-
@Override
147-
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
148-
// If your preview can change or rotate, take care of those events here.
149-
// Make sure to stop the preview before resizing or reformatting it.
150-
151-
if (mHolder.getSurface() == null){
152-
// preview surface does not exist
153-
return;
154-
}
155-
156-
// stop preview before making changes
157-
try {
158-
mCamera.stopPreview();
159-
} catch (Exception e){
160-
// ignore: tried to stop a non-existent preview
161-
}
162-
163-
// set preview size and make any resize, rotate or
164-
// reformatting changes here
165-
166-
// start preview with new settings
167-
try {
168-
mCamera.setPreviewDisplay(mHolder);
169-
mCamera.startPreview();
170-
171-
} catch (Exception e){
172-
Log.d("PROCESSING", "Error starting camera preview: " + e.getMessage());
173-
e.printStackTrace();
174-
}
175-
}
176-
177-
@Override
178-
public void surfaceDestroyed(SurfaceHolder holder) {
179-
// do nothing
180-
}
181-
}
182-
183-
private void setMinimumPreviewSize() {
184-
List<Camera.Size> sizes = mCamera.getParameters().getSupportedPreviewSizes();
185-
/*
186-
Camera.Size minSize = null;
187-
for (Camera.Size size : sizes) {
188-
log("Size = " + size.width + " height = " + size.height);
189-
if (minSize == null) {
190-
minSize = size;
191-
continue;
152+
mCamera.setPreviewDisplay(holder);
153+
mCamera.startPreview();
154+
} catch (IOException e) {
155+
Log.d("PROCESSING",
156+
"Error setting camera preview: " + e.getMessage());
157+
e.printStackTrace();
192158
}
193-
if (minSize.width > size.width) {
194-
minSize = size;
159+
}
160+
161+
@Override
162+
public void surfaceChanged(SurfaceHolder holder, int format, int width,
163+
int height) {
164+
// If your preview can change or rotate, take care of those events
165+
// here.
166+
// Make sure to stop the preview before resizing or reformatting it.
167+
168+
if (mHolder.getSurface() == null) {
169+
// preview surface does not exist
170+
return;
171+
}
172+
173+
// stop preview before making changes
174+
try {
175+
mCamera.stopPreview();
176+
} catch (Exception e) {
177+
// ignore: tried to stop a non-existent preview
195178
}
196-
}*/
197-
Camera.Size minSize = sizes.get(sizes.size() - 8);
198-
log("minimum width = " + minSize.width + " height = " + minSize.height);
199-
// parameters.setPictureSize(minSize.height, minSize.width);
200-
parameters.setPreviewSize(minSize.width, minSize.height);
179+
180+
// set preview size and make any resize, rotate or
181+
// reformatting changes here
182+
183+
// start preview with new settings
184+
try {
185+
mCamera.setPreviewDisplay(mHolder);
186+
mCamera.startPreview();
187+
188+
} catch (Exception e) {
189+
Log.d("PROCESSING",
190+
"Error starting camera preview: " + e.getMessage());
191+
e.printStackTrace();
192+
}
193+
}
194+
195+
@Override
196+
public void surfaceDestroyed(SurfaceHolder holder) {
197+
// do nothing
198+
}
199+
}
200+
201+
private void setPreviewSize() {
202+
if (!(width == -1 || height == -1)) {
203+
parameters.setPreviewSize(previewWidth, previewHeight);
204+
}
205+
}
206+
207+
public Camera getCamera() {
208+
return mCamera;
209+
}
210+
211+
public static void printCompatibleResolutionsList(Capture capture) {
212+
Camera camera = capture.getCamera();
213+
List<Camera.Size> sizes = camera.getParameters()
214+
.getSupportedPreviewSizes();
215+
for (Size size : sizes) {
216+
System.out.println(size.width + "x" + size.height);
217+
}
201218
}
202219
}

0 commit comments

Comments
 (0)