盛世宏图 发表于 2024-11-21 20:26:38

控制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;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 控制1秒30帧的视频频率