[Sv1-commits] SF.net SVN: sv1: [1077] sonic-visualiser/trunk
Brought to you by:
cannam
From: <ca...@us...> - 2008-05-19 17:23:17
|
Revision: 1077 http://sv1.svn.sourceforge.net/sv1/?rev=1077&view=rev Author: cannam Date: 2008-05-19 10:23:11 -0700 (Mon, 19 May 2008) Log Message: ----------- * Permit holding Shift while dragging an instant or other edited thing, to override the initial drag resistance (for #1928943 sticky time instants) * better handling of updates during progressive decode load * ready() signal from model (used by vect) Modified Paths: -------------- sonic-visualiser/trunk/audioio/AudioPortAudioTarget.h sonic-visualiser/trunk/base/StorageAdviser.cpp sonic-visualiser/trunk/base/StorageAdviser.h sonic-visualiser/trunk/data/fft/FFTDataServer.cpp sonic-visualiser/trunk/data/fileio/MatrixFile.cpp sonic-visualiser/trunk/data/model/AlignmentModel.cpp sonic-visualiser/trunk/data/model/Model.h sonic-visualiser/trunk/data/model/WaveFileModel.cpp sonic-visualiser/trunk/layer/TimeInstantLayer.cpp sonic-visualiser/trunk/sv.prf sonic-visualiser/trunk/view/Pane.cpp sonic-visualiser/trunk/view/View.cpp Modified: sonic-visualiser/trunk/audioio/AudioPortAudioTarget.h =================================================================== --- sonic-visualiser/trunk/audioio/AudioPortAudioTarget.h 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/audioio/AudioPortAudioTarget.h 2008-05-19 17:23:11 UTC (rev 1077) @@ -21,7 +21,6 @@ // This code requires PortAudio v19 -- it won't work with v18. #include <portaudio.h> -#include <vector> #include <QObject> Modified: sonic-visualiser/trunk/base/StorageAdviser.cpp =================================================================== --- sonic-visualiser/trunk/base/StorageAdviser.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/base/StorageAdviser.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -28,6 +28,9 @@ long StorageAdviser::m_memoryPlanned = 0; StorageAdviser::Recommendation +StorageAdviser::m_baseRecommendation = StorageAdviser::NoRecommendation; + +StorageAdviser::Recommendation StorageAdviser::recommend(Criteria criteria, int minimumSize, int maximumSize) @@ -38,6 +41,10 @@ << ", maximumSize " << maximumSize << std::endl; #endif + if (m_baseRecommendation != NoRecommendation) { + return m_baseRecommendation; // for now + } + QString path = TempDirectory::getInstance()->getPath(); int discFree = GetDiscSpaceMBAvailable(path.toLocal8Bit()); int memoryFree, memoryTotal; @@ -194,3 +201,9 @@ // << m_discPlanned << std::endl; } +void +StorageAdviser::setFixedRecommendation(Recommendation recommendation) +{ + m_baseRecommendation = recommendation; +} + Modified: sonic-visualiser/trunk/base/StorageAdviser.h =================================================================== --- sonic-visualiser/trunk/base/StorageAdviser.h 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/base/StorageAdviser.h 2008-05-19 17:23:11 UTC (rev 1077) @@ -78,9 +78,17 @@ */ static void notifyDoneAllocation(AllocationArea area, int size); + /** + * Force all subsequent recommendations to use the (perhaps + * partial) specification given here. If NoRecommendation given + * here, this will reset to the default free behaviour. + */ + static void setFixedRecommendation(Recommendation recommendation); + private: static long m_discPlanned; static long m_memoryPlanned; + static Recommendation m_baseRecommendation; }; #endif Modified: sonic-visualiser/trunk/data/fft/FFTDataServer.cpp =================================================================== --- sonic-visualiser/trunk/data/fft/FFTDataServer.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/data/fft/FFTDataServer.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -666,6 +666,8 @@ delete m_fillThread; m_fillThread = 0; deleteProcessingData(); + } else if (!m_fillThread->isRunning()) { + m_fillThread->start(); } else { m_condition.wakeAll(); } @@ -1130,6 +1132,7 @@ std::cerr << "WARNING: FFTDataServer::fillColumn(" << x << "): " << "x > width (" << x << " > " << m_width << ")" << std::endl; +// abort(); //!!! return; } @@ -1315,10 +1318,17 @@ void FFTDataServer::FillThread::run() { +#ifdef DEBUG_FFT_SERVER_FILL + std::cerr << "FFTDataServer::FillThread::run()" << std::endl; +#endif + m_extent = 0; m_completion = 0; while (!m_server.m_model->isReady() && !m_server.m_exiting) { +#ifdef DEBUG_FFT_SERVER_FILL + std::cerr << "FFTDataServer::FillThread::run(): waiting for model " << m_server.m_model << " to be ready" << std::endl; +#endif sleep(1); } if (m_server.m_exiting) return; Modified: sonic-visualiser/trunk/data/fileio/MatrixFile.cpp =================================================================== --- sonic-visualiser/trunk/data/fileio/MatrixFile.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/data/fileio/MatrixFile.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -272,7 +272,8 @@ m_defaultCacheWidth = w; } - static size_t maxCacheMB = 16; +//!!! static size_t maxCacheMB = 16; + static size_t maxCacheMB = 4; if (2 * m_defaultCacheWidth * h * m_cellSize > maxCacheMB * 1024 * 1024) { //!!! m_defaultCacheWidth = (maxCacheMB * 1024 * 1024) / (2 * h * m_cellSize); if (m_defaultCacheWidth < 16) m_defaultCacheWidth = 16; @@ -425,7 +426,8 @@ assert(m_mode == ReadWrite); #ifdef DEBUG_MATRIX_FILE_READ_SET - std::cerr << "MatrixFile::setColumnAt(" << x << ")" << std::endl; +// std::cerr << "MatrixFile::setColumnAt(" << x << ")" << std::endl; + std::cerr << "."; #endif ssize_t w = 0; @@ -517,6 +519,8 @@ std::cerr << "MatrixFile(" << this << ":" << m_fileName.toStdString() << ")::resume(): fd is " << m_fd << std::endl; } +static int alloc = 0; + void MatrixFile::primeCache(size_t x, bool goingLeft) { @@ -586,9 +590,14 @@ #endif if (m_cache.data) { - if (m_spareData) free(m_spareData); + if (m_spareData) { + std::cerr << this << ": Freeing spare data" << std::endl; + free(m_spareData); + } + std::cerr << this << ": Moving old cache data to spare" << std::endl; m_spareData = m_cache.data; } + std::cerr << this << ": Moving request data to cache" << std::endl; m_cache.data = request.data; m_readThread->done(m_requestToken); @@ -611,7 +620,11 @@ std::cerr << "cancelled " << m_requestToken << std::endl; #endif - if (m_spareData) free(m_spareData); + if (m_spareData) { + std::cerr << this << ": Freeing spare data" << std::endl; + free(m_spareData); + } + std::cerr << this << ": Moving request data to spare" << std::endl; m_spareData = request.data; m_readThread->done(m_requestToken); @@ -627,6 +640,9 @@ request.mutex = &m_fdMutex; request.start = m_headerSize + rx * m_height * m_cellSize; request.size = rw * m_height * m_cellSize; + + std::cerr << this << ": Moving spare data to request, and resizing to " << rw * m_height * m_cellSize << std::endl; + request.data = (char *)realloc(m_spareData, rw * m_height * m_cellSize); MUNLOCK(request.data, rw * m_height * m_cellSize); m_spareData = 0; Modified: sonic-visualiser/trunk/data/model/AlignmentModel.cpp =================================================================== --- sonic-visualiser/trunk/data/model/AlignmentModel.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/data/model/AlignmentModel.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -108,7 +108,7 @@ bool AlignmentModel::isReady(int *completion) const { - if (!m_pathBegun) { + if (!m_pathBegun && m_rawPath) { if (completion) *completion = 0; return false; } Modified: sonic-visualiser/trunk/data/model/Model.h =================================================================== --- sonic-visualiser/trunk/data/model/Model.h 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/data/model/Model.h 2008-05-19 17:23:11 UTC (rev 1077) @@ -227,6 +227,12 @@ void completionChanged(); /** + * Emitted when internal processing is complete (i.e. when + * isReady() would return true, with completion at 100). + */ + void ready(); + + /** * Emitted when the completion percentage changes for the * calculation of this model's alignment model. */ Modified: sonic-visualiser/trunk/data/model/WaveFileModel.cpp =================================================================== --- sonic-visualiser/trunk/data/model/WaveFileModel.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/data/model/WaveFileModel.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -632,6 +632,7 @@ emit modelChanged(m_lastFillExtent, getEndFrame()); } emit modelChanged(); + emit ready(); #ifdef DEBUG_WAVE_FILE_MODEL cerr << "WaveFileModel::cacheFilled" << endl; #endif @@ -646,7 +647,7 @@ sqrt(2) + 0.01)); size_t frame = 0; - size_t readBlockSize = 16384; + int readBlockSize = 16384; SampleBlock block; if (!m_model.isOK()) return; @@ -666,6 +667,9 @@ float *means = new float[2 * channels]; size_t count[2]; count[0] = count[1] = 0; + for (int i = 0; i < 2 * channels; ++i) { + means[i] = 0.f; + } bool first = true; @@ -686,18 +690,18 @@ // std::cerr << "block is " << block.size() << std::endl; - for (size_t i = 0; i < readBlockSize; ++i) { + for (int i = 0; i < readBlockSize; ++i) { if (channels * i + channels > block.size()) break; - for (size_t ch = 0; ch < size_t(channels); ++ch) { + for (int ch = 0; ch < channels; ++ch) { - size_t index = channels * i + ch; + int index = channels * i + ch; float sample = block[index]; - for (size_t ct = 0; ct < 2; ++ct) { // cache type + for (int ct = 0; ct < 2; ++ct) { // cache type - size_t rangeIndex = ch * 2 + ct; + int rangeIndex = ch * 2 + ct; if (sample > range[rangeIndex].max() || count[ct] == 0) { range[rangeIndex].setMax(sample); @@ -722,6 +726,7 @@ range[rangeIndex].setAbsmean(means[rangeIndex]); m_model.m_cache[ct].push_back(range[rangeIndex]); range[rangeIndex] = Range(); + means[rangeIndex] = 0.f; } count[ct] = 0; @@ -760,6 +765,7 @@ range[rangeIndex].setAbsmean(means[rangeIndex]); m_model.m_cache[ct].push_back(range[rangeIndex]); range[rangeIndex] = Range(); + means[rangeIndex] = 0.f; } count[ct] = 0; Modified: sonic-visualiser/trunk/layer/TimeInstantLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TimeInstantLayer.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/layer/TimeInstantLayer.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -35,6 +35,8 @@ #include <iostream> #include <cmath> +#define DEBUG_TIME_INSTANT_LAYER 1 + TimeInstantLayer::TimeInstantLayer() : SingleColourLayer(), m_model(0), @@ -57,7 +59,9 @@ connectSignals(m_model); +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::setModel(" << model << ")" << std::endl; +#endif emit modelReplaced(); } @@ -446,7 +450,9 @@ void TimeInstantLayer::drawStart(View *v, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::drawStart(" << e->x() << ")" << std::endl; +#endif if (!m_model) return; @@ -467,7 +473,9 @@ void TimeInstantLayer::drawDrag(View *v, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::drawDrag(" << e->x() << ")" << std::endl; +#endif if (!m_model || !m_editing) return; @@ -482,7 +490,9 @@ void TimeInstantLayer::drawEnd(View *, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::drawEnd(" << e->x() << ")" << std::endl; +#endif if (!m_model || !m_editing) return; QString newName = tr("Add Point at %1 s") .arg(RealTime::frame2RealTime(m_editingPoint.frame, @@ -541,7 +551,9 @@ void TimeInstantLayer::editStart(View *v, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::editStart(" << e->x() << ")" << std::endl; +#endif if (!m_model) return; @@ -561,7 +573,9 @@ void TimeInstantLayer::editDrag(View *v, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::editDrag(" << e->x() << ")" << std::endl; +#endif if (!m_model || !m_editing) return; @@ -582,7 +596,9 @@ void TimeInstantLayer::editEnd(View *, QMouseEvent *e) { +#ifdef DEBUG_TIME_INSTANT_LAYER std::cerr << "TimeInstantLayer::editEnd(" << e->x() << ")" << std::endl; +#endif if (!m_model || !m_editing) return; if (m_editingCommand) { QString newName = tr("Move Point to %1 s") Modified: sonic-visualiser/trunk/sv.prf =================================================================== --- sonic-visualiser/trunk/sv.prf 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/sv.prf 2008-05-19 17:23:11 UTC (rev 1077) @@ -12,8 +12,8 @@ # SV benefits from SSE, but not much from SSE2 (it doesn't do # very much in double precision). # -linux-g++:QMAKE_CXXFLAGS_RELEASE += -DNDEBUG -DNO_TIMING -O3 -#linux-g++:QMAKE_CXXFLAGS_RELEASE += -DNDEBUG -DNO_TIMING -O3 -march=pentium3 -msse -mmmx +#linux-g++:QMAKE_CXXFLAGS_RELEASE += -DNDEBUG -DNO_TIMING -O3 +linux-g++:QMAKE_CXXFLAGS_RELEASE += -DNDEBUG -DNO_TIMING -O3 -march=pentium3 -msse -mmmx -ftree-vectorize # QMAKE_CXXFLAGS_RELEASE += -O3 -march=pentium4 -mfpmath=sse -msse -msse2 -ffast-math -fomit-frame-pointer # QMAKE_CXXFLAGS_RELEASE += -O3 -march=athlon-mp -mfpmath=sse -fomit-frame-pointer Modified: sonic-visualiser/trunk/view/Pane.cpp =================================================================== --- sonic-visualiser/trunk/view/Pane.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/view/Pane.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -1557,14 +1557,25 @@ if (!m_editing) { + bool resist = true; + + if ((e->modifiers() & Qt::ShiftModifier)) { + m_shiftPressed = true; + // ... but don't set it false if shift has been + // released -- we want the state when we started + // dragging to be used most of the time + } + + if (m_shiftPressed) resist = false; + DragMode newDragMode = updateDragMode (m_dragMode, m_clickPos, e->pos(), - true, // can move horiz - true, // can move vert - true, // resist horiz - true); // resist vert + true, // can move horiz + true, // can move vert + resist, // resist horiz + resist); // resist vert if (newDragMode != UnresolvedDrag) { Modified: sonic-visualiser/trunk/view/View.cpp =================================================================== --- sonic-visualiser/trunk/view/View.cpp 2008-05-16 13:27:07 UTC (rev 1076) +++ sonic-visualiser/trunk/view/View.cpp 2008-05-19 17:23:11 UTC (rev 1077) @@ -1385,20 +1385,25 @@ int completion = i->first->getCompletion(this); QString text = i->first->getPropertyContainerName(); + Model *model = i->first->getModel(); + RangeSummarisableTimeValueModel *wfm = + dynamic_cast<RangeSummarisableTimeValueModel *>(model); + if (completion >= 100) { //!!! - Model *model = i->first->getModel(); - RangeSummarisableTimeValueModel *wfm = - dynamic_cast<RangeSummarisableTimeValueModel *>(model); if (wfm || (wfm = dynamic_cast<RangeSummarisableTimeValueModel *> (model->getSourceModel()))) { completion = wfm->getAlignmentCompletion(); + std::cerr << "View::checkProgress: Alignment completion = " << completion << std::endl; if (completion < 100) { text = tr("Alignment"); } } + + } else if (wfm) { + update(); // ensure duration &c gets updated } if (completion >= 100) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |