This repository was archived by the owner on Apr 15, 2025. It is now read-only.
This repository was archived by the owner on Apr 15, 2025. It is now read-only.
Camera2 Pass Images from ImageReader to MediaRecorder #130
Open
Description
Hi!
I'm trying to create a Camera2 CameraCaptureSession
that is capable of four outputs:
- On-screen preview (
SurfaceView
, up to 1080p) - Photo capture (
ImageReader
, up to 8k photos) - Video Capture (
MediaRecorder
/MediaCodec
, up to 4k videos) - Frame Processing (
ImageReader
, up to 4k video frames)
Unfortunately Camera2 does not support attaching all of those four outputs (Surfaces) at the same time, so I'm going to have to make a compromise.
The compromise that seemed most logical to me was to combine the two video capture pipelines into one, so that the Frame Processing output (#4, ImageReader
) redirects the frames into the Video Capture output (#3, MediaRecorder
).
How do I write the Images from the 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)
..into the Surface
from the MediaRecorder
?
val surface = MediaCodec.createPersistentInputSurface()
val recorder = MediaRecorder(context)
..
recorder.setInputSurface(surface)
I'm not too familiar with OpenGL, so any help here would be appreciated.
Metadata
Metadata
Assignees
Labels
No labels