platform:RK3399
OS:Android 7.1
参考:
1.石先 https://www.jianshu.com/p/7d88ec1347b6
2.KrisFei https://blog.csdn.net/kris_fei/article/details/103024505
3.KrisFei https://blog.csdn.net/kris_fei/article/details/79298971
4.KrisFei https://blog.csdn.net/kris_fei/article/details/79550161

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方向

--- a/Config/cam_board_rk3399.xml
+++ b/Config/cam_board_rk3399.xml
@@ -22,7 +22,7 @@<SensorFacing facing="front"></SensorFacing><SensorInterface interface="MIPI"></SensorInterface><SensorMirrorFlip mirror="0"></SensorMirrorFlip>
-                                       <SensorOrientation orientation="180"></SensorOrientation>
+                                       <SensorOrientation orientation="0"></SensorOrientation>
  • 修改faceing参数可以修改MIPI摄像头为前置还是后置;
  • 修改SensorOrientation参数可以修改方向
  • 修改SensorMirrorFlip也可以实现镜像

2.2 USB Camera镜像

方法一:

--- a/services/camera/libcameraservice/api1/CameraClient.cpp
+++ b/services/camera/libcameraservice/api1/CameraClient.cpp
@@ -55,6 +55,7 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService,// Callback is disabled by defaultmPreviewCallbackFlag = CAMERA_FRAME_CALLBACK_FLAG_NOOP;mOrientation = getOrientation(0, mCameraFacing == CAMERA_FACING_FRONT);
+    mOrientation = 1;mLegacyMode = legacyMode;mPlayShutterSound = true;LOG1("CameraClient::CameraClient X (pid %d, id %d)", callingPid, cameraId);
@@ -721,6 +722,7 @@ status_t CameraClient::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) {if (cmd == CAMERA_CMD_SET_DISPLAY_ORIENTATION) {// Mirror the preview if the camera is front-facing.orientation = getOrientation(arg1, mCameraFacing == CAMERA_FACING_FRONT);
+       orientation = 1;if (orientation == -1) return BAD_VALUE;if (mOrientation != orientation) {

方法二:

--- a/kernel/drivers/media/usb/uvc/uvc_v4l2.c
+++ b/kernel/drivers/media/usb/uvc/uvc_v4l2.c
@@ -548,13 +548,27 @@ static int uvc_v4l2_release(struct file *file)static int uvc_ioctl_querycap(struct file *file, void *fh,struct v4l2_capability *cap){-       struct video_device *vdev = video_devdata(file);
+       //struct video_device *vdev = video_devdata(file);struct uvc_fh *handle = file->private_data;struct uvc_video_chain *chain = handle->chain;struct uvc_streaming *stream = handle->stream;//如果sensor型号不一样,也可以通过product vendor id来区分。
+       printk("kris idVendor:0x%x idProduct:0x%x\n ", stream->dev->udev->descriptor.idVendor,
+               stream->dev->udev->descriptor.idProduct);
+strlcpy(cap->driver, "uvcvideo", sizeof(cap->driver));
+#if 0strlcpy(cap->card, vdev->name, sizeof(cap->card));
+#else
+       if(stream->dev->udev->bus->busnum == 3) {+               strcpy(cap->card, "front");
+       } else {+               strcpy(cap->card, "back");
+       }
+
+#endifusb_make_path(stream->dev->udev, cap->bus_info, sizeof(cap->bus_info));cap->capabilities = V4L2_CAP_DEVICE_CAPS | V4L2_CAP_STREAMING

方法三:

直接让USB厂商修改ISP固件,直出数据就直接镜像.

其他方式可参考USB Camera旋转图像方法

2.3 DVP Camera镜像

参考:DVP Camera旋转预览和回调数据

主要思路是:通过修改模组寄存器的flip参数,来修改方向.

[Camera]摄像头镜像相关推荐

  1. rk3399 采集摄像头数据_[Camera]摄像头镜像

    platform:RK3399 OS:Android 7.1 参考: 1.石先 https://www.jianshu.com/p/7d88ec1347b6 2.KrisFei https://blo ...

  2. 怎么通过media foundation将图像数据写入虚拟摄像头_[Camera]摄像头镜像

    platform:RK3399 OS:Android 7.1 参考: 1.石先 https://www.jianshu.com/p/7d88ec1347b6 2.KrisFei https://blo ...

  3. MTK 修改后置Camera方向/镜像 Patch

    modify 修改后置camera方向/镜像diff --git a/frameworks/av/services/camera/libcameraservice/api1/CameraClient. ...

  4. Android Camera摄像头预览黑屏原因(二)

    在Android系统中,操作Camera摄像头非常容易出问题,特别是Camera.open()的时候.就算open正常,也可能会出现预览界面黑屏的情况. 出现黑屏的时候,如果没有明显的报错,很大概率是 ...

  5. 【Camera基础(一)】Camera摄像头工作原理及整机架构

    Camera摄像头工作原理及整机架构 一.摄像头的基本工作原理 二.编码 三.编码的目的 四.传输 五.Android系统的camera架构 一.摄像头的基本工作原理 如图所示,一个景象的反射光被镜头 ...

  6. Camera摄像头特定应用杂谈

    Camera摄像头特定应用杂谈 参考文献链接 https://mp.weixin.qq.com/s/l9op9-DMydDWmfs9uSsurQ https://mp.weixin.qq.com/s/ ...

  7. Camera摄像头帧数据转为bitmap

    Camera摄像头帧数据转为bitmap 文章目录 Camera摄像头帧数据转为bitmap 帧数据转为bitmap 关于YuvImage **compressToJpeg 方法** 帧数据转为bit ...

  8. 全志Tina Linux Camera 摄像头模块开发指南 全网最详细版本支持百问网T113-Pro DongshanPI-NezhaD1-H DongshanPI-D1s V853-Pro等开发板

    1 概述 编写目的:介绍camera 模块在sunxi 平台上的开发流程. 适用范围:本文档目前适用于tina3.0 以上具备camera 的硬件平台. 2 模块介绍 2.1 模块功能介绍 用于接收并 ...

  9. PhoneGap API帮助文档翻译—Camera (摄像头)

    摘要: "camera对象提供对设备默认摄像头应用程序的访问.方法:camera.getPicture 参数:cameraSuccesscameraErrorcameraOptions ca ...

最新文章

  1. CentOS7图形界面与命令行界面切换
  2. Linux Kernel TCP/IP Stack — 网卡监控
  3. python -- leetcode 刷题之路
  4. Mac OS Mountain Lion 下的Wireshark
  5. Android开源项目分包方式学习(eoe、oschina、github)
  6. java 取随机正整数_Java获取随机数
  7. 40个漂亮的单页网站设计案例(上篇)
  8. U盘装XP系统(含截图,2012最新原创超简单方法)
  9. 补肾分男女,养肾如养命
  10. 方舟服务器维护驯龙,方舟生存进化新手图文攻略 最详细的驯龙教程方法
  11. URL Loading System官方文档翻译一
  12. cookie分号后面没有值_Cookie的属性(cookie的设置、获取和删除)
  13. 网站和搜索引擎是分工协作的伙伴关系
  14. GNSS静态测量数据采集与内业解算
  15. 在Android应用中集成YouTube视频播放功能
  16. 地壳中元素含量排名记忆口诀_地壳含量_地壳中元素含量排名口诀
  17. AM437x——LED驱动
  18. MATLAB 常用函数学习笔记
  19. 关于眼镜的一些知识收集
  20. c 语言提取左右声道数据

热门文章

  1. TokenGazer 深度研究 | RSKRIF:技术生态均有良好进展 采用状况继续观察
  2. Android屏幕手写签名的实现-详细篇
  3. 金蝶云星空对接打通管易云其他出库查询接口与其他出库单新增完结接口v2接口
  4. 【工具推荐】Markdown编辑器 转HTML 排版等
  5. 支付宝三(手机网页支付)
  6. SVN 服务器和客服端搭建
  7. cocoscreator摄像机跟随玩家移动及地图边界的设置
  8. Python第三阶段学习 Django day06
  9. CE修改器学习历程之未知值扫描和修改
  10. 上门美容平台开发如何去定位自己的发展规划