@@ -785,9 +785,9 @@ void main() {
785
785
786
786
group ('video recording' , () {
787
787
test (
788
- 'startVideoRecording binds video capture use case and starts the recording' ,
788
+ 'startVideoCapturing binds video capture use case and starts the recording' ,
789
789
() async {
790
- //Set up mocks and constants.
790
+ // Set up mocks and constants.
791
791
final FakeAndroidCameraCameraX camera = FakeAndroidCameraCameraX ();
792
792
camera.processCameraProvider = MockProcessCameraProvider ();
793
793
camera.cameraSelector = MockCameraSelector ();
@@ -815,7 +815,7 @@ void main() {
815
815
camera.cameraSelector! , < UseCase > [camera.videoCapture! ]))
816
816
.thenAnswer ((_) async => camera.camera! );
817
817
818
- await camera.startVideoRecording ( cameraId);
818
+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
819
819
820
820
verify (camera.processCameraProvider! .bindToLifecycle (
821
821
camera.cameraSelector! , < UseCase > [camera.videoCapture! ]));
@@ -824,9 +824,9 @@ void main() {
824
824
});
825
825
826
826
test (
827
- 'startVideoRecording binds video capture use case and starts the recording'
827
+ 'startVideoCapturing binds video capture use case and starts the recording'
828
828
' on first call, and does nothing on second call' , () async {
829
- //Set up mocks and constants.
829
+ // Set up mocks and constants.
830
830
final FakeAndroidCameraCameraX camera = FakeAndroidCameraCameraX ();
831
831
camera.processCameraProvider = MockProcessCameraProvider ();
832
832
camera.cameraSelector = MockCameraSelector ();
@@ -854,14 +854,14 @@ void main() {
854
854
camera.cameraSelector! , < UseCase > [camera.videoCapture! ]))
855
855
.thenAnswer ((_) async => camera.camera! );
856
856
857
- await camera.startVideoRecording ( cameraId);
857
+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
858
858
859
859
verify (camera.processCameraProvider! .bindToLifecycle (
860
860
camera.cameraSelector! , < UseCase > [camera.videoCapture! ]));
861
861
expect (camera.pendingRecording, equals (mockPendingRecording));
862
862
expect (camera.recording, mockRecording);
863
863
864
- await camera.startVideoRecording ( cameraId);
864
+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
865
865
// Verify that each of these calls happened only once.
866
866
verify (mockSystemServicesApi.getTempFilePath (camera.videoPrefix, '.temp' ))
867
867
.called (1 );
@@ -872,6 +872,55 @@ void main() {
872
872
verifyNoMoreInteractions (mockPendingRecording);
873
873
});
874
874
875
+ test (
876
+ 'startVideoCapturing called with stream options starts image streaming' ,
877
+ () async {
878
+ // Set up mocks and constants.
879
+ final FakeAndroidCameraCameraX camera =
880
+ FakeAndroidCameraCameraX (shouldCreateDetachedObjectForTesting: true );
881
+ final MockProcessCameraProvider mockProcessCameraProvider =
882
+ MockProcessCameraProvider ();
883
+ camera.processCameraProvider = mockProcessCameraProvider;
884
+ camera.cameraSelector = MockCameraSelector ();
885
+ camera.recorder = camera.testRecorder;
886
+ camera.videoCapture = camera.testVideoCapture;
887
+ camera.imageAnalysis = camera.testImageAnalysis;
888
+ camera.camera = MockCamera ();
889
+ final MockPendingRecording mockPendingRecording = MockPendingRecording ();
890
+ final TestSystemServicesHostApi mockSystemServicesApi =
891
+ MockTestSystemServicesHostApi ();
892
+ TestSystemServicesHostApi .setup (mockSystemServicesApi);
893
+
894
+ const int cameraId = 17 ;
895
+ const String outputPath = '/temp/MOV123.temp' ;
896
+ final Completer <CameraImageData > imageDataCompleter =
897
+ Completer <CameraImageData >();
898
+ final VideoCaptureOptions videoCaptureOptions = VideoCaptureOptions (
899
+ cameraId,
900
+ streamCallback: (CameraImageData imageData) =>
901
+ imageDataCompleter.complete (imageData));
902
+
903
+ // Mock method calls.
904
+ when (camera.processCameraProvider! .isBound (camera.videoCapture! ))
905
+ .thenAnswer ((_) async => true );
906
+ when (mockSystemServicesApi.getTempFilePath (camera.videoPrefix, '.temp' ))
907
+ .thenReturn (outputPath);
908
+ when (camera.testRecorder.prepareRecording (outputPath))
909
+ .thenAnswer ((_) async => mockPendingRecording);
910
+ when (mockProcessCameraProvider.bindToLifecycle (any, any))
911
+ .thenAnswer ((_) => Future <Camera >.value (camera.camera));
912
+ when (camera.camera! .getCameraInfo ())
913
+ .thenAnswer ((_) => Future <CameraInfo >.value (MockCameraInfo ()));
914
+
915
+ await camera.startVideoCapturing (videoCaptureOptions);
916
+
917
+ final CameraImageData mockCameraImageData = MockCameraImageData ();
918
+ camera.cameraImageDataStreamController! .add (mockCameraImageData);
919
+
920
+ expect (imageDataCompleter.future, isNotNull);
921
+ await camera.cameraImageDataStreamController! .close ();
922
+ });
923
+
875
924
test ('pauseVideoRecording pauses the recording' , () async {
876
925
final AndroidCameraCameraX camera = AndroidCameraCameraX ();
877
926
final MockRecording recording = MockRecording ();
0 commit comments