#include <time.h>
#include <glibmm/thread.h>
-#include <glibmm/ustring.h>
#include <boost/function.hpp>
#include "ardour/source.h"
#include "ardour/ardour.h"
#include "ardour/readable.h"
-#include "ardour/file_manager.h"
+#include "pbd/file_manager.h"
#include "pbd/stateful.h"
#include "pbd/xml++.h"
public boost::enable_shared_from_this<ARDOUR::AudioSource>
{
public:
- AudioSource (Session&, Glib::ustring name);
+ AudioSource (Session&, std::string name);
AudioSource (Session&, const XMLNode&);
virtual ~AudioSource ();
framecnt_t readable_length() const { return _length; }
uint32_t n_channels() const { return 1; }
+ bool empty() const;
framecnt_t length (framepos_t pos) const;
void update_length (framepos_t pos, framecnt_t cnt);
virtual float sample_rate () const = 0;
- virtual void mark_streaming_write_completed () {}
+ virtual void mark_streaming_write_completed ();
virtual bool can_truncate_peaks() const { return true; }
- void set_captured_for (Glib::ustring str) { _captured_for = str; }
- Glib::ustring captured_for() const { return _captured_for; }
+ void set_captured_for (std::string str) { _captured_for = str; }
+ std::string 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; }
+ void dec_read_data_count(nframes_t);
int read_peaks (PeakData *peaks, framecnt_t npeaks,
framepos_t start, framecnt_t cnt, double samples_per_visual_peak) const;
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
- int rename_peakfile (Glib::ustring newpath);
+ int rename_peakfile (std::string newpath);
void touch_peakfile ();
static void set_build_missing_peakfiles (bool yn) {
static bool _build_peakfiles;
framecnt_t _length;
- bool _peaks_built;
- mutable Glib::Mutex _peaks_ready_lock;
- Glib::ustring peakpath;
- Glib::ustring _captured_for;
+ std::string peakpath;
+ std::string _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, Glib::ustring path);
+ int initialize_peakfile (bool newfile, std::string path);
int build_peaks_from_scratch ();
- int compute_and_write_peaks (Sample* buf, framepos_t first_frame, framecnt_t cnt,
+ int compute_and_write_peaks (Sample* buf, framecnt_t first_frame, framecnt_t cnt,
bool force, bool intermediate_peaks_ready_signal);
void truncate_peakfile();
virtual framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const = 0;
virtual framecnt_t write_unlocked (Sample *dst, framecnt_t cnt) = 0;
- virtual Glib::ustring peak_path(Glib::ustring audio_path) = 0;
- virtual Glib::ustring find_broken_peakfile (Glib::ustring missing_peak_path,
- Glib::ustring audio_path) = 0;
+ virtual std::string peak_path(std::string audio_path) = 0;
+ virtual std::string find_broken_peakfile (std::string missing_peak_path,
+ std::string audio_path) = 0;
virtual int read_peaks_with_fpp (PeakData *peaks,
framecnt_t npeaks, framepos_t start, framecnt_t cnt,
double samples_per_visual_peak, framecnt_t fpp) const;
- int compute_and_write_peaks (Sample* buf, framepos_t first_frame, framecnt_t cnt,
+ int compute_and_write_peaks (Sample* buf, framecnt_t first_frame, framecnt_t cnt,
bool force, bool intermediate_peaks_ready_signal,
framecnt_t frames_per_peak);
private:
- FdFileDescriptor* _peakfile_descriptor;
+ bool _peaks_built;
+ /** This mutex is used to protect both the _peaks_built
+ * variable and also the emission (and handling) of the
+ * PeaksReady signal. Holding the lock when emitting
+ * PeaksReady means that _peaks_built cannot be changed
+ * during the handling of the signal.
+ */
+ mutable Glib::Mutex _peaks_ready_lock;
+
+ PBD::FdFileDescriptor* _peakfile_descriptor;
int _peakfile_fd;
framecnt_t peak_leftover_cnt;
framecnt_t peak_leftover_size;