当前位置: 首页 > article >正文

DreamCamera2相机预览变形的处理

最近遇到一个问题,相机更换了摄像头后,发现人像角度顺时针旋转了90度,待人像角度正常后,发现 预览时图像有挤压变形,最终解决。在此记录

一人像角度的修改

先放示意图

设备预览人像角度如图1所示,顺时针旋转了90,正常效果如图2 修改如下:

//文件路径: /device/sprd/qogirn6l/ums9158_1h10/ums9158_1h10/module/camera/sensor_config.xml 
Date:   Wed Nov 27 18:02:01 2024 +0800

    修复顺时针旋转90度摄像头预览
    
    Change-Id: Ife0a46fe32ffd2c213d0ba0ab1eba07be50c8055

diff --git a/ums9158_1h10/module/camera/sensor_config.xml b/ums9158_1h10/module/camera/sensor_config.xm​‌​
l
index 20031a4..60aa732 100755
--- a/ums9158_1h10/module/camera/sensor_config.xml
+++ b/ums9158_1h10/module/camera/sensor_config.xml
@@ -6,7 +6,7 @@
         <SlotId>0</SlotId>
         <SensorName>ov8858_ft18</SensorName>
         <Facing>BACK</Facing>
-        <Orientation>270</Orientation>
+        <Orientation>180</Orientation>^M
         <Resource_cost>100</Resource_cost>
         <TuningParameter>
             <TuningName>ov8858_main_ft18</TuningName>

 如上修改,,可以相机后摄像头预览时人像角度(前摄也应该在改文件中,找front选项和对应项目名称)

二相机预览时图像挤压变形

步骤一完成后,图像角度正常了,但是内容挤压变形了。效果如下所示

图1       图2

如上图,左侧图1时被挤压时效果,右图2是修改后正常效果。

刚开始以为问题再驱动层,和同事沟通后发现,应该在应用层,相机设置里个比例设置,默认全屏模式,只是比例有问题。然后看源码,角度不对的时候无挤压,旋转后有挤压,说明比例反了(设备屏幕宽高比)做此判断,如下修改

~~思路:默认只是角度不对,但是没有挤压,说明原有的比例和屏幕比例一致所以正常

旋转了角度,图像比例和屏幕比例不一致,导致挤压,根据源码,将其比例反过来就可以了~~

-----------------------------------20241129 update--------------------------

比例不对这个判断是对的。将宽高比换下,经过测试也是不对的。屏幕是长x款 是640x480 比例为4:3.旋转后还是又拉长的。只能使用1:1.上面的图2 效果图也是1:1比例,而不是全屏。修改是是删除其他比例选项只保留1:1选项。

-----------------------update end-----------------------

(可以在设置中选择1:1比例图像正常,说明 比例问题)

vendor/sprd/platform/packages/apps/DreamCamera2/src/com/android/camera/settings$ git diff
diff --git a/src/com/android/camera/settings/ResolutionUtil.java b/src/com/android/camera/settings/ResolutionUtil.java
index 432e28d0..cbe823ff 100644
--- a/src/com/android/camera/settings/ResolutionUtil.java
+++ b/src/com/android/camera/settings/ResolutionUtil.java
@@ -39,6 +39,8 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
+import com.android.camera.debug.Log;
+
 
 import javax.annotation.Nonnull;
 import javax.annotation.ParametersAreNonnullByDefault;
@@ -52,6 +54,9 @@ import javax.annotation.ParametersAreNonnullByDefault;
  * user with so many options.
  */
 public class ResolutionUtil {
+
+        private static final Log.Tag TAG = new Log.Tag("ResolutionUtil");
+
     /**
      * Different aspect ratio constants.
      */
@@ -75,14 +80,20 @@ public class ResolutionUtil {
             Point point = new Point();
             Display d = activity.getWindowManager().getDefaultDisplay();
             d.getRealSize(point);
            mFullScreenSize = point.x > point.y ? new Size(point.x, point.y) : new Size(point.y, point.x);

+            Log.e(TAG, "setDesiredAspectRatio, point.x:" + point.x+",point.y:" + point.y);
+            Log.e(TAG, "setDesiredAspectRatio, mFullScreenSize:" + mFullScreenSize);
 
            // sDesiredAspectRatioSizes.add(new Size(4,3));
             //sDesiredAspectRatioSizes.add(mFullScreenSize);
             sDesiredAspectRatioSizes.add(new Size(1,1));
 
            // sDesiredAspectRatios.add(4.0f / 3.0f);

+            Log.e(TAG, "setDesiredAspectRatio, mFullScreenSize.width():" + mFullScreenSize.width() +",mFullScreenSize.height():" + mFullScreenSize.height());
+            Log.e(TAG, "setDesiredAspectRatio, mFullScreenSize.width() / (float) mFullScreenSize.height()=" + mFullScreenSize.width() / (float) mFullScreenSize.height());
+            
+            // sDesiredAspectRatios.add(mFullScreenSize.width() / (float) mFullScreenSize.height());

             sDesiredAspectRatios.add(1.0f / 1.0f);
             settled = true;
         }

测试通过over!

ps:怎么判断当前的应用在项目中那个路径,可以看我的历史文章

[转]Android寻找某个包在aosp下的路径


http://www.kler.cn/a/420257.html

相关文章:

  • 5G CPE介绍(一)
  • 使用CertD全自动申请和部署SSL证书至服务器
  • shell脚本30个案例(五)
  • R语言实用技巧--用get函数配合dplyr包传参
  • 【实战】Oracle基础之控制文件内容的5种查询方法
  • 在Java中使用Apache POI导入导出Excel(二)
  • 使用Dockerfile制作jdk镜像
  • Epic Spinners - 免费开源的 Vue3 加载动画组件,纯 CSS 实现的,动效精致酷炫
  • Spring Boot【二】
  • MySQL-CPU使用率高的原因排查和解决方法
  • arm架构服务器离线部署docker及docker-compose环境
  • Git操作学习1
  • 【赛博保安】安全日记之常用术语(一)
  • 【青牛科技】SCU2N60E/SCD2N60E N沟道增强型功率场效应晶体管采用Silicore先进的VDMOS技术生产
  • 【Spring】聊聊@EventListener注解原理
  • Linx下自动化之路:PostgreSQL 安装包精准自动化部署至指定路径并注册成服务全解析
  • 【计算机网络】实验2:总线型以太网的特性
  • 中断,定时器相关内容
  • Selenium 基于浏览器自动化模块
  • react 组件双向绑定
  • 教务(选课)管理系统
  • SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
  • c语言——数组名该如何理解呢?
  • VSCode中“Run Code”运行程序时,终端出现中文乱码解决方法
  • Burp Suite 全面解析:开启你的 Web 安全测试之旅
  • DNS查询工具