renderer: use iterator rather than creating vectors

Creating vectors from the FrameHashCache was one of the slowest functions in the program, this should be significantly faster.
This commit is contained in:
itsmattkc
2021-07-11 16:47:12 -07:00
parent 9b0b3962fe
commit 8a58ee2bdb
9 changed files with 126 additions and 95 deletions
+7 -4
View File
@@ -84,16 +84,19 @@ bool RenderTask::Render(ColorManager* manager,
if (!video_range.isEmpty()) {
// Get list of discrete frames from range
QVector<rational> times = FrameHashCache::GetFrameListFromTimeRange(video_range, video_params().frame_rate_as_time_base());
QVector<QByteArray> hashes(times.size());
TimeRangeListFrameIterator iterator(video_range, video_params().frame_rate_as_time_base());
QVector<rational> times(iterator.size());
QVector<QByteArray> hashes(iterator.size());
// Generate hashes
for (int i=0; i<times.size(); i++) {
rational r;
for (int i=0; iterator.GetNext(&r); i++) {
if (IsCancelled()) {
return true;
}
hashes[i] = RenderManager::instance()->Hash(viewer()->GetConnectedTextureOutput(), video_params_, times.at(i));
times[i] = r;
hashes[i] = RenderManager::instance()->Hash(viewer()->GetConnectedTextureOutput(), video_params_, r);
}
// Filter out duplicates