@@ -27,6 +27,8 @@ public class Capture extends VideoBase implements CameraHandlerCallback {
27
27
private int selectedCamera = -1 ;
28
28
29
29
private CameraHandler mCameraHandler ;
30
+
31
+ private boolean isPreviewSizeDefined = true ;
30
32
31
33
public Capture (PApplet parent ) {
32
34
this (parent , -1 , -1 , null );
@@ -45,6 +47,7 @@ public Capture(PApplet parent, int width, int height, String cameraName) {
45
47
if (width == -1 || height == -1 ) {
46
48
width = 720 ;
47
49
height = 1280 ;
50
+ isPreviewSizeDefined = false ;
48
51
}
49
52
init (width , height , ARGB );
50
53
initalizeFrameBuffer ();
@@ -225,6 +228,13 @@ public void startCamera(Integer cameraId) {
225
228
try {
226
229
log ("Starting camera with camera id = " + cameraId );
227
230
mCamera = Camera .open (cameraId );
231
+ Camera .Parameters parameters = mCamera .getParameters ();
232
+ if (!isPreviewSizeDefined ) {
233
+ setPreviewSize (parameters , width );
234
+ } else {
235
+ parameters .setPreviewSize (width , height );
236
+ }
237
+ mCamera .setParameters (parameters );
228
238
mCamera .setDisplayOrientation (90 );
229
239
} catch (Exception e ) {
230
240
System .err .println ("Couldn't open the camera" );
@@ -257,4 +267,18 @@ public void startPreview() {
257
267
e .printStackTrace ();
258
268
}
259
269
}
270
+
271
+ private void setPreviewSize (Camera .Parameters parameters , int expectedWidth ) {
272
+ List <Camera .Size > sizes = parameters .getSupportedPreviewSizes ();
273
+ int minDiff = 100000000 ;
274
+ Camera .Size minSize = null ;
275
+ for (Camera .Size size : sizes ) {
276
+ if (minDiff > Math .abs (expectedWidth - size .width )) {
277
+ minDiff = Math .abs (expectedWidth - size .width );
278
+ minSize = size ;
279
+ }
280
+ }
281
+ Log .i ("Capture" , "Size not provided. Choosing " + minSize .width + "x" + minSize .height );
282
+ parameters .setPreviewSize (minSize .width , minSize .height );
283
+ }
260
284
}
0 commit comments