前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Qcom Camx 打印实时Camera FPS

Qcom Camx 打印实时Camera FPS

作者头像
小驰行动派
发布2025-02-21 15:12:21
发布2025-02-21 15:12:21
2900
代码可运行
举报
文章被收录于专栏:Android Camera开发Android Camera开发
运行总次数:0
代码可运行

一、第一种方式(有些低平台可能没有)

adb shell setprop persist.vendor.camera.enableFPSLog TRUE

adb shell setprop persist.vendor.camera.systemLogEnable TRUE

adb shell setprop vendor.debug.camera.overrideLogLevels 0xff

chi-cdk/core/chiframework/chxextensionmodule.cpp

代码语言:javascript
代码运行次数:0
复制
CDKResult ExtensionModule::OverrideProcessRequest(
    const camera3_device_t*     camera3_device,
    camera3_capture_request_t*  pCaptureRequest,
    VOID*                       pPriv)
{
   if (TRUE == EnableFPSLog())
        {
            PrintCameraFPS(logicalCameraId);
        }

}
代码语言:javascript
代码运行次数:0
复制
VOID ExtensionModule::PrintCameraFPS(
    UINT32 logicalCameraId)
{
    m_processCount[logicalCameraId]++;

    if ((m_processCount[logicalCameraId] % GetInstance()->GetUsecaseMaxFPS()) == 0)
    {
        struct timespec TEnd                = {0 , 0};
        FLOAT           cost_time           = 0;
        FLOAT           cost_time_from_prev = 0;

        clock_gettime(CLOCK_REALTIME, &TEnd);

        if (m_CameraWatcher[logicalCameraId].tv_nsec < TEnd.tv_nsec)
        {
            cost_time = (FLOAT)(TEnd.tv_sec - m_CameraWatcher[logicalCameraId].tv_sec - 1) +
                ((FLOAT)(1000000000 + TEnd.tv_nsec - m_CameraWatcher[logicalCameraId].tv_nsec)/1e9);

            cost_time_from_prev = (FLOAT)(TEnd.tv_sec -  m_CameraWatcher_prev[logicalCameraId].tv_sec - 1) +
                ((FLOAT)(1000000000 + TEnd.tv_nsec -  m_CameraWatcher_prev[logicalCameraId].tv_nsec)/1e9);
        }
        else
        {
            cost_time = (FLOAT)(TEnd.tv_sec - m_CameraWatcher[logicalCameraId].tv_sec) +
                ((FLOAT)(TEnd.tv_nsec - m_CameraWatcher[logicalCameraId].tv_nsec)/1e9);

            cost_time_from_prev = (FLOAT)(TEnd.tv_sec -  m_CameraWatcher_prev[logicalCameraId].tv_sec) +
                ((FLOAT)(TEnd.tv_nsec -  m_CameraWatcher_prev[logicalCameraId].tv_nsec)/1e9);
        }

        m_CameraWatcher_prev[logicalCameraId] = TEnd;

        FLOAT fps         = (FLOAT) ((FLOAT) m_processCount[logicalCameraId] / cost_time) * m_usecaseNumBatchedFrames;
        FLOAT current_fps = (FLOAT) ((FLOAT) ExtensionModule::GetInstance()->GetUsecaseMaxFPS() / cost_time_from_prev) * m_usecaseNumBatchedFrames;

        CHX_LOG_INFO("FRAME FPS %1.1f, average FPS %1.1f, frame count %d, time %1.1f, Max:%d, numBatchedFrames: %d",
                    current_fps,
                    fps,
                    m_processCount[logicalCameraId],
                    cost_time,
                    GetInstance()->GetUsecaseMaxFPS(),
                    m_usecaseNumBatchedFrames);
    }
    else if (m_processCount[logicalCameraId] == 1)
    {
        clock_gettime(CLOCK_REALTIME, &m_CameraWatcher[logicalCameraId]);
        m_CameraWatcher_prev[logicalCameraId] = m_CameraWatcher[logicalCameraId];
    }
}

二、第二种方式

adb shell setprop persist.vendor.camera.logPerfInfoMask 0x10000

adb shell setprop persist.vendor.camera.enableFPSLog TRUE

camx/src/core/camxsession.cpp

代码语言:javascript
代码运行次数:0
复制
VOID Session::AdvanceMinExpectedResult()
{
    if (TRUE == m_pChiContext->GetStaticSettings()->enableFPSLog)
    {
        CalculateResultFPS();
    }
}
代码语言:javascript
代码运行次数:0
复制
VOID Session::CalculateResultFPS()
{
    UINT64 currentTime = OsUtils::GetNanoSeconds();
    UINT64 elapsedTime;

    if (0 == m_lastFPSCountTime)
    {
        m_lastFPSCountTime  = currentTime;
        m_currentFrameCount = 0;
    }
    else
    {
        m_currentFrameCount++;
    }
    elapsedTime = currentTime - m_lastFPSCountTime;

    // Update FPS after 10 secs
    if (elapsedTime > (10 * NanoSecondsPerSecond))
    {
        FLOAT fps = (m_currentFrameCount * NanoSecondsPerSecond / static_cast<FLOAT> (elapsedTime));
        CAMX_LOG_PERF_INFO(CamxLogGroupCore, "FPS: %0.2f", fps);

        m_currentFrameCount = 0;
        m_lastFPSCountTime  = currentTime;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小驰行动派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、第一种方式(有些低平台可能没有)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档