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; }
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);
+ void dec_read_data_count (framecnt_t);
int read_peaks (PeakData *peaks, framecnt_t npeaks,
framepos_t start, framecnt_t cnt, double samples_per_visual_peak) const;
static bool _build_peakfiles;
framecnt_t _length;
- bool _peaks_built;
- mutable Glib::Mutex _peaks_ready_lock;
std::string peakpath;
std::string _captured_for;
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();
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:
+ 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;