Skip to content

Commit 3e6d11d

Browse files
MHShettythestinger
authored andcommitted
Use SessionConfig API over UseCase API
While setting EIS as a preferred/non-required feature to prevent crash and support the chosen quality of video.
1 parent 9b079ae commit 3e6d11d

1 file changed

Lines changed: 43 additions & 11 deletions

File tree

app/src/main/java/app/grapheneos/camera/CamConfig.kt

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ import androidx.camera.core.AspectRatio
2020
import androidx.camera.core.Camera
2121
import androidx.camera.core.CameraInfo
2222
import androidx.camera.core.CameraSelector
23+
import androidx.camera.core.ExperimentalSessionConfig
2324
import androidx.camera.core.ImageAnalysis
2425
import androidx.camera.core.ImageCapture
2526
import androidx.camera.core.MirrorMode
2627
import androidx.camera.core.Preview
28+
import androidx.camera.core.SessionConfig
2729
import androidx.camera.core.TorchState
28-
import androidx.camera.core.UseCaseGroup
30+
import androidx.camera.core.UseCase
31+
import androidx.camera.core.featuregroup.GroupableFeature
2932
import androidx.camera.core.resolutionselector.AspectRatioStrategy
3033
import androidx.camera.core.resolutionselector.ResolutionSelector
3134
import 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

Comments
 (0)