fix(android): android crash fixes. Make sure no unsupported aspect ratio is used, and do not crash when there are no cameras available. (#2662)

This commit is contained in:
cristianoccazinsp 2019-12-31 12:30:01 -03:00 committed by Sibelius Seraphini
parent d84127f310
commit db7b9e4a98

View File

@ -446,6 +446,7 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
final Set<Size> sizes = mPreviewSizes.sizes(ratio);
if (sizes == null) {
// do nothing, ratio remains unchanged. Consistent with Camera2 and initial mount behaviour
Log.w("CAMERA_1::", "setAspectRatio received an unsupported value and will be ignored.");
} else {
mAspectRatio = ratio;
mBgHandler.post(new Runnable() {
@ -870,7 +871,10 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
if(_mCameraId == null){
int count = Camera.getNumberOfCameras();
if(count == 0){
throw new RuntimeException("No camera available.");
//throw new RuntimeException("No camera available.");
mCameraId = INVALID_CAMERA_ID;
Log.w("CAMERA_1::", "getNumberOfCameras returned 0. No camera available.");
return;
}
for (int i = 0; i < count; i++) {
@ -899,19 +903,38 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
if (mCamera != null) {
releaseCamera();
}
// in case we got an invalid camera ID
// due to no cameras or invalid ID provided,
// return false so we can raise a mount error
if(mCameraId == INVALID_CAMERA_ID){
return false;
}
try {
mCamera = Camera.open(mCameraId);
mCameraParameters = mCamera.getParameters();
// Supported preview sizes
mPreviewSizes.clear();
for (Camera.Size size : mCameraParameters.getSupportedPreviewSizes()) {
mPreviewSizes.add(new Size(size.width, size.height));
}
// Supported picture sizes;
mPictureSizes.clear();
for (Camera.Size size : mCameraParameters.getSupportedPictureSizes()) {
mPictureSizes.add(new Size(size.width, size.height));
}
// to be consistent with Camera2, and to prevent crashes on some devices
// do not allow preview sizes that are not also in the picture sizes set
for (AspectRatio aspectRatio : mPreviewSizes.ratios()) {
if (mPictureSizes.sizes(aspectRatio) == null) {
mPreviewSizes.remove(aspectRatio);
}
}
// AspectRatio
if (mAspectRatio == null) {
mAspectRatio = Constants.DEFAULT_ASPECT_RATIO;
@ -939,6 +962,7 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
void adjustCameraParameters() {
SortedSet<Size> sizes = mPreviewSizes.sizes(mAspectRatio);
if (sizes == null) { // Not supported
Log.w("CAMERA_1::", "adjustCameraParameters received an unsupported aspect ratio value and will be ignored.");
mAspectRatio = chooseAspectRatio();
sizes = mPreviewSizes.sizes(mAspectRatio);
}