summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2015-12-24 17:50:38 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2016-01-20 13:32:03 +0100
commit189cce0e23dddaaaf4ab6e1cac387c9c954f22fa (patch)
treeaa8bfca29d27e3a77807fe56213bb8f133f51994 /src
parent84e2cacec69c73712100de31585da3fe96c94704 (diff)
Add experimental 'silencing' of all active events on frame size change.
Diffstat (limited to 'src')
-rw-r--r--src/cachemanager.cc29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/cachemanager.cc b/src/cachemanager.cc
index b2e10ac..d394d8c 100644
--- a/src/cachemanager.cc
+++ b/src/cachemanager.cc
@@ -249,6 +249,9 @@ void CacheManager::close(cacheid_t id)
void CacheManager::setFrameSize(size_t framesize)
{
+ MutexAutolock le(m_events);
+ MutexAutolock li(m_ids);
+
if(framesize > this->framesize)
{
delete[] nodata;
@@ -256,7 +259,31 @@ void CacheManager::setFrameSize(size_t framesize)
for(size_t i = 0; i < framesize; ++i)
{
- nodata[i] = 0;
+ nodata[i] = 0.0f;
+ }
+ }
+
+ // Run through all active cache_ts and disable them.
+ for(auto it = id2cache.begin(); it != id2cache.end(); ++it)
+ {
+ cacheid_t cacheid = it - id2cache.begin();
+
+ // Look up id in available ids:
+ bool found = false;
+ for(auto i = availableids.begin(); i != availableids.end(); ++i)
+ {
+ if(cacheid == *i)
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ // Force use of nodata in all of the rest of the next() calls.
+ it->localpos = CHUNKSIZE(framesize);
+ it->ready = false;
}
}