我有一个应用通过使用ImageReader
连续保存相机图像。
现在我有必要动态添加多个SurfaceView,以在创建摄像机会话后显示不同大小的预览。
由于ImageReader
的表面是在创建会话之前添加的,因此:
mBuilder = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
mBuilder!!.addTarget(mImageReader!!.surface)
val surfaces = ArrayList<Surface>()
surfaces.add(mImageReader!!.surface)
mCameraDevice!!.createCaptureSession(surfaces, mSessionCallback, mBackgroundHandler)
我的新SurfaceView将在createCaptureSession
之后创建。
那么我应该如何向设备添加另一个预览图面以接收来自camera2的接收器数据?
答案 0 :(得分:0)
对于不同的输出分辨率,直接使用camera2无法做到这一点。如果需要更改输出的分辨率,则必须使用所需的新输出创建一个新的捕获会话。
如果您希望使用多个相同大小的SurfaceView,则可以使用API级别26和更高版本的OutputConfiguration(https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration)中添加的表面共享API。
如果这还不够,另一个选择是将相机连接到您可能需要的最大SurfaceView分辨率的SurfaceTexture,然后通过OpenGL渲染较低分辨率的输出,为要绘制的每个新SurfaceView创建EGL窗口至。设置EGL上下文和呈现需要大量代码,但是应该相当高效。