diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index 4dbbce29e93..7d853bf524c 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,8 +1,11 @@ +## 0.9.20 + +* Fixes incorrect types in image stream events. + ## 0.9.19+3 * Fixes race condition when starting image stream. - ## 0.9.19+2 * Adds the `Camera` Swift protocol. diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/StreamingTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/StreamingTests.swift index 5fa358b5017..84023d5cf2c 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/StreamingTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/StreamingTests.swift @@ -123,4 +123,41 @@ final class StreamingTests: XCTestCase { waitForExpectations(timeout: 30, handler: nil) } + + func testImageStreamEventFormat() { + let (camera, testAudioOutput, sampleBuffer, testAudioConnection) = createCamera() + + let expectation = expectation(description: "Received a valid event") + + let handlerMock = MockImageStreamHandler() + handlerMock.eventSinkStub = { event in + let imageBuffer = event as! [String: Any] + + XCTAssertTrue(imageBuffer["width"] is NSNumber) + XCTAssertTrue(imageBuffer["height"] is NSNumber) + XCTAssertTrue(imageBuffer["format"] is NSNumber) + XCTAssertTrue(imageBuffer["lensAperture"] is NSNumber) + XCTAssertTrue(imageBuffer["sensorExposureTime"] is NSNumber) + XCTAssertTrue(imageBuffer["sensorSensitivity"] is NSNumber) + + let planes = imageBuffer["planes"] as! [[String: Any]] + let planeBuffer = planes[0] + + XCTAssertTrue(planeBuffer["bytesPerRow"] is NSNumber) + XCTAssertTrue(planeBuffer["width"] is NSNumber) + XCTAssertTrue(planeBuffer["height"] is NSNumber) + XCTAssertTrue(planeBuffer["bytes"] is FlutterStandardTypedData) + + expectation.fulfill() + } + let messenger = MockFlutterBinaryMessenger() + camera.startImageStream(with: messenger, imageStreamHandler: handlerMock) { _ in } + + waitForQueueRoundTrip(with: DispatchQueue.main) + XCTAssertEqual(camera.isStreamingImages, true) + + camera.captureOutput(testAudioOutput, didOutput: sampleBuffer, from: testAudioConnection) + + waitForExpectations(timeout: 30, handler: nil) + } } diff --git a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/DefaultCamera.swift b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/DefaultCamera.swift index 5fbb65cfc6a..3c4e0b9bb37 100644 --- a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/DefaultCamera.swift +++ b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/DefaultCamera.swift @@ -105,10 +105,9 @@ final class DefaultCamera: FLTCam, Camera { "height": imageHeight, "format": videoFormat, "planes": planes, - "lensAperture": captureDevice.lensAperture, - "sensorExposureTime": NSNumber( - value: captureDevice.exposureDuration().seconds * 1_000_000_000), - "sensorSensitivity": NSNumber(value: captureDevice.iso()), + "lensAperture": Double(captureDevice.lensAperture()), + "sensorExposureTime": Int(captureDevice.exposureDuration().seconds * 1_000_000_000), + "sensorSensitivity": Double(captureDevice.iso()), ] DispatchQueue.main.async { diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index b34c3a8e0db..f16e4785dd3 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.19+3 +version: 0.9.20 environment: sdk: ^3.6.0