关于Preview和Snapshot的Crop问题

article/2025/10/16 5:56:30

preview的crop问题

这个问题其实有点乌龙,因为crop是在IPEnode进行处理的,我开始一直以为是IPE进行了裁剪才导致我最后的输出有问题,最后的原因竟然是因为chi node的输出的port导致我输出到IPE的buffer的size就已经小了。

我们有个问题,后置视频美颜preview有美颜效果,video没有美颜效果。前后置的流程是一样的,前置的是正常的。经过和apk的同事沟通,一共会下发两个stream,但是前置video拿的是preview的数据进行编码的所以最后前置的preview和video是有美颜效果的。但是后置下发的两路stream,preview的那路stream只用来显示,video的那路stream用来正常的进行编码。

经过本地查看发现video的那个输出的数据是没有进行美颜的处理的,因为node代码编写的原因只可以用一个实例,所以我想的是把preview的那个数据通过IPE进行分流,然后在反回给上层,这样我的preview和video都是经过美颜处理的了。

这是preview有美颜效果video没有的数据流:

 planA:video的数据流走美颜算法

planB:把预览的数据流通过IPE进行分流,然后在进行输出,这样video和preivew都是有美颜的

 

 我把IPE加上之后,我的预览界面是被放大的,因为没有加IPE之前是不会有这种情况的。所以我一开始的时候是怀疑IPE的crop出现了问题。

于是抓取了一下crop信息,在IPE进行crop处理的是corp window,下面是一些可以参考的log信息

camxipenode.cpp:13503 GetZoomWindowCropInfo() (Pipelinename)_IPE4_cam0 ZDBG Final IPE crop Window [0, 0, 0, 0] fullin 480X270, fullout 1920X1080, frameNum 5

SetGenericPassScaleRatios() (Pipelinename)_IPE4_cam0_MainPass_NoZoomCrop_Ins0, parentNodeId=255, input w : 480, h : 270, output w : 1920, h : 1080 crop [0 0 0 0] req 7

FillUpdatePSMCrop() (Pipelinename)_IPE4_cam0, PSM IPE residual crop [0 0 1920 1080 1920 1080] applied crop [0 0 480 270 480 270] Request Id 1 disableZoom: 1 IsPreFusionTuningMode: 0 SrEnabled:0 ValidProfileWithUpscaler: 0 0xb40000794198214cValidProfileForICAWarp: 0

从这些log看crop是正常的,往IPE输出的尺寸就是不对的。我输出的尺寸就是1920 * 1080,但是我输入的尺寸就是480 * 270。从这个情况看,肯定是前面的node输出了一个小size,然后在IPE进行放大导致我预览的界面是一个被裁减过的画面。

决定node每个port输出的大小是在configure_stream阶段,FinalizeBufferProperties和setbufferinfo这两个函数,我在setbufferinfo中打印log最后追到FinalizeBufferProperties里面针对不同的portid进行输出的宽高的设置。当时定义的portid会走到1/4size的分支。后来把对应的portid进行修改就可以了。

 被裁剪的问题解决了,但是在IPE内部还有很多的IQ子模块,导致对应的效果会在被叠加一次,所以,我们还要解决只让新增的IPE只有一个分流的作用不,关于效果的IQ模块在这个新加的node是不会被处理的。这个在IPEnode的配置中要配置一对应的processingType是default,对应的profileId是Scale。就是让IsScalerOnlyIPE()这个函数返回TRUE。

要这个函数成立需要在pipeline得定义文件中增加property

 在这个配置中的NodePropertyName在代码中其实是没有起作用的,在代码NodePropertyId在代码中会会用到这值,在node内部的代码里面会体现出来。

这个propertyId得那些定义文件的路径是:/vendor/qcom/proprietary/chi-cdk/api/common/chi.h

把这个property加上之后在代码中会对TuningMetadata、IPETuningMetadata和DebugDataWriter进行置空的操作,就屏蔽了其他IQ模块的处理,具体原因还要深究一下。至此,问题就算正常解决了。

snapshot的crop问题

这个问题的最根本的原因就是一个meta(android.scaler.cropRegion/ANDROID_SCALER_CROP_REGION)赋值的原因导致在BPS和IPE处理的时候进行了错误的裁剪

拍照pipeline苏剧流程图:

 这是我在解决问题的时候主要关注的log:

