Android OpenGL camera2 纹理分辨率
Posted
技术标签:
【中文标题】Android OpenGL camera2 纹理分辨率【英文标题】:Android OpenGL camera2 texture resolution 【发布时间】:2018-08-05 21:59:25 【问题描述】:简介
我使用CaptureRequest.Builder 并提供两个表面作为目标:SurfaceTexture 用于绘制 GL,ImageReader (getSurface()) 用于处理框架。
我通过设置surfaceTexture.setDefaultBufferSize 和创建ImageReader.newInstance 来设置所需的分辨率640x480。
问题
似乎SurfaceTexture OpenGL 纹理正在获取与 640x480 (4:3) 不同纵横比的图像,更像是 2560x1440 (16:9)(SurfaceTexture 占据全屏,请参阅 IMG 3 )。需要注意的是,两款手机的分辨率长宽比相同16:9。 (纹理从侧面偏移是故意留下的)。
您可以在下面看到 IMG 1 显示在监视器屏幕上,IMG 2 和 IMG 3 是当前活动视图的手机屏幕截图正在显示相机预览。
问题
如何正确强制 SurfaceTexture 或 GLSurfaceView.Renderer 从相机获取特定(在本例中为 4:3)纵横比纹理图像以获得任意大小的视图?
相关
需要注意的是,an app 解决了问题,但 they change the view size 对应于所需的纵横比。
另见:
GitHub repo。 Relevant source code。 Related post Related postIMG 1 - 显示的源图像:
IMG 2 - 良好的纵横比(Google Nexus 5 - android 6.0.1):
IMG 3 - 纹理纵横比不佳 (LG-D855 - Android 5.0)
【问题讨论】:
【参考方案1】:通过将 LG 手机更新至 Android 6.0,“修复”了该问题。
【讨论】:
如果你将你的应用发布给全世界,这不是一个解决方案。因此,如果您支持 Android 5-7,请不要使用 Camera2 API:github.com/googlesamples/android-Camera2Basic/issues/123以上是关于Android OpenGL camera2 纹理分辨率的主要内容,如果未能解决你的问题,请参考以下文章
Android音视频(六) 使用OpenGL ES 3.0预览Camera
Android 上的 OpenGL - 将位图转换为纹理,并保存纹理