Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[camera] MediaSettings parameter for createCameraWithSettings #3586

Merged
merged 159 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
f294625
added MediaSettings
PROGrand Mar 29, 2023
5ca79b9
updated changelog
PROGrand Mar 29, 2023
e08e046
MediaSettings introduced.
PROGrand Mar 29, 2023
21617de
Merge branch 'flutter:main' into main
PROGrand Mar 29, 2023
59d66d3
excerpts added. formatted.
PROGrand Mar 29, 2023
aeec92e
versions and changelogs
PROGrand Mar 29, 2023
869b787
CameraPlatform.createCameraWithSettings
PROGrand Mar 29, 2023
3cf6030
Merge branch 'main' into main
PROGrand Mar 30, 2023
6ac763e
Merge branch 'flutter:main' into main
PROGrand Mar 30, 2023
a40177a
Update CHANGELOG.md
PROGrand Mar 30, 2023
fea1fc7
Update camera_test.dart
PROGrand Mar 30, 2023
9f71f8d
Update main.dart
PROGrand Mar 30, 2023
4a0ac77
MediaSettings.low removed
PROGrand Mar 30, 2023
8fcf1ae
media settings low
PROGrand Mar 30, 2023
da4ecd8
merger mediasettings
PROGrand Mar 30, 2023
16645ef
resolved multiple @hellohuanlin зкщзÑproposals
PROGrand Mar 30, 2023
d7dea54
fps control
PROGrand Mar 31, 2023
6caea7e
Fixed pausing preview on already paused or closed session.
PROGrand Mar 31, 2023
4bec8f3
Prevent pausing preview on uninitialized controller.
PROGrand Mar 31, 2023
11b43c1
Prevent pausing preview on disposed controller.
PROGrand Mar 31, 2023
772e011
Merge branch 'flutter:main' into main
PROGrand Mar 31, 2023
dbb752d
formatted
PROGrand Mar 31, 2023
7f01b93
Merge branch 'main' into main
PROGrand Apr 5, 2023
3506af1
Update packages/camera/camera_android/CHANGELOG.md
PROGrand Apr 26, 2023
8f95dc2
Update packages/camera/camera/CHANGELOG.md
PROGrand Apr 26, 2023
6b1f96c
bump gradle:7.20 in CHANGELOG
PROGrand Apr 26, 2023
6f97b51
commented feature properties
PROGrand Apr 26, 2023
d96f9d5
android_camera_camerax CHANGELOD update
PROGrand Apr 26, 2023
401adce
revert default enableAudio to false
PROGrand Apr 26, 2023
8edd212
properly commented IntFeature
PROGrand Apr 26, 2023
0a8fe17
clarify test constants
PROGrand Apr 26, 2023
d072dfb
pass logic to to _getTargetResolutionForPreview
PROGrand Apr 26, 2023
accef7c
versions fix
PROGrand Apr 26, 2023
480761c
Update packages/camera/camera_platform_interface/lib/src/types/media_…
PROGrand Apr 26, 2023
bdd74a8
Comments improved
PROGrand Apr 26, 2023
ec5856f
minor version increased.
PROGrand Apr 26, 2023
6736802
resolve upstream conflict
PROGrand Apr 26, 2023
9fdd1e0
Merge branch 'main' into main
PROGrand Apr 26, 2023
8a55d87
merged
PROGrand Jun 5, 2023
7d88b16
merge with camera: 0.10.5+2
PROGrand Jun 5, 2023
86c95e9
flutter 3.10.3 + analysis: error 'Found an extra analysis_options.yaml'
PROGrand Jun 5, 2023
c78cfc5
multiple analysis issues: const, await etc.
PROGrand Jun 5, 2023
5597838
expectLater for exceptions checking on async methods
PROGrand Jun 5, 2023
d006820
order of call and verify for mockito is important
PROGrand Jun 5, 2023
f60804d
ios tests passed
PROGrand Jun 5, 2023
d21dd5b
lint suppress
PROGrand Jun 5, 2023
b08f5f1
annotation imports
PROGrand Jun 5, 2023
d361800
mark IntFeature usages as NonNull
PROGrand Jun 5, 2023
a29b222
IntFeature NonNull
PROGrand Jun 5, 2023
1020ee7
import NonNull
PROGrand Jun 5, 2023
c31a502
NonNull
PROGrand Jun 5, 2023
dc0620e
Merge branch 'main' into main
PROGrand Jun 5, 2023
d185de2
Update CHANGELOG and Version
PROGrand Jun 5, 2023
a1fe134
interface version
PROGrand Jun 5, 2023
58aa61d
flutter_plugin_tools.dart make-deps-path-based
PROGrand Jun 5, 2023
ecae539
temporary publish_to: none
PROGrand Jun 5, 2023
2eb0657
temporary deps change: avoid The following unexpected non-local depen…
PROGrand Jun 5, 2023
a3f9c1d
deps order
PROGrand Jun 5, 2023
0d3d0a9
Merge branch 'main' into main
PROGrand Jun 5, 2023
076110f
mistype
PROGrand Jun 5, 2023
ce05518
args package changed.
PROGrand Jun 5, 2023
618a432
args changed: errorHandler
PROGrand Jun 5, 2023
e81dfee
args updated
PROGrand Jun 5, 2023
c95b6d5
bump dart version
PROGrand Jun 5, 2023
e392d1d
args: ^2.3.2
PROGrand Jun 5, 2023
72233fc
workaround args version
PROGrand Jun 5, 2023
0a81ffe
workaround args version
PROGrand Jun 5, 2023
8b0c6e8
merged
PROGrand Jun 5, 2023
dfe7b5a
dependency overrides
PROGrand Jun 6, 2023
277d4ae
Merge remote-tracking branch 'upstream/main'
PROGrand Jun 6, 2023
863f79a
examples deps
PROGrand Jun 6, 2023
3bdf221
examples deps
PROGrand Jun 6, 2023
6060603
packages deps
PROGrand Jun 6, 2023
ca7e7c6
publish_to: none removed
PROGrand Jun 6, 2023
5146a65
examples deps
PROGrand Jun 6, 2023
4e881fd
removed host deps
PROGrand Jun 6, 2023
4f07db2
camera deps
PROGrand Jun 6, 2023
a707e48
camera deps
PROGrand Jun 6, 2023
d50992d
camera deps
PROGrand Jun 6, 2023
fb99586
camera deps
PROGrand Jun 6, 2023
a0ca63a
around dependabot
PROGrand Jun 6, 2023
59186e6
merged
PROGrand Jun 21, 2023
0653456
changelogs updated
PROGrand Jun 21, 2023
0cb06da
MediaSettings export from camera/camera.dart
PROGrand Jun 21, 2023
2cc95af
camera/camera_controller.dart restored resolutionPreset and enableAudio
PROGrand Jun 21, 2023
22656de
Update packages/camera/camera/lib/src/camera_controller.dart
PROGrand Jun 21, 2023
1401590
Update packages/camera/camera_platform_interface/lib/src/types/media_…
PROGrand Jun 21, 2023
0ed67df
Update packages/camera/camera_platform_interface/lib/src/types/media_…
PROGrand Jun 21, 2023
c24d21e
Merge branch 'main' into main
PROGrand Jun 21, 2023
ff29e3f
version fix
PROGrand Jun 21, 2023
fdd75fd
Merge branch 'main' into main
PROGrand Jun 22, 2023
85a49f1
merged latest main 07/25/2023
PROGrand Jul 25, 2023
7088c8a
Object.hash
PROGrand Jul 25, 2023
85d6f20
bump gradle version moved to last entry changelog entry
PROGrand Jul 25, 2023
597dcc2
fixed format and analyzer issues
PROGrand Jul 25, 2023
c1bac8b
reverted merge for onStreamedFrameAvailable test
PROGrand Jul 25, 2023
8a90eee
Merge branch 'main' into main
PROGrand Jul 26, 2023
d7bc0be
camsim99 requests to remove gradle upgrade
PROGrand Aug 4, 2023
ea1777a
added safety checks for preview.
PROGrand Aug 4, 2023
e0ffa44
merged 08/04/2023
PROGrand Aug 4, 2023
f80e65f
Merge branch 'main' of github.com:mtbo-org/packages
PROGrand Aug 4, 2023
8e14f0d
version check
PROGrand Aug 4, 2023
aa4802e
merged
PROGrand Aug 14, 2023
ea9e49e
merged
PROGrand Aug 14, 2023
aa6cc8b
Update packages/camera/camera_android/CHANGELOG.md
PROGrand Aug 15, 2023
8d5a701
[file_selector] Fix default accept types on iOS (#4691)
stuartmorgan Aug 14, 2023
97abc1b
merged
PROGrand Aug 15, 2023
2d7ec3d
7.3.0
PROGrand Aug 15, 2023
def599e
7.4.2
PROGrand Aug 15, 2023
0b5d0ac
Merge branch 'main' into main
PROGrand Aug 15, 2023
d2dd528
merged with upstream/main (CHANGELOGs and package versions)
PROGrand Sep 4, 2023
14993b5
yaml: topics
PROGrand Sep 4, 2023
18be71c
touch
PROGrand Sep 4, 2023
b144466
Update packages/camera/camera_web/lib/src/camera.dart
PROGrand Sep 19, 2023
c7140d5
Update packages/camera/camera_web/lib/src/camera_service.dart
PROGrand Sep 19, 2023
81d3ba9
merged
PROGrand Sep 19, 2023
541b307
tested
PROGrand Sep 19, 2023
9776de3
analyzed
PROGrand Sep 19, 2023
a1bf2a0
audio bitrate constraints removed from test
PROGrand Sep 19, 2023
25e2241
Update packages/camera/camera_web/lib/src/camera_service.dart
PROGrand Sep 20, 2023
6fd3f07
Update packages/camera/camera_web/lib/src/camera.dart
PROGrand Sep 20, 2023
8204c5c
Merge branch 'main' into main
PROGrand Sep 20, 2023
ca0cc6b
applied suggestions
PROGrand Sep 20, 2023
cc6a0bd
Merge branch 'main' into main
PROGrand Sep 21, 2023
5cf735d
Merge branch 'main' into main
PROGrand Sep 22, 2023
59f3464
Merge branch 'main' into main
PROGrand Sep 24, 2023
5d0d68c
merged
PROGrand Sep 27, 2023
14ce07f
merged 09/30/2023
PROGrand Sep 30, 2023
d04448b
Merge branch 'main' into main
PROGrand Oct 2, 2023
835ce37
merged: camera_platform_interface
PROGrand Oct 24, 2023
556133e
actualized
PROGrand Oct 24, 2023
ee7d582
Merge remote-tracking branch 'refs/remotes/upstream/main'
PROGrand Apr 6, 2024
0b5da81
dart 3.2.3, merged with main.
PROGrand Apr 6, 2024
b892a0e
merged with upstream/main
PROGrand Apr 6, 2024
5665dea
removed cast
PROGrand Apr 6, 2024
bed9858
Merge branch 'main' into main
PROGrand Apr 7, 2024
4a6d0d7
Merge branch 'main' into main
PROGrand Apr 8, 2024
6ff11f7
remove exessive changes
PROGrand Apr 8, 2024
fb71469
Merge branch 'main' of github.com:mtbo-org/packages
PROGrand Apr 8, 2024
d711155
camera preview bug splitted into issue 146424
PROGrand Apr 8, 2024
1f92fe1
tested
PROGrand Apr 8, 2024
ad5acc3
README snipped validated
PROGrand Apr 8, 2024
b91875a
Merge branch 'main' into main
PROGrand Apr 8, 2024
f278395
Merge branch 'main' into main
PROGrand Apr 8, 2024
5be4485
Merge branch 'main' into main
PROGrand Apr 9, 2024
672877f
Merge branch 'main' into main
PROGrand Apr 9, 2024
21d838f
Merge branch 'main' into main
PROGrand Apr 10, 2024
def04ca
Merge branch 'main' into main
PROGrand Apr 11, 2024
3cfce50
Merge branch 'main' into main
PROGrand Apr 17, 2024
0af2d84
Merge branch 'main' into main
PROGrand Apr 17, 2024
05ce99c
suggestions applied
PROGrand Apr 17, 2024
8569ed4
Merge branch 'main' into main
PROGrand Apr 17, 2024
dd03971
Merge branch 'main' into main
PROGrand Apr 19, 2024
61d64ca
CameraController.withSettings -> CameraController
PROGrand Apr 19, 2024
7ac9609
Merge branch 'main' into main
PROGrand Apr 19, 2024
2639989
Merge branch 'main' into main
PROGrand Apr 20, 2024
ccceded
Merge branch 'main' into main
PROGrand Apr 22, 2024
86bfe6c
Merge branch 'main' into main
PROGrand Apr 22, 2024
5cb9ef3
Merge branch 'main' into main
PROGrand Apr 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/camera/camera/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## NEXT
## 0.10.6

* Adds support to control video fps and bitrate. See `CameraController` constructor.
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.
* Updates support matrix in README to indicate that iOS 11 is no longer supported.
* Clients on versions of Flutter that still support iOS 11 can continue to use this
Expand Down
51 changes: 39 additions & 12 deletions packages/camera/camera/lib/src/camera_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,30 @@ class CameraValue {
/// To show the camera preview on the screen use a [CameraPreview] widget.
class CameraController extends ValueNotifier<CameraValue> {
/// Creates a new camera controller in an uninitialized state.
///
/// - [resolutionPreset] affect the quality of video recording and image capture.
/// - [enableAudio] controls audio presence in recorded video.
///
/// Following parameters (if present) will overwrite [resolutionPreset] settings:
/// - [fps] controls rate at which frames should be captured by the camera in frames per second.
/// - [videoBitrate] controls the video encoding bit rate for recording.
/// - [audioBitrate] controls the audio encoding bit rate for recording.

CameraController(
CameraDescription description,
this.resolutionPreset, {
this.enableAudio = true,
ResolutionPreset resolutionPreset, {
bool enableAudio = true,
int? fps,
int? videoBitrate,
int? audioBitrate,
this.imageFormatGroup,
}) : super(CameraValue.uninitialized(description));
}) : mediaSettings = MediaSettings(
resolutionPreset: resolutionPreset,
enableAudio: enableAudio,
fps: fps,
videoBitrate: videoBitrate,
audioBitrate: audioBitrate),
super(CameraValue.uninitialized(description));

/// The properties of the camera device controlled by this controller.
CameraDescription get description => value.description;
Expand All @@ -248,10 +266,19 @@ class CameraController extends ValueNotifier<CameraValue> {
/// if unavailable a lower resolution will be used.
///
/// See also: [ResolutionPreset].
final ResolutionPreset resolutionPreset;
PROGrand marked this conversation as resolved.
Show resolved Hide resolved
ResolutionPreset get resolutionPreset =>
mediaSettings.resolutionPreset ?? ResolutionPreset.max;

/// Whether to include audio when recording a video.
final bool enableAudio;
bool get enableAudio => mediaSettings.enableAudio;

/// The media settings this controller is targeting.
///
/// This media settings are not guaranteed to be available on the device,
/// if unavailable a [resolutionPreset] default values will be used.
///
/// See also: [MediaSettings].
final MediaSettings mediaSettings;

/// The [ImageFormatGroup] describes the output of the raw image format.
///
Expand All @@ -265,6 +292,7 @@ class CameraController extends ValueNotifier<CameraValue> {

bool _isDisposed = false;
StreamSubscription<CameraImageData>? _imageStreamSubscription;

// A Future awaiting an attempt to initialize (e.g. after `initialize` was
// just called). If the controller has not been initialized at least once,
// this value is null.
Expand Down Expand Up @@ -313,10 +341,9 @@ class CameraController extends ValueNotifier<CameraValue> {
);
});

_cameraId = await CameraPlatform.instance.createCamera(
_cameraId = await CameraPlatform.instance.createCameraWithSettings(
description,
resolutionPreset,
enableAudio: enableAudio,
mediaSettings,
);

_unawaited(CameraPlatform.instance
Expand Down Expand Up @@ -372,7 +399,7 @@ class CameraController extends ValueNotifier<CameraValue> {

/// Pauses the current camera preview
Future<void> pausePreview() async {
if (value.isPreviewPaused) {
if (value.isPreviewPaused || !value.isInitialized || _isDisposed) {
PROGrand marked this conversation as resolved.
Show resolved Hide resolved
return;
}
try {
Expand Down Expand Up @@ -923,7 +950,7 @@ class Optional<T> extends IterableBase<T> {
if (_value == null) {
throw StateError('value called on absent Optional.');
}
return _value!;
return _value;
}

/// Executes a function if the Optional value is present.
Expand Down Expand Up @@ -960,7 +987,7 @@ class Optional<T> extends IterableBase<T> {
Optional<S> transform<S>(S Function(T value) transformer) {
return _value == null
? Optional<S>.absent()
: Optional<S>.of(transformer(_value as T));
: Optional<S>.of(transformer(_value));
}

/// Transforms the Optional value.
Expand All @@ -971,7 +998,7 @@ class Optional<T> extends IterableBase<T> {
Optional<S> transformNullable<S>(S? Function(T value) transformer) {
return _value == null
? Optional<S>.absent()
: Optional<S>.fromNullable(transformer(_value as T));
: Optional<S>.fromNullable(transformer(_value));
}

@override
Expand Down
14 changes: 7 additions & 7 deletions packages/camera/camera/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ description: A Flutter plugin for controlling the camera. Supports previewing
Dart.
repository: https://github.com/flutter/packages/tree/main/packages/camera/camera
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
version: 0.10.5+9
version: 0.10.6

environment:
sdk: ^3.1.0
flutter: ">=3.13.0"
sdk: ^3.2.3
flutter: ">=3.16.6"

flutter:
plugin:
Expand All @@ -21,10 +21,10 @@ flutter:
default_package: camera_web

dependencies:
camera_android: ^0.10.7
camera_avfoundation: ^0.9.13
camera_platform_interface: ^2.5.0
camera_web: ^0.3.1
camera_android: ^0.10.9
camera_avfoundation: ^0.9.15
camera_platform_interface: ^2.6.0
camera_web: ^0.3.3
flutter:
sdk: flutter
flutter_plugin_android_lifecycle: ^2.0.2
Expand Down
10 changes: 10 additions & 0 deletions packages/camera/camera/test/camera_preview_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// found in the LICENSE file.

import 'package:camera/camera.dart';
import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
Expand Down Expand Up @@ -68,6 +69,15 @@ class FakeController extends ValueNotifier<CameraValue>
@override
ResolutionPreset get resolutionPreset => ResolutionPreset.low;

@override
MediaSettings get mediaSettings => const MediaSettings(
resolutionPreset: ResolutionPreset.low,
fps: 15,
videoBitrate: 200000,
audioBitrate: 32000,
enableAudio: true,
);

@override
Future<void> resumeVideoRecording() async {}

Expand Down
51 changes: 48 additions & 3 deletions packages/camera/camera/test/camera_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,46 @@ void main() {
expect(cameraController.value.isInitialized, isTrue);
});

test('can be initialized with media settings', () async {
final CameraController cameraController = CameraController(
const CameraDescription(
name: 'cam',
lensDirection: CameraLensDirection.back,
sensorOrientation: 90),
ResolutionPreset.low,
fps: 15,
videoBitrate: 200000,
audioBitrate: 32000,
enableAudio: false,
);
await cameraController.initialize();

expect(cameraController.value.aspectRatio, 1);
expect(cameraController.value.previewSize, const Size(75, 75));
expect(cameraController.value.isInitialized, isTrue);
expect(cameraController.resolutionPreset, ResolutionPreset.low);
expect(cameraController.enableAudio, false);
expect(cameraController.mediaSettings.fps, 15);
expect(cameraController.mediaSettings.videoBitrate, 200000);
expect(cameraController.mediaSettings.audioBitrate, 32000);
});

test('default constructor initializes media settings', () async {
final CameraController cameraController = CameraController(
const CameraDescription(
name: 'cam',
lensDirection: CameraLensDirection.back,
sensorOrientation: 90),
ResolutionPreset.max);
await cameraController.initialize();

expect(cameraController.resolutionPreset, ResolutionPreset.max);
expect(cameraController.enableAudio, true);
expect(cameraController.mediaSettings.fps, isNull);
expect(cameraController.mediaSettings.videoBitrate, isNull);
expect(cameraController.mediaSettings.audioBitrate, isNull);
});

test('can be disposed', () async {
final CameraController cameraController = CameraController(
const CameraDescription(
Expand Down Expand Up @@ -1429,15 +1469,20 @@ class MockCameraPlatform extends Mock
Future<List<CameraDescription>> availableCameras() =>
Future<List<CameraDescription>>.value(mockAvailableCameras);

@override
Future<int> createCameraWithSettings(
CameraDescription cameraDescription, MediaSettings? mediaSettings) =>
mockPlatformException
? throw PlatformException(code: 'foo', message: 'bar')
: Future<int>.value(mockInitializeCamera);

@override
Future<int> createCamera(
CameraDescription description,
ResolutionPreset? resolutionPreset, {
bool enableAudio = false,
}) =>
mockPlatformException
? throw PlatformException(code: 'foo', message: 'bar')
: Future<int>.value(mockInitializeCamera);
createCameraWithSettings(description, null);

@override
Stream<CameraInitializedEvent> onCameraInitialized(int cameraId) =>
Expand Down