Check supported parameters

This commit is contained in:
Alexey Gulev 2021-11-20 09:47:01 +01:00
parent 6b01fcb6d6
commit e07bd373ec

View File

@ -45,7 +45,7 @@ public class AndroidCamera extends Fragment
private boolean newFrame; private boolean newFrame;
private int position; private int position;
private int quality; private int quality;
private Camera.Size size; private Camera.Size previewSize;
private static Context context; private static Context context;
@ -132,19 +132,26 @@ public class AndroidCamera extends Fragment
Camera.Parameters params = camera.getParameters(); Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes(); List<Camera.Size> previewSizes = params.getSupportedPreviewSizes();
List<String> focusModes = params.getSupportedFocusModes(); List<String> focusModes = params.getSupportedFocusModes();
List<Camera.Size> pictureSizes = params.getSupportedPictureSizes();
List<Integer> supportedFormats = params.getSupportedPictureFormats();
Camera.Size pictureSize;
switch(this.quality) switch(this.quality)
{ {
case CAPTURE_QUALITY_HIGH: case CAPTURE_QUALITY_HIGH:
this.size = sizes.get(sizes.size() - 1); this.previewSize = previewSizes.get(previewSizes.size() - 1);
pictureSize = pictureSizes.get(previewSizes.size() - 1);
break; break;
case CAPTURE_QUALITY_LOW: case CAPTURE_QUALITY_LOW:
this.size = sizes.get(0); this.previewSize = previewSizes.get(0);
pictureSize = pictureSizes.get(0);
break; break;
case CAPTURE_QUALITY_MEDIUM: case CAPTURE_QUALITY_MEDIUM:
default: default:
this.size = sizes.get((int)Math.ceil(sizes.size() / 2)); this.previewSize = previewSizes.get((int)Math.ceil(previewSizes.size() / 2));
pictureSize = pictureSizes.get((int)Math.ceil(previewSizes.size() / 2));
break; break;
} }
@ -153,10 +160,15 @@ public class AndroidCamera extends Fragment
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
} }
params.setPreviewSize(this.size.width, this.size.height); params.setPreviewSize(this.previewSize.width, this.previewSize.height);
params.setPictureSize(this.size.width, this.size.height); params.setPictureSize(pictureSize.width, pictureSize.height);
if (supportedFormats.contains(PixelFormat.JPEG))
{
params.setPictureFormat(PixelFormat.JPEG); params.setPictureFormat(PixelFormat.JPEG);
params.setJpegQuality(90); params.setJpegQuality(90);
}
camera.setParameters(params); camera.setParameters(params);
final Activity activity = (Activity)context; final Activity activity = (Activity)context;
@ -171,7 +183,7 @@ public class AndroidCamera extends Fragment
if(rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) if(rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270)
flip = true; flip = true;
int[] pixels = convertYUV420_NV21toARGB8888(data, AndroidCamera.this.size.width, AndroidCamera.this.size.height, flip); int[] pixels = convertYUV420_NV21toARGB8888(data, AndroidCamera.this.previewSize.width, AndroidCamera.this.previewSize.height, flip);
frameUpdate(pixels); frameUpdate(pixels);
} }
}); });
@ -184,7 +196,7 @@ public class AndroidCamera extends Fragment
{ {
} }
captureStarted(this.size.width, this.size.height); captureStarted(this.previewSize.width, this.previewSize.height);
camera.startPreview(); camera.startPreview();
queueMessage(CAMERA_STARTED); queueMessage(CAMERA_STARTED);
} }