DreamCamera2相机预览变形的处理

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

一人像角度的修改

先放示意图

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

XML 复制代码
//文件路径: /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是修改后正常效果。

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

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

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

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

java 复制代码
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);
+            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);
-            sDesiredAspectRatios.add(mFullScreenSize.width() / (float) mFullScreenSize.height());
+            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( (float) mFullScreenSize.height()/mFullScreenSize.width() );
             sDesiredAspectRatios.add(1.0f / 1.0f);
             settled = true;
         }

测试通过over!

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

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

相关推荐
千里马学框架20 天前
google官方Perfetto 中使用 AI相关skill
android·人工智能·ai·framework·perfetto·性能·skill
xianrenli3822 天前
Android14自动时区更新
android·学习·framework·aosp14·自动时区
千里马学框架22 天前
Android Framework 新手学习踩坑建议指南
android·智能手机·性能优化·framework·aaos·车载开发·系统工程师
帅次2 个月前
Android 16(API Level 36)Activity 启动流程源码级解析
android·framework·源码解析·activity启动流程·android 16
Android小码家2 个月前
BootAnimation+SE+开机MP4动画播放
android·framework
oh_my_god2 个月前
增加系统白名单,允许普通APP调用Android系统内部隐藏方法
android·framework
事后不诸葛2 个月前
安卓init.rc解析
android·framework
Android小码家2 个月前
Framework之Launcher小窗开发
android·framework·虚拟屏·小窗
哈哈,柳暗花明3 个月前
Framework开发专题系列四:Binder基础
framework·binder·aidl·messenger·hidl·native binder·asyncchannel
andr_gale3 个月前
04_rc文件语法规则
android·framework·aosp