Skip to content

Commit deb4103

Browse files
RobertOdrowazOrtes
authored andcommitted
[camera_avfoundation] Implementation swift migration - part 2 (flutter#9007)
Migrates camera implementation as part of flutter/flutter#119109 This PR migrates `CameraPlugin` class. While it wasn't the goal of this PR it partially resolves the [issue](flutter/flutter#162376) regarding switching the camera during recording. The main problem there was that the capture device wasn't actually changed because the camera name passed to the `FLTCam.setDescriptionWhileRecording` wasn't used and instead a `captureDeviceFactory` was called which returned a capture device with the same name as during the initial set up. In this pr "named" capture device factory is propagated to `FLTCam` allowing passing the new capture device name during in `setDescriptionWhileRecording`. ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
1 parent bd51e31 commit deb4103

31 files changed

+644
-688
lines changed

packages/camera/camera_avfoundation/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.9.19
2+
3+
* Migrates the CameraPlugin class to Swift.
4+
* Fixes camera name being ignored in `setDescriptionWhileRecording`.
5+
16
## 0.9.18+14
27

38
* Creates Swift Package Manager target for Swift implementation.

packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
3737
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
3838
97DB234D2D566D0700CEFE66 /* CameraPreviewPauseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */; };
39-
E0CDBAC227CD9729002561D9 /* QueueTestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CDBAC127CD9729002561D9 /* QueueTestUtils.m */; };
4039
E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */; };
4140
E11D6A912D82C7740031E6C5 /* FLTCamExposureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */; };
4241
E12C4FF62D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */; };
@@ -131,8 +130,6 @@
131130
9DDC4CE84A8B378AE4A8CD9C /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
132131
A8F314CD1C64E9257EBC811D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
133132
B61D98BBC8FB276D1C4A7BB2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
134-
E0CDBAC027CD9729002561D9 /* QueueTestUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QueueTestUtils.h; sourceTree = "<group>"; };
135-
E0CDBAC127CD9729002561D9 /* QueueTestUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QueueTestUtils.m; sourceTree = "<group>"; };
136133
E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureVideoDataOutput.swift; sourceTree = "<group>"; };
137134
E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamExposureTests.swift; sourceTree = "<group>"; };
138135
E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginDelegatingMethodTests.swift; sourceTree = "<group>"; };
@@ -147,12 +144,12 @@
147144
E142F13F2D85AD7900824824 /* MockCaptureConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureConnection.swift; sourceTree = "<group>"; };
148145
E142F1412D85AFA400824824 /* MockGlobalEventApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockGlobalEventApi.swift; sourceTree = "<group>"; };
149146
E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetDeviceOrientationTests.swift; sourceTree = "<group>"; };
147+
E15BC7E32D86D08700F66474 /* MockFlutterTextureRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterTextureRegistry.swift; sourceTree = "<group>"; };
148+
E15BC7E52D86D17D00F66474 /* MockFlutterBinaryMessenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterBinaryMessenger.swift; sourceTree = "<group>"; };
150149
E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriter.swift; sourceTree = "<group>"; };
151150
E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInput.swift; sourceTree = "<group>"; };
152151
E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInputPixelBufferAdaptor.swift; sourceTree = "<group>"; };
153152
E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDevice.swift; sourceTree = "<group>"; };
154-
E15BC7E32D86D08700F66474 /* MockFlutterTextureRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterTextureRegistry.swift; sourceTree = "<group>"; };
155-
E15BC7E52D86D17D00F66474 /* MockFlutterBinaryMessenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFlutterBinaryMessenger.swift; sourceTree = "<group>"; };
156153
E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamZoomTests.swift; sourceTree = "<group>"; };
157154
E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetFlashModeTests.swift; sourceTree = "<group>"; };
158155
E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceInputFactory.swift; sourceTree = "<group>"; };
@@ -190,8 +187,6 @@
190187
children = (
191188
7F29EB3F2D281C6D00740257 /* Mocks */,
192189
03BB766C2665316900CE5A93 /* Info.plist */,
193-
E0CDBAC027CD9729002561D9 /* QueueTestUtils.h */,
194-
E0CDBAC127CD9729002561D9 /* QueueTestUtils.m */,
195190
E142681E2D8566230046CBBC /* CameraTestUtils.swift */,
196191
979B3DF92D5B6BA2009BDE1A /* ExceptionCatcher.h */,
197192
979B3DFA2D5B6BC7009BDE1A /* ExceptionCatcher.m */,
@@ -565,7 +560,6 @@
565560
E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */,
566561
972CA92B2D5A1D8C004B846F /* CameraPropertiesTests.swift in Sources */,
567562
E15BC7E42D86D08700F66474 /* MockFlutterTextureRegistry.swift in Sources */,
568-
E0CDBAC227CD9729002561D9 /* QueueTestUtils.m in Sources */,
569563
978296CF2D5F744B0009BDD3 /* PhotoCaptureTests.swift in Sources */,
570564
979B3E002D5B9E6C009BDE1A /* CameraMethodChannelTests.swift in Sources */,
571565
E142F13C2D8596F100824824 /* MockCaptureDeviceFormat.swift in Sources */,

