0
点赞
收藏
分享

微信扫一扫

记录一次Camera录像卡顿问题debug

Android上Camera相关的日志还是非常多,当然正常版本上考虑到性能的问题,很多日志基本都是关了的。针对不同的模块,基本都有对应的property属性控制日志的开关,我们调试的时候,设置相应的property属性即可。

录像卡顿,想到的是和录像帧率有关,接下来要讲的就是如何去排查录像的帧率?

查看录像帧率的property属性:
adb shell setprop persist.vendor.debug.sf.showfps 1

对应的代码逻辑是在QCamera2HardwareInterface.cpp里面

------android/hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp


/*===========================================================================
 * FUNCTION   : debugShowVideoFPS
 *
 * DESCRIPTION: helper function to log video frame FPS for debug purpose.
 *
 * PARAMETERS : None
 *
 * RETURN     : None
 *==========================================================================*/
void QCamera2HardwareInterface::debugShowVideoFPS()
{
    mVFrameCount++;
    nsecs_t now = systemTime();
    nsecs_t diff = now - mVLastFpsTime;
    if (diff > ms2ns(250)) {
        mVFps = (((double)(mVFrameCount - mVLastFrameCount)) *
                (double)(s2ns(1))) / (double)diff;
        LOGI("[KPI Perf]: PROFILE_VIDEO_FRAMES_PER_SECOND: %.4f Cam ID = %d",
                mVFps, mCameraId);
        mVLastFpsTime = now;
        mVLastFrameCount = mVFrameCount;
    }
}

另外我们需要打印LOGI级别的日志,还需要把hal层的日志等级设置下。

setprop persist.vendor.camera.hal.debug 7

设置完 persist.vendor.camera.hal.debug 属性后,最好是重启下设备,然后每次重启设备后,都需要再重新设置下 persist.vendor.debug.sf.showfp 属性才生效。

属性设置好后,我们就可以看日志分析了。由于输出的日志会比较多,最好是通过logcat -G的命令,把日志缓存设置大点。

adb shell logcat -G 32M

我们过滤搜索录像帧率相关的日志:

logcat |grep PROFILE_VIDEO_FRAMES_PER_SECOND

我找了2台设备,一台是正常的,一台是卡顿的,分别查看了录像帧率的输出。
正常的设备,输出基本稳定在30fps左右,而异常的,则是不稳定,而且帧率有点低。

接下来,我是对比查看了下cpu频率,发现进入录像的时候,相比正常的设备,卡顿的设备是出现了cpu降频。后面就是让系统的同事去分析这个降频的问题了。

cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq


*本人从事Android Camera相关开发已有5年,
*目前在深圳上班,
*小伙伴记得点我头像,看【个人介绍】进行关注哦,希望和更多的小伙伴一起交流 ~

** 为了方便大家沟通交流,我建了个wx交流群,想加入的同学,欢迎私信我加入~*
举报

相关推荐

0 条评论