【发布时间】:2014-11-24 13:05:41
【问题描述】:
我正在使用 OpenCV 编写视频文件。要使cv::VideoWriter 正常工作,对 write() 函数的调用必须每秒恰好发生 30 次(对于 30fps 视频)。
我发现this 代码使用 boost 库来实现这一点。我也想这样做,但在我的程序中使用std::chrono。这是我的实现:
std::chrono::high_resolution_clock::time_point prev = std::chrono::high_resolution_clock::now();
std::chrono::high_resolution_clock::time_point current = prev;
long long difference = std::chrono::duration_cast<std::chrono::microseconds>(current-prev).count();
while(recording){
while (difference < 1000000/30){
current = std::chrono::high_resolution_clock::now();
difference = std::chrono::duration_cast<std::chrono::microseconds>(current-prev).count();
}
theVideoWriter.write(frameToRecord);
prev = prev + std::chrono::high_resolution_clock::duration(1000000000/30);
difference = std::chrono::duration_cast<std::chrono::microseconds>(current-prev).count();
}
theVideoWriter.release();
我不确定这是否是正确的方法,或者是否有更有效的方法。有什么比将持续时间转换为 long long difference 更好的方法吗?
【问题讨论】:
-
当你确切地说,你希望你的时间有多准确?