(1)正常安装摄像头的规则

(A)显示屏LCD有两种刷新方向,沿短边扫描(竖屏)和沿长边扫描(横屏)

(B)摄像头安装角度需要满足长边对长边,短边对短边(这里的长边对长边表示:摄像头长边对齐LCD屏的长边)

(C)摄像头成像的小人头方向是垂直于摄像头长边方向,由B可知,小人头方向也是垂直于LCD屏长边

(2)摄像头成像的小人头方向

(A)竖屏手机:摄像头的安装角度需要配置成90(后摄)和270(前摄),使图像顺时针旋转从而得到正确的预览

(B)横屏手机:摄像头的安装角度需要配置成0(后摄)和180(前摄),使图像顺时针旋转从而得到正确的预览

备注:图中Sub Camera的小人头应该向下,从而前摄配置180旋转角度。但是这个不影响,因为Sensor驱动有Flip + Mirror功能,可以将其转过来。

(3)LCD屏的刷新方向影响上层的Rotation

//Display.java
public int getRotation() {synchronized (this) {updateDisplayInfoLocked();return mMayAdjustByFixedRotation? getDisplayAdjustments().getRotation(mDisplayInfo.rotation): mDisplayInfo.rotation;}}int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();//获取屏幕旋转的方向

竖屏手机:竖屏方向getRotation返回0,顺时针旋转递增(0,1,2,3)
横屏手机:横屏方向getRotation返回0,顺时针旋转递增(0,1,2,3)

备注:横屏手机会导致三方Camera应用(固定竖屏应用)的预览方向不正确,因为三方Camera应用只适配了竖屏情况,无法适配横屏情况,从而导致预览方向不正确。横屏/横竖屏应用可以正常显示。

(4)横屏手机如何兼容竖屏三方Camera应用

思路:将横屏手机竖用设置,从而达到横屏竖用的目的,主要修改以下两处。(补救措施)

(A)修改Display方向

//Display.javapublic int getRotation() {synchronized (this) {updateDisplayInfoLocked();Log.d("Display","getRotation: " + (mMayAdjustByFixedRotation? getDisplayAdjustments().getRotation(mDisplayInfo.rotation): mDisplayInfo.rotation));//add start//3-->0 , 0-->1if (SystemProperties.getBoolean("ro.rotation.display", false)) {int mRotation =  (mMayAdjustByFixedRotation? getDisplayAdjustments().getRotation(mDisplayInfo.rotation): mDisplayInfo.rotation);return (mRotation + 1 ) % 4;} //add endreturn mMayAdjustByFixedRotation? getDisplayAdjustments().getRotation(mDisplayInfo.rotation): mDisplayInfo.rotation;}}

(B)对调gsensor的xy值

//SystemSensorManager.javaprotected void dispatchSensorEvent(int handle, float[] values, int inAccuracy,long timestamp) {final Sensor sensor = mManager.mHandleToSensor.get(handle);if (sensor == null) {// sensor disconnectedreturn;}//add startif (SystemProperties.getBoolean("ro.rotation.display", false)) {if(!ActivityThread.currentOpPackageName().contains("android")  //排除系统应用,系统应用兼容横竖屏|| (ActivityThread.currentOpPackageName().contains("jp.naver.line.android"))){ //添加部分三方应用,部分三方应用包名包含androidif(sensor.getType() == Sensor.TYPE_ACCELEROMETER ){Log.d("wdd111_SensorEventQueue","x = " + values[0] + ",y = " + values[1] + ",z = " + values[2]);if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {float tmp;tmp = values[0];values[0] = values[1];values[1] = -tmp;}}}}//add endSensorEvent t = null;synchronized (mSensorsEvents) {t = mSensorsEvents.get(handle);}

Camera摄像头成像方向和LCD刷屏方向相关推荐

  1. H5移动端前置摄像头成像方向错误,横屏方向错误

    前言 最近在做一个小h5页面,通过手机摄像头获取视频图像通过video播放出来,发现两个问题.  1.前置摄像头成像时,左右颠倒(举右手,视频显示左手) 正常视频原图(为了展示凸出把视频图像换为了卡通 ...

  2. [Camera]摄像头图像处理及色彩模型

    参考链接: 1.凹凸思 https://www.zhihu.com/people/jiao-tao-52 2.纸上浅谈 https://glumes.com/post/ffmpeg/understan ...

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

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

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

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

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

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

  6. [Camera]摄像头镜像

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

  7. Camera的成像原理

    1.Camera的成像原理 景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片( ...

  8. 99岁杨振宁寄语青年学子:要清楚方向、选对方向

    4月25日,清华大学迎来建校110周年校庆日.日前,在清华园的住所里,诺贝尔奖获得者.清华大学高等研究院名誉院长杨振宁接受新华社记者的独家专访.99岁的他精神矍铄,微笑讲述与清华的不解之缘. > ...

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

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

最新文章

  1. 在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)
  2. QT 4.5 windows版本 安装问题 及 Junction 使用
  3. Intel Realsense D435小车避障 摄像头在高于一定平面h时的深度map公式计算(深度d与视场角视角α的关系)
  4. 制作Python的安装模块
  5. python dendrogram_【聚类分析】《数学建模算法与应用》第十章 多元分析 第一节 聚类分析 python实现...
  6. REDHAT6.3 udev 配置 存储器磁盘
  7. python自学书-Python电子书免费分享
  8. 发布的站点自定义端口打不开解决方法
  9. python的类方法、静态方法、实例方法_Python 类方法、实例方法、静态方法
  10. Chrome谷歌浏览器安装crx后缀插件方法
  11. 省市区areacode反查的精简写法
  12. 使用MySql计算两个日期的时间差函数:TIMESTAMPDIFF
  13. linux exchange 账号,linux exchange服务器配置
  14. 2015-12-12 java hibernate 微信表情昵称保存
  15. Android联网失败报错:java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted
  16. STM32学习笔记V1.1GPIO寄存器的ODR、BSRR、BRR
  17. clob mybatis_mybatis 解决Druid设置Oracle的Clob字段时的小坑详解
  18. Spring学习中使用javaConfig进行配置时出现 has not been refreshed yet错误
  19. 基于Java+SQLServer2017实现(Web)酒店客房管理系统【100010327】
  20. 【重新定义matlab强大系列十一】函数rescale数组元素的缩放范围

热门文章

  1. jsp70877婚庆策划婚车预订网站
  2. 人造标准光源分类说明
  3. 微软经典面试100题系列(部分)
  4. java-php-python-ssm书籍点评网站计算机毕业设计
  5. 洽谈穿针引线的“链接”
  6. TAP 系列文章9 | 应用开发加速器
  7. snort实现入侵检测功能
  8. 2022第四届中国北京国际青少年眼健康产业展览会,视力防控展
  9. Imagemagick 使用
  10. vscode 无法打开终端