Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
44d7828
Add resolution configuration
camsim99 Apr 22, 2023
6281eb5
dart side of impl
bparrishMines Apr 26, 2023
9a74cd1
java impls
bparrishMines Apr 26, 2023
03ef376
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 May 15, 2023
2a5c0fc
Fix implementation
camsim99 May 15, 2023
9001ab0
Small cleanup
camsim99 May 15, 2023
fd19de6
Fixing tests and cleanup minus plugin dart impl test
camsim99 May 17, 2023
c9b62ef
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Jul 18, 2023
725be10
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Jul 18, 2023
6389ae1
Work on Dart side -- tests, cleanup, bug id
camsim99 Jul 18, 2023
16770de
Fix java unit tests
camsim99 Jul 18, 2023
a8144fa
Fix typo
camsim99 Jul 18, 2023
aba4c34
Fix dart tests
camsim99 Jul 19, 2023
ca5604a
Add integration tests
camsim99 Jul 20, 2023
474745c
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Aug 16, 2023
b778894
Add res support
camsim99 Aug 16, 2023
8d2cb3a
correct overrides
camsim99 Aug 16, 2023
a145afe
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Aug 16, 2023
fd3ade2
Self review
camsim99 Aug 16, 2023
1dc6fbd
formatting
camsim99 Aug 16, 2023
fad7cbc
Undo strange change
camsim99 Aug 16, 2023
08edc4c
Fix dart unit tests
camsim99 Aug 16, 2023
1def519
Fix integration test
camsim99 Aug 17, 2023
5bab620
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Aug 17, 2023
caf819e
Nits
camsim99 Aug 17, 2023
c775756
Update readme
camsim99 Aug 17, 2023
fabaab7
Update packages/camera/camera_android_camerax/lib/src/android_camera_…
camsim99 Aug 22, 2023
810cb54
Update packages/camera/camera_android_camerax/lib/src/android_camera_…
camsim99 Aug 22, 2023
60a47ed
Update packages/camera/camera_android_camerax/lib/src/android_camera_…
camsim99 Aug 22, 2023
474d84c
Update packages/camera/camera_android_camerax/lib/src/android_camera_…
camsim99 Aug 22, 2023
6f45ecb
Add comments to integration tests
camsim99 Aug 22, 2023
5c31de4
Merge branch 'camx_resconfig' of github.com:camsim99/packages into ca…
camsim99 Aug 22, 2023
e4134bd
Updated integration test comment
camsim99 Aug 23, 2023
bb35a61
start quality re-write
camsim99 Aug 29, 2023
5ac1c7c
Replace vid qual const with quality/qualitydata
camsim99 Aug 29, 2023
860b4db
Replace Quality indices with VideoQuality/VideoQualityData class
camsim99 Aug 29, 2023
5ea328e
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Aug 29, 2023
a163f0e
Fix versionining
camsim99 Aug 29, 2023
2a9671e
Format
camsim99 Aug 29, 2023
0178493
run tests
camsim99 Aug 29, 2023
ff9bd3a
nits
camsim99 Sep 7, 2023
396091c
Merge remote-tracking branch 'upstream/main' into camx_resconfig
camsim99 Sep 7, 2023
206fbb6
Fix changelog
camsim99 Sep 7, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix dart unit tests
  • Loading branch information
