Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Prev Previous commit
Next Next commit
Clean up unnecessary platform checks
  • Loading branch information
stuartmorgan-g committed Jun 9, 2022
commit 942f863693b6c35ca635c8884b8c4673b64d77f6
7 changes: 0 additions & 7 deletions packages/camera/camera_android/lib/src/android_camera.dart
Original file line number Diff line number Diff line change
Expand Up @@ -303,13 +303,6 @@ class AndroidCamera extends CameraPlatform {
EventChannel('plugins.flutter.io/camera_android/imageStream');
_platformImageStreamSubscription =
cameraEventChannel.receiveBroadcastStream().listen((dynamic imageData) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
try {
_channel.invokeMethod<void>('receivedImageStreamData');
} on PlatformException catch (e) {
throw CameraException(e.code, e.message);
}
}
_frameStreamController!
.add(cameraImageFromPlatformData(imageData as Map<dynamic, dynamic>));
});
Expand Down
23 changes: 5 additions & 18 deletions packages/camera/camera_android/lib/src/type_conversion.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import 'dart:typed_data';

import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:flutter/foundation.dart';

/// Converts method channel call [data] for `receivedImageStreamData` to a
/// [CameraImageData].
Expand All @@ -30,23 +29,11 @@ CameraImageFormat _cameraImageFormatFromPlatformData(dynamic data) {
}

ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) {
if (defaultTargetPlatform == TargetPlatform.android) {
switch (data) {
case 35: // android.graphics.ImageFormat.YUV_420_888
return ImageFormatGroup.yuv420;
case 256: // android.graphics.ImageFormat.JPEG
return ImageFormatGroup.jpeg;
}
}

if (defaultTargetPlatform == TargetPlatform.iOS) {
switch (data) {
case 875704438: // kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
return ImageFormatGroup.yuv420;

case 1111970369: // kCVPixelFormatType_32BGRA
return ImageFormatGroup.bgra8888;
}
switch (data) {
case 35: // android.graphics.ImageFormat.YUV_420_888
return ImageFormatGroup.yuv420;
case 256: // android.graphics.ImageFormat.JPEG
return ImageFormatGroup.jpeg;
}

return ImageFormatGroup.unknown;
Expand Down
35 changes: 4 additions & 31 deletions packages/camera/camera_android/test/type_conversion_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@
// ignore: unnecessary_import
import 'dart:typed_data';

import 'package:camera_android/src/type_conversion.dart';
import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:camera_platform_interface/src/method_channel/type_conversion.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
test('CameraImageData can be created', () {
final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 35,
'format': 1,
'height': 1,
'width': 4,
'lensAperture': 1.8,
Expand All @@ -33,37 +32,11 @@ void main() {
});
expect(cameraImage.height, 1);
expect(cameraImage.width, 4);
expect(cameraImage.format.group, ImageFormatGroup.yuv420);
expect(cameraImage.format.group, ImageFormatGroup.unknown);
expect(cameraImage.planes.length, 1);
});

test('CameraImageData has ImageFormatGroup.yuv420 for iOS', () {
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;

final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 875704438,
'height': 1,
'width': 4,
'lensAperture': 1.8,
'sensorExposureTime': 9991324,
'sensorSensitivity': 92.0,
'planes': <dynamic>[
<dynamic, dynamic>{
'bytes': Uint8List.fromList(<int>[1, 2, 3, 4]),
'bytesPerPixel': 1,
'bytesPerRow': 4,
'height': 1,
'width': 4
}
]
});
expect(cameraImage.format.group, ImageFormatGroup.yuv420);
});

test('CameraImageData has ImageFormatGroup.yuv420 for Android', () {
debugDefaultTargetPlatformOverride = TargetPlatform.android;

test('CameraImageData has ImageFormatGroup.yuv420', () {
final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 35,
Expand Down
2 changes: 1 addition & 1 deletion packages/camera/camera_android/test/utils_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:camera_android/src/utils.dart';
import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:camera_platform_interface/src/utils/utils.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:integration_test/integration_test_driver.dart';

import 'package:flutter_driver/flutter_driver.dart';

const String _examplePackage = 'io.flutter.plugins.cameraexample';

Future<void> main() async {
if (!(Platform.isLinux || Platform.isMacOS)) {
print('This test must be run on a POSIX host. Skipping...');
exit(0);
}
final bool adbExists =
Process.runSync('which', <String>['adb']).exitCode == 0;
if (!adbExists) {
print(r'This test needs ADB to exist on the $PATH. Skipping...');
exit(0);
}
print('Granting camera permissions...');
Process.runSync('adb', <String>[
'shell',
'pm',
'grant',
_examplePackage,
'android.permission.CAMERA'
]);
Process.runSync('adb', <String>[
'shell',
'pm',
'grant',
_examplePackage,
'android.permission.RECORD_AUDIO'
]);
print('Starting test.');
final FlutterDriver driver = await FlutterDriver.connect();
final String data = await driver.requestData(
null,
timeout: const Duration(minutes: 1),
);
await driver.close();
print('Test finished. Revoking camera permissions...');
Process.runSync('adb', <String>[
'shell',
'pm',
'revoke',
_examplePackage,
'android.permission.CAMERA'
]);
Process.runSync('adb', <String>[
'shell',
'pm',
'revoke',
_examplePackage,
'android.permission.RECORD_AUDIO'
]);

final Map<String, dynamic> result = jsonDecode(data) as Map<String, dynamic>;
exit(result['result'] == 'true' ? 0 : 1);
}
Future<void> main() => integrationDriver();
Original file line number Diff line number Diff line change
Expand Up @@ -303,12 +303,10 @@ class AVFoundationCamera extends CameraPlatform {
EventChannel('plugins.flutter.io/camera_avfoundation/imageStream');
_platformImageStreamSubscription =
cameraEventChannel.receiveBroadcastStream().listen((dynamic imageData) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
try {
_channel.invokeMethod<void>('receivedImageStreamData');
} on PlatformException catch (e) {
throw CameraException(e.code, e.message);
}
try {
_channel.invokeMethod<void>('receivedImageStreamData');
} on PlatformException catch (e) {
throw CameraException(e.code, e.message);
}
_frameStreamController!
.add(cameraImageFromPlatformData(imageData as Map<dynamic, dynamic>));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import 'dart:typed_data';

import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:flutter/foundation.dart';

/// Converts method channel call [data] for `receivedImageStreamData` to a
/// [CameraImageData].
Expand All @@ -30,23 +29,12 @@ CameraImageFormat _cameraImageFormatFromPlatformData(dynamic data) {
}

ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) {
if (defaultTargetPlatform == TargetPlatform.android) {
switch (data) {
case 35: // android.graphics.ImageFormat.YUV_420_888
return ImageFormatGroup.yuv420;
case 256: // android.graphics.ImageFormat.JPEG
return ImageFormatGroup.jpeg;
}
}

if (defaultTargetPlatform == TargetPlatform.iOS) {
switch (data) {
case 875704438: // kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
return ImageFormatGroup.yuv420;
switch (data) {
case 875704438: // kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
return ImageFormatGroup.yuv420;

case 1111970369: // kCVPixelFormatType_32BGRA
return ImageFormatGroup.bgra8888;
}
case 1111970369: // kCVPixelFormatType_32BGRA
return ImageFormatGroup.bgra8888;
}

return ImageFormatGroup.unknown;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@
// ignore: unnecessary_import
import 'dart:typed_data';

import 'package:camera_avfoundation/src/type_conversion.dart';
import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:camera_platform_interface/src/method_channel/type_conversion.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
test('CameraImageData can be created', () {
final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 35,
'format': 1,
'height': 1,
'width': 4,
'lensAperture': 1.8,
Expand All @@ -33,13 +32,11 @@ void main() {
});
expect(cameraImage.height, 1);
expect(cameraImage.width, 4);
expect(cameraImage.format.group, ImageFormatGroup.yuv420);
expect(cameraImage.format.group, ImageFormatGroup.unknown);
expect(cameraImage.planes.length, 1);
});

test('CameraImageData has ImageFormatGroup.yuv420 for iOS', () {
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;

test('CameraImageData has ImageFormatGroup.yuv420', () {
final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 875704438,
Expand All @@ -60,28 +57,4 @@ void main() {
});
expect(cameraImage.format.group, ImageFormatGroup.yuv420);
});

test('CameraImageData has ImageFormatGroup.yuv420 for Android', () {
debugDefaultTargetPlatformOverride = TargetPlatform.android;

final CameraImageData cameraImage =
cameraImageFromPlatformData(<dynamic, dynamic>{
'format': 35,
'height': 1,
'width': 4,
'lensAperture': 1.8,
'sensorExposureTime': 9991324,
'sensorSensitivity': 92.0,
'planes': <dynamic>[
<dynamic, dynamic>{
'bytes': Uint8List.fromList(<int>[1, 2, 3, 4]),
'bytesPerPixel': 1,
'bytesPerRow': 4,
'height': 1,
'width': 4
}
]
});
expect(cameraImage.format.group, ImageFormatGroup.yuv420);
});
}
2 changes: 1 addition & 1 deletion packages/camera/camera_avfoundation/test/utils_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:camera_avfoundation/src/utils.dart';
import 'package:camera_platform_interface/camera_platform_interface.dart';
import 'package:camera_platform_interface/src/utils/utils.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

Expand Down