MTK 人像双摄虚化导通流程

news2024/12/23 15:32:57

5c1e7ca3d272eff66f306b4e60d86e8e.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、 创建 LogicalCameraName 相关的metadata
二、 导通 LogicalCameraName Middleware 相关配置
三、认 LogicalCameraName 是否创建成功
四、双摄bringup LogicalCameraDevice 导通参考

一、 创建 LogicalCameraName 相关的metadata

1.1 LogicalCameraName 文件夹命名规则

主摄_FeatureName

例如:(主摄_bayerwide, 主摄_bayertele, 主摄_bayerbayer, 主摄_bayermono)

预设单摄对应的metadata 已经存在并导通,将主摄(比如:SENSOR_DRVNAME_S5K_MIPI_RAW)的 metadata文件夹 copy 一份;
修改主摄文件夹名为LogicalCameraName;
比如:vendor\mediatek\proprietary\custom\mt**\hal\imgsensor_metadata\S5K_mipi_raw_bayermono

修改创建 LogicalCameraName 文件夹中的metadata文件中 STATIC_METADATA2_BEGIN 后面的主摄的name 修改为LogicalCameraName;
比如:

$grep "S5K" -ri .
./config_static_metadata.lens.S5Kmipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, LENS, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata.module.S5Kmipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, MODULE, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata.module.S5Kmipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, MOD_OVERWRITE, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata_availableKeys.h:STATIC_METADATA2_BEGIN(PLATFORM, AVAILABLE_KEYS, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata_custom.h:STATIC_METADATA2_BEGIN(PLATFORM, CUSTOM, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata_project.h:STATIC_METADATA2_BEGIN(PLATFORM, PROJECT, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata_project.h:STATIC_METADATA2_BEGIN(PLATFORM, PRO_OVERWRITE, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
./config_static_metadata_vendor.h:STATIC_METADATA2_BEGIN(PLATFORM, VENDOR, SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
1.2 LogicalCamera Size 修改

LogicalCamera Size相关:config_static_metadata_custom.h

后置人像尺寸:
    CONFIG_METADATA_BEGIN(android_TUNNING_BACK_PORTRAIT_NORMAL_PICTURE_SIZE)
        CONFIG_ENTRY_VALUE(4160, MINT32)
        CONFIG_ENTRY_VALUE(3120, MINT32)
    CONFIG_METADATA_END()
    /主副摄照片尺寸
    CONFIG_METADATA_BEGIN(android_CONTROL_BOKEH_PICTURE_SIZE)
        CONFIG_ENTRY_VALUE(4160 , MINT32)
        CONFIG_ENTRY_VALUE(3120 , MINT32)
        CONFIG_ENTRY_VALUE(1600 , MINT32)
        CONFIG_ENTRY_VALUE(1200 , MINT32)
    CONFIG_METADATA_END()

二、 导通 LogicalCameraName Middleware 相关配置

Multicamra custom stereo Setting middleware 配置路径:

alps/vendor/mediatek/proprietary/custom/mt**/hal/camera/camera_custom_stereo_setting.h

主摄Name ,副摄Name ,LogicalCameraName(主摄_FeatureName)添加到camera_custom_stereo_setting.h中。
注意:主摄Name ,副摄Name ,LogicalCameraName 需要跟meatdata文件夹中的保持一致。

2.1 配置举例如下:
//主摄Name
        "{"
            "\"Name\": \"S5K_MIPI_RAW\","
            "\"Capture Size\": {" //实际双摄图片的最终输出大小。
                "\"4:3\": ["
                    "\"4160x3120\""
                "],"
                "\"16:9\": ["
                    "\"4160x2340\""
                "]"
            "},"
            "\"IMGOYUV Size\": {" //在有Fov Crop 的情况下,不能配置为Sensor full size,建议比full size 小,或者配置FOV crop的值
                "\"4:3\": \"4160x3120\","
                "\"16:9\": \"4160x2340\""
            "},"
            "\"RRZOYUV Size\": {" //一般配置跟预览size 相等或者稍大,如果IMGOYUV Size的二分之一比预览size 大的话,也可以配置为IMGOYUV Size的二分之一。
                "\"4:3\": \"2080x1560\","
                "\"16:9\": \"2080x1170\""
            "},"
            "\"SensorScenarioZSD\": {" //人像对应的是VSDoF, 对应的Sensor Settings的Sensormode 是Custom1
                "\"VSDoF\": \"custom1\","
                "\"3rdParty\": \"custom1\","
                "\"Zoom\": \"custom1\","
                "\"MtkDepthmap\": \"custom1\","
                "\"Multicam\": \"custom1\""
            "},"
            "\"SensorScenarioRecording\": {"
                "\"VSDoF\": \"Video\","
                "\"3rdParty\": \"custom1\","
                "\"MtkDepthmap\": \"custom1\""
            "},"
            "\"FOV\": {"
                "\"H\": 69.0,"
                "\"V\": 54.4"
            "},"
            "\"Calibration\": {"  
                "\"Macro Distance\": 80,"
                "\"Infinite Distance\": 5000"  // 标定距离远处 50cm
            "
  }
  //,副摄Name
  "{"
            "\"Name\": \"SC20_MIPI_RAW\","
            "\"Capture Size\": {"
                "\"4:3\": ["
    ... ...
        }
  //,LogicalCameraName
  "{"
   "\"Logical Device\":{"
    "\"Name\": \"bayermono\","
    "\"Features\": [\"VSDoF\"]"
   "},"
   "\"Sensors\": [ \"S5K_MIPI_RAW\", \"SC20_MIPI_RAW\"],"
   "\"Depth Flow\": \"MtkDepthmap\","
   "\"Module Type\": 2,"
   "\"Baseline\": 1.82,"  //主副摄Sensor 中心距离
   "\"FOV Crop\": {"
    "\"Disable Crop\": 1" //如果副摄FOV可以 cover 到主摄FOV 就不需要做Crop,配置为Disable Crop,否则配置为 Center Crop
   "},"
   "\"Depthmap Size\": {"
    "\"4:3\": \"480x360\","
    "\"16:9\": \"480x272\""
   "},"
   "\"LDC\": [\"0\"]"
  }
2.3 部分名词解释

Caputre Size:实际双摄图片的最终输出大小。
IMGOYUV Size:在有Fov Crop 的情况下,不能配置为Sensor full size,建议比full size 小,或者配置FOV crop的值。
RRZOYUV Size:一般配置跟预览size 相等或者稍大,如果IMGOYUV Size的二分之一比预览size 大的话,也可以配置为IMGOYUV Size的二分之一。
SensorScenaricZSD:人像对应的是VSDoF, 对应的Sensor Settings的Sensormode 是Custom1 ,详细请看下面举例。
FOV :市场角,规格说明书中有H/V 或者D两种表达
Calibration:标定距离远处 50cm

Baseline:主副摄Sensor 中心距离,涉及到标定。
FOV Crop:如果副摄FOV可以 cover 到主摄FOV 就不需要做Crop,配置为Disable Crop,否则配置为 Center Crop

2.4 Sensormode 客制化举例

修改S5K_mipi_raw 客制化sensormode 为custom1
比如:在下面文件中添加custom1
\kernel-4.14\drivers\misc\mediatek\imgsensor\src\mt**\camera_project\k6833v1_64\S5K_mipi_raw

.custom1 = {
        .pclk = 480000000,              //record different mode's pclk
        .linelength  = 4896,                //record different mode's linelength
        .framelength = 4084,            //record different mode's framelength
        .startx = 0,                    //record different mode's startx of grabwindow
        .starty = 0,                    //record different mode's starty of grabwindow
        .grabwindow_width  = 4160,      //record different mode's width of grabwindow
        .grabwindow_height = 3120,      //record different mode's height of grabwindow
        /*   following for MIPIDataLowPwr2HighSpeedSettleDelayCount by different scenario   */
        .mipi_data_lp2hs_settle_dc = 85,
        /*   following for GetDefaultFramerateByScenario()  */
        .max_framerate = 240,
        .mipi_pixel_rate = 454400000,
    },

三、认 LogicalCameraName 是否创建成功

抓开机Log(boot_normal的main log) 确认 LogicalCameraName 是否创建成功

3.1 打开logD命令抓取开启log方式:
adb root
 adb shell setenforce 0
 adb shell setprop persist.vendor.mtk.camera.log_level 3
 adb shell setprop persist.vendor.debug.camera.log 3
 adb shell pkill camerahalserver
 adb shell pkill cameraserver
3.2 Log 关键字:

LogicalDevice|Logical Device Name|addLogicalDevice|queryDriverName
or
LogicalDevice: Sensor #|addLogicalDevice|queryDriverName] queryDriverName

// LogicalCameraName 名称 bayermono,包含的物理主副摄 Sensor 名,Feature:vsdof 
  01-01 04:35:58.196228 26609 26609 D MtkCam/Util/LogicalDevice: Logical Device Name: bayermono
  01-01 04:35:58.196262 26609 26609 D MtkCam/Util/LogicalDevice: Sensor #0: S5K_MIPI_RAW(ID: 0)
  01-01 04:35:58.196278 26609 26609 D MtkCam/Util/LogicalDevice: Sensor #1: SC20_MIPI_RAW(ID: 2)
  01-01 04:35:58.196296 26609 26609 D MtkCam/Util/LogicalDevice: vsdof   //对应的Feature 是vsdof 虚化
  01-01 04:35:58.196312 26609 26609 D MtkCam/Util/LogicalDevice: --------------- 
  ... ...
        //成功添加 Logical camera SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono 并查询index 为3
  01-01 04:35:58.198808 26609 26609 D MtkCam/Util/LogicalDevice: (26609)[addLogicalDevice] query static metadata for multi-cam (SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono)
  01-01 04:35:58.226454 26609 26609 I MtkCam/Util/LogicalDevice: (26609)[addLogicalDevice] add new logic device: SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono
  01-01 04:35:59.019505 26609 26609 D MtkCam/Util/LogicalDevice: (26609)[queryDriverName] queryDriverName index : 3
  01-01 04:35:59.019530 26609 26609 D MtkCam/Util/LogicalDevice: (26609)[queryDriverName] queryDriverName : SENSOR_DRVNAME_S5K_MIPI_RAW_bayermono
  
  01-01 04:45:12.691179 11172 11855 I CameraService: CameraService::connect call (PID -1 "com.android.camera", camera ID 3) and Camera API version 2

四、双摄bringup LogicalCameraDevice 导通参考

  • 004_ISP7_Multi-Camera(SAT,VSDOF).pdf

  • ISP7_How_to_use_custom_setting_file.pdf

  • VSdof :Video Shallow Depth of Field 视频浅景深

  • SAT:Spatial Alignment Transform 光变切换(空间对齐变换)

  • PIP:Picture in Picture 画中画(双景录像)

【腾讯文档】Camera学习知识库
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

a04d492c83180beacf480c2b48000684.jpeg

点击阅读原文,为大佬点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用自然语言分割一切图像【lang-segment-anything】

近年来,计算机视觉取得了显着进步,特别是在图像分割和目标检测任务方面。 Segment Anything Model (SAM) 是最近的一项重大突破,这是一种多功能的深度学习模型,旨在有效地从图像和输入提示中预测对象掩码。 通过利用强大的编码器和…

听说最近AI应用爆了?!来AI Studio玩转大模型应用

‍ 飞桨 AI Studio 是基于百度深度学习平台飞桨(PaddlePaddle)的人工智能学习与实训社区,支持一站式模型在线开发与应用。提供优质开源模型、丰富的开源内容、功能强大的在线编程环境、云端超强 GPU 算力及存储资源,帮助开发者们快…

Docker镜像更新通知器DIUN

什么是 DIUN ? Docker Image Update Notifier 是一个用 Go 编写的 CLI 应用程序,可作为单个可执行文件和 Docker 映像交付,用于当 Docker 映像在 Docker registry中更新时接收通知。 和老苏之前介绍过的 watchtower 不同,DIUN 只是通知&…

基于Grafana的WebUI添加Prometheus数据源(三)

基于Grafana的WebUI添加Prometheus数据源(三) 1、 Grafana 介绍 1.1 什么是Grafana Grafana是一款近几年比较流行的开源数据绘图工具平台。Grafana原生支持包括但不限于InfluxDB,MySQL,OpenTSDB,PostgreSQL和Prometheus等多种数据源作为输入源…

勤于奋讲解国外LEAD做任务前的准备

欢迎关注勤于奋 每天12点准时更新国外LEAD相关技术 今天跟大家分享一些做国外LEAD一些资源,就是做国外LEAD前IP的检查,有人不是很清楚,今天分享一些检查工具。 第一个当然是whoer,这个工具我用的最多,很早的时候就使…

深入了解CUDA编程模型:并行计算的强大工具

深入了解CUDA编程模型:并行计算的强大工具 本篇博客将详细介绍NVIDIA的CUDA编程模型,帮助您更好地理解并行计算的基本原理和技巧。CUDA是一种通用并行计算平台和编程模型,它允许开发者利用NVIDIA的GPU进行高性能计算。 CUDA已经成为GPU计算的…

躺平减重法,续篇,泸州富顺六斤胡吃海喝之行的减重数据变化

朋友们大都知道我最近先回了一趟北京,然后去四川泸州参加了腾讯云泸州老窖联合举办的传统企业数字化转型研讨会,会议结束后,又去了富顺县,在我同学的四星级酒店大吃大喝了四天,嗯,果然不负众望,…

设计一个像ESPN一样的实时视频流系统

功能需求 •直播事件与流之间的最大延迟不超过1分钟•系统应能够适应大量用户(异构交付)•系统应能将视频转换为不同的分辨率和编解码器•系统应具备容错性 视频转换和接收 由于我们正在实时直播整个事件,因此我们不能等待整个视频结束后再开…

分布式ID-Leaf

目录 一,背景二,ID生成方案1,UUID2,类snowflake方案3,号段模式4,基于Redis模式5,数据库自增ID 三,Leaf Segment1,拉取源码2,修改配置并创建号段表3&#xff0…

FM实现F4帮助系列三:弹出框多筛选条件的搜索帮助(根据搜索帮助筛选字段)...

函数:F4IF_GET_SHLP_DESCR F4IF_START_VALUE_REQUEST 效果图: 本例子代码: 找到需要的帮助: *& Report ZLM_TEST_045 REPORT zlm_test_045. TABLES makt. DATA: BEGIN OF str_f4, matnr TYPE matnr, maktx TYPE maktx, END OF str_f4.…

【JavaEE初阶】前端第四节.JavaScript入门学习笔记

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Java测试开发 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 前言 一、…

反馈体系

(1)引子 我前段时间看了一个小短视频,有主持人问马斯克:你最害怕什么? 马斯克想了很久,回答:我最害怕反馈机制失灵。 马斯克说的不是特斯拉汽车的反馈机制失灵(虽然特斯拉汽车上装了…

Office Visio 2010安装

哈喽,大家好。今天一起学习的是Visio 2010的安装,这是一个绘制流程图的软件,用有效的绘图表达信息,比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件,便于IT和商务人员就复杂…

Java程序设计入门教程-- if 条件语句

目录 单分支选择语句(if) 双分支选择语句(if…else) 嵌套if语句 单分支选择语句(if) 情形 当判断条件满足时,执行语句体S,而不满足则什么都不做。 格式 if (条件判断表…

Web3:实质、本质和棒喝

本文的名称可能让人困惑,实质和本质不一样吗?棒喝又是个什么。 什么是实质、本质和棒喝 如果不是很计较的话,“实质”和“本质”其实差不多。但在这篇文章里,略有区别。 “实质”是说一个东西原原本本是个什么东西。 “本质”是一…

刚刚,吴恩达 ChatGPT 新课三连发!

你有没有想过,你可以自己构建一个AI系统,或者开发一个使用大语言模型(LLM)的应用,甚至理解并创建扩散模型?我在吴恩达的三门新课程中找到了答案,这些课程让我看到了AI的无限可能性。 好消息&…

Neo4j图数据库介绍及简单入门

文章目录 Neo4j图数据库介绍Neo4j数据库安装可视化例子Neo4j增删改查增删改查 Neo4j图数据库介绍 电影里有这样的片段,警察抓捕凶手时,在墙上会画一个图: 这里也有一个demo可以让我们看到一个做好的图数据库: 这个demo也是用Neo4…

前端基础几大件

文章目录 HTMLCSSJavaScriptAjaxAxios(第三方库,专门用于请求数据)SpringBoot单例模式与前端异步请求 HTML 在HTML当中,一切都是节点Object:(非常重要) 整个Html文档就是一个DOM文档节点。所有…

26 strcpy 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 字符串的复制 不过 我们这里是从 具体的实现 来看一下 它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 测试用例 就是简单的使用了一下 strcpy, s…

推进印度制造受挫,苹果仍踢出13家中国企业,一条道走到黑?

苹果公布了2022年的供应商名单,让人惊讶的是苹果将13家中国供应商踢出了供应链,而美国、日本的供应商却有所增加,似乎苹果仍然在降低对中国制造的依赖,这对于苹果来说未必是好事。 一、苹果的印度制造计划受挫 数年前苹果推动印度…