X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fsource.h;h=bf92e5a6e47bc2855e7d71137438068b957699a6;hb=2b9dc7b380bb4e40171067f42b4010970869a57d;hp=dd86ebe52190de2eb12a39f44e057168676945dd;hpb=0f71728a925eb8f16c14c74f0dae9fdd53406a20;p=ardour.git diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index dd86ebe521..bf92e5a6e4 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 Paul Davis + Copyright (C) 2000 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,20 +24,17 @@ #include #include -#include -#include +#include "pbd/statefuldestructible.h" -#include -#include -#include -#include +#include "ardour/ardour.h" +#include "ardour/session_object.h" +#include "ardour/data_type.h" namespace ARDOUR { class Session; -class Playlist; -class Source : public SessionObject, public boost::noncopyable +class Source : public SessionObject { public: enum Flag { @@ -53,64 +50,55 @@ class Source : public SessionObject, public boost::noncopyable Source (Session&, DataType type, const std::string& name, Flag flags=Flag(0)); Source (Session&, const XMLNode&); - + virtual ~Source (); - + DataType type() { return _type; } time_t timestamp() const { return _timestamp; } void stamp (time_t when) { _timestamp = when; } - - nframes_t length() const { return _length; } - + + virtual framecnt_t length (framepos_t pos) const = 0; + virtual void update_length (framepos_t pos, framecnt_t cnt) = 0; + virtual const Glib::ustring& path() const = 0; - virtual nframes_t natural_position() const { return 0; } + virtual framepos_t natural_position() const { return 0; } void mark_for_remove(); - + virtual void mark_streaming_write_started () {} virtual void mark_streaming_write_completed () = 0; virtual void session_saved() {} - + XMLNode& get_state (); - int set_state (const XMLNode&); - + int set_state (const XMLNode&, int version); + bool destructive() const { return (_flags & Destructive); } - bool writable () const { return _flags & Writable; } - virtual bool set_destructive (bool yn) { return false; } + bool writable () const { return (_flags & Writable); } + virtual bool set_destructive (bool /*yn*/) { return false; } virtual bool length_mutable() const { return false; } - - void use () { _in_use++; } - void disuse () { if (_in_use) { _in_use--; } } - - void add_playlist (boost::shared_ptr); - void remove_playlist (boost::weak_ptr); - - uint32_t used() const; - static sigc::signal SourceCreated; - sigc::signal > Switched; + static PBD::Signal1 SourceCreated; + PBD::Signal1 > Switched; bool has_been_analysed() const; - virtual bool can_be_analysed() const { return false; } + virtual bool can_be_analysed() const { return false; } virtual void set_been_analysed (bool yn); virtual bool check_for_analysis_data_on_disk(); - sigc::signal AnalysisChanged; - + PBD::Signal0 AnalysisChanged; + AnalysisFeatureList transients; std::string get_transients_path() const; int load_transients (const std::string&); - - void update_length (nframes_t pos, nframes_t cnt); - - int64_t timeline_position() const { return _timeline_position; } - virtual void set_timeline_position (int64_t pos); - + + sframes_t timeline_position() const { return _timeline_position; } + virtual void set_timeline_position (sframes_t pos); + void set_allow_remove_if_empty (bool yn); - + Glib::Mutex& mutex() { return _lock; } Flag flags() const { return _flags; } @@ -118,18 +106,14 @@ class Source : public SessionObject, public boost::noncopyable DataType _type; Flag _flags; time_t _timestamp; - nframes_t _length; - int64_t _timeline_position; + sframes_t _timeline_position; bool _analysed; mutable Glib::Mutex _lock; mutable Glib::Mutex _analysis_lock; Glib::Mutex _playlist_lock; - - typedef std::map, uint32_t > PlaylistMap; - PlaylistMap _playlists; private: - uint32_t _in_use; + void fix_writable_flags (); }; }