Mercurial > hg > svgui
changeset 48:97b0643bd799
* A bit more work on main window / document / commands stuff. This is still
pretty unstable.
* Enable CSV file reader also to read files with other separators (e.g. .lab
files with space separators)
* Show "(R)" on waveform display when resampling during playback
* Add ability to import additional audio files (can't process them yet)
* Fixes to spectrogram cache for multiple views
* Fix to avoid floating-point exception in sparse model when resolution not
set yet
author | Chris Cannam |
---|---|
date | Mon, 06 Mar 2006 17:20:25 +0000 |
parents | 2e2ad8510e52 |
children | 2818ec5d1985 |
files | layer/SpectrogramLayer.cpp widgets/Pane.cpp |
diffstat | 2 files changed, 32 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/layer/SpectrogramLayer.cpp Fri Mar 03 17:52:21 2006 +0000 +++ b/layer/SpectrogramLayer.cpp Mon Mar 06 17:20:25 2006 +0000 @@ -1270,14 +1270,24 @@ // std::cerr << "SpectrogramLayer::CacheFillThread::run in loop" << std::endl; -/*!!! Need a way of finding out whether this layer is dormant in - all the views that are currently visible... or not - - if (m_layer.m_dormancy[) { -*/ - if (0) { //!!! + bool haveUndormantViews = false; + + for (std::map<const void *, bool>::iterator i = + m_layer.m_dormancy.begin(); + i != m_layer.m_dormancy.end(); ++i) { + + if (!i->second) { + haveUndormantViews = true; + break; + } + } + + if (!haveUndormantViews) { + + if (m_layer.m_cacheInvalid && m_layer.m_cache) { + std::cerr << "All views dormant, freeing spectrogram cache" + << std::endl; - if (m_layer.m_cacheInvalid) { delete m_layer.m_cache; m_layer.m_cache = 0; } @@ -1288,8 +1298,11 @@ while (!m_layer.m_model->isReady()) { m_layer.m_condition.wait(&m_layer.m_mutex, 100); + if (m_layer.m_exiting) break; } + if (m_layer.m_exiting) break; + m_layer.m_cacheInvalid = false; m_fillExtent = 0; m_fillCompletion = 0; @@ -1699,10 +1712,15 @@ } if (isLayerDormant(v)) { - std::cerr << "SpectrogramLayer::paint(): Layer is dormant" << std::endl; - return; + std::cerr << "SpectrogramLayer::paint(): Layer is dormant, making it undormant again" << std::endl; } + // Need to do this even if !isLayerDormant, as that could mean v + // is not in the dormancy map at all -- we need it to be present + // and accountable for when determining whether we need the cache + // in the cache-fill thread above. + m_dormancy[v] = false; + #ifdef DEBUG_SPECTROGRAM_REPAINT std::cerr << "SpectrogramLayer::paint(): About to lock" << std::endl; #endif
--- a/widgets/Pane.cpp Fri Mar 03 17:52:21 2006 +0000 +++ b/widgets/Pane.cpp Mon Mar 06 17:20:25 2006 +0000 @@ -300,11 +300,13 @@ if (waveformModel) { - QString desc = tr("%1 / %2Hz") + QString desc = tr("%1 / %2Hz%3") .arg(RealTime::frame2RealTime(waveformModel->getEndFrame(), - waveformModel->getSampleRate()) + sampleRate) .toText(false).c_str()) - .arg(waveformModel->getSampleRate()); + .arg(sampleRate) + .arg((m_manager && + sampleRate != m_manager->getPlaybackSampleRate()) ? " (R)" : ""); paint.drawText(width() - paint.fontMetrics().width(desc) - 5, height() - paint.fontMetrics().height() +