Qcom Camera 调试技巧

                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_camera_buf_def_t *frame, uint32_t dump_type)
{
char value[PROPERTY_VALUE_MAX];
property_get(“persist.camera.dumpimg”, value

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QCOM串口调试命令是一种用于在QCOM芯片上进行调试和测试的命令。它可以通过串口发送和接收命令来与芯片进行交互和控制。下面是一些常用的QCOM串口调试命令及其功能: 1. logcmd:该命令用于控制QCOM芯片的日志输出。可以使用logcmd命令来打开、关闭和配置日志输出的级别。 2. memtest:该命令用于进行内存测试。可以使用memtest命令来检查内存的状态和健康情况,以验证芯片的内存功能是否正常。 3. register:该命令用于读取和写入QCOM芯片的寄存器。可以使用register命令来读取寄存器的值,或者写入新的值以修改芯片的配置。 4. reset:该命令用于重置QCOM芯片。可以使用reset命令来重新启动芯片,以便恢复到初始状态或者应用新的配置。 5. version:该命令用于查询QCOM芯片的版本信息。可以使用version命令来获取芯片的型号、版本号和其他相关信息。 6. flash:该命令用于刷写固件到QCOM芯片的闪存中。可以使用flash命令来实现更新芯片固件的功能,以便修复问题或添加新的功能。 7. diag:该命令用于进行诊断测试。可以使用diag命令来执行各种诊断测试,以验证芯片的硬件功能是否正常。 8. fhtest:该命令用于进行射频测试。可以使用fhtest命令来测试芯片的射频性能,包括信号强度、频率响应等。 以上是一些常见的QCOM串口调试命令,通过使用这些命令,可以更好地了解和调试QCOM芯片的功能和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值