Camera HDI调试工具 - CameraDumper
在4.0之前调试Camera HDI时,如果要dump出各节点的数据时,需要自己在代码去埋点dump出来,在4.0开始,Camera HDI中新增了CameraDumper功能,可读取 dump 配置文件,根据配置的开关,dump camera 的各个节点的图片信息、metadata 数据。更方便的定位问题。 1.开启方式 目前有2种方式来开启CameraDumper功能: 使用源代码编译方式使用
在4.0之前调试Camera HDI时,如果要dump出各节点的数据时,需要自己在代码去埋点dump出来,在4.0开始,Camera HDI中新增了CameraDumper功能,可读取 dump 配置文件,根据配置的开关,dump camera 的各个节点的图片信息、metadata 数据。更方便的定位问题。
1.开启方式
目前有2种方式来开启CameraDumper功能:
- 使用源代码编译方式
- 使用命令加推配置文件方式
在RK3568上,已经在各关键点上添加了dump,推荐使用命令和推配置文件的方式。适配的其它板子,可以参考drivers/peripheral中的方式,将CodecNode,ScaleNode等node也增加dump。
注意:
dump功能默认是关闭的。
dump出来的数据保存路径:**/data/local/tmp/** 。
正常情况下 camera_host
是写不了这个路径的,需要 hdc
进到 shell
里更改权限:
hdc shell mount -o rw,remount /data
hdc shell chmod 777 /data/local/tmp/ -R
2.源代码编译方式
2.1.开启功能开关
dump功能代码路径:drivers/peripheral/camera/vdi_base/common/dump/src/camera_dump.cpp
。
功能开关保存在 g_dumpInfoMap map中,修改对应的值为 true
:
std::map<DumpType, bool> g_dumpInfoMap = {
{MedataType, true},
{BufferType, true},
{OpenType, true}
};
- OpenType:为总开关,开启后其它的开关才会生效
- MedataType:打开后会dump出camera当前的metadata数据
- BufferType:打开后会dump出流数据(yuv,h264等)
2.2.开启流上的dump点
流上的dump开关在 g_dumpToolMap map中,修改对应的值为 true
:
std::map<std::string, std::string> g_dumpToolMap = {
{ENABLE_DQ_BUFFER_DUMP, "true"},
{ENABLE_UVC_NODE, "true"},
{ENABLE_UVC_NODE_CONVERTED, "true"},
{ENABLE_EXIF_NODE_CONVERTED, "true"},
{ENABLE_FACE_NODE_CONVERTED, "true"},
{ENABLE_FORK_NODE_CONVERTED, "true"},
{ENABLE_RKFACE_NODE_CONVERTED, "true"},
{ENABLE_RKEXIF_NODE_CONVERTED, "true"},
{ENABLE_CODEC_NODE_CONVERTED, "true"},
{ENABLE_RKCODEC_NODE_CONVERTED, "true"},
{ENABLE_STREAM_TUNNEL, "true"},
{ENABLE_METADATA, "true"},
{PREVIEW_INTERVAL, "1"},
{CAPTURE_INTERVAL, "1"}
};
- ENABLE* 相关是pipeline各node中的dump,可以选择指定的点开启
- PREVIEW_INTERVAL/CAPTURE_INTERVAL 预览和录像时dump图的帧间隔,默认1表示每帧都dump
2.3.编译代码
上面的代码都修改好之后,可以全量编译,按需重烧镜像或推库都可以。
3.hidumper命令加推配置文件方式
3.1.命令介绍
目前命令支持以下几个参数:
- -h 显示命令帮助
- -m 开启metadata数据dump
- -b 开启帧数据dump
- -o 总开关,开启了后 -m -b 才生效
- -e 关闭dump
3.2.配置文件
1.新建文件,命名为 dump.config 。
2.下面的字段对应代码里 g_dumpToolMap 中的开关,将需要dump的改为 true
后复制到 dump.config :
enableDQBufDump=fasle
enableUVCNodeBufferDump=fasle
enableUVCNodeConvertedBufferDump=fasle
enableExifNodeConvertedBufferDump=fasle
enableFaceNodeConvertedBufferDump=fasle
enableForkNodeConvertedBufferDump=fasle
enableRKFaceNodeConvertedBufferDump=fasle
enableRKExifNodeConvertedBufferDump=fasle
enableCodecNodeConvertedBufferDump=fasle
enableRKCodecNodeConvertedBufferDump=fasle
enableSreamTunnelBufferDump=fasle
enableMetadataDump=fasle
previewInterval=1
captureInterval=1
3.将 dump.config 文件发送到开发板的 /data/local/tmp 目录:
hdc shell mount -o rw,remount /data
hdc file send dump.config /data/local/tmp/
3.3.使用方法
进入 shell
:
# hidumper -s 5100 -a '-host camera_host -o'
set dump mode success!
# hidumper -s 5100 -a '-host camera_host -b'
set dump mode success!
# hidumper -s 5100 -a '-host camera_host -m'
set dump mode success!
#
开关都打开后,可以打开相机应用,预览或是录像一段时间,然后关掉相机。在 shell
里进到 /data/local/tmp/
下:
# pwd
/data/local/tmp
#
#
# ls
1501927762871_capturesetting.meta
1501927764480_updatesetting.meta
1501927764523_capturesetting.meta
1501927764548_capturesetting.meta
BeforeFlushSurface_captureId[12]_streamId[1]_width[640]_height[480]_1501927769255.yuv
DQBuffer_captureId[11]_streamId[1]_width[640]_height[480]_1501927763574.yuv
DQBuffer_captureId[12]_streamId[1]_width[640]_height[480]_1501927768851.yuv
board_RKCodecNode_captureId[11]_streamId[1]_width[640]_height[480]_1501927763095.yuv
debugserver
dump.config
dumpVideo.h264
#
已经dump出meta数据,各个node的yuv数据,以及h264数据。可以用 hdc 工具把文件都拉出来在pc上用对应工具查看效果。
4.添加新的dump开关
1.在头文件 drivers/peripheral/camera/vdi_base/common/dump/include/camera_dump.h
中添加开关。
......
const std::string ENABLE_TEST_DUMP = "enableTestDump"; // 新增开关
const std::string ENABLE_DQ_BUFFER_DUMP = "enableDQBufDump";
const std::string ENABLE_UVC_NODE = "enableUVCNodeBufferDump";
......
2.在实现文件 drivers/peripheral/camera/vdi_base/common/dump/src/camera_dump.cpp
g_dumpToolMap 中添加开关。
......
std::map<std::string, std::string> g_dumpToolMap = {
{ENABLE_TEST_DUMP, "false"}, // 新增开关
{ENABLE_DQ_BUFFER_DUMP, "false"},
{ENABLE_UVC_NODE, "false"},
......
};
......
3.在需要的dump点使用,其中 DumpBuffer
的第1个参数只是一个标签,会作为dump出的文件名的一部分,第2个参数就是上面增加的开关,第3个参数是要dump的buffer。
CameraDumper& dumper = CameraDumper::GetInstance();
dumper.DumpBuffer("TEST", ENABLE_TEST_DUMP, buffer);
4.在推 dump.config 的配置文件时,添加新的开关:
......
enableTestDump=false // 新增开关
enableDQBufDump=fasle
enableUVCNodeBufferDump=fasle
enableUVCNodeConvertedBufferDump=fasle
......
5.编译烧镜像或是推库后,按上面的2种方式使用即可。
最后
1.注意点:
- dump功能默认是关闭的。
- dump出来的数据保存路径:**/data/local/tmp/** 。
- 保存路径需要修改权限。
- 有总开关和单项开关,总开关开了单项开关才生效。
- 推荐使用命令和推配置文件的方式,不用对原代码进行修改。
2.文章是根据代码总结出来的,可能有些地方有误,如有发现请联系修正。
更多推荐
所有评论(0)