[코틀린] 고도엔진에서 카메라 플러그인 쓸 수 있도록 코드 수정중..실패
일단 그 전에 만들어둔
고도용 안드로이드 플러그인에
카메라 x기능을 추가해주어야한다.
가물가물해지기 전에 해놓아야겠다.
카메라 x 종속성 부여
def camerax_version = "1.4.1"implementation "androidx.camera:camera-core:${camerax_version}"implementation "androidx.camera:camera-camera2:${camerax_version}"implementation "androidx.camera:camera-lifecycle:${camerax_version}"implementation "androidx.camera:camera-video:${camerax_version}"implementation 'androidx.constraintlayout:constraintlayout:2.1.4'implementation "androidx.camera:camera-view:${camerax_version}"implementation "androidx.camera:camera-extensions:${camerax_version}"
액티비티 클래스에 저런 권한 함수가 있어서 그대로
오버라이드해서 사용하는데
이걸 고도엔진에서는 액티비티 클래스가 없으니까 만들어줘야하는 것 같다.
보니까 고도 액티비티가 있는데 이게 대응되는 것?같은데
아 이미 구현되어있네 이거 가져다 쓰면되겠다.라고 생각했는데
이건 목적이 다르넹
나는 안드로이드 네이티브 라이브러리 기능을 고도엔진에서 사용할 수 있게 플러그인으로 만드는 것이고
저거는 게임엔진으로 만든 게임을 안드로이드 네이티브 환경에서 보여준다라고 생각
아예 다르다 안드로이드 스튜디오로 빌드하는거니까...
난 지금 고도엔진으로 빌드할건데
근데어느쪽이든 가능하긴한데
굳이 고도로 만든 겜을 네이티브 안드로이드로 빌드하기 위해 저걸 써서한다? 왜지?
성능이나 마켓준수가 쉽다는데...흠
근데 그럼 고도엔진 프로젝트를 안드로이드 스튜디오에 맞게 또 찾아보고 해야하는데...
이건 좀..근데 코드자체는 codelab그대로 옮기면되니까 이건 편한데...
아 일다 나는
플러그인->고도엔진->빌드를 택해서 진행하기로..
다른방법도 있다는건 알겠다.
아 결국 GodotPlugin라이브러리에 다 이미 구현되어있다.
함수를 불러올려면 위에 use고도해야하나?;
오류나서 앱중지가 되고 있었는데 원인을 찾았다.
/* val imageAnalyzer = ImageAnalysis.Builder().build().also {it.setAnalyzer(cameraExecutor, ImageAnalysis.Analyzer { image ->val buffer = image.planes[0].bufferval data = ByteArray(buffer.remaining())buffer.get(data)latestFrame = dataimage.close()})}*/
이 실시간 정보 얻는 부분이 뭔가 잘못된 것 같다.
이부분은 ai가 짜준건데 -ㅅ-;;
저걸 주석하니까 내가원하는 버튼 눌렀을 때 권한요구하는 ui가 등장한당.
아 이게 되어야 뭘하는데 매개변수로 넣으면 앱중지되고 어떤 오류인지 파악도 안된다. ㅠㅠ
혹시 버전차이 때문인가 싶어서 버전을 바꿔보려고한당!!
고도엔진 4.3.0인데
4.2.2 고도엔진에 맞는버전으로 다운그레이드 진행
고도문서를 찾아봐야겠다. 왜 호환이 안되지
camerax를못쓰나?;
고도 안드로이드 플러그인 카메라도 뜯어봤는데..
이거 비윤리적인 짓같은데 -ㅅ-;;
어쨌든
기본 카메라로 한 것 같다 라이브러리 같은 걸 안쓰고..
그래서
안드로이드 개발자 문서를 다시보러감.
아니야 좀더 봅시다..
안드로이드 스튜디오로 오류를 파악할 수 있었다.
저 라이프사이클 클래스가 발견되지 않는다는데 -ㅅ-??
https://docs.gradle.org/current/userguide/custom_plugins.html#sec:packaging_a_plugin
플러그인 관련 문서가 있다.
aar파일을 열고
아래 명령어를 git bash로 치니
jdeps classes.jar
classes.jar에 포함된 종속성 클래스들을
볼 수 있는데
not found가 뜨고 있었다.
아..
플러그인은 종속성이 포함이 안된것;; 쉣;;
private fun yuv420ToRgb(image: ImageProxy): ByteArray {val planes = image.planesval yBuffer = planes[0].bufferval uBuffer = planes[1].bufferval vBuffer = planes[2].bufferval ySize = yBuffer.remaining()val uSize = uBuffer.remaining()val vSize = vBuffer.remaining()val width = image.widthval height = image.heightval rgbBytes = ByteArray(width * height * 3)val yStride = planes[0].rowStrideval uStride = planes[1].rowStrideval vStride = planes[2].rowStridevar rgbIndex = 0for (y in 0 until height) {for (x in 0 until width) {val yIndex = y * yStride + xval uvIndex = (y / 2) * uStride + (x / 2)val Y = yBuffer.get(yIndex).toInt() and 0xffval U = uBuffer.get(uvIndex).toInt() and 0xffval V = vBuffer.get(uvIndex).toInt() and 0xff// YUV to RGB conversionval R = Y + 1.402 * (V - 128)val G = Y - 0.344 * (U - 128) - 0.714 * (V - 128)val B = Y + 1.772 * (U - 128)rgbBytes[rgbIndex++] = R.coerceIn(0.0, 255.0).toInt().toByte()rgbBytes[rgbIndex++] = G.coerceIn(0.0, 255.0).toInt().toByte()rgbBytes[rgbIndex++] = B.coerceIn(0.0, 255.0).toInt().toByte()}}return rgbBytes}
val imageAnalyzer = ImageAnalysis.Builder().setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888).setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build().also {it.setAnalyzer(cameraExecutor, object : ImageAnalysis.Analyzer {private var lastEmitTime = 0Lprivate val EMIT_INTERVAL = 300 // 밀리초 단위override fun analyze(image: ImageProxy) {val currentTime = System.currentTimeMillis()if (currentTime - lastEmitTime >= EMIT_INTERVAL) {val width = image.widthval height = image.heightval buffer = image.planes[0].bufferval data = ByteArray(buffer.remaining())buffer.get(data)emitSignal("updateData", data, width, height)lastEmitTime = currentTime}image.close()}})}
댓글
댓글 쓰기