Merge "Reuse VideoCapture use case in CameraController" into androidx-main
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
index 2ed53fc..3602e67 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
@@ -1435,6 +1435,7 @@
             return;
         }
         mVideoCaptureQuality = targetQuality;
+        unbindVideoAndRecreate();
         startCameraAndTrackStates();
     }
 
@@ -1450,6 +1451,16 @@
         return mVideoCaptureQuality;
     }
 
+    /**
+     * Unbinds VideoCapture and recreate with the latest parameters.
+     */
+    private void unbindVideoAndRecreate() {
+        if (isCameraInitialized()) {
+            mCameraProvider.unbind(mVideoCapture);
+        }
+        mVideoCapture = createNewVideoCapture();
+    }
+
     private VideoCapture<Recorder> createNewVideoCapture() {
         return VideoCapture.withOutput(generateVideoCaptureRecorder(mVideoCaptureQuality));
     }
@@ -2002,11 +2013,10 @@
             mCameraProvider.unbind(mImageAnalysis);
         }
 
-        // TODO: revert aosp/2280599 to reuse VideoCapture when VideoCapture supports reuse.
-        mCameraProvider.unbind(mVideoCapture);
         if (isVideoCaptureEnabled()) {
-            mVideoCapture = createNewVideoCapture();
             builder.addUseCase(mVideoCapture);
+        } else {
+            mCameraProvider.unbind(mVideoCapture);
         }
 
         builder.setViewPort(mViewPort);