Как использовать CameraX с GLSurfaceView? - PullRequest
0 голосов
/ 24 марта 2020

Это в основном дубликат этого вопроса , который остался без ответа. Я знаю, что мне нужно реализовать SurfaceProvider, чтобы предоставить Surfacetexture для SurfaceView или GLSurfaceView, но подробности того, как это следует реализовать, на данный момент не документированы.

Ниже приведен код, который я написал, но, к сожалению, он не работает (onFrameAvailable вызывается только один раз и отображает черный экран):

// SurfaceProvider.onSurfaceRequested
override fun onSurfaceRequested(surfaceRequest: SurfaceRequest) {
    Log.e("NM", "surfaceRequestFlag")
    val surfaceTexture = SurfaceTexture(textureArray[0])
    surfaceTexture.setDefaultBufferSize(640, 480)
    val surface = Surface(surfaceTexture)
    val parent = view.parent as ViewGroup
    parent.removeView(view)
    provideSurfaceTexture(surfaceTexture)
    parent.addView(view)
    //updateTransform()

    surfaceRequest?.provideSurface(surface, ContextCompat.getMainExecutor(view.context), Consumer<SurfaceRequest.Result> { result ->
        surface.release()
        surfaceTexture.release()
        Log.e("NM", "SurfaceConsumer")
    })
}

// provideSurfaceTexture
fun provideSurfaceTexture(_surfaceTexture: SurfaceTexture) {
    Log.e("NM", "ProvideSurfaceTexture")
    surfaceTexture = _surfaceTexture
    surfaceTexture?.setOnFrameAvailableListener(this)
}
...