控制1秒30帧的视频频率

#include <chrono>
#include <thread>

void controlFrameRate(std::chrono::milliseconds frameDuration) {
    auto startTime = std::chrono::high_resolution_clock::now();

    // Your drawing/rendering logic here

    auto endTime = std::chrono::high_resolution_clock::now();
    auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);

    std::this_thread::sleep_for(frameDuration - elapsedTime);
}

int main() {
    const int framesPerSecond = 30;
    const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);

    while (true) {
        controlFrameRate(frameDuration);
    }

    return 0;
}

1秒30帧,1秒等于1000毫秒,所以用1000除以30,得到平均一帧多长时间frameDuration

当处理完一帧图片的时候,得到elapsedTime。如果elapsedTime小于frameDuration,这个时候要让程序暂停一下,即std::this_thread::sleep_for,让进程睡一会,然后再进行下一次的工作;如果elapsedTime大于frameDuration,这样应该达不到1秒30帧的频率

这样就能控制好,是1秒30帧的频率。

全部写在主函数里,是下面的代码逻辑

#include <chrono>
#include <thread>

int main() {
    const int framesPerSecond = 30;
    const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);

    while (true) {
        auto startTime = std::chrono::high_resolution_clock::now();

        // Your drawing/rendering logic here

        auto endTime = std::chrono::high_resolution_clock::now();
        auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);

        std::this_thread::sleep_for(frameDuration - elapsedTime);
    }

    return 0;
}
相关推荐
无限大.16 分钟前
力扣题解3243 新增道路查询后的最短距离 I
算法·leetcode·职场和发展
棋子入局16 分钟前
螺旋矩阵II(leetcode 59)
算法·leetcode·矩阵
subject625Ruben28 分钟前
随机森林(Random Forest, RF)筛选回归数据(处理异常值)
算法·随机森林·数学建模·回归
IU宝1 小时前
类和对象——static 成员,匿名对象(C++)
开发语言·c++·算法
jjyangyou1 小时前
物联网核心安全系列——智能汽车安全防护的重要性
算法·嵌入式·产品经理·硬件·产品设计
我明天再来学Web渗透2 小时前
【java基础】微服务篇
java·开发语言·数据结构·算法·leetcode·微服务·面试
阳光开朗大男孩 = ̄ω ̄=2 小时前
深入浅出学算法005-数7
c语言·算法
sp_fyf_20242 小时前
【大语言模型】ACL2024论文-17 VIDEO-CSR:面向视觉-语言模型的复杂视频摘要创建
人工智能·深度学习·神经网络·机器学习·语言模型·音视频
lgily-12252 小时前
视频对接rtsp协议学习
后端·学习·音视频