美文网首页
双摄流程梳理

双摄流程梳理

作者: 程序员Android1 | 来源:发表于2022-07-04 18:54 被阅读0次

一、双摄虚化导通流程

1.1 创建 LogicalCameraName 相关的metadata

LogicalCameraName 文件夹命名规则: 主摄_FeatureName

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

预设单摄对应的metadata 已经存在并导通,将主摄(比如:SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING)的 metadata文件夹 copy 一份;

修改主摄文件夹名为LogicalCameraName;

比如:vendor\mediatek\proprietary\custom\mt***\hal\imgsensor_metadata\s5k3l6_mipi_raw_lijing_bayermono

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

比如:


$grep "S5K3L6" -ri .

./config_static_metadata.lens.s5k3l6mipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, LENS, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata.module.s5k3l6mipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, MODULE, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata.module.s5k3l6mipiraw.h:STATIC_METADATA2_BEGIN(PLATFORM, MOD_OVERWRITE, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata_availableKeys.h:STATIC_METADATA2_BEGIN(PLATFORM, AVAILABLE_KEYS, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata_custom.h:STATIC_METADATA2_BEGIN(PLATFORM, CUSTOM, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata_project.h:STATIC_METADATA2_BEGIN(PLATFORM, PROJECT, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata_project.h:STATIC_METADATA2_BEGIN(PLATFORM, PRO_OVERWRITE, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

./config_static_metadata_vendor.h:STATIC_METADATA2_BEGIN(PLATFORM, VENDOR, SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_bayermono)

LogicalCamera Size相关:config_static_metadata_custom.h


    后置人像尺寸:

    CONFIG_METADATA_BEGIN(OPLUS_TUNNING_BACK_PORTRAIT_NORMAL_PICTURE_SIZE)

        CONFIG_ENTRY_VALUE(4160, MINT32)

        CONFIG_ENTRY_VALUE(3120, MINT32)

    CONFIG_METADATA_END()

    /主副摄照片尺寸

    CONFIG_METADATA_BEGIN(OPLUS_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()

1.2 导通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文件夹中的保持一致。

比如:


//主摄Name

        "{"

            "\"Name\": \"S5K3L6_MIPI_RAW_LIJING\","

            "\"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\": \"SC201CS_MIPI_RAW_LIJING\","

            "\"Capture Size\": {"

                "\"4:3\": ["

... ...

        }

//,LogicalCameraName

"{"

"\"Logical Device\":{"

"\"Name\": \"bayermono\","

"\"Features\": [\"VSDoF\"]"

"},"

"\"Sensors\": [ \"S5K3L6_MIPI_RAW_LIJING\", \"SC201CS_MIPI_RAW_LIJING\"],"

"\"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\"]"

}

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

比如:

\kernel-4.14\drivers\misc\mediatek\imgsensor\src\mt***\camera_project\k6833v1_64\s5k3l6_mipi_raw_lijing


    .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,

    },

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

打开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

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: S5K3L6_MIPI_RAW_LIJING(ID: 0)

01-01 04:35:58.196278 26609 26609 D MtkCam/Util/LogicalDevice: Sensor #1: SC201CS_MIPI_RAW_LIJING(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_S5K3L6_MIPI_RAW_LIJING_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_S5K3L6_MIPI_RAW_LIJING_bayermono)

01-01 04:35:58.226454 26609 26609 I MtkCam/Util/LogicalDevice: (26609)[addLogicalDevice] add new logic device: SENSOR_DRVNAME_S5K3L6_MIPI_RAW_LIJING_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_S5K3L6_MIPI_RAW_LIJING_bayermono

01-01 04:45:12.691179 11172 11855 I CameraService: CameraService::connect call (PID -1 "com.oplus.camera", camera ID 3) and Camera API version 2

1.4 双摄bringup LogicalCameraDevice 导通参考修改:
  • lijing 项目提交bringup 修改提交:
    http://gerrit.scm.adc.com:8080/#/c/15614766/

  • 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 画中画(双景录像)

二、APS Bokeh 实现

2.1 Bokeh 代码路径

lijing项目代码路径:

vendor\***\camera\aps_algorithms\mtk\22083\

Bokeh lib 路径:

vendor\***\camera\aps_algorithms\mtk\22083\algos\bokeh\libs\arm64-v8a


├── libarcsoft_aicolor_image.so //人像留色

// 后置双目人像

├── libarcsoft_dualcam_bokeh_api.so

├── libarcsoft_dualcam_refocus_left.so

├── libarcsoft_dualcam_refocus_preview.so

├── libarcsoft_dualcam_refocus_right.so

├── libarcsoft_dualcam_refocus_uw.so

├── libarcsoft_hdr_couple_api.so //CHDR

├── libarcsoft_high_dynamic_range_couple.so //CHDR

└── libarcsoft_low_light_hdr_for_neon.so //光斑人像

代码路径

vendor\***\camera\aps_interface\source_code\algos\bokeh

2.2 Bokeh 流程

部分log关键字:

connect call|CameraDevice3Impl::open|session::open|HalDeviceAdapter::powerOn|MtkCam/HalSensor: [powerOn]|beginConfigure|AppMgr-configureStreams|convertStreamConfigurationFromHidl|processCaptureRequest] -> 1st request - OK|apsAlgoflagDecision|MultiFrameCnt:|cameratest|frame number:|bokehDoProcess|capture_algo_list

aps log关键字:

bokehDoProcess|ALGO_BOKEH|capture_algo_list|connect call|APS_INTERFACE|APS_CORE|ApsAdapter|cameratest|apsAlgoflagDecision|ALGO_RTB|doRTBProcess|doProcess|ALGO_RTB

Bokeh 多帧是通过Preview Decision 结果中的Frame count( MultiFrameCnt)决定。

1帧走Bokeh

2帧走HDR

4帧走Bokeh MD

5帧走 MDHDR/LLHDR

\vendor\***\camera\aps_interface\source_code\algos\bokeh\v1\bokeh\OCamBokehParam.cpp


#define BOKEH_MD_FRAME_NUMBER 4

#define BOKEH_HDR_FRAME_NUMBER 2

#define BOKEH_LLHDR_FRAME_NUMBER 5

Bokeh 流程log


07-05 13:49:34.067351 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokeh.cpp: 773  doBokehRegister()  E

07-05 13:49:34.067514 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokehParam.cpp: 184  bokehSetupInitParameters()  getJsonMetadata, pData: 0xb400007e9069d420, count: 54, rotation: 0, portraitMode: 2, dualCaliType: 1, isTeleMaster: 0, isAppSetBlurintensity: 0, foregroundBlurScale: 0, runTimeMemSize: 800, master: {4000 3000 4000 3000 4000 3000 4000 3000 1 0}, slave: {1600 1200 1600 1200 1600 1200 1600 1200 1 0}

07-05 13:49:34.067533 13610 14206 E APS_INTERFACE: [ERROR][ ALGO_BOKEH ] OCamBokehParam.cpp: 213  bokehSetupInitParameters()  createDumpDirectory: /sdcard/Android/data/com.oplus.camera/files/spdebug/bokehdump/ failed !!

07-05 13:49:34.068457 13610 14206 E APS_INTERFACE: [ERROR][ ALGO_BOKEH ] OCamBokeh.cpp: 269  bokehLoadLibrary()  AIColor not support

07-05 13:49:34.068471 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokeh.cpp: 280  bokehLoadLibrary()  parse lib:/odm/lib64/libarcsoft_dualcam_bokeh_api.so OK!

07-05 13:49:34.077679 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokeh.cpp: 537  bokehInit()  sSelectMasterType: 1

07-05 13:49:34.077704 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokeh.cpp: 550  bokehInit()  version: ArcSoft_DualCamRefocus_Wrapper_1.4.125235221.141_#21438-19-B16344

07-05 13:49:34.078655 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokehMultiframeDenoise.cpp: 79  bokehMdLoadLibrary()  parse lib:/odm/lib64/libVDDualCameraBlurlessAPI.so OK

07-05 13:49:41.577874 13610 14206 I APS_INTERFACE: [INFO][ ALGO_BOKEH ] OCamBokeh.cpp: 2346  doBokehProcess()  E. operation mode: 0x8011, register operation mode: 0x8011

2.3 Preview Bokeh 流程

Preview Bokeh 代码位置:

vendor\***\camera\aps_interface\source_code\previewalgos\rtb

doRTBInit -->doLoadLibrary-->getCameraStreamInfo-->doProcess

Preview Bokeh 流程log


07-05 13:49:33.634713 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 1183  doRTBInit()  E

07-05 13:49:33.634735 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 1372  doLoadLibrary()  E

07-05 13:49:33.634750 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 1386  doLoadLibrary()  APS RTB select: /odm/lib64/libarcsoft_dualcam_bokeh_api.so, m_bokehSelect:0

07-05 13:49:33.646384 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 1816  getCameraStreamInfo()  APS RTB streamInfo width: 1280, height: 960, stride: 1280, scanline: 960

07-05 13:49:33.792565 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 172  doProcess()  E frame number:0

07-05 13:49:33.792857 13610 14625 I APS_INTERFACE: [INFO][ ALGO_RTB ] APSRTBNode.cpp: 472  getInputMetaData()  SensorName sensorName s5k3l6

dump&&debug

dump 路径:

/sdcard/Android/data/com.oplus.camera/files/spdebug

adb 命令:

adb shell setprop cam.aps.bokeh.dumpcount  10 //张数

adb shell setprop persist.camera.aps.rtb.dumptextenable 1

校定bin文件路径:

/mnt/vendor/persist/camera/dual_calibration

相关文章

  • 前后双摄到AI四摄,360安全手机可智能拍摄艺术大片

    智能手机的进化史,在摄影层面,就从单摄进化到前后双摄,再从双摄进化的前后置AI双摄,也就是AI四摄,可谓是不惜工本...

  • 2020-02-24手机多摄像头原理解析

    【图吧小白教程】双摄基本原理 手机双摄像头的原理讲解(咕) 现在手机都四摄了,双摄没意思 简单讲讲手机双摄像的发展...

  • 流程梳理:

    同创微课堂引起高度重视,

  • 流程梳理

    链接http://bpx15g.axshare.com/#g=1&p=车辆告警 模板https://preview...

  • 流程梳理

    大家好!今天我主要和大家分享互加网络课后如何打卡。 开始之前呢,我们先熟悉一下互加网络课程的融合大...

  • 流程梳理

    1、先了解公司的业务情况,规划好财务流程,把最容易出问题的地方控制起来。 2、加盟商其实是当做公司的客户来管理的,...

  • 流程梳理

    领导这次真是上心了,昨天处理了我们部门一同事的问题。从处理这个事件中,他一定是发现了很多问题。今天他开始梳理三地配...

  • 流程梳理

    1.百度/知乎查找定义 2.哔哩哔哩 视频查看功能作用结构及运作原理 3.根据观看的信息根据自己理解提取 运作流程...

  • 流程梳理一般方法

    流程管理项目流程 一、流程梳理(以客户方内部团队,如部门经理为主) 1. 组织流程调研 2. 确定流程梳理范围 3...

  • 产品体验:探探的主流程体验

    1、梳理探探主要业务流程 ​​​​​​​ 2、梳理探探的主要页面流程​​​​​​​ 3、梳理探探的主要原型草图 4...

网友评论

      本文标题:双摄流程梳理

      本文链接:https://www.haomeiwen.com/subject/ijnsbrtx.html