diff options
Diffstat (limited to 'libs/ardour/ardour/audiosource.h')
-rw-r--r-- | libs/ardour/ardour/audiosource.h | 80 |
1 files changed, 26 insertions, 54 deletions
diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index 0734a66319..812c30e8c2 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: audio_source.h 486 2006-04-27 09:04:24Z pauld $ */ #ifndef __ardour_audio_source_h__ @@ -23,7 +22,6 @@ #include <list> #include <vector> -#include <string> #include <boost/shared_ptr.hpp> #include <boost/enable_shared_from_this.hpp> @@ -31,6 +29,7 @@ #include <time.h> #include <glibmm/thread.h> +#include <glibmm/ustring.h> #include <sigc++/signal.h> @@ -41,7 +40,7 @@ using std::list; using std::vector; -using std::string; +using Glib::ustring; namespace ARDOUR { @@ -50,7 +49,7 @@ const nframes_t frames_per_peak = 256; class AudioSource : public Source, public boost::enable_shared_from_this<ARDOUR::AudioSource> { public: - AudioSource (Session&, string name); + AudioSource (Session&, ustring name); AudioSource (Session&, const XMLNode&); virtual ~AudioSource (); @@ -64,8 +63,10 @@ const nframes_t frames_per_peak = 256; virtual void mark_for_remove() = 0; virtual void mark_streaming_write_completed () {} - void set_captured_for (string str) { _captured_for = str; } - string captured_for() const { return _captured_for; } + virtual bool can_truncate_peaks() const { return true; } + + void set_captured_for (ustring str) { _captured_for = str; } + ustring captured_for() const { return _captured_for; } uint32_t read_data_count() const { return _read_data_count; } uint32_t write_data_count() const { return _write_data_count; } @@ -80,10 +81,7 @@ const nframes_t frames_per_peak = 256; XMLNode& get_state (); int set_state (const XMLNode&); - static int start_peak_thread (); - static void stop_peak_thread (); - - int rename_peakfile (std::string newpath); + int rename_peakfile (ustring newpath); void touch_peakfile (); static void set_build_missing_peakfiles (bool yn) { @@ -96,67 +94,41 @@ const nframes_t frames_per_peak = 256; virtual int setup_peakfile () { return 0; } + int prepare_for_peakfile_writes (); + void done_with_peakfile_writes (); + protected: static bool _build_missing_peakfiles; static bool _build_peakfiles; bool _peaks_built; mutable Glib::Mutex _lock; - bool next_peak_clear_should_notify; - string peakpath; - string _captured_for; + ustring peakpath; + ustring _captured_for; mutable uint32_t _read_data_count; // modified in read() mutable uint32_t _write_data_count; // modified in write() - int initialize_peakfile (bool newfile, string path); - void build_peaks_from_scratch (); - - int do_build_peak (nframes_t, nframes_t); + int initialize_peakfile (bool newfile, ustring path); + int build_peaks_from_scratch (); + int compute_and_write_peaks (Sample* buf, nframes_t first_frame, nframes_t cnt, bool force); void truncate_peakfile(); - mutable off_t _peak_byte_max; // modified in do_build_peaks() + mutable off_t _peak_byte_max; // modified in compute_and_write_peak() virtual nframes_t read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const = 0; virtual nframes_t write_unlocked (Sample *dst, nframes_t cnt) = 0; - virtual string peak_path(string audio_path) = 0; - virtual string old_peak_path(string audio_path) = 0; + virtual ustring peak_path(ustring audio_path) = 0; + virtual ustring old_peak_path(ustring audio_path) = 0; - static pthread_t peak_thread; - static bool have_peak_thread; - static void* peak_thread_work(void*); - - static int peak_request_pipe[2]; - - struct PeakRequest { - enum Type { - Build, - Quit - }; - }; - - static vector<boost::shared_ptr<AudioSource> > pending_peak_sources; - static Glib::Mutex* pending_peak_sources_lock; - - static void queue_for_peaks (boost::shared_ptr<AudioSource>, bool notify=true); - static void clear_queue_for_peaks (); - - struct PeakBuildRecord { - nframes_t frame; - nframes_t cnt; - - PeakBuildRecord (nframes_t f, nframes_t c) - : frame (f), cnt (c) {} - PeakBuildRecord (const PeakBuildRecord& other) { - frame = other.frame; - cnt = other.cnt; - } - }; - - list<AudioSource::PeakBuildRecord *> pending_peak_builds; - private: - bool file_changed (string path); + int peakfile; + nframes_t peak_leftover_cnt; + nframes_t peak_leftover_size; + Sample* peak_leftovers; + nframes_t peak_leftover_frame; + + bool file_changed (ustring path); }; } |