1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package androidx.camera.camera2.pipe.integration
17 
18 import android.content.Context
19 import androidx.annotation.RestrictTo
20 import androidx.camera.camera2.pipe.CameraPipe
21 import androidx.camera.camera2.pipe.integration.adapter.CameraFactoryProvider
22 import androidx.camera.camera2.pipe.integration.adapter.CameraSurfaceAdapter
23 import androidx.camera.camera2.pipe.integration.adapter.CameraUseCaseAdapter
24 import androidx.camera.core.CameraXConfig
25 import androidx.camera.core.impl.CameraThreadConfig
26 
27 /** Convenience class for generating a pre-populated CameraPipe based [CameraXConfig]. */
28 public class CameraPipeConfig private constructor() {
29     public companion object {
30         /** Creates a [CameraXConfig] containing a default CameraPipe implementation for CameraX. */
31         @JvmStatic
defaultConfignull32         public fun defaultConfig(): CameraXConfig {
33             return from()
34         }
35 
36         /** Creates a [CameraXConfig] using a pre-existing [CameraPipe] instance. */
37         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
38         @JvmStatic
fromnull39         public fun from(
40             sharedCameraPipe: CameraPipe? = null,
41             sharedAppContext: Context? = null,
42             sharedThreadConfig: CameraThreadConfig? = null
43         ): CameraXConfig {
44             val cameraFactoryProvider =
45                 CameraFactoryProvider(sharedCameraPipe, sharedAppContext, sharedThreadConfig)
46             return CameraXConfig.Builder()
47                 .setCameraFactoryProvider(cameraFactoryProvider)
48                 .setDeviceSurfaceManagerProvider(::CameraSurfaceAdapter)
49                 .setUseCaseConfigFactoryProvider(::CameraUseCaseAdapter)
50                 .setConfigImplType(CameraXConfig.CAMERAX_CONFIG_IMPL_TYPE_PIPE)
51                 .build()
52         }
53     }
54 }
55