From 56e9eec3ec2e56a1e585d60cab0b3f26272f8e71 Mon Sep 17 00:00:00 2001 From: Clinton Volzke Date: Wed, 2 Jan 2019 20:17:30 +1100 Subject: [PATCH 1/7] Fix CameraPreview freezes during startVideoRecording on iOS --- .../java/io/flutter/plugins/camera/CameraPlugin.java | 6 ++++++ packages/camera/ios/Classes/CameraPlugin.m | 7 ++++--- packages/camera/lib/camera.dart | 10 ++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index b7f104d95ba1..26061132787c 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -202,6 +202,12 @@ public void onMethodCall(MethodCall call, final Result result) { camera.takePicture((String) call.argument("path"), result); break; } + case "prepareForVideoRecording": + { + // not yet implemented for Android + result.success(null); + break; + } case "startVideoRecording": { final String filePath = call.argument("filePath"); diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index 42cc2e42894c..24f6efbe66d3 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -288,9 +288,7 @@ - (void)startVideoRecordingAtPath:(NSString *)path result:(FlutterResult)result _eventSink(@{@"event" : @"error", @"errorDescription" : @"Setup Writer Failed"}); return; } - [_captureSession stopRunning]; _isRecording = YES; - [_captureSession startRunning]; result(nil); } else { _eventSink(@{@"event" : @"error", @"errorDescription" : @"Video is already recording!"}); @@ -505,6 +503,9 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [_registry unregisterTexture:textureId]; [_camera close]; result(nil); + } else if ([@"prepareForVideoRecording" isEqualToString:call.method]) { + [_camera setUpCaptureSessionForAudio]; + result(nil); } else if ([@"startVideoRecording" isEqualToString:call.method]) { [_camera startVideoRecordingAtPath:call.arguments[@"filePath"] result:result]; } else if ([@"stopVideoRecording" isEqualToString:call.method]) { @@ -515,4 +516,4 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result } } -@end +@end \ No newline at end of file diff --git a/packages/camera/lib/camera.dart b/packages/camera/lib/camera.dart index 153bbeb69b98..173fce432b7e 100644 --- a/packages/camera/lib/camera.dart +++ b/packages/camera/lib/camera.dart @@ -222,6 +222,16 @@ class CameraController extends ValueNotifier { return _creatingCompleter.future; } + /// Prepare the capture session for video recording. + /// Preparing audio can cause a minor delay in the CameraPreview view on iOS. + /// If video recording is intended, calling this early eliminates this delay + /// that would otherwise be experienced when video recording is started. + /// + /// Throws a [CameraException] if the prepare fails. + Future prepareForVideoRecording() async { + await _channel.invokeMethod('prepareForVideoRecording'); + } + /// Listen to events from the native plugins. /// /// A "cameraClosing" event is sent when the camera is closed automatically by the system (for example when the app go to background). The plugin will try to reopen the camera automatically but any ongoing recording will end. From a140c0700b300b796586b44fbd0c65b7501cb163 Mon Sep 17 00:00:00 2001 From: Clinton Volzke Date: Tue, 8 Jan 2019 12:11:19 +1100 Subject: [PATCH 2/7] Fix CameraPreview freezes during startVideoRecording on iOS - address review comments --- .../src/main/java/io/flutter/plugins/camera/CameraPlugin.java | 2 +- packages/camera/ios/Classes/CameraPlugin.m | 2 +- packages/camera/lib/camera.dart | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 26061132787c..e4c64ec2b79b 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -204,7 +204,7 @@ public void onMethodCall(MethodCall call, final Result result) { } case "prepareForVideoRecording": { - // not yet implemented for Android + // This optimization is not required for Android. result.success(null); break; } diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index 24f6efbe66d3..e5ab5e79d04a 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -516,4 +516,4 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result } } -@end \ No newline at end of file +@end diff --git a/packages/camera/lib/camera.dart b/packages/camera/lib/camera.dart index 173fce432b7e..67ab703ba365 100644 --- a/packages/camera/lib/camera.dart +++ b/packages/camera/lib/camera.dart @@ -223,9 +223,11 @@ class CameraController extends ValueNotifier { } /// Prepare the capture session for video recording. + /// /// Preparing audio can cause a minor delay in the CameraPreview view on iOS. /// If video recording is intended, calling this early eliminates this delay /// that would otherwise be experienced when video recording is started. + /// This operation is a no-op on Android. /// /// Throws a [CameraException] if the prepare fails. Future prepareForVideoRecording() async { From 6dd5e2edd22ba328c957606f962b8030a57ab486 Mon Sep 17 00:00:00 2001 From: Clinton Volzke Date: Thu, 21 Feb 2019 21:36:11 +1100 Subject: [PATCH 3/7] Fix CameraPreview freezes during startVideoRecording on iOS - address review comment --- packages/camera/lib/camera.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/camera/lib/camera.dart b/packages/camera/lib/camera.dart index 67ab703ba365..3d9fb758d1cb 100644 --- a/packages/camera/lib/camera.dart +++ b/packages/camera/lib/camera.dart @@ -224,6 +224,9 @@ class CameraController extends ValueNotifier { /// Prepare the capture session for video recording. /// + /// Use of this method is optional, but it may be called for performance + /// reasons on iOS. + /// /// Preparing audio can cause a minor delay in the CameraPreview view on iOS. /// If video recording is intended, calling this early eliminates this delay /// that would otherwise be experienced when video recording is started. From 8f2887379492be2ed5ea08dd416b6f5b899e4151 Mon Sep 17 00:00:00 2001 From: Clinton Volzke Date: Wed, 27 Feb 2019 16:16:38 +0400 Subject: [PATCH 4/7] Fix CameraPreview freezes during startVideoRecording on iOS - address review comment --- packages/camera/ios/Classes/CameraPlugin.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index e5ab5e79d04a..75118e298845 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -85,6 +85,7 @@ @interface FLTCam : NSObject Date: Wed, 27 Feb 2019 16:22:51 +0400 Subject: [PATCH 5/7] Revert "Fix CameraPreview freezes during startVideoRecording on iOS - address review comment" This reverts commit 8f2887379492be2ed5ea08dd416b6f5b899e4151. --- packages/camera/ios/Classes/CameraPlugin.m | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index 75118e298845..e5ab5e79d04a 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -85,7 +85,6 @@ @interface FLTCam : NSObject Date: Wed, 27 Feb 2019 16:27:15 +0400 Subject: [PATCH 6/7] Fix CameraPreview freezes during startVideoRecording on iOS - address review comment --- packages/camera/lib/camera.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/camera/lib/camera.dart b/packages/camera/lib/camera.dart index 3d9fb758d1cb..7dc2ecac8f81 100644 --- a/packages/camera/lib/camera.dart +++ b/packages/camera/lib/camera.dart @@ -234,6 +234,9 @@ class CameraController extends ValueNotifier { /// /// Throws a [CameraException] if the prepare fails. Future prepareForVideoRecording() async { + // TODO(amirh): remove this on when the invokeMethod update makes it to stable Flutter. + // https://github.com/flutter/flutter/issues/26431 + // ignore: strong_mode_implicit_dynamic_method await _channel.invokeMethod('prepareForVideoRecording'); } From 9c346d46b2aac737dd9768f11530963280366c8e Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 12 Mar 2019 17:47:51 -0700 Subject: [PATCH 7/7] version bump --- packages/camera/CHANGELOG.md | 4 ++++ packages/camera/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index 5d349bd8998b..346afa736fc4 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.3 + +* Add capability to prepare the capture session for video recording on iOS. + ## 0.4.2 * Add sensor orientation value to `CameraDescription`. diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 0abbf6a003aa..d3ecc1bc5eeb 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.4.2 +version: 0.4.3 authors: - Flutter Team - Luigi Agosti