异常:
camxipenode.cpp:24269 GetZoomWindowCropInfoMeta() ZSLSnapshotYUVHAL_IPE3_cam1: request:1 stream crop : l 0 , t 0, w 1152, h 864
正常:
camxipenode.cpp:24269 GetZoomWindowCropInfoMeta() ZSLSnapshotYUVHAL_IPE3_cam1: request:1 stream crop : l 0 , t 0, w 2304, h 1728

正常:
camxbpsnode.cpp:9637 SetScaleRatios() BPS:0 crop w 2304, h 1728, fw 2304, fh 1728, iw 0, ih 0, preScaleRatio 1.000000, postScaleRatio 1.000000
异常:
camxbpsnode.cpp:9637 SetScaleRatios() BPS:0 crop w 1152, h 864, fw 2304, fh 1728, iw 0, ih 0, preScaleRatio 1.000000, postScaleRatio 0.500000

异常:
camxbpsnode.cpp:9601 SetScaleRatios() ZDBG IPE crop Window [0, 0, 2304, 1728] full size 2304X1728 active 4608X3456
正常:
camxbpsnode.cpp:9601 SetScaleRatios() ZDBG IPE crop Window [0, 0, 4608, 3456] full size 2304X1728 active 4608X3456

在BPS会现获取到ANDROID_SCALER_CROP_REGION的值进行计算,由于meta获取到的值有问题导致后面的运算不对。这个值是APK下发下来,到framework,然后在feature2把那个值跟随request更新到camx。(其中一个问题是开闪光灯拍照,不走ZSL的流程,把crop错误的值更新到了camx,导致最后拍照出现问题)。feature2那边的流程有机会在更新。


http://chatgpt.dhexx.cn/article/3UDDcoF9.shtml

相关文章

Android 14 Developer Preview一览

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 不久之前,Google公开了Android 14的首个Developer Preview版本。 按照Google正常的节奏,每年年初会发布两个Develope…

IDEA开启预览选项--enable-preview

最近在研究loom,我的idea版本是2022.5(2023.1开始支持jdk20,低版本需要自己调) 用到了预览功能 virtualThread报错 is a preview API and is disabled by default. 但是改了sdk到20也一直提示报错 看编译参数是把--source 20 …

VSCode图片预览插件 Image preview

VSCode前端开发图片预览插件 Image preview(支持css预览 支持svg格式) 一款提高前端开发效率的插件 ,代码中hover直接预览图片 先上效果图 不仅html中可以预览 js代码里的引用也可以识别 同理css中的图片引用也可以识别 功能详情 安装步骤…

vue docx-preview实现docx文件在线预览

之前一般做项目进行文件浏览的时候基本都是用的window.openurl的形式打开文件,进行浏览操作的,但是这种打开方式只能够在线浏览如jpg、png、pdf这类文件,对于文档类型docx这种则是用下载的方式打开的。这次甲方爸爸不想要下载了,于…

ProviewR

1. ProviewR开源过程控制系统介绍 李工:https://www.bilibili.com/video/BV1qu41117jd/?spm_id_from333.788 北岛李工:开源过程控制系统ProviewR初体验——Modbus-TCP通信_哔哩哔哩_bilibili ProviewR官网:http://www.proview.se/v3/index.p…

Compose中的预览@Preview与@PreviewParameter的使用

文章目录 前言一、Preview二、PreviewParameter1.单个参数2.多个参数 前言 阅读本文需要一定compose基础,如果没有请移步Jetpack Compose入门详解(实时更新) 本文介绍Preview与PreviewParameter注解的使用 一、Preview 如果你构建了一个Co…

最新版Android Studio如何preview

