platform:RK3399
OS:Android 7.1
参考:
1.石先 https://www.jianshu.com/p/7d88ec1347b6
2.KrisFei
3.KrisFei
4.KrisFei
1. Camra简介
1.1 Camera常见类型
在RK HAL中,规定了不同类型的adapter,对应不用类型的camera
- CameraUSBAdapter: USB接口类型的摄像头,走v4l2.
- CameraIspSOCAdapter:dvp接口,isp控制器接收。
- CameraIspAdapter:mipi接口,isp控制器接收,不走v4l2.
- CameraSOCAdapter:dvp接口,VIP控制器接收。
总的来说,Camera常见的类型就是MIPI接口,DVP接口和USB接口三种类型.
1.2 Camera方向
前置和后置
Android系统是区分前置和后置摄像头的.以手机来说:屏幕上方的摄像头一般为前置摄像头;手机背面的摄像头一般为后置摄像头.
在Android系统中,前置摄像头一般使用"Front"表示;后置摄像头一般使用"Back"表示.
一般来说,前置摄像头使用的是镜像;后置摄像头使用的是正常视角.所以在不是那么区分前后摄像头的设备上,比如机器人,就有可能因为前后置摄像头问题导致预览和拍照出现镜像问题.这也是解决镜像问题的主要思路.
预览和拍照
Camera的数据是来自于摄像头硬件的图像传感器,摄像头一旦被固定之后是有一个默认的取景方向的.如下图所示.
- Camera预览方向
由于手机屏幕可以 360 度旋转,为了保证用户无论怎么旋转手机都能看到“正确”的预览画面。Android 系统底层根据当前手机屏幕的方向对图像 Sensor 采集到的数据进行了旋转处理后才传输给显示系统。因此,你在打开 Camera 应用后,无论怎么旋转手机都能看到“正确”的画面,即预览界面的画面和人眼看到的画面一致. - Camera拍照方向
当你点击拍照按钮,得到的图片方向不一定与画面中的预览方向一致,这是因为拍摄的照片是将图像 Sensor 采集到的数据直接存储到 SDCard上的,因此 Camera 的拍照方向与图像 Sensor 方向一致。
如果横向拿手机拍照,由于正好与 Camera 的拍照方向一致,因此得到的照片是“正确”的;而竖着拿手机拍照的话,图像 Sensor 依然以上面描述的角度在采集图像后存储到 SDCard 上,所以得到的图片因为竖着拿手机正好与图像 Sensor 的方向相差了 90 度。
2. Camera镜像
2.1 MIPI Camera方向
<SensorFacing
- 修改faceing参数可以修改MIPI摄像头为前置还是后置;
- 修改SensorOrientation参数可以修改方向
- 修改SensorMirrorFlip也可以实现镜像
2.2 USB Camera镜像
方法一:
---
方法二:
---
方法三:
直接让USB厂商修改ISP固件,直出数据就直接镜像.
其他方式可参考USB Camera旋转图像方法
2.3 DVP Camera镜像
参考:DVP Camera旋转预览和回调数据
主要思路是:通过修改模组寄存器的flip参数,来修改方向.