Skip to content
This repository was archived by the owner on Dec 29, 2022. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 23 additions & 12 deletions library/src/main/api21/com/google/android/cameraview/Camera2.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,11 @@ class Camera2 extends CameraViewImpl {
public void onOpened(@NonNull CameraDevice camera) {
mCamera = camera;
mCallback.onCameraOpened();
startCaptureSession();
try {
startCaptureSession();
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start camera session", e);
}
}

@Override
Expand Down Expand Up @@ -191,7 +195,11 @@ public void onImageAvailable(ImageReader reader) {
mPreview.setCallback(new PreviewImpl.Callback() {
@Override
public void onSurfaceChanged() {
startCaptureSession();
try {
startCaptureSession();
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start camera session", e);
}
}
});
}
Expand Down Expand Up @@ -261,7 +269,11 @@ boolean setAspectRatio(AspectRatio ratio) {
if (mCaptureSession != null) {
mCaptureSession.close();
mCaptureSession = null;
startCaptureSession();
try {
startCaptureSession();
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start camera session", e);
}
}
return true;
}
Expand Down Expand Up @@ -433,6 +445,7 @@ private void prepareImageReader() {
* <p>Starts opening a camera device.</p>
* <p>The result will be processed in {@link #mCameraDeviceCallback}.</p>
*/
@SuppressWarnings("MissingPermission")
private void startOpeningCamera() {
try {
mCameraManager.openCamera(mCameraId, mCameraDeviceCallback, null);
Expand All @@ -445,22 +458,20 @@ private void startOpeningCamera() {
* <p>Starts a capture session for camera preview.</p>
* <p>This rewrites {@link #mPreviewRequestBuilder}.</p>
* <p>The result will be continuously processed in {@link #mSessionCallback}.</p>
*
* @throws CameraAccessException exceptions from {@link Camera2}
*/
void startCaptureSession() {
void startCaptureSession() throws CameraAccessException {
if (!isCameraOpened() || !mPreview.isReady() || mImageReader == null) {
return;
}
Size previewSize = chooseOptimalSize();
mPreview.setBufferSize(previewSize.getWidth(), previewSize.getHeight());
Surface surface = mPreview.getSurface();
try {
mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
mCamera.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
mSessionCallback, null);
} catch (CameraAccessException e) {
throw new RuntimeException("Failed to start camera session");
}
mPreviewRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
mCamera.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
mSessionCallback, null);
}

/**
Expand Down