packages/camera/camera_avfoundation/example/ios/RunnerTests/AvailableCamerasTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ final class AvailableCamerasTest: XCTestCase {
2323
permissionManager: MockFLTCameraPermissionManager(),
2424
deviceFactory: { _ in MockCaptureDevice() },
2525
captureSessionFactory: { MockCaptureSession() },
26-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
26+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
27+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2728
)
2829
}
2930

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraCaptureSessionQueueRaceConditionTests.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,26 @@ import XCTest
1212
#endif
1313

1414
final class CameraCaptureSessionQueueRaceConditionTests: XCTestCase {
15-
private func createCameraPlugin() -> CameraPlugin {
16-
return CameraPlugin(
15+
private func createCameraPlugin() -> (CameraPlugin, DispatchQueue) {
16+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
17+
18+
let cameraPlugin = CameraPlugin(
1719
registry: MockFlutterTextureRegistry(),
1820
messenger: MockFlutterBinaryMessenger(),
1921
globalAPI: MockGlobalEventApi(),
2022
deviceDiscoverer: MockCameraDeviceDiscoverer(),
2123
permissionManager: MockFLTCameraPermissionManager(),
2224
deviceFactory: { _ in MockCaptureDevice() },
2325
captureSessionFactory: { MockCaptureSession() },
24-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
26+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
27+
captureSessionQueue: captureSessionQueue
2528
)
29+
30+
return (cameraPlugin, captureSessionQueue)
2631
}
2732

2833
func testFixForCaptureSessionQueueNullPointerCrashDueToRaceCondition() {
29-
let cameraPlugin = createCameraPlugin()
34+
let (cameraPlugin, captureSessionQueue) = createCameraPlugin()
3035
let disposeExpectation = expectation(description: "dispose's result block must be called")
3136
let createExpectation = expectation(description: "create's result block must be called")
3237

@@ -55,6 +60,6 @@ final class CameraCaptureSessionQueueRaceConditionTests: XCTestCase {
5560
// `captureSessionQueue` passed into `AVCaptureVideoDataOutput::setSampleBufferDelegate:queue:`
5661
// API will cause a crash.
5762
XCTAssertNotNil(
58-
cameraPlugin.captureSessionQueue, "captureSessionQueue must not be nil after create method.")
63+
captureSessionQueue, "captureSessionQueue must not be nil after create method.")
5964
}
6065
}

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraMethodChannelTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ final class CameraMethodChannelTests: XCTestCase {
2222
permissionManager: MockFLTCameraPermissionManager(),
2323
deviceFactory: { _ in MockCaptureDevice() },
2424
captureSessionFactory: { session },
25-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
25+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
26+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2627
)
2728
}
2829

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraOrientationTests.swift

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,18 @@ private final class MockUIDevice: UIDevice {
2323

2424
final class CameraOrientationTests: XCTestCase {
2525
private func createCameraPlugin() -> (
26-
CameraPlugin, MockFLTCam, MockGlobalEventApi, MockCaptureDevice, MockCameraDeviceDiscoverer
26+
cameraPlugin: CameraPlugin,
27+
mockCamera: MockFLTCam,
28+
mockEventAPI: MockGlobalEventApi,
29+
mockDevice: MockCaptureDevice,
30+
mockDeviceDiscoverer: MockCameraDeviceDiscoverer,
31+
captureSessionQueue: DispatchQueue
2732
) {
2833
let mockDevice = MockCaptureDevice()
2934
let mockCamera = MockFLTCam()
3035
let mockEventAPI = MockGlobalEventApi()
3136
let mockDeviceDiscoverer = MockCameraDeviceDiscoverer()
37+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
3238

3339
let cameraPlugin = CameraPlugin(
3440
registry: MockFlutterTextureRegistry(),
@@ -38,11 +44,19 @@ final class CameraOrientationTests: XCTestCase {
3844
permissionManager: MockFLTCameraPermissionManager(),
3945
deviceFactory: { _ in mockDevice },
4046
captureSessionFactory: { MockCaptureSession() },
41-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
47+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
48+
captureSessionQueue: captureSessionQueue
4249
)
4350
cameraPlugin.camera = mockCamera
4451

45-
return (cameraPlugin, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer)
52+
return (
53+
cameraPlugin,
54+
mockCamera,
55+
mockEventAPI,
56+
mockDevice,
57+
mockDeviceDiscoverer,
58+
captureSessionQueue
59+
)
4660
}
4761

4862
private func waitForRoundTrip(with queue: DispatchQueue) {
@@ -55,9 +69,13 @@ final class CameraOrientationTests: XCTestCase {
5569
waitForExpectations(timeout: 30, handler: nil)
5670
}
5771

58-
private func sendOrientation(_ orientation: UIDeviceOrientation, to cameraPlugin: CameraPlugin) {
72+
private func sendOrientation(
73+
_ orientation: UIDeviceOrientation,
74+
to cameraPlugin: CameraPlugin,
75+
captureSessionQueue: DispatchQueue
76+
) {
5977
cameraPlugin.orientationChanged(createMockNotification(for: orientation))
60-
waitForRoundTrip(with: cameraPlugin.captureSessionQueue)
78+
waitForRoundTrip(with: captureSessionQueue)
6179
}
6280

6381
private func createMockNotification(for deviceOrientation: UIDeviceOrientation) -> Notification {
@@ -67,36 +85,36 @@ final class CameraOrientationTests: XCTestCase {
6785
}
6886

6987
func testOrientationNotifications() {
70-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
88+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
7189

72-
sendOrientation(.portraitUpsideDown, to: cameraPlugin)
90+
sendOrientation(.portraitUpsideDown, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7391
XCTAssertEqual(mockEventAPI.lastOrientation, .portraitDown)
74-
sendOrientation(.portrait, to: cameraPlugin)
92+
sendOrientation(.portrait, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7593
XCTAssertEqual(mockEventAPI.lastOrientation, .portraitUp)
76-
sendOrientation(.landscapeLeft, to: cameraPlugin)
94+
sendOrientation(.landscapeLeft, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7795
XCTAssertEqual(mockEventAPI.lastOrientation, .landscapeLeft)
78-
sendOrientation(.landscapeRight, to: cameraPlugin)
96+
sendOrientation(.landscapeRight, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7997
XCTAssertEqual(mockEventAPI.lastOrientation, .landscapeRight)
8098
}
8199

82100
func testOrientationNotificationsNotCalledForFaceUp() {
83-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
84-
sendOrientation(.faceUp, to: cameraPlugin)
101+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
102+
sendOrientation(.faceUp, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
85103
XCTAssertFalse(mockEventAPI.deviceOrientationChangedCalled)
86104
}
87105

88106
func testOrientationNotificationsNotCalledForFaceDown() {
89-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
90-
sendOrientation(.faceDown, to: cameraPlugin)
107+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
108+
sendOrientation(.faceDown, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
91109
XCTAssertFalse(mockEventAPI.deviceOrientationChangedCalled)
92110
}
93111

94112
func testOrientationUpdateMustBeOnCaptureSessionQueue() {
95113
let queueExpectation = expectation(
96114
description: "Orientation update must happen on the capture session queue")
97-
let (cameraPlugin, mockCamera, _, _, _) = createCameraPlugin()
115+
let (cameraPlugin, mockCamera, _, _, _, captureSessionQueue) = createCameraPlugin()
98116
let captureSessionQueueSpecific = DispatchSpecificKey<Void>()
99-
cameraPlugin.captureSessionQueue.setSpecific(
117+
captureSessionQueue.setSpecific(
100118
key: captureSessionQueueSpecific,
101119
value: ())
102120

@@ -111,7 +129,7 @@ final class CameraOrientationTests: XCTestCase {
111129
}
112130

113131
func testOrientationChangedNoRetainCycle() {
114-
let (_, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer) = createCameraPlugin()
132+
let (_, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer, _) = createCameraPlugin()
115133
let captureSessionQueue = DispatchQueue(label: "capture_session_queue")
116134
weak var weakPlugin: CameraPlugin?
117135
weak var weakDevice = mockDevice
@@ -125,10 +143,10 @@ final class CameraOrientationTests: XCTestCase {
125143
permissionManager: MockFLTCameraPermissionManager(),
126144
deviceFactory: { _ in weakDevice! },
127145
captureSessionFactory: { MockCaptureSession() },
128-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
146+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
147+
captureSessionQueue: captureSessionQueue
129148
)
130149
weakPlugin = cameraPlugin
131-
cameraPlugin.captureSessionQueue = captureSessionQueue
132150
cameraPlugin.camera = mockCamera
133151

134152
cameraPlugin.orientationChanged(createMockNotification(for: .landscapeLeft))

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginCreateCameraTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ final class CameraPluginCreateCameraTests: XCTestCase {
2626
permissionManager: mockPermissionManager,
2727
deviceFactory: { _ in MockCaptureDevice() },
2828
captureSessionFactory: { mockCaptureSession },
29-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
29+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
30+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
3031
)
3132

3233
return (cameraPlugin, mockPermissionManager, mockCaptureSession)

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginDelegatingMethodTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ final class CameraPluginDelegatingMethodTests: XCTestCase {
2424
permissionManager: MockFLTCameraPermissionManager(),
2525
deviceFactory: { _ in MockCaptureDevice() },
2626
captureSessionFactory: { MockCaptureSession() },
27-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
27+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
28+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2829
)
2930
cameraPlugin.camera = mockCamera
3031

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPluginInitializeCameraTests.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import XCTest
1313

1414
final class CameraPluginInitializeCameraTests: XCTestCase {
1515
private func createCameraPlugin() -> (
16-
CameraPlugin, MockFLTCam, MockGlobalEventApi
16+
CameraPlugin, MockFLTCam, MockGlobalEventApi, DispatchQueue
1717
) {
1818
let mockCamera = MockFLTCam()
1919
let mockGlobalEventApi = MockGlobalEventApi()
20+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2021

2122
let cameraPlugin = CameraPlugin(
2223
registry: MockFlutterTextureRegistry(),
@@ -26,11 +27,12 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
2627
permissionManager: MockFLTCameraPermissionManager(),
2728
deviceFactory: { _ in MockCaptureDevice() },
2829
captureSessionFactory: { MockCaptureSession() },
29-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
30+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
31+
captureSessionQueue: captureSessionQueue
3032
)
3133
cameraPlugin.camera = mockCamera
3234

33-
return (cameraPlugin, mockCamera, mockGlobalEventApi)
35+
return (cameraPlugin, mockCamera, mockGlobalEventApi, captureSessionQueue)
3436
}
3537

3638
private func waitForRoundTrip(with queue: DispatchQueue) {
@@ -44,7 +46,7 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
4446
}
4547

4648
func testInitializeCamera_setsCameraOnFrameAvailableCallback() {
47-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
49+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
4850
let expectation = expectation(description: "Initialization completed")
4951

5052
var onFrameAvailableSet = false
@@ -64,7 +66,7 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
6466
}
6567

6668
func testInitializeCamera_setsCameraDartAPI() {
67-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
69+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
6870
let expectation = expectation(description: "Initialization completed")
6971

7072
var dartAPISet = false
@@ -84,20 +86,20 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
8486
}
8587

8688
func testInitializeCamera_sendsDeviceOrientation() {
87-
let (cameraPlugin, _, mockGlobalEventApi) = createCameraPlugin()
89+
let (cameraPlugin, _, mockGlobalEventApi, captureSessionQueue) = createCameraPlugin()
8890

8991
cameraPlugin.initializeCamera(0, withImageFormat: FCPPlatformImageFormatGroup.bgra8888) {
9092
error in
9193
XCTAssertNil(error)
9294
}
9395

94-
waitForRoundTrip(with: cameraPlugin.captureSessionQueue)
96+
waitForRoundTrip(with: captureSessionQueue)
9597

9698
XCTAssertTrue(mockGlobalEventApi.deviceOrientationChangedCalled)
9799
}
98100

99101
func testInitializeCamera_startsCamera() {
100-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
102+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
101103
let expectation = expectation(description: "Initialization completed")
102104

103105
var startCalled = false

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class CameraSessionPresetsTests: XCTestCase {
3535
}
3636

3737
let configuration = CameraTestUtils.createTestCameraConfiguration()
38-
configuration.captureDeviceFactory = { captureDeviceMock }
38+
configuration.captureDeviceFactory = { _ in captureDeviceMock }
3939
configuration.videoDimensionsForFormat = { format in
4040
return CMVideoDimensions(width: 1, height: 1)
4141
}
@@ -65,7 +65,7 @@ final class CameraSessionPresetsTests: XCTestCase {
6565
configuration.videoCaptureSession = videoSessionMock
6666
configuration.mediaSettings = CameraTestUtils.createDefaultMediaSettings(
6767
resolutionPreset: FCPPlatformResolutionPreset.max)
68-
configuration.captureDeviceFactory = { MockCaptureDevice() }
68+
configuration.captureDeviceFactory = { _ in MockCaptureDevice() }
6969

7070
let _ = FLTCam(configuration: configuration, error: nil)
7171

0 commit comments

Comments
 (0)