Skip to content

[camera] Convert Windows to Pigeon #6925

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

Merged
merged 14 commits into from
Jul 9, 2024

Conversation

stuartmorgan-g
Copy link
Contributor

Replaces all of the manual method channel code in camera_windows with Pigeon.

I attempted to change the structure as little as possible, since this was already a large change. I don't particularly like the way the native result callback objects are managed (passed to Camera and tracked in a map), but I decided that redesigning that would be out of scope and introduced a std::variant to allow minimal changes to that structure. That does slightly undermine the type safety of the callbacks, but it's still strictly enforced at the level of the helpers that interact with the map.

Fixes flutter/flutter#117905

Pre-launch Checklist

Copy link
Contributor Author

@stuartmorgan-g stuartmorgan-g left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some overview of the changes to help with review:

}

// Pigeon version of the relevant subset of VideoCaptureOptions.
class PlatformVideoCaptureOptions {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fully expect this to contain other things later, thus the use of the wrapper now.

//
// Returns an error result if the result has already been added.
virtual bool AddPendingResult(PendingResultType type,
std::unique_ptr<MethodResult<>> result) = 0;
virtual bool AddPendingVoidResult(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These new methods are because callbacks are no longer one generic type. I could have just changed the existing API to take the new variant, but I opted to hide that to minimize the number of places where we are essentially dropping type safety.

That will also make it simpler to change to something fully type-safe later since it will be internal to this one class.

@@ -29,24 +30,6 @@ namespace camera_windows {
using flutter::TextureRegistrar;
using Microsoft::WRL::ComPtr;

// Camera resolution presets. Used to request a capture resolution.
enum class ResolutionPreset {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is replaced by a Pigeon-generated enum.

// Allows to tune recorded video parameters, such as resolution, frame rate,
// bitrate. If [fps], [video_bitrate] or [audio_bitrate] are passed, they must
// be greater than zero.
struct RecordSettings {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This struct is replaced by a Pigeon-generated data class.

@stuartmorgan-g
Copy link
Contributor Author

@cbracken Ping on this review in case you missed the notification while you were out.

@cbracken
Copy link
Member

cbracken commented Jul 9, 2024

Back as of yesterday and mostly caught up on mail. Looking!

Copy link
Member

@cbracken cbracken left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM stamp from a Japanese personal seal

@stuartmorgan-g stuartmorgan-g added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 9, 2024
@auto-submit auto-submit bot merged commit 5cc6418 into flutter:main Jul 9, 2024
74 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 10, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 10, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 10, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 10, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 10, 2024
auto-submit bot pushed a commit to flutter/flutter that referenced this pull request Jul 10, 2024
flutter/packages@14341d1...ea35fc6

2024-07-10 [email protected] [camera_avfoundation] Adds Swift Package Manager compatibility (flutter/packages#7080)
2024-07-10 [email protected] [webview_flutter_wkwebview] Adds Swift Package Manager compatibility (flutter/packages#7091)
2024-07-10 [email protected] [webview_flutter_web] Migrate to package:web. (flutter/packages#6792)
2024-07-10 [email protected] [camera] Clean up `maxDuration` code (flutter/packages#7039)
2024-07-10 [email protected] Update espresso dependencies (flutter/packages#7048)
2024-07-09 [email protected] [camera] Fix iOS torch mode regression (flutter/packages#7085)
2024-07-09 [email protected] [google_maps_flutter] Convert Obj-C->Dart calls to Pigeon (flutter/packages#7086)
2024-07-09 [email protected] Roll Flutter from fafd67d to 5103d75 (27 revisions) (flutter/packages#7084)
2024-07-09 [email protected] [camera_avfoundation] fix sample times not being numeric after pause/resume. (flutter/packages#6897)
2024-07-09 [email protected] [camera] Convert Windows to Pigeon (flutter/packages#6925)
2024-07-09 [email protected] [camera] Deprecate `maxDuration` in platform interface (flutter/packages#7078)
2024-07-09 [email protected] [google_maps_flutter] Semi-convert remaining iOS host API calls to Pigeon (flutter/packages#7079)
2024-07-09 [email protected] [path_provider] Remove `win32` (flutter/packages#7073)
2024-07-08 [email protected] [google_maps_flutter] Move iOS inspector to Pigeon (flutter/packages#6937)
2024-07-08 49699333+dependabot[bot]@users.noreply.github.com [camera]: Bump com.android.tools.build:gradle from 7.3.0 to 8.5.0 in /packages/camera/camera_android_camerax/android (flutter/packages#7072)
2024-07-08 49699333+dependabot[bot]@users.noreply.github.com [local_auth]: Bump com.android.tools.build:gradle from 7.3.1 to 8.5.0 in /packages/local_auth/local_auth_android/android (flutter/packages#7069)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App p: camera platform-windows
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[camera] Convert to Pigeon
2 participants