improve AU Latency PropertyChange Events
[ardour.git] / libs / ardour / ardour / audio_playlist_source.h
index d6047de1fc18e7353a0994f7e214edbed6b00ea5..9c815fb238cdb1ab5618647ca636d29771c3c024 100644 (file)
 
 #include "ardour/ardour.h"
 #include "ardour/audiosource.h"
+#include "ardour/playlist_source.h"
 
 namespace ARDOUR {
 
 class AudioPlaylist;
 
-class AudioPlaylistSource : public AudioSource {
-  public:
-    virtual ~AudioPlaylistSource ();
-    
-    bool       empty() const;
-    std::string peak_path (std::string audio_path);
-    uint32_t   n_channels() const;
-    bool clamped_at_unity () const { return false; }
-
-    framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
-    framecnt_t write_unlocked (Sample *src, framecnt_t cnt);
-    
-    float sample_rate () const;
-    int setup_peakfile ();
-    
-    XMLNode& get_state ();
-    int set_state (const XMLNode&, int version);
-    
-    bool can_truncate_peaks() const { return false; }
-    bool can_be_analysed() const    { return _length > 0; }
-    
-  protected:
-    friend class SourceFactory;
-
-    AudioPlaylistSource (Session&, const std::string& name, boost::shared_ptr<AudioPlaylist>, uint32_t chn,
-                         frameoffset_t begin, framecnt_t len, bool copy, Source::Flag flags);
-    AudioPlaylistSource (Session&, const XMLNode&);
-    
-  private:
-    boost::shared_ptr<AudioPlaylist> _playlist;
-    frameoffset_t                    _playlist_offset;
-    framecnt_t                       _playlist_length;
-    uint32_t                         _playlist_channel;
-    std::string                      _peak_path;
+class LIBARDOUR_API AudioPlaylistSource : public PlaylistSource, public AudioSource  {
+public:
+       virtual ~AudioPlaylistSource ();
+
+       bool empty() const;
+       std::string construct_peak_filepath (const std::string& audio_path, const bool in_session = false, const bool old_peak_name = false) const;
+       uint32_t   n_channels() const;
+       bool clamped_at_unity () const { return false; }
+
+       framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
+       framecnt_t write_unlocked (Sample *src, framecnt_t cnt);
+
+       float sample_rate () const;
+       int setup_peakfile ();
+
+       XMLNode& get_state ();
+       int set_state (const XMLNode&, int version);
+
+       bool can_truncate_peaks() const { return false; }
+       bool can_be_analysed() const    { return _length > 0; }
+
+protected:
+       friend class SourceFactory;
+
+       AudioPlaylistSource (Session&, const PBD::ID& orig, const std::string& name, boost::shared_ptr<AudioPlaylist>, uint32_t chn,
+                            frameoffset_t begin, framecnt_t len, Source::Flag flags);
+       AudioPlaylistSource (Session&, const XMLNode&);
+
+
+private:
+       uint32_t    _playlist_channel;
+       std::string _peak_path;
+
+       int set_state (const XMLNode&, int version, bool with_descendants);
 };
-        
+
 } /* namespace */
 
 #endif /* __ardour_audio_playlist_source_h__ */