This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: support back camera

+11 -10
+3 -2
posedetection/src/androidMain/kotlin/com.performancecoachlab/posedetection/camera/CameraView.android.kt
··· 2 2 3 3 import android.graphics.Bitmap 4 4 import androidx.annotation.OptIn 5 + import androidx.camera.core.CameraSelector.DEFAULT_BACK_CAMERA 5 6 import androidx.camera.core.CameraSelector.DEFAULT_FRONT_CAMERA 6 7 import androidx.camera.core.ExperimentalGetImage 7 8 import androidx.camera.view.LifecycleCameraController ··· 41 42 @OptIn(ExperimentalGetImage::class) 42 43 @Composable 43 44 actual fun CameraView( 44 - skeletonRepository: SkeletonRepository, drawSkeleton: Boolean, modifier: Modifier 45 + skeletonRepository: SkeletonRepository, drawSkeleton: Boolean, modifier: Modifier, frontCamera: Boolean 45 46 ) { 46 47 var bitmap by remember { mutableStateOf<ImageBitmap?>(null) } 47 48 var skeleton by remember { mutableStateOf(Skeleton()) } ··· 55 56 val executor = remember { Executors.newSingleThreadExecutor() } 56 57 LaunchedEffect(lifecycleOwner) { 57 58 cameraController.bindToLifecycle(lifecycleOwner) 58 - cameraController.cameraSelector = DEFAULT_FRONT_CAMERA 59 + cameraController.cameraSelector = if(frontCamera)DEFAULT_FRONT_CAMERA else DEFAULT_BACK_CAMERA 59 60 previewView.controller = cameraController 60 61 previewView.scaleType = PreviewView.ScaleType.FIT_CENTER 61 62 cameraController.setImageAnalysisAnalyzer(executor) { imageProxy ->
+2 -1
posedetection/src/commonMain/kotlin/com/performancecoachlab/posedetection/camera/CameraView.kt
··· 9 9 expect fun CameraView( 10 10 skeletonRepository: SkeletonRepository, 11 11 drawSkeleton: Boolean = true, 12 - modifier: Modifier = Modifier.fillMaxSize() 12 + modifier: Modifier = Modifier.fillMaxSize(), 13 + frontCamera: Boolean = true, 13 14 )
+5 -6
posedetection/src/iosMain/kotlin/com/performancecoachlab/posedetection/camera/CameraView.ios.kt
··· 19 19 actual fun CameraView( 20 20 skeletonRepository: SkeletonRepository, 21 21 drawSkeleton: Boolean, 22 - modifier: Modifier 22 + modifier: Modifier, 23 + frontCamera: Boolean, 23 24 ) { 24 25 val cameraEngine = remember { mutableStateOf<CameraEngine?>(null) } 25 - val skeleton by skeletonRepository.skeletonFlow.collectAsState() 26 26 val frameListener = remember { FrameRepository() } 27 27 val frameBitmap by frameListener.frameFlow.collectAsState() 28 - LaunchedEffect(cameraEngine.value){ 28 + LaunchedEffect(cameraEngine.value) { 29 29 cameraEngine.value?.apply { 30 30 addSkeletonRepository(skeletonRepository) 31 31 addFrameListener(frameListener) ··· 34 34 } 35 35 Box(modifier = Modifier.fillMaxSize()) { 36 36 CameraPreview( 37 - modifier = Modifier.fillMaxSize(), 38 - onCameraControllerReady = { engine -> 39 - cameraEngine.value = engine 37 + modifier = Modifier.fillMaxSize(), onCameraControllerReady = { engine -> 38 + cameraEngine.value = engine.also { if (!frontCamera) it.toggleCameraLens() } 40 39 }) 41 40 if (drawSkeleton) { 42 41 frameBitmap?.also {
+1 -1
sample/composeApp/src/commonMain/kotlin/com/nate/posedetection/App.kt
··· 30 30 if (permissionGranted) CameraView( 31 31 skeletonRepository = skeletonRepository, 32 32 drawSkeleton = true, 33 - modifier = Modifier.fillMaxSize() 33 + modifier = Modifier.fillMaxSize(), 34 34 ) 35 35 else Text("Camera permission not granted") 36 36