Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit b3e6d1d

Browse files
author
Emmanuel Garcia
authored
[camera] Support Android 30 (#3299)
1 parent a5510eb commit b3e6d1d

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

packages/camera/camera/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.5.8+17
2+
3+
* Added Android 30 support.
4+
15
## 0.5.8+16
26

37
* Moved package to camera/camera subdir, to allow for federated implementations.

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java

+41-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static io.flutter.plugins.camera.CameraUtils.computeBestPreviewSize;
55

66
import android.annotation.SuppressLint;
7+
import android.annotation.TargetApi;
78
import android.app.Activity;
89
import android.content.Context;
910
import android.graphics.ImageFormat;
@@ -16,12 +17,16 @@
1617
import android.hardware.camera2.CameraMetadata;
1718
import android.hardware.camera2.CaptureFailure;
1819
import android.hardware.camera2.CaptureRequest;
20+
import android.hardware.camera2.params.OutputConfiguration;
21+
import android.hardware.camera2.params.SessionConfiguration;
1922
import android.hardware.camera2.params.StreamConfigurationMap;
2023
import android.media.CamcorderProfile;
2124
import android.media.Image;
2225
import android.media.ImageReader;
2326
import android.media.MediaRecorder;
2427
import android.os.Build;
28+
import android.os.Build.VERSION;
29+
import android.os.Build.VERSION_CODES;
2530
import android.util.Size;
2631
import android.view.OrientationEventListener;
2732
import android.view.Surface;
@@ -39,6 +44,7 @@
3944
import java.util.HashMap;
4045
import java.util.List;
4146
import java.util.Map;
47+
import java.util.concurrent.Executors;
4248

4349
public class Camera {
4450
private final SurfaceTextureEntry flutterTexture;
@@ -325,12 +331,42 @@ public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession
325331
}
326332
};
327333

328-
// Collect all surfaces we want to render to.
329-
List<Surface> surfaceList = new ArrayList<>();
330-
surfaceList.add(flutterSurface);
331-
surfaceList.addAll(remainingSurfaces);
332334
// Start the session
333-
cameraDevice.createCaptureSession(surfaceList, callback, null);
335+
if (VERSION.SDK_INT >= VERSION_CODES.P) {
336+
// Collect all surfaces we want to render to.
337+
List<OutputConfiguration> configs = new ArrayList<>();
338+
configs.add(new OutputConfiguration(flutterSurface));
339+
for (Surface surface : remainingSurfaces) {
340+
configs.add(new OutputConfiguration(surface));
341+
}
342+
createCaptureSessionWithSessionConfig(configs, callback);
343+
} else {
344+
// Collect all surfaces we want to render to.
345+
List<Surface> surfaceList = new ArrayList<>();
346+
surfaceList.add(flutterSurface);
347+
surfaceList.addAll(remainingSurfaces);
348+
createCaptureSession(surfaceList, callback);
349+
}
350+
}
351+
352+
@TargetApi(VERSION_CODES.P)
353+
private void createCaptureSessionWithSessionConfig(
354+
List<OutputConfiguration> outputConfigs, CameraCaptureSession.StateCallback callback)
355+
throws CameraAccessException {
356+
cameraDevice.createCaptureSession(
357+
new SessionConfiguration(
358+
SessionConfiguration.SESSION_REGULAR,
359+
outputConfigs,
360+
Executors.newSingleThreadExecutor(),
361+
callback));
362+
}
363+
364+
@TargetApi(VERSION_CODES.LOLLIPOP)
365+
@SuppressWarnings("deprecation")
366+
private void createCaptureSession(
367+
List<Surface> surfaces, CameraCaptureSession.StateCallback callback)
368+
throws CameraAccessException {
369+
cameraDevice.createCaptureSession(surfaces, callback, null);
334370
}
335371

336372
public void startVideoRecording(String filePath, Result result) {

packages/camera/camera/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: camera
22
description: A Flutter plugin for getting information about and controlling the
33
camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video,
44
and streaming image buffers to dart.
5-
version: 0.5.8+16
5+
version: 0.5.8+17
66
homepage: https://github.com/flutter/plugins/tree/master/packages/camera/camera
77

88
dependencies:

0 commit comments

Comments
 (0)