diff options
author | Robin Gareus <robin@gareus.org> | 2015-09-15 17:42:59 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-09-15 17:50:27 +0200 |
commit | 4b20e719a893e985ee2b21e6440daa0433c61305 (patch) | |
tree | bfb0d0632ac4d7dc1ad80a9ec54368038cca788f | |
parent | bed85f98d141f52fb9425f612f0c4f43d38a1319 (diff) |
prepare displaying peakfile queue-len
-rw-r--r-- | libs/ardour/ardour/source_factory.h | 1 | ||||
-rw-r--r-- | libs/ardour/source_factory.cc | 18 |
2 files changed, 18 insertions, 1 deletions
diff --git a/libs/ardour/ardour/source_factory.h b/libs/ardour/ardour/source_factory.h index 614fdce7b1..a41cd36258 100644 --- a/libs/ardour/ardour/source_factory.h +++ b/libs/ardour/ardour/source_factory.h @@ -68,6 +68,7 @@ class LIBARDOUR_API SourceFactory { static Glib::Threads::Mutex peak_building_lock; static std::list< boost::weak_ptr<AudioSource> > files_with_peaks; + static int peak_work_queue_length (); static int setup_peakfile (boost::shared_ptr<Source>, bool async); }; diff --git a/libs/ardour/source_factory.cc b/libs/ardour/source_factory.cc index 4b4a3cba33..7ef7ae12d1 100644 --- a/libs/ardour/source_factory.cc +++ b/libs/ardour/source_factory.cc @@ -32,6 +32,7 @@ #include "ardour/audio_playlist_source.h" #include "ardour/midi_playlist.h" #include "ardour/midi_playlist_source.h" +#include "ardour/source.h" #include "ardour/source_factory.h" #include "ardour/sndfilesource.h" #include "ardour/silentfilesource.h" @@ -54,6 +55,8 @@ Glib::Threads::Cond SourceFactory::PeaksToBuild; Glib::Threads::Mutex SourceFactory::peak_building_lock; std::list<boost::weak_ptr<AudioSource> > SourceFactory::files_with_peaks; +static int active_threads = 0; + static void peak_thread_work () { @@ -74,6 +77,7 @@ peak_thread_work () boost::shared_ptr<AudioSource> as (SourceFactory::files_with_peaks.front().lock()); SourceFactory::files_with_peaks.pop_front (); + ++active_threads; SourceFactory::peak_building_lock.unlock (); if (!as) { @@ -81,9 +85,20 @@ peak_thread_work () } as->setup_peakfile (); + SourceFactory::peak_building_lock.lock (); + --active_threads; + SourceFactory::peak_building_lock.unlock (); } } +int +SourceFactory::peak_work_queue_length () +{ + // ideally we'd loop over the queue and check for duplicates + // and existing valid peak-files.. + return SourceFactory::files_with_peaks.size () + active_threads; +} + void SourceFactory::init () { @@ -99,7 +114,8 @@ SourceFactory::setup_peakfile (boost::shared_ptr<Source> s, bool async) if (as) { - if (async) { + // immediately set 'peakfile-path' for empty and NoPeakFile sources + if (async && !as->empty() && !(as->flags() & Source::NoPeakFile)) { Glib::Threads::Mutex::Lock lm (peak_building_lock); files_with_peaks.push_back (boost::weak_ptr<AudioSource> (as)); |