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下的路径

相关推荐
似霰15 小时前
传统 Hal 开发笔记5 —— 添加硬件访问服务
android·framework·hal
千里马学框架18 小时前
AI豆包手机权限文章补充:Mainfest中某个权限的protectionLevel具体是如何被系统定义的?
android·智能手机·framework·权限·protectionlevel
写代码的Eleven3 天前
Rk3576 Andorid 14修改默认的通知音量,通话音量,闹钟音量等系统音量大小
android·framework
键来大师4 天前
Android16 RK3576 系统清理缓存
android·缓存·framework·rk3588·android15
似霰5 天前
传统 Hal 开发笔记2----传统 HAL 整体架构
java·架构·framework·hal
键来大师7 天前
Android15 安装APK时监听且替换安装
android·framework·rk3588·android15
a31582380610 天前
Android13隐藏某个App需要关注的源码文件
android·java·framework·launcher3·隐藏app
a31582380611 天前
Android Framework开发知识点整理
android·java·linux·服务器·framework·android源码开发
帅得不敢出门12 天前
Android8 Framework实现Ntp服务器多域名轮询同步时间
android·java·服务器·python·framework·github
帅得不敢出门12 天前
Android11~13 Framework实现Ntp服务器多域名轮询同步时间
android·服务器·python·framework·github