VIVO 相机HDR拍照流程拆解

embedded/2024/9/24 21:25:22/

3514314293ee4c6c6bc9570ba14827ab.gif

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

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

  1. HDR 场景下发 3 帧拍照请求
  2. HDR 3帧拍照请求帧(478,479 480)
  3. HDR 3帧 result callback帧
  4. HDR 算法处理
    5.算法编解码处理
  5. HDR 拍照log关键字

HDR : 高动态范围成像(英语:High Dynamic Range Imaging,简称HDRI或HDR),在计算机图形学与电影摄影术中,是用来实现比普通数位图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度.

HDR即指高动态光照渲染,HDR是一种提高影像亮度和对比度的处理技术,与普通图像相比,HDR可以提供更多的动态范围和图像细节,利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像,能够更好地反映出真实环境中的视觉效果。[

1. HDR 场景下发 3 帧拍照请求

HDR 场景下,点击拍照按钮,提交拍照请求,拍照请求帧为3,5帧(trace 中submitRequestList
下可以看到 3 个 createCaptureRequest
)。

e89469afe292eb133cd9170113a79912.jpeg
点击拍照按钮提交拍照请求

2. HDR 3帧拍照请求帧(478,479 480)

eac78502a635d763650016fa0f6f9779.jpeg
3帧拍照请求帧

3. HDR 3帧 result callback帧

c10ba9a5bb4cddd73fa6dc1caca3d356.jpeg
HDR 3帧 result callback帧

4. HDR 算法处理

f85dc2697201477ee1bd746b5378b063.jpeg
HDR 算法处理

5.算法编解码处理

36cb12945700594bd847b4d2295c3589.jpeg
算法编解码处理

6. HDR 拍照log关键字

部分log关键字如下:

onShutterButtonFocus|connect call|Creating new stream|AlgoNativeInterface: HDR|AlgoNativeInterface: pAlgoParams|AlgoNativeInterface: algo process|IMG_20240829_195647.jpg|ACTION_UP|CAMAP_MAIN

部分log分析如下:

onShutterButtonFocus|connect call|Creating new stream|AlgoNativeInterface: HDR|AlgoNativeInterface: pAlgoParams|AlgoNativeInterface: algo process|IMG_20240829_195647.jpg|ACTION_UP|CAMAP_MAIN// 启动 cameraactivity行  205615: 08-29 19:56:29.548 10140 30284 30284 D _V_CAM_CameraActivity: CAMAP_MAIN: [Thread:main] CameraActivity---onStart, ActivityCode: 81415032行  205620: 08-29 19:56:29.551 10140 30284 30284 D _V_CAM_CameraActivity: CAMAP_MAIN: [Thread:main] CameraActivity---onNewIntent, ActivityCode: 81415032行  205755: 08-29 19:56:29.589 10140 30284 30284 V CAMAP_MAIN:: IS_LOG_CTRL_OPEN = true行  205756: 08-29 19:56:29.589 10140 30284 30284 D _V_CAM_CameraActivity: CAMAP_MAIN: [Thread:main] CameraActivity---onResumeTask, ActivityCode: 81415032 version: 12.1.78.8//  下发open camera行  205856: 08-29 19:56:29.632 10140 30284 19959 D _V_CAM_CameraModeProxyIml: CAMAP_MAIN: [Thread:camera_task] task thread---open camera E, CameraParam [ facing : FACING_BACK, modeName : Normal, cameraType : Master, mVModeInfo : 行  205863: 08-29 19:56:29.634 10140 30284 19959 D _V_CAM_CameraModeProxyIml: CAMAP_MAIN: [Thread:camera_task] task thread---open camera X//  连接cameraservice connect call行  205884: 08-29 19:56:29.646  1047  1557  3193 I CameraService: CameraService::connect call (PID 30284 "com.android.camera", camera ID 0) and Camera API version 2行  205956: 08-29 19:56:29.660 10140 30284 30284 D _V_CAM_StateMachine: CAMAP_MAIN: [Thread:main] change state --- photo : [ StateDestroy -> StateInit ]//  配3路流 Creating new stream行  206304: 08-29 19:56:29.769  1047  1557  3193 I Camera3-Device: Camera 0: Creating new stream 0: 1080 x 1080, format 34, dataspace 0 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0行  206330: 08-29 19:56:29.775  1047  1557  3193 I Camera3-Device: Camera 0: Creating new stream 1: 1080 x 1080, format 35, dataspace 146931712 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0行  206349: 08-29 19:56:29.787  1047  1557  3193 I Camera3-Device: Camera 0: Creating new stream 2: 3060 x 3060, format 35, dataspace 146931712 rotation 0 consumer usage 0, isShared 0, physicalCameraId , isMultiResolution 0 dynamicRangeProfile 0x1, streamUseCase 0, timestampBase 0, mirrorMode 0, colorSpace -1, useReadoutTimestamp 0行  207156: 08-29 19:56:30.141 10140 30284 19992 D _V_CAM_CameraModeProxyIml: CAMAP_MAIN: [Thread:camera_callback] onConfigured mode = BackNormalMainMode行  207163: 08-29 19:56:30.141 10140 30284 30284 D _V_CAM_StateMachine: CAMAP_MAIN: [Thread:main] change state --- photo : [ StateCameraOpened -> StateSessionCreated ]//  开始起预览请求 startPreview行  207247: 08-29 19:56:30.168 10140 30284 19959 D _V_CAM_CameraModeProxyIml: CAMAP_MAIN: [Thread:camera_task] ---startPreview PreviewParam {    [previewdetect = 140821240225795],    [eyeDetect = -1],    [previewAiDetect = [-1, -1]],    [vivo.control.ois = true],    [relight = 0],    [vivo.control.face.detect = true],    [vcamsdk.repeating.VideoStabilization = true],    [vivo.control.singleBlur_level = 0],    [vivo.control.portrait.effect = 0],    [vivo.record.eis.mode.enable = false],    [vivo.control.motionVersion=17],    [android.control.videoStabilizationMode=1],    [vivo.control.sod.state=0],    [vivo.parameter.temperature=43],    [vivo.control.captureStateForDetect=0],    [android.jpeg.orientation=90],    [vivo.parameter.cameraColdStart=false],    [custom.zoom=1.0],    [custom.flash_mode=0],    [custom.exposure_value=0],    }行  207407: 08-29 19:56:30.259 10140 30284 30284 D _V_CAM_ThumbnailAddition: CAMAP_MAIN: [Thread:main] updateThumbnailView//  首帧可用callback onFirstFrameAvailableCallback onFirstFrameAvailable行  207867: 08-29 19:56:30.431 10140 30284 19501 D _V_CAM_CameraActivity: CAMAP_MAIN: [Thread:VIEngine-Main]  onFirstFrameAvailableCallback行  207887: 08-29 19:56:30.437 10140 30284 30284 D _V_CAM_CameraActivity: CAMAP_MAIN: [Thread:main]  onFirstFrameAvailable//  HDR 场景下点击拍照 ACTION_UP  onShutterButtonFocus行  211606: 08-29 19:56:32.015 10069  3054  3054 D _V_InputEventReceiver: dispatchInputEvent ,vLog[a2c672 StatusBar (client)] ,event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=524.0, y[0]=420.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=76500757, downTime=76500650, deviceId=5, source=0x1002, displayId=0, eventId=17122441 }行  215088: 08-29 19:56:33.250 10069  3054  3054 D _V_InputEventReceiver: dispatchInputEvent ,vLog[375f109 NotificationShade (client)] ,event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=313.0, y[0]=651.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=76502116, downTime=76502045, deviceId=5, source=0x1002, displayId=0, eventId=980268846 }行  222254: 08-29 19:56:37.928 10069  3054  3054 D _V_InputEventReceiver: dispatchInputEvent ,vLog[375f109 NotificationShade (client)] ,event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=686.0, y[0]=2186.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=76506799, downTime=76505392, deviceId=5, source=0x1002, displayId=0, eventId=840324513 }行  235965: 08-29 19:56:47.169 10140 30284 30284 D _V_CAM_BaseBottomBar: CAMAP_MAIN: [Thread:main] onShutterButtonFocus  pressed = true行  237770: 08-29 19:56:48.077 10122 10844  4581 D AlgoNativeInterface: algo process E//  HDR 算法处理行  237774: 08-29 19:56:48.077 10122 10844  4581 D AlgoNativeInterface: algo process img[0] fd 109 width 3060 height 3060 stride 3072 scanline 3072 size 14155776 numFds 2 numInts 23 version 12行  237775: 08-29 19:56:48.077 10122 10844  4581 D AlgoNativeInterface: algo process img[1] fd 111 width 3060 height 3060 stride 3072 scanline 3072 size 14155776 numFds 2 numInts 23 version 12行  237776: 08-29 19:56:48.078 10122 10844  4581 D AlgoNativeInterface: algo process img[2] fd 113 width 3060 height 3060 stride 3072 scanline 3072 size 14155776 numFds 2 numInts 23 version 12行  237779: 08-29 19:56:48.078 10122 10844  4581 D AlgoNativeInterface: algo process imageFormat: 0x23 requestId: 8行  237814: 08-29 19:56:48.080 10122 10844  4581 D AlgoNativeInterface: HDR 3-frames version行  237872: 08-29 19:56:48.090 10122 10844  4581 D AlgoNativeInterface: pAlgoParams->frameFlag: 1724932607175 localtime:20240829195647//  HDR 算法选帧 478 479 480 3帧行  237889: 08-29 19:56:48.090 10122 10844  4581 D AlgoNativeInterface: pAlgoParams->frameId[0]: 478行  237890: 08-29 19:56:48.090 10122 10844  4581 D AlgoNativeInterface: pAlgoParams->frameId[1]: 479行  237891: 08-29 19:56:48.090 10122 10844  4581 D AlgoNativeInterface: pAlgoParams->frameId[2]: 480行  237985: 08-29 19:56:48.095 10122 10844  4581 D AlgoNativeInterface: hdrGains[0]: 6.733059, hdrShutters[0]: 30.000000, hdrFrameIndex:0行  237986: 08-29 19:56:48.095 10122 10844  4581 D AlgoNativeInterface: hdrGains[1]: 10.965449, hdrShutters[1]: 30.000000, hdrFrameIndex:1行  237987: 08-29 19:56:48.095 10122 10844  4581 D AlgoNativeInterface: hdrGains[2]: 1.454850, hdrShutters[2]: 10.000000, hdrFrameIndex:2行  238000: 08-29 19:56:48.096 10122 10844  4581 D AlgoNativeInterface: pAlgoParams->shotAeRegions left:0 top:0 right:0 bottom:0行  238009: 08-29 19:56:48.098 10122 10844  4581 D AlgoNativeInterface: algo process: pAlgoParams->satCropRegions ltwh 0 0 0

参考文献:

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

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

37c0a44ae36937ed31b1e07d58815841.jpeg

点个在看,为大佬点赞!


http://www.ppmy.cn/embedded/103842.html

相关文章

5G SPS配置

‌SPS配置‌是一种技术,用于管理和优化数据传输,特别是在无线通信领域。它涉及到为特定的数据传输需求确定最佳的参数配置,以满足不同的传输需求。SPS配置的参数包括时域资源分配、调制编码方式、频域资源分配、虚拟资源块到物理资源块的映射…

使用 streamlink 把 m3u8 转为 mp4

问题描述, 背景, 来源: 下载 m3u8 ts —> 转为mp4, 按照以往的做法, 就是使用 python requests 一步一步地下载 m3u8, ts, 然后转换。 但是个人写的东西,毕竟问题比较多。 而且, 但是&…

Python知识点:如何使用Elasticsearch与Elasticsearch-py进行全文检索

使用Elasticsearch与elasticsearch-py库进行全文检索可以分为以下几个步骤: 1. 安装elasticsearch-py 首先,确保你已经安装了elasticsearch-py库。你可以使用pip来安装它: pip install elasticsearch2. 连接到Elasticsearch实例 使用elas…

2 Python开发工具:PyCharm的安装和使用

本文是 Python 系列教程第 2 篇,完整系列请查看 Python 专栏。 1 安装 官网下载地址https://www.jetbrains.com.cn/pycharm/,文件比较大(约861MB)请耐心等待 双击exe安装 安装成功后会有一个30天的试用期。。。本来想放鸡火教程&…

React滚动加载(无限滚动)功能实现

在用户滚动到接近页面底部时自动加载更多内容 :可以将事件绑定在antd的Table组件中的onScroll中 :也可以将事件绑定在外层的div的onScroll中 const handleScroll (e) > {const { scrollTop, scrollHeight, clientHeight } e.target;if (scrollTo…

l_whence 的可能值及其含义

在 fcntl 函数中使用 struct flock 结构体进行文件锁定时,l_whence 成员用于指定文件锁操作的起始位置。它定义了文件锁的偏移量是相对于哪个位置的。l_whence 有以下几种可能的值,每种值的含义如下: l_whence 的可能值及其含义 SEEK_SET: 含…

38次8.28(docker03:容器网络,主从镜像)

1.容器网络 1.本地⽹络 bridge yum -y install bridge-utils 2.查看桥⽂件 yum provides *bin/brctl brctl show #使⽤docker network 查看桥 docker network ls 每⼀台dcoker host上的docker0所在⽹段完全⼀样,但是会造成跨主 机的容 器⽆法通信 3.host 与…

资源分享,打开夸克保存文件

这都是我自己的视频和资源,没有版权投诉,别搞了 ai小说推文视频教程 【创绘:一键出片教程】 创绘:一键出片教程_哔哩哔哩_bilibili 前端学习资料 链接:夸克网盘分享