控制1秒30帧的视频频率

打印 上一主题 下一主题

主题 839|帖子 839|积分 2517

  1. #include <chrono>
  2. #include <thread>
  3. void controlFrameRate(std::chrono::milliseconds frameDuration) {
  4.     auto startTime = std::chrono::high_resolution_clock::now();
  5.     // Your drawing/rendering logic here
  6.     auto endTime = std::chrono::high_resolution_clock::now();
  7.     auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);
  8.     std::this_thread::sleep_for(frameDuration - elapsedTime);
  9. }
  10. int main() {
  11.     const int framesPerSecond = 30;
  12.     const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);
  13.     while (true) {
  14.         controlFrameRate(frameDuration);
  15.     }
  16.     return 0;
  17. }
复制代码
1秒30帧,1秒即是1000毫秒,所以用1000除以30,得到平均一帧多长时间frameDuration
当处理完一帧图片的时间,得到elapsedTime。如果elapsedTime小于frameDuration,这个时间要让程序暂停一下,即std::this_thread::sleep_for,让进程睡一会,然后再进行下一次的工作;如果elapsedTime大于frameDuration,如许应该达不到1秒30帧的频率
如许就能控制好,是1秒30帧的频率。
全部写在主函数里,是下面的代码逻辑
  1. #include <chrono>
  2. #include <thread>
  3. int main() {
  4.     const int framesPerSecond = 30;
  5.     const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);
  6.     while (true) {
  7.         auto startTime = std::chrono::high_resolution_clock::now();
  8.         // Your drawing/rendering logic here
  9.         auto endTime = std::chrono::high_resolution_clock::now();
  10.         auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);
  11.         std::this_thread::sleep_for(frameDuration - elapsedTime);
  12.     }
  13.     return 0;
  14. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表