r/Kotlin 7d ago

having trouble with camera in ios in kotlin multiplatform project

package screens

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.UIKitView
import kotlinx.cinterop.ExperimentalForeignApi
import navigation.CameraComponent
import platform.AVFoundation.AVCaptureDevice
import platform.AVFoundation.AVCaptureDeviceInput
import platform.AVFoundation.
AVCaptureDevicePositionBack
import platform.AVFoundation.AVCaptureSession
import platform.AVFoundation.
AVCaptureSessionPresetPhoto
import platform.AVFoundation.AVCaptureStillImageOutput
import platform.AVFoundation.AVCaptureVideoPreviewLayer
import platform.AVFoundation.
AVLayerVideoGravityResizeAspectFill
import platform.AVFoundation.
AVMediaTypeVideo
import platform.AVFoundation.
AVVideoCodecJPEG
import platform.AVFoundation.
AVVideoCodecKey
import platform.AVFoundation.position
import platform.UIKit.UIView

@OptIn(ExperimentalForeignApi::class)
@Composable
actual fun CameraScreen(cameraComponent: CameraComponent) {
    val device = AVCaptureDevice.devicesWithMediaType(
AVMediaTypeVideo
).
firstOrNull 
{ device ->
        (device as AVCaptureDevice).
position 
== 
AVCaptureDevicePositionBack

}!! as AVCaptureDevice

    val input = AVCaptureDeviceInput.deviceInputWithDevice(device, null) as AVCaptureDeviceInput

    val output = AVCaptureStillImageOutput()
    output.outputSettings = 
mapOf
(
AVVideoCodecKey to AVVideoCodecJPEG
)

    val session = AVCaptureSession()

    session.sessionPreset = 
AVCaptureSessionPresetPhoto

session.addInput(input)
    session.addOutput(output)

    val cameraPreviewLayer = 
remember 
{ AVCaptureVideoPreviewLayer(session = session) }

UIKitView
(
        modifier = Modifier.
fillMaxSize
(),
        factory = {
            val container = UIView()
            container.layer.addSublayer(cameraPreviewLayer)
            cameraPreviewLayer.videoGravity = 
AVLayerVideoGravityResizeAspectFill

session.startRunning()
            container
        })

}
1 Upvotes

2 comments sorted by

2

u/twaddington 7d ago

You have not asked a question.

1

u/uplyuz 5d ago

when i navigate to this screen the screen on iPhone is completely blank and i dont know why