cache: behavior improvements

This commit is contained in:
itsmattkc
2022-06-06 09:39:09 -07:00
parent 25699ef05b
commit dfc401b63c
5 changed files with 29 additions and 17 deletions
+13 -13
View File
@@ -192,37 +192,37 @@ void ClipBlock::RequestInvalidatedFromConnected(const TimeRange &range)
TimeRange max_range = InputTimeAdjustment(kBufferIn, -1, TimeRange(0, length()));
if (type == Track::kVideo) {
// Handle thumbnails
RequestInvalidatedForCache(connected->thumbnail_cache(), max_range, range);
RequestInvalidatedForCache(connected->thumbnail_cache(), max_range, range, true);
// Handle video cache
if (IsAutocaching()) {
RequestInvalidatedForCache(connected->video_frame_cache(), max_range, range);
}
RequestInvalidatedForCache(connected->video_frame_cache(), max_range, range, IsAutocaching());
} else if (type == Track::kAudio) {
// Handle waveforms
RequestInvalidatedForCache(connected->waveform_cache(), max_range, range);
RequestInvalidatedForCache(connected->waveform_cache(), max_range, range, true);
// Handle audio cache
if (IsAutocaching()) {
RequestInvalidatedForCache(connected->audio_playback_cache(), max_range, range);
}
RequestInvalidatedForCache(connected->audio_playback_cache(), max_range, range, IsAutocaching());
}
}
}
}
void ClipBlock::RequestInvalidatedForCache(PlaybackCache *cache, const TimeRange &max_range, const TimeRange &range)
void ClipBlock::RequestInvalidatedForCache(PlaybackCache *cache, const TimeRange &max_range, const TimeRange &range, bool request)
{
if ((range.in() == RATIONAL_MIN && range.out() == RATIONAL_MAX) || !range.length().isNull()) {
// Request only this range
TimeRange r = range.Intersected(max_range);
cache->Invalidate(r);
emit cache->Request(r);
if (request) {
emit cache->Request(r);
}
} else {
// Request all ranges currently marked as invalid
TimeRangeList invalid = cache->GetInvalidatedRanges(max_range);
for (const TimeRange &r : invalid) {
emit cache->Request(r);
if (request) {
TimeRangeList invalid = cache->GetInvalidatedRanges(max_range);
for (const TimeRange &r : invalid) {
emit cache->Request(r);
}
}
}
}
+1 -1
View File
@@ -196,7 +196,7 @@ private:
void RequestInvalidatedFromConnected(const TimeRange &range = TimeRange());
void RequestInvalidatedForCache(PlaybackCache *cache, const TimeRange &max_range, const TimeRange &range);
void RequestInvalidatedForCache(PlaybackCache *cache, const TimeRange &max_range, const TimeRange &range, bool request);
QVector<Block*> block_links_;
+2
View File
@@ -57,6 +57,8 @@ Node::Node() :
thumbnail_cache_ = new ThumbnailCache(this);
audio_cache_ = new AudioPlaybackCache(this);
waveform_cache_ = new AudioWaveformCache(this);
waveform_cache_->SetSavingEnabled(false);
}
Node::~Node()