@@ -627,6 +627,7 @@ private void getUserMedia(
627627 result .success (successResult .toMap ());
628628 }
629629
630+ private boolean isFacing =true ;
630631 private VideoTrack getUserVideo (ConstraintsMap constraints ) {
631632 ConstraintsMap videoConstraintsMap = null ;
632633 ConstraintsMap videoConstraintsMandatory = null ;
@@ -657,7 +658,7 @@ private VideoTrack getUserVideo(ConstraintsMap constraints) {
657658 }
658659
659660 String facingMode = getFacingMode (videoConstraintsMap );
660- boolean isFacing = facingMode == null || !facingMode .equals ("environment" );
661+ isFacing = facingMode == null || !facingMode .equals ("environment" );
661662 String sourceId = getSourceIdConstraint (videoConstraintsMap );
662663
663664 VideoCapturer videoCapturer = createVideoCapturer (cameraEnumerator , isFacing , sourceId );
@@ -761,19 +762,37 @@ void switchCamera(String id, Result result) {
761762 return ;
762763 }
763764
764- CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer ) videoCapturer ;
765- cameraVideoCapturer .switchCamera (
766- new CameraVideoCapturer .CameraSwitchHandler () {
767- @ Override
768- public void onCameraSwitchDone (boolean b ) {
769- result .success (b );
770- }
765+ CameraEnumerator cameraEnumerator ;
771766
772- @ Override
773- public void onCameraSwitchError (String s ) {
774- resultError ("switchCamera" , "Switching camera failed: " + id , result );
775- }
776- });
767+ if (Camera2Enumerator .isSupported (applicationContext )) {
768+ Log .d (TAG , "Creating video capturer using Camera2 API." );
769+ cameraEnumerator = new Camera2Enumerator (applicationContext );
770+ } else {
771+ Log .d (TAG , "Creating video capturer using Camera1 API." );
772+ cameraEnumerator = new Camera1Enumerator (false );
773+ }
774+ // if sourceId given, use specified sourceId first
775+ final String [] deviceNames = cameraEnumerator .getDeviceNames ();
776+ for (String name : deviceNames ) {
777+ if (cameraEnumerator .isFrontFacing (name ) == !isFacing ) {
778+ CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer ) videoCapturer ;
779+ cameraVideoCapturer .switchCamera (
780+ new CameraVideoCapturer .CameraSwitchHandler () {
781+ @ Override
782+ public void onCameraSwitchDone (boolean b ) {
783+ isFacing =!isFacing ;
784+ result .success (b );
785+ }
786+
787+ @ Override
788+ public void onCameraSwitchError (String s ) {
789+ resultError ("switchCamera" , "Switching camera failed: " + id , result );
790+ }
791+ },name );
792+ return ;
793+ }
794+ }
795+ resultError ("switchCamera" , "Switching camera failed: " + id , result );
777796 }
778797
779798 /**
0 commit comments