Skip to content

Commit 37f0bb0

Browse files
[camera_avfoundation] Wrappers swift migration - part 1 (#10119)
Migrates camera wrappers as part of flutter/flutter#119109 This PR migrates wrappers to Swift: * `FLTCamConfiguration` * `FLTCamMediaSettingsAVWrapper` * `FLTCaptureOutput` * `FLTCapturePhotoOutput` * `FLTCaptureVideoDataOutput` In line with Swift conventions, the `FLT` prefixes are removed. The `Default` class implementations are replaced with protocol conformance on base `AV` classes. ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^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 88890ae commit 37f0bb0

29 files changed

+347
-568
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.22+2
2+
3+
* Migrates `FLTCamConfiguration`, `FLTCamMediaSettingsAVWrapper` classes to Swift.
4+
* Migrates `FLTCaptureOutput`, `FLTCapturePhotoOutput`, `FLTCaptureVideoDataOutput` protocols to Swift.
5+
16
## 0.9.22+1
27

38
* Fixes crash on iOS when `enableAudio` is false.

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

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

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

7070
let _ = CameraTestUtils.createTestCamera(configuration)
7171

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ private final class TestMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper {
106106
}
107107

108108
override func recommendedVideoSettingsForAssetWriter(
109-
withFileType fileType: AVFileType, for output: FLTCaptureVideoDataOutput
109+
withFileType fileType: AVFileType, for output: CaptureVideoDataOutput
110110
) -> [String: Any]? {
111111
return [:]
112112
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ enum CameraTestUtils {
2626
enableAudio: true)
2727
}
2828

29-
/// Creates a test `FLTCamConfiguration` with a default mock setup.
30-
static func createTestCameraConfiguration() -> FLTCamConfiguration {
29+
/// Creates a test `CameraConfiguration` with a default mock setup.
30+
static func createTestCameraConfiguration() -> CameraConfiguration {
3131
let captureSessionQueue = DispatchQueue(label: "capture_session_queue")
3232

3333
let videoSessionMock = MockCaptureSession()
@@ -56,7 +56,7 @@ enum CameraTestUtils {
5656
currentFormat = format
5757
}
5858

59-
let configuration = FLTCamConfiguration(
59+
let configuration = CameraConfiguration(
6060
mediaSettings: createDefaultMediaSettings(
6161
resolutionPreset: FCPPlatformResolutionPreset.medium),
6262
mediaSettingsWrapper: FLTCamMediaSettingsAVWrapper(),
@@ -72,7 +72,7 @@ enum CameraTestUtils {
7272
configuration.audioCaptureSession = audioSessionMock
7373
configuration.orientation = .portrait
7474

75-
configuration.assetWriterFactory = { _, _, _ in MockAssetWriter() }
75+
configuration.assetWriterFactory = { _, _ in MockAssetWriter() }
7676

7777
configuration.inputPixelBufferAdaptorFactory = { _, _ in
7878
MockAssetWriterInputPixelBufferAdaptor()
@@ -81,7 +81,7 @@ enum CameraTestUtils {
8181
return configuration
8282
}
8383

84-
static func createTestCamera(_ configuration: FLTCamConfiguration) -> DefaultCamera {
84+
static func createTestCamera(_ configuration: CameraConfiguration) -> DefaultCamera {
8585
return (try? DefaultCamera(configuration: configuration))!
8686
}
8787

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ final class FLTCamExposureTests: XCTestCase {
1717
let mockDeviceOrientationProvider = MockDeviceOrientationProvider()
1818

1919
let configuration = CameraTestUtils.createTestCameraConfiguration()
20-
configuration.captureDeviceFactory = { _ in mockDevice }
20+
configuration.videoCaptureDeviceFactory = { _ in mockDevice }
2121
configuration.deviceOrientationProvider = mockDeviceOrientationProvider
2222
let camera = CameraTestUtils.createTestCamera(configuration)
2323

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class FLTCamSetFocusModeTests: XCTestCase {
1818
let mockDeviceOrientationProvider = MockDeviceOrientationProvider()
1919

2020
let configuration = CameraTestUtils.createTestCameraConfiguration()
21-
configuration.captureDeviceFactory = { _ in mockDevice }
21+
configuration.videoCaptureDeviceFactory = { _ in mockDevice }
2222
configuration.deviceOrientationProvider = mockDeviceOrientationProvider
2323
let camera = CameraTestUtils.createTestCamera(configuration)
2424

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class FLTCamSetFlashModeTests: XCTestCase {
1818
let mockCapturePhotoOutput = MockCapturePhotoOutput()
1919

2020
let configuration = CameraTestUtils.createTestCameraConfiguration()
21-
configuration.captureDeviceFactory = { _ in mockDevice }
21+
configuration.videoCaptureDeviceFactory = { _ in mockDevice }
2222
let camera = CameraTestUtils.createTestCamera(configuration)
2323
camera.capturePhotoOutput = mockCapturePhotoOutput
2424

@@ -87,9 +87,7 @@ final class FLTCamSetFlashModeTests: XCTestCase {
8787
func testSetFlashModeWithNonTorchMode_setsTrochModeOff_ifTorchModeIsEnabled() {
8888
let (camera, mockDevice, mockCapturePhotoOutput) = createCamera()
8989

90-
mockCapturePhotoOutput.supportedFlashModes = [
91-
NSNumber(value: AVCaptureDevice.FlashMode.auto.rawValue)
92-
]
90+
mockCapturePhotoOutput.supportedFlashModes = [.auto]
9391

9492
mockDevice.hasFlash = true
9593
// Torch mode is enabled

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ final class FLTCamZoomTests: XCTestCase {
1717
let mockDevice = MockCaptureDevice()
1818

1919
let configuration = CameraTestUtils.createTestCameraConfiguration()
20-
configuration.captureDeviceFactory = { _ in mockDevice }
20+
configuration.videoCaptureDeviceFactory = { _ in mockDevice }
2121
let camera = CameraTestUtils.createTestCamera(configuration)
2222

2323
return (camera, mockDevice)

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import camera_avfoundation
5+
@testable import camera_avfoundation
66

77
// Import Objective-C part of the implementation when SwiftPM is used.
88
#if canImport(camera_avfoundation_objc)
@@ -11,11 +11,11 @@ import camera_avfoundation
1111

1212
/// Mock implementation of `FLTCapturePhotoOutput` protocol which allows injecting a custom
1313
/// implementation.
14-
final class MockCapturePhotoOutput: NSObject, FLTCapturePhotoOutput {
14+
final class MockCapturePhotoOutput: NSObject, CapturePhotoOutput {
1515
var avOutput = AVCapturePhotoOutput()
1616
var availablePhotoCodecTypes: [AVVideoCodecType] = []
17-
var highResolutionCaptureEnabled = false
18-
var supportedFlashModes: [NSNumber] = []
17+
var isHighResolutionCaptureEnabled = false
18+
var supportedFlashModes: [AVCaptureDevice.FlashMode] = []
1919

2020
// Stub that is called when the corresponding public method is called.
2121
var capturePhotoWithSettingsStub:
@@ -29,7 +29,7 @@ final class MockCapturePhotoOutput: NSObject, FLTCapturePhotoOutput {
2929
capturePhotoWithSettingsStub?(settings, delegate)
3030
}
3131

32-
func connection(withMediaType mediaType: AVMediaType) -> FLTCaptureConnection? {
32+
func connection(with mediaType: AVMediaType) -> FLTCaptureConnection? {
3333
return connectionWithMediaTypeStub?(mediaType)
3434
}
3535
}

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureVideoDataOutput.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import camera_avfoundation
5+
@testable import camera_avfoundation
66

77
// Import Objective-C part of the implementation when SwiftPM is used.
88
#if canImport(camera_avfoundation_objc)
@@ -11,15 +11,14 @@ import camera_avfoundation
1111

1212
/// Mock implementation of `FLTCaptureVideoDataOutput` protocol which allows injecting a custom
1313
/// implementation.
14-
class MockCaptureVideoDataOutput: NSObject, FLTCaptureVideoDataOutput {
15-
14+
class MockCaptureVideoDataOutput: NSObject, CaptureVideoDataOutput {
1615
var avOutput = AVCaptureVideoDataOutput()
1716
var alwaysDiscardsLateVideoFrames = false
18-
var videoSettings: [String: Any] = [:]
17+
var videoSettings: [String: Any]! = [:]
1918

2019
var connectionWithMediaTypeStub: ((AVMediaType) -> FLTCaptureConnection?)?
2120

22-
func connection(withMediaType mediaType: AVMediaType) -> FLTCaptureConnection? {
21+
func connection(with mediaType: AVMediaType) -> FLTCaptureConnection? {
2322
return connectionWithMediaTypeStub?(mediaType)
2423
}
2524

0 commit comments

Comments
 (0)