renderer: remove frames from hash map as well when the diskmanager deletes

them
This commit is contained in:
itsmattkc
2020-02-27 17:46:49 +11:00
parent 735e180d5a
commit f9a54ebdb6
3 changed files with 30 additions and 3 deletions
+1 -1
View File
@@ -343,7 +343,7 @@ void VideoRenderBackend::TruncateFrameCacheLength(const rational &length)
void VideoRenderBackend::FrameRemovedFromDiskCache(const QByteArray &hash)
{
QList<rational> deleted_frames = frame_cache()->FramesWithHash(hash);
QList<rational> deleted_frames = frame_cache()->TakeFramesWithHash(hash);
foreach (const rational& frame, deleted_frames) {
TimeRange invalidated(frame, frame+params_.time_base());
+20 -1
View File
@@ -83,7 +83,7 @@ void VideoRenderFrameCache::RemoveHashFromCurrentlyCaching(const QByteArray &has
currently_caching_list_.removeOne(hash);
}
QList<rational> VideoRenderFrameCache::FramesWithHash(const QByteArray &hash)
QList<rational> VideoRenderFrameCache::FramesWithHash(const QByteArray &hash) const
{
QList<rational> times;
@@ -98,6 +98,25 @@ QList<rational> VideoRenderFrameCache::FramesWithHash(const QByteArray &hash)
return times;
}
QList<rational> VideoRenderFrameCache::TakeFramesWithHash(const QByteArray &hash)
{
QList<rational> times;
QMap<rational, QByteArray>::iterator iterator = time_hash_map_.begin();
while (iterator != time_hash_map_.end()) {
if (iterator.value() == hash) {
times.append(iterator.key());
iterator = time_hash_map_.erase(iterator);
} else {
iterator++;
}
}
return times;
}
const QMap<rational, QByteArray> &VideoRenderFrameCache::time_hash_map() const
{
return time_hash_map_;
+9 -1
View File
@@ -43,7 +43,15 @@ public:
void RemoveHashFromCurrentlyCaching(const QByteArray& hash);
QList<rational> FramesWithHash(const QByteArray& hash);
/**
* @brief Returns a list of frames that use a particular hash
*/
QList<rational> FramesWithHash(const QByteArray& hash) const;
/**
* @brief Same as FramesWithHash() but also removes these frames from the map
*/
QList<rational> TakeFramesWithHash(const QByteArray& hash);
const QMap<rational, QByteArray>& time_hash_map() const;