更新:问题是关于Camera2的
当相机预览在SurfaceTexture上绘制时,我试图找出谁应用旋转变换。
当从相机请求预览尺寸时,你总是会得到宽度大于高度的对子(因为在拍摄照片时,风景是通常的方向)。
当使用设备的纵向模式和设置预览大小(前)。1600 x1200)相机上的帧是正确旋转的,但我找不出它是在哪里完成的,这是CameraDevice根据曲面类型自动完成的吗?或者是SurfaceTexture在旋转图像?
发布于 2017-05-29 01:09:22
答案在一定程度上取决于您使用的是哪个相机API;既然您提到了CameraDevice,我想您是指camera2。
在camera2中,目标之一是在可能的情况下简化旋转处理;因此,如果您将预览绘制到SurfaceView中,则相机服务和硬件排序器/ GPU将配合并处理所有的旋转操作。您总是从传感器请求景观分辨率(它与传感器的长边缘对齐,与设备的长边沿相匹配),您只需确保SurfaceView的纵横比与请求的分辨率匹配(因此在纵向上,需要9:16 View才能正确显示1080 p;在景致中,您需要16:9视图)。
对于TextureView,以及使用SurfaceTexture进行完全自定义GL绘图,API不能为您完成所有这些工作。该表面结构的转换是由摄像头API设置的,以将相机输出旋转到设备的本机方向(通常用于手机,某些平板电脑的外观),但如果应用程序的UI不在本机方向,则无法处理额外的旋转。
在这种情况下,您需要从SurfaceTexure获取转换矩阵,应用额外的旋转来匹配应用程序UI,并将其设置为TextureView矩阵。
发布于 2017-05-28 23:15:36
自从我开始拍摄相机已经有一年了,所以我为缺乏细节而道歉。但我确实记得,显示相机预览的关键是计算正确的变换矩阵,以应用于SurfaceView (或TextureView),以应用所需的任何缩放或旋转。所以,关于“谁在做旋转”,我想你可以说这是视图,按照你提供的转换的指示。因此,矩阵将基于您请求的预览分辨率的关系(从您的设备所能提供的功能列表中)与视图的实际布局尺寸相比较,再加上设备传感器的物理方向与设备屏幕的当前方向相比较。
在旧的摄像头API中,Camera.CameraInfo有一个定位字段,用于提供安装传感器的物理方向。对于大多数手机上安装的感应器来说,它通常是90,但你也会在那里找到大约270(实际上是“颠倒”)。0和180可能存在,但我从未见过。
https://stackoverflow.com/questions/44226206
复制相似问题