我正在尝试创建一个CameraCaptureSession具有四个输出的 Camera2:
SurfaceView,最高 1080p)ImageReader,最多 8k 照片)MediaRecorder/ MediaCodec,最多 4k 视频)ImageReader最多 4k 视频帧)不幸的是,Camera2 不支持同时连接所有这四个输出(表面),因此我必须做出妥协。
对我来说最合乎逻辑的妥协是将两个视频捕获管道合并为一个,以便帧处理输出(#4,ImageReader)将帧重定向到视频捕获输出(#3,MediaRecorder)。
如何从 ImageReader 写入图像:
val imageReader = ImageReader.newInstance(4000, 2256, ImageFormat.YUV_420_888, 3)
imageReader.setOnImageAvailableListener({ reader ->
val image = reader.acquireNextImage() ?: return@setOnImageAvailableListener
callback.onVideoFrameCaptured(image)
}, queue.handler)
val captureSession = device.createCaptureSession(.., imageReader.surface)
Run Code Online (Sandbox Code Playgroud)
..进入Surface从MediaRecorder?
val surface = MediaCodec.createPersistentInputSurface()
val recorder = MediaRecorder(context)
..
recorder.setInputSurface(surface)
Run Code Online (Sandbox Code Playgroud)
我想我可能需要一个带有直通着色器的 OpenGL 管道 - 但我不知道如何从ImageReader …
android opengl-es surfaceview android-camera android-camera2