From 1ac5f45ca98d97a00d7d8194517bb2f9f3f39b4b Mon Sep 17 00:00:00 2001 From: Greg Moore Date: Fri, 14 Jun 2019 10:33:46 -0400 Subject: [PATCH 1/5] Fix camera memory leak on IOS Needed to unregister the stream handler when disposing of the camera --- packages/camera/ios/Classes/CameraPlugin.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index 7bbd82555127..a90dd699079c 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -732,6 +732,8 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call result:(FlutterResult)re } else if ([@"dispose" isEqualToString:call.method]) { [_registry unregisterTexture:textureId]; [_camera close]; + // need to unregister stream handler when disposing the camera + [_camera.eventChannel setStreamHandler:nil]; _dispatchQueue = nil; result(nil); } else if ([@"prepareForVideoRecording" isEqualToString:call.method]) { From 6fcedfb91dcffa5a49fedada5b57c6fc24e4bb7d Mon Sep 17 00:00:00 2001 From: Greg Moore Date: Fri, 14 Jun 2019 10:52:31 -0400 Subject: [PATCH 2/5] increased build number --- packages/camera/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index c096a9a8ad54..2d09af5b8953 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.2+2 + +* Fix memory leak related to not unregistering stream handler in FlutterEventChannel when disposing camera. + ## 0.5.2+1 * Fix bug that prevented video recording with audio. From 2b293c7455920ab34ad817e35778112641505dde Mon Sep 17 00:00:00 2001 From: Greg Moore Date: Fri, 14 Jun 2019 10:53:02 -0400 Subject: [PATCH 3/5] increased version number --- packages/camera/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 81a0e8f877a4..2425db67538b 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.5.2+1 +version: 0.5.2+2 authors: - Flutter Team - Luigi Agosti From 800e6a538264ba7fe4a6817b2fdfa26dd93a7f37 Mon Sep 17 00:00:00 2001 From: Greg Moore Date: Thu, 18 Jul 2019 16:05:08 -0400 Subject: [PATCH 4/5] Release the camera event channel in the onCancel event Per @mklim the release of the event channel was moved to onCancel vs. dispose. --- packages/camera/ios/Classes/CameraPlugin.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/ios/Classes/CameraPlugin.m b/packages/camera/ios/Classes/CameraPlugin.m index a90dd699079c..4c001926ae25 100644 --- a/packages/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/ios/Classes/CameraPlugin.m @@ -456,6 +456,8 @@ - (CVPixelBufferRef)copyPixelBuffer { - (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments { _eventSink = nil; + // need to unregister stream handler when disposing the camera + [_eventChannel setStreamHandler:nil]; return nil; } @@ -732,8 +734,6 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call result:(FlutterResult)re } else if ([@"dispose" isEqualToString:call.method]) { [_registry unregisterTexture:textureId]; [_camera close]; - // need to unregister stream handler when disposing the camera - [_camera.eventChannel setStreamHandler:nil]; _dispatchQueue = nil; result(nil); } else if ([@"prepareForVideoRecording" isEqualToString:call.method]) { From 1c34284099c99236f8fcb53da68ea934e73c6994 Mon Sep 17 00:00:00 2001 From: Michael Klimushyn Date: Mon, 22 Jul 2019 13:34:41 -0700 Subject: [PATCH 5/5] Update pubspec.yaml --- packages/camera/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 3b791031d321..a7e65c706ef1 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,6 @@ 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.5.2+2 authors: