diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 3e34236b..80dd92ba 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -173,7 +173,16 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera Camera.Parameters params = mCamera.getParameters(); mPreviewFormat = params.getPreviewFormat(); params.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); // <- not allowed during preview - params.setPictureSize(mCaptureSize.getWidth(), mCaptureSize.getHeight()); // <- allowed + if (mMode == Mode.PICTURE) { + params.setPictureSize(mCaptureSize.getWidth(), mCaptureSize.getHeight()); // <- allowed + } else { + // mCaptureSize in this case is a video size. The available video sizes are not necessarily + // a subset of the picture sizes, so we can't use the mCaptureSize value: it might crash. + // However, the setPictureSize() passed here is useless : we don't allow HQ pictures in video mode. + // While this might be lifted in the future, for now, just use a picture capture size. + Size pictureSize = computeCaptureSize(Mode.PICTURE); + params.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight()); + } mCamera.setParameters(params); mCamera.setPreviewCallbackWithBuffer(null); // Release anything left diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index f283e5af..d6063787 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -523,12 +523,17 @@ abstract class CameraController implements @NonNull @SuppressWarnings("WeakerAccess") protected final Size computeCaptureSize() { + return computeCaptureSize(mMode); + } + + @SuppressWarnings("WeakerAccess") + protected final Size computeCaptureSize(Mode mode) { // We want to pass stuff into the REF_VIEW reference, not the sensor one. // This is already managed by CameraOptions, so we just flip again at the end. boolean flip = flip(REF_SENSOR, REF_VIEW); SizeSelector selector; Collection sizes; - if (mMode == Mode.PICTURE) { + if (mode == Mode.PICTURE) { selector = mPictureSizeSelector; sizes = mCameraOptions.getSupportedPictureSizes(); } else { @@ -538,7 +543,7 @@ abstract class CameraController implements selector = SizeSelectors.or(selector, SizeSelectors.biggest()); List list = new ArrayList<>(sizes); Size result = selector.select(list).get(0); - LOG.i("computeCaptureSize:", "result:", result, "flip:", flip); + LOG.i("computeCaptureSize:", "result:", result, "flip:", flip, "mode:", mode); if (flip) result = result.flip(); // Go back to REF_SENSOR return result; }