@@ -20,12 +20,15 @@ import androidx.camera.core.AspectRatio
2020import androidx.camera.core.Camera
2121import androidx.camera.core.CameraInfo
2222import androidx.camera.core.CameraSelector
23+ import androidx.camera.core.ExperimentalSessionConfig
2324import androidx.camera.core.ImageAnalysis
2425import androidx.camera.core.ImageCapture
2526import androidx.camera.core.MirrorMode
2627import androidx.camera.core.Preview
28+ import androidx.camera.core.SessionConfig
2729import androidx.camera.core.TorchState
28- import androidx.camera.core.UseCaseGroup
30+ import androidx.camera.core.UseCase
31+ import androidx.camera.core.featuregroup.GroupableFeature
2932import androidx.camera.core.resolutionselector.AspectRatioStrategy
3033import androidx.camera.core.resolutionselector.ResolutionSelector
3134import androidx.camera.core.resolutionselector.ResolutionStrategy
@@ -1047,6 +1050,8 @@ class CamConfig(private val mActivity: MainActivity) {
10471050 }
10481051
10491052 // Start the camera with latest hard configuration
1053+ @OptIn(ExperimentalSessionConfig ::class )
1054+ @SuppressLint(" RestrictedApi" )
10501055 fun startCamera (forced : Boolean = false) {
10511056 if ((! forced && camera != null ) || cameraProvider == null ) return
10521057
@@ -1107,7 +1112,8 @@ class CamConfig(private val mActivity: MainActivity) {
11071112 }
11081113 }
11091114
1110- val useCaseGroupBuilder = UseCaseGroup .Builder ()
1115+ val useCasesList = arrayListOf<UseCase >()
1116+
11111117 val aspectRatioStrategy = AspectRatioStrategy (
11121118 aspectRatio, AspectRatioStrategy .FALLBACK_RULE_AUTO
11131119 )
@@ -1134,7 +1140,7 @@ class CamConfig(private val mActivity: MainActivity) {
11341140 CameraSelector .LENS_FACING_FRONT
11351141 })
11361142 .build()
1137- useCaseGroupBuilder.addUseCase (mIAnalyzer)
1143+ useCasesList.add (mIAnalyzer)
11381144
11391145 } else {
11401146 if (isVideoMode) {
@@ -1159,7 +1165,7 @@ class CamConfig(private val mActivity: MainActivity) {
11591165
11601166 videoCapture = videoCaptureBuilder.build()
11611167
1162- useCaseGroupBuilder.addUseCase (videoCapture!! )
1168+ useCasesList.add (videoCapture!! )
11631169 }
11641170
11651171 if (! mActivity.requiresVideoModeOnly) {
@@ -1196,7 +1202,7 @@ class CamConfig(private val mActivity: MainActivity) {
11961202 it.build()
11971203 }
11981204
1199- useCaseGroupBuilder.addUseCase (imageCapture!! )
1205+ useCasesList.add (imageCapture!! )
12001206 }
12011207 }
12021208
@@ -1216,32 +1222,58 @@ class CamConfig(private val mActivity: MainActivity) {
12161222 }
12171223
12181224 preview = previewBuilder.build().also {
1219- useCaseGroupBuilder.addUseCase (it)
1225+ useCasesList.add (it)
12201226 it.setSurfaceProvider(mActivity.previewView.surfaceProvider)
12211227 }
12221228
12231229 mActivity.forceUpdateOrientationSensor()
12241230
12251231 try {
12261232 try {
1233+ val preferredFeatures = arrayListOf<GroupableFeature >()
1234+
1235+ if (enableEIS && isVideoMode) {
1236+ preferredFeatures.add(
1237+ GroupableFeature .PREVIEW_STABILIZATION
1238+ )
1239+ }
1240+
1241+ val sessionConfig = SessionConfig (
1242+ useCases = useCasesList,
1243+ preferredFeatureGroup = preferredFeatures
1244+ )
1245+
12271246 camera = cameraProvider!! .bindToLifecycle(
12281247 mActivity, cameraSelector,
1229- useCaseGroupBuilder.build()
1248+ sessionConfig
12301249 )
12311250 } catch (exception: IllegalArgumentException ) {
12321251 if (isVideoMode) {
1233- val newUseCaseGroupBuilder = UseCaseGroup .Builder ()
1252+ val newUseCaseList = arrayListOf<UseCase >()
1253+ val newPreferredFeatures = arrayListOf<GroupableFeature >()
1254+
1255+ if (enableEIS && isVideoMode) {
1256+ newPreferredFeatures.add(
1257+ GroupableFeature .PREVIEW_STABILIZATION
1258+ )
1259+ }
1260+
12341261 videoCapture?.let {
1235- newUseCaseGroupBuilder.addUseCase (it)
1262+ newUseCaseList.add (it)
12361263 }
12371264 preview?.let {
1238- newUseCaseGroupBuilder.addUseCase (it)
1265+ newUseCaseList.add (it)
12391266 }
12401267 imageCapture = null
12411268
1269+ val sessionConfig = SessionConfig (
1270+ useCases = newUseCaseList,
1271+ preferredFeatureGroup = newPreferredFeatures
1272+ )
1273+
12421274 camera = cameraProvider!! .bindToLifecycle(
12431275 mActivity, cameraSelector,
1244- newUseCaseGroupBuilder.build()
1276+ sessionConfig
12451277 )
12461278 } else {
12471279 throw exception
0 commit comments