-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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] add video stabilization #7108
Open
ruicraveiro
wants to merge
49
commits into
flutter:main
Choose a base branch
from
ruicraveiro:vs_squashed
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 41 commits
Commits
Show all changes
49 commits
Select commit
Hold shift + click to select a range
9bdf58e
Adds video stabilization to camera
ruicraveiro 39e2adf
do not merge! dependency overrides
ruicraveiro edf33b0
Update camera_info.dart
ruicraveiro 741e032
Moved getAvCaptureVideoStabilizationMode from FLTCam to CameraProperties
ruicraveiro 738ba2d
Merge branch 'main' into vs_squashed
ruicraveiro b404388
Merge branch 'main' into vs_squashed
ruicraveiro c900fa4
Merge branch 'main' into vs_squashed
ruicraveiro e1f7cb8
Merge branch 'main' into vs_squashed
ruicraveiro d220078
Refactored Camera2CameraInfoHostApiImpl with single @OptIn annotation
ruicraveiro 887c565
Moved Android video stabilization mapping to Camera2CameraInfo
ruicraveiro 8d986ed
fixed android camerax tests
ruicraveiro 8040dc6
Merge branch 'main' into vs_squashed
ruicraveiro dba6738
Merge branch 'main' into vs_squashed
ruicraveiro f027dfc
Merge branch 'main' into vs_squashed
ruicraveiro b85a0be
Merge branch 'main' into vs_squashed
ruicraveiro 291a740
Merge branch 'main' into vs_squashed
ruicraveiro 1d06d3d
Merge branch 'main' into vs_squashed
ruicraveiro 680097f
Better naming for local variable in Camera2CameraInfoHostApi.getAvail…
ruicraveiro a8e6544
video stabilization mapping back to android_camera_camerax
ruicraveiro 754c577
Merge branch 'main' into vs_squashed
ruicraveiro 55a4da8
Merge branch 'main' into vs_squashed
ruicraveiro 06719a5
Merge branch 'main' into vs_squashed
ruicraveiro 15d918c
Merge branch 'main' into vs_squashed
ruicraveiro 69eb909
Merge branch 'vs_squashed' of github.com:ruicraveiro/packages into vs…
ruicraveiro 672d834
Merge branch 'main' into vs_squashed
ruicraveiro 1cef9b3
Merge branch 'main' into vs_squashed
ruicraveiro e6b483f
Update pubspec.yaml
ruicraveiro 45fa745
Update packages/camera/camera_android_camerax/lib/src/android_camera_…
ruicraveiro ddc370c
Merge branch 'main' into vs_squashed
ruicraveiro 1e4885c
Merge branch 'main' into vs_squashed
ruicraveiro 183088d
Merge branch 'main' into vs_squashed
ruicraveiro c333768
video stabilizaton methods throw unimplemented
ruicraveiro 94651bc
Using enhanced enum features with VideoStabilizationMode
ruicraveiro 1ec3f54
Removed $ in name of test
ruicraveiro a9366c2
Merge branch 'main' into vs_squashed
ruicraveiro 81afd32
Merge branch 'main' into vs_squashed
ruicraveiro 99e604f
Merge branch 'main' into vs_squashed
ruicraveiro a816c5b
Merge branch 'main' into vs_squashed
ruicraveiro 94fd363
Merge branch 'main' into vs_squashed
ruicraveiro 76db0eb
Merge branch 'main' into vs_squashed
ruicraveiro 3c4252b
Merge branch 'main' into vs_squashed
ruicraveiro c99c727
Added message when throwing UnimplementedError
ruicraveiro a77bea1
minor improvements to CameraController method comments
ruicraveiro 5bb8379
Restructured video stabilization levels
ruicraveiro 4f8b587
Merge branch 'main' into vs_squashed
ruicraveiro 4fe99bb
Adjusted camera/camera unit tests for new VideoStabilizationMode enum…
ruicraveiro bf6c7d9
Merge branch 'main' into vs_squashed
ruicraveiro 39bf897
Removed platform-specific comments
ruicraveiro 91fd9bf
Merge branch 'main' into vs_squashed
ruicraveiro File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -54,6 +54,7 @@ class CameraValue { | |
this.recordingOrientation, | ||
this.isPreviewPaused = false, | ||
this.previewPauseOrientation, | ||
this.videoStabilizationMode = VideoStabilizationMode.off, | ||
}) : _isRecordingPaused = isRecordingPaused; | ||
|
||
/// Creates a new camera controller state for an uninitialized controller. | ||
|
@@ -72,6 +73,7 @@ class CameraValue { | |
deviceOrientation: DeviceOrientation.portraitUp, | ||
isPreviewPaused: false, | ||
description: description, | ||
videoStabilizationMode: VideoStabilizationMode.off, | ||
); | ||
|
||
/// True after [CameraController.initialize] has completed successfully. | ||
|
@@ -148,6 +150,9 @@ class CameraValue { | |
/// The properties of the camera device controlled by this controller. | ||
final CameraDescription description; | ||
|
||
/// The video stabilization mode in | ||
final VideoStabilizationMode videoStabilizationMode; | ||
|
||
/// Creates a modified copy of the object. | ||
/// | ||
/// Explicitly specified fields get the specified value, all other fields get | ||
|
@@ -171,6 +176,7 @@ class CameraValue { | |
bool? isPreviewPaused, | ||
CameraDescription? description, | ||
Optional<DeviceOrientation>? previewPauseOrientation, | ||
VideoStabilizationMode? videoStabilizationMode, | ||
}) { | ||
return CameraValue( | ||
isInitialized: isInitialized ?? this.isInitialized, | ||
|
@@ -198,6 +204,8 @@ class CameraValue { | |
previewPauseOrientation: previewPauseOrientation == null | ||
? this.previewPauseOrientation | ||
: previewPauseOrientation.orNull, | ||
videoStabilizationMode: | ||
videoStabilizationMode ?? this.videoStabilizationMode, | ||
); | ||
} | ||
|
||
|
@@ -219,6 +227,7 @@ class CameraValue { | |
'recordingOrientation: $recordingOrientation, ' | ||
'isPreviewPaused: $isPreviewPaused, ' | ||
'previewPausedOrientation: $previewPauseOrientation, ' | ||
'videoStabilizationMode: $videoStabilizationMode, ' | ||
'description: $description)'; | ||
} | ||
} | ||
|
@@ -689,6 +698,40 @@ class CameraController extends ValueNotifier<CameraValue> { | |
} | ||
} | ||
|
||
/// Set the video stabilization mode for the selected camera. | ||
/// | ||
/// On Android (when using camera_android_camerax) and on iOS | ||
/// the supplied [mode] value should be a mode in the list returned | ||
/// by [getVideoStabilizationSupportedModes]. | ||
/// | ||
/// Throws a [CameraException] when a not supported video stabilization | ||
/// mode is supplied. | ||
Future<void> setVideoStabilizationMode(VideoStabilizationMode mode) async { | ||
_throwIfNotInitialized('setVideoStabilizationMode'); | ||
try { | ||
await CameraPlatform.instance.setVideoStabilizationMode(_cameraId, mode); | ||
value = value.copyWith(videoStabilizationMode: mode); | ||
} on PlatformException catch (e) { | ||
throw CameraException(e.code, e.message); | ||
} | ||
} | ||
|
||
/// Gets a list of video stabilization modes that are supported for the selected camera. | ||
/// | ||
/// Will return the list of supported video stabilization modes | ||
/// on Android (when using camera_android_camerax package) and | ||
/// on iOS. Will return an empty list on all other platforms. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This is no longer true. It throws an There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just fixed it. Thanks! |
||
Future<Iterable<VideoStabilizationMode>> | ||
getVideoStabilizationSupportedModes() { | ||
_throwIfNotInitialized('isVideoStabilizationModeSupported'); | ||
try { | ||
return CameraPlatform.instance | ||
.getVideoStabilizationSupportedModes(_cameraId); | ||
} on PlatformException catch (e) { | ||
throw CameraException(e.code, e.message); | ||
} | ||
} | ||
|
||
/// Sets the flash mode for taking pictures. | ||
Future<void> setFlashMode(FlashMode mode) async { | ||
try { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: I think this is a bit clearer