vector <uint32_t> deletion_list;
vector <CacheEntry> caches;
+ /* The source may have disappeared in the case of rec regions.*/
+ if (_region->n_channels() == 0) {
+ std::map <boost::shared_ptr<ARDOUR::AudioSource>, std::vector <CacheEntry> >::iterator i;
+ for (i = _image_cache.begin(); i != _image_cache.end(); ++i) {
+ if (i->first.unique()) {
+ for (uint32_t n = 0; n < (*i).second.size (); ++n) {
+ (*i).second[n].image.clear ();
+ }
+ (*i).second.clear ();
+ _image_cache.erase(i->first);
+ }
+ }
+ return;
+ }
+
if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
caches = _image_cache.find (_region->audio_source ())->second;
} else {
}
deletion_list.push_back (i);
-
}
while (deletion_list.size() > 0) {
} else {
_image_cache[_region->audio_source ()] = caches;
}
-
}
void
/* we can request data from anywhere in the Source, between 0 and its length
*/
- framepos_t sample_start = max ((framepos_t) _region->start(), (center - canvas_samples));
- framepos_t sample_end = min (center + canvas_samples, _region->start() + _region->length());
+ framepos_t sample_start = max ((framepos_t) 0, (center - canvas_samples));
+ framepos_t sample_end = min (center + canvas_samples, _region->source_length (0));
const int n_peaks = llrintf ((sample_end - sample_start)/ (double) _samples_per_pixel);