Qcom Camera 调试技巧

本文详细介绍了高通Qcom Camera的调试技巧,包括如何通过Log分析启动速度、帧率计算、数据流帧获取,以及如何开启HAL日志、调整I2C速率等。内容涵盖预览和视频帧率的查看、数据帧的dump、HAL日志级别设置、AF ROI计算等关键点,为Qcom Camera的性能优化提供了实用指南。
摘要由CSDN通过智能技术生成
                Qcom Camera 调试技巧

1.Camera启动速度(Hal层的耗时):
Camera的启动速度,是我们经常做优化的地方,除了通过仪器去测量,还可以通过Log来查看! 搜索关键字:[KPI Perf]

01-24 17:55:57.657 371 4074 D QCamera2HWI: [KPI Perf] int qcamera::QCamera2HardwareInterface::openCamera(hw_device_t**):
E PROFILE_OPEN_CAMERA camera id 0 //这里打开摄像头
01-24 17:55:58.139 371 2380 D QCamera2HWI: [KPI Perf]
static int qcamera::QCamera2HardwareInterface::start_preview(camera_device*):
E PROFILE_START_PREVIEW
01-24 17:55:58.528 371 16975 D QCamera2HWI: int qcamera::QCamera2HardwareInterface::startPreview(): X
01-24 17:55:58.528 371 2380 D QCamera2HWI: [KPI Perf] static int qcamera::QCamera2HardwareInterface::
start_preview(camera_device*): X
01-24 17:55:58.530 2971 2971 D CameraManager: {CameraManager.initVideoCamera-199}
摄像头打开预览.
01-24 17:55:58.654 371 17015 D QCamera2HWI: [KPI Perf] static void qcamera::QCamera2HardwareInterface::
preview_stream_cb_routine(mm_camera_super_buf_t*, qcamera::QCameraStream*, void*) :
PROFILE_FIRST_PREVIEW_FRAME //第一帧预览画面出现
复制代码
打开Camera的时间点:01-24 17:55:57.657 第一帧预览画面出现的时间点:01-24 17:55:58.654 耗时:0.997s(将近1s左右) 注意这是从进入开始Hal层的计算的耗时
我们来看看源码,

int QCamera2HardwareInterface::openCamera(struct hw_device_t **hw_device)
{
···
CDBG_HIGH("[KPI Perf] %s: E PROFILE_OPEN_CAMERA camera id %d", func,mCameraId);
rc = openCamera();
···
}
复制代码
void QCamera2HardwareInterface::preview_stream_cb_routine(mm_camera_super_buf_t *super_frame,
QCameraStream * stream,
void *userdata)
{
ALOGD("[KPI Perf] %s : BEGIN", func);
···
if(pme->m_bPreviewStarted) {
CDBG_HIGH("[KPI Perf] %s : PROFILE_FIRST_PREVIEW_FRAME", func);
pme->m_bPreviewStarted = false ;
}
···
}
复制代码
事实上,高通也只是在调用地方打印了一下当前的时间点,因此如果你想分析某个功能的耗时, 就按照高通的思路,调用前后打印一下当前函数就可以了,最后再通过时间戳计算耗时! 当然了
.如何查看Camera的帧率(fps):拍照和视频
1 拍照帧率 源码: hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
void QCamera2HardwareInterface::debugShowPreviewFPS()
{
static int n_pFrameCount = 0;
static int n_pLastFrameCount = 0;
static nsecs_t n_pLastFpsTime = 0;
static double n_pFps = 0;
n_pFrameCount++;
nsecs_t now = systemTime();
nsecs_t diff = now - n_pLastFpsTime;
if (diff > ms2ns(250)) {
n_pFps = (((double)(n_pFrameCount - n_pLastFrameCount)) *
(double)(s2ns(1))) / (double)diff;
CDBG_HIGH("[KPI Perf] %s: PROFILE_PREVIEW_FRAMES_PER_SECOND : %.4f", func, n_pFps);
n_pLastFpsTime = now;
n_pLastFrameCount = n_pFrameCount;
}
}
复制代码
hal层是如何计算实际输出的帧率:

n_pFps = (((double)(n_pFrameCount - n_pLastFrameCount)) *(double)(s2ns(1))) / (double)diff;
复制代码
搜索关键字:PROFILE_PREVIEW_FRAMES_PER_SECOND 默认fps是不输出的,需要用到adb命令打开

2.视频帧率 源码: hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
void QCamera2HardwareInterface::debugShowVideoFPS()
{
static int n_vFrameCount = 0;
static int n_vLastFrameCount = 0;
static nsecs_t n_vLastFpsTime = 0;
static double n_vFps = 0;
n_vFrameCount++;
nsecs_t now = systemTime();
nsecs_t diff = now - n_vLastFpsTime;
if (diff > ms2ns(250)) {
n_vFps = (((double)(n_vFrameCount - n_vLastFrameCount)) *
(double)(s2ns(1))) / (double)diff;
ALOGE(“Video Frames Per Second: %.4f”, n_vFps);
n_vLastFpsTime = now;
n_vLastFrameCount = n_vFrameCount;
}
}
复制代码
搜索关键字:Video Frames Per Second 执行命令

adb root
adb shell setprop persist.debug.sf.showfps 1
adb shell
logcat | grep “Video Frames Per Second”
复制代码
3.获取数据流的帧(YUV图)
源码: hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp

void QCamera2HardwareInterface::dumpFrameToFile(QCameraStream *stream,
mm_ca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值