之前看到有的博客里写到,Android Studio有个preview功能特别好用,可以边写代码边预览,类似下图这样的:(图片来源:https://blog.csdn.net/caroline_wendy/article/details/20855561) 之前的And…

Preview使用技巧,强大的macOS原生应用:「预览」(Preview)

首先要介绍的macOS原生应用是预览(preview)app。很多人,包括我在最开始使用macOS的时候,像当初使用Windows一样,安装了系统,满大街找各种软件将自己的电脑武装起来。可是apple已经为我们武装好电脑了&#…

报错处理 ITK only supports orthonormal direction cosines. No orthonormal definition found

在使用SimpleITK处理MRI医学图像数据的时候遇到了以下问题&#xff1a; File "d:\PythonProgramme\GenerateDatasetTxt\xx.py", line 12, in <module>img sitk.ReadImage("0000264276/T2.nii.gz")File "D:\Program Files\Anaconda3\envs\simpl…

Python执行selenium报错This version of ChromeDriver only supports Chrome version并配置环境变量

1.This version of ChromeDriver only supports Chrome version 这个报错的意思是chrome驱动的版本不匹配&#xff0c;所以需要查看自己的chrome的版本&#xff0c;再根据版本下载对应的chromedriver.exe&#xff0c;具体操作步骤如下 第一步查看chrome的版本&#xff1a; 第…

Android Studio调式手机时提示 device supports but apk only supports armeabi-v7a

转载来自 https://blog.csdn.net/lbj_demo/article/details/81503078 1 核对你手机的 CPU 架构 目前的 Android 支持的架构 CPU架构描述armeabi第5代 ARM v5TE&#xff0c;使用软件浮点运算&#xff0c;兼容所有ARM设备&#xff0c;通用性强&#xff0c;速度慢armeabi-v7a第…

supports_CSS的@supports规则简介(功能查询)

supports The two general approaches to tackling browsers’ uneven support for the latest technologies are graceful degradation and progressive enhancement. 解决浏览器对最新技术的不均衡支持的两种通用方法是平稳降级和逐步增强 。 Graceful degradation leverage…

CSS3条件判断——@supports

CSS3条件判断——supports CSS3条件判断&#xff0c;听起来“不明觉厉”,如果你对CSS稍为熟悉一点的话&#xff0c;你会发现CSS中的“ media ”就是条件判断之一。是的&#xff0c;在 CSS3的条件判断规范文档 中包含了两个部分&#xff0c;其一是“media”规则&#xff0c;主要…

[DL] Default MaxPoolingOp only supports NHWC on device type CPU

在cpu运行代码时&#xff0c;发现&#xff0c;出现此类问题 参考 (16条消息) Default MaxPoolingOp only supports NHWC on device type CPU_被可爱咬了一口的博客-CSDN博客 默认值表示data_formatchannels_last&#xff0c;"NCHW"表示data将被存储为[batch,channe…

Cesium 实战 - 解决 The browser supports WebGL, but initialization failed 问题

Cesium 实战-解决 The browser supports WebGL, but initialization failed 问题 系统环境版本试错过程解决问题 在公司内网服务器部署 Cesium 项目的时候&#xff0c;发现提示浏览器不支持 WebGL 错误&#xff0c;经尝试&#xff0c;确认 Cesium 1.101.0 以及之前的版本是可以…

Pandas告警UserWarning: pandas only supports SQLAlchemy connectable

Pandas告警UserWarning: pandas only supports SQLAlchemy connectable 一、报错信息二、老的书写方式三、新的书写方式 一、报错信息 使用老的书写方式从数据库导入数据到pandas, 会打出一条warning信息&#xff1a; UserWarning: pandas only supports SQLAlchemy connecta…

The browser supports WebGL, but initialization failed

1. 问题背景 在windows server上的浏览器通过cesium预览地图展示&#xff0c;会报错&#xff0c;导致地图不能正常预览。 2. 验证浏览器是否支持WebGL 这里有两个网站地址进行验证。 https://get.webgl.org/ https://webglreport.com/?v2 3. 修改浏览器配置&#xff08…

@supports使用方法

原文地址&#xff1a;https://justforuse.github.io/blog/zh-cn/2018/08/supports-tutorial/ supports是CSS3新引入的规则之一&#xff0c;主要用于检测当前浏览器是否支持某个CSS属性并加载具体样式. 基本使用方式&#xff1a; supports (display: grid) {.container {color…

@supports的用法

supports我们经常在css中遇到&#xff0c;supports是用来检测浏览器是否支持css的某个属性。通常我们可以用它来处理浏览器的兼容性的问题。用supports来判断浏览器是否支持这个css属性&#xff0c;如果支持的话&#xff0c;我们写的css样式就会起作用&#xff0c;否则的话不会…

CSS中 特性查询(@supports)详解及使用

1. 简介 CSS中的 supports 用于检测浏览器是否支持 CSS 的某个属性。其实就是条件判断&#xff0c;如果支持某个属性可以写一套样式&#xff0c;如果不支持某个属性&#xff0c;可以提供另外一套样式作为替补。可以放在代码的顶层&#xff0c;也可以嵌套在任何其他条件组规则中…