camsim99 committed Aug 16, 2023
commit 08edc4c9896675a461e3b48add2f60e7051d51a6
Original file line number Diff line number Diff line change
Expand Up @@ -120,17 +120,6 @@ class AndroidCameraCameraX extends CameraPlatform {
@visibleForTesting
CameraSelector? cameraSelector;

/// The [ResolutionSelector] that represents the resolution preset used to
/// create a camera that will be used for capturing still images, and image
/// analysis.
@visibleForTesting
ResolutionSelector? presetResolutionSelector;

/// The [QualitySelector] that represents the resolution preset used to
/// create a camera that will be used for recording video.
@visibleForTesting
QualitySelector? presetQualitySelector;

/// The controller we need to broadcast the different camera events.
///
/// It is a `broadcast` because multiple controllers will connect to
Expand Down Expand Up @@ -241,9 +230,10 @@ class AndroidCameraCameraX extends CameraPlatform {
cameraIsFrontFacing, cameraDescription.sensorOrientation);
// Determine ResolutionSelector and QualitySelector based on preset for
// camera UseCases.
presetResolutionSelector =
final ResolutionSelector? presetResolutionSelector =
_getResolutionSelectorFromPreset(resolutionPreset);
presetQualitySelector = _getQualitySelectorFromPreset(resolutionPreset);
final QualitySelector? presetQualitySelector =
_getQualitySelectorFromPreset(resolutionPreset);

// Retrieve a fresh ProcessCameraProvider instance.
processCameraProvider ??= await ProcessCameraProvider.getInstance();
Expand All @@ -262,7 +252,7 @@ class AndroidCameraCameraX extends CameraPlatform {

// Configure ImageAnalysis instance.
// Defaults to YUV_420_888 image format.
imageAnalysis ??= createImageAnalysis(presetResolutionSelector);
imageAnalysis = createImageAnalysis(presetResolutionSelector);

// Configure VideoCapture and Recorder instances.
recorder = createRecorder(presetQualitySelector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:camera_android_camerax/src/camera_state.dart';
import 'package:camera_android_camerax/src/camera_state_error.dart';
import 'package:camera_android_camerax/src/camerax_library.g.dart';
import 'package:camera_android_camerax/src/exposure_state.dart';
import 'package:camera_android_camerax/src/fallback_strategy.dart';
import 'package:camera_android_camerax/src/image_analysis.dart';
import 'package:camera_android_camerax/src/image_capture.dart';
import 'package:camera_android_camerax/src/image_proxy.dart';
Expand Down Expand Up @@ -341,15 +342,110 @@ void main() {
boundSize: expectedBoundSize,
fallbackRule: ResolutionStrategy.fallbackRuleClosestLower);

expect(camera.presetResolutionSelector!.resolutionStrategy!.boundSize,
expect(camera.preview!.resolutionSelector!.resolutionStrategy!.boundSize,
equals(expectedResolutionStrategy.boundSize));
expect(camera.presetResolutionSelector!.resolutionStrategy!.fallbackRule,
expect(
camera
.imageCapture!.resolutionSelector!.resolutionStrategy!.boundSize,
equals(expectedResolutionStrategy.boundSize));
expect(
camera
.imageAnalysis!.resolutionSelector!.resolutionStrategy!.boundSize,
equals(expectedResolutionStrategy.boundSize));
expect(
camera.preview!.resolutionSelector!.resolutionStrategy!.fallbackRule,
equals(expectedResolutionStrategy.fallbackRule));
expect(
camera.imageCapture!.resolutionSelector!.resolutionStrategy!
.fallbackRule,
equals(expectedResolutionStrategy.fallbackRule));
expect(
camera.imageAnalysis!.resolutionSelector!.resolutionStrategy!
.fallbackRule,
equals(expectedResolutionStrategy.fallbackRule));
}

// Test null case
// Test null case.
await camera.createCamera(testCameraDescription, null);
expect(camera.preview!.resolutionSelector, isNull);
expect(camera.imageCapture!.resolutionSelector, isNull);
expect(camera.imageAnalysis!.resolutionSelector, isNull);
});

test(
'createCamera properly sets preset resolution for video capture use case',
() async {
final FakeAndroidCameraCameraX camera =
FakeAndroidCameraCameraX(shouldCreateDetachedObjectForTesting: true);
final MockProcessCameraProvider mockProcessCameraProvider =
MockProcessCameraProvider();
const CameraLensDirection testLensDirection = CameraLensDirection.back;
const int testSensorOrientation = 90;
const CameraDescription testCameraDescription = CameraDescription(
name: 'cameraName',
lensDirection: testLensDirection,
sensorOrientation: testSensorOrientation);
const bool enableAudio = true;
final MockCamera mockCamera = MockCamera();
final MockCameraInfo mockCameraInfo = MockCameraInfo();

camera.processCameraProvider = mockProcessCameraProvider;

when(mockProcessCameraProvider.bindToLifecycle(
camera.mockBackCameraSelector, <UseCase>[
camera.testPreview,
camera.testImageCapture,
camera.testImageAnalysis
])).thenAnswer((_) async => mockCamera);
when(mockCamera.getCameraInfo()).thenAnswer((_) async => mockCameraInfo);
when(mockCameraInfo.getCameraState())
.thenAnswer((_) async => MockLiveCameraState());
camera.processCameraProvider = mockProcessCameraProvider;

// Test non-null resolution presets.
for (final ResolutionPreset resolutionPreset in ResolutionPreset.values) {
await camera.createCamera(testCameraDescription, resolutionPreset,
enableAudio: enableAudio);

VideoQualityConstraint? expectedVideoQuality;
switch (resolutionPreset) {
case ResolutionPreset.low:
// 240p is not supported by CameraX.
case ResolutionPreset.medium:
expectedVideoQuality = VideoQualityConstraint.SD;
break;
case ResolutionPreset.high:
expectedVideoQuality = VideoQualityConstraint.HD;
break;
case ResolutionPreset.veryHigh:
expectedVideoQuality = VideoQualityConstraint.FHD;
break;
case ResolutionPreset.ultraHigh:
expectedVideoQuality = VideoQualityConstraint.UHD;
break;
case ResolutionPreset.max:
expectedVideoQuality = VideoQualityConstraint.highest;
break;
}

const VideoResolutionFallbackRule expectedFallbackRule =
VideoResolutionFallbackRule.lowerQualityThan;
final FallbackStrategy expectedFallbackStrategy =
FallbackStrategy.detached(
quality: expectedVideoQuality,
fallbackRule: expectedFallbackRule);

expect(camera.recorder!.qualitySelector!.qualityList,
equals(<VideoQualityConstraint>[expectedVideoQuality]));
expect(camera.recorder!.qualitySelector!.fallbackStrategy!.quality,
equals(expectedFallbackStrategy.quality));
expect(camera.recorder!.qualitySelector!.fallbackStrategy!.fallbackRule,
equals(expectedFallbackStrategy.fallbackRule));
}

// Test null case.
await camera.createCamera(testCameraDescription, null);
expect(camera.presetResolutionSelector, isNull);
expect(camera.recorder!.qualitySelector, isNull);
});

test(
Expand Down Expand Up @@ -1217,16 +1313,19 @@ class FakeAndroidCameraCameraX extends AndroidCameraCameraX {
@override
Preview createPreview(
{required int targetRotation, ResolutionSelector? resolutionSelector}) {
when(testPreview.resolutionSelector).thenReturn(resolutionSelector);
return testPreview;
}

@override
ImageCapture createImageCapture(ResolutionSelector? resolutionSelector) {
when(testImageCapture.resolutionSelector).thenReturn(resolutionSelector);
return testImageCapture;
}

@override
Recorder createRecorder(QualitySelector? qualitySelector) {
when(testRecorder.qualitySelector).thenReturn(qualitySelector);
return testRecorder;
}

Expand All @@ -1237,6 +1336,7 @@ class FakeAndroidCameraCameraX extends AndroidCameraCameraX {

@override
ImageAnalysis createImageAnalysis(ResolutionSelector? resolutionSelector) {
when(testImageAnalysis.resolutionSelector).thenReturn(resolutionSelector);
return testImageAnalysis;
}
}