Move Stateful class declared in pbd/stateful.h into the PBD namespace
[ardour.git] / libs / ardour / ardour / types.h
index 0a3a7b731c46c3c31fe48ad6e5fe753f14225ace..d5f10410db8ff2e933e84c7694ac44b8a7ee7bdd 100644 (file)
@@ -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$
 */
 
 #ifndef __ardour_types_h__
 #endif
 
 #include <istream>
+#include <vector>
+#include <boost/shared_ptr.hpp>
 
 #include <inttypes.h>
 #include <jack/types.h>
+#include <jack/midiport.h>
 #include <control_protocol/smpte.h>
 #include <pbd/id.h>
 
 typedef int intptr_t;
 #endif
 
+/* eventually, we'd like everything (including JACK) to 
+   move to this. for now, its a dedicated type.
+*/
+
+typedef int64_t                    nframes64_t;
+
 namespace ARDOUR {
 
        class Source;
+       class AudioSource;
 
        typedef jack_default_audio_sample_t Sample;
        typedef float                       pan_t;
        typedef float                       gain_t;
        typedef uint32_t                    layer_t;
        typedef uint64_t                    microseconds_t;
+       typedef uint32_t                    nframes_t;
+
+       typedef unsigned char Byte;
+
+       /** Identical to jack_midi_event_t, but with double timestamp
+        *
+        * time is either a frame time (from/to Jack) or a beat time (internal
+        * tempo time, used in MidiModel) depending on context.
+        */
+       struct MidiEvent {
+               MidiEvent(double t=0, size_t s=0, Byte* b=NULL)
+               : time(t), size(s), buffer(b)
+               {}
+               
+               double time;   /**< Sample index (or beat time) at which event is valid */
+               size_t size;   /**< Number of bytes of data in \a buffer */
+               Byte*  buffer; /**< Raw MIDI data */
+       };
 
        enum IOChange {
                NoChange = 0,
@@ -63,8 +90,8 @@ namespace ARDOUR {
                OverlapExternal   // overlap extends to (at least) begin+end
        };
 
-       OverlapType coverage (jack_nframes_t start_a, jack_nframes_t end_a,
-                             jack_nframes_t start_b, jack_nframes_t end_b);
+       OverlapType coverage (nframes_t start_a, nframes_t end_a,
+                             nframes_t start_b, nframes_t end_b);
 
        enum AutomationType {
                GainAutomation = 0x1,
@@ -81,11 +108,17 @@ namespace ARDOUR {
                Play = 0x4
        };
 
+       std::string auto_state_to_string (AutoState);
+       AutoState string_to_auto_state (std::string);
+
        enum AutoStyle {
                Absolute = 0x1,
                Trim = 0x2
        };
 
+       std::string auto_style_to_string (AutoStyle);
+       AutoStyle string_to_auto_style (std::string);
+
        enum AlignStyle {
                CaptureTime,
                ExistingMaterial
@@ -129,6 +162,18 @@ namespace ARDOUR {
            }
            
        };
+       enum SmpteFormat {
+               smpte_23976,
+               smpte_24,
+               smpte_24976,
+               smpte_25,
+               smpte_2997,
+               smpte_2997drop,
+               smpte_30,
+               smpte_30drop,
+               smpte_5994,
+               smpte_60
+       };
 
        struct AnyTime {
            enum Type {
@@ -144,19 +189,21 @@ namespace ARDOUR {
            BBT_Time       bbt;
 
            union { 
-               jack_nframes_t frames;
+               nframes_t frames;
                double         seconds;
            };
+
+           AnyTime() { type = Frames; frames = 0; }
        };
 
        struct AudioRange {
-           jack_nframes_t start;
-           jack_nframes_t end;
+           nframes_t start;
+           nframes_t end;
            uint32_t id;
            
-           AudioRange (jack_nframes_t s, jack_nframes_t e, uint32_t i) : start (s), end (e) , id (i) {}
+           AudioRange (nframes_t s, nframes_t e, uint32_t i) : start (s), end (e) , id (i) {}
            
-           jack_nframes_t length() { return end - start + 1; } 
+           nframes_t length() { return end - start + 1; } 
 
            bool operator== (const AudioRange& other) const {
                    return start == other.start && end == other.end && id == other.id;
@@ -166,7 +213,7 @@ namespace ARDOUR {
                    return start == other.start && end == other.end;
            }
 
-           OverlapType coverage (jack_nframes_t s, jack_nframes_t e) const {
+           OverlapType coverage (nframes_t s, nframes_t e) const {
                    return ARDOUR::coverage (start, end, s, e);
            }
        };
@@ -188,6 +235,28 @@ namespace ARDOUR {
            }
        };
 
+       /*
+           Slowest = 6.6dB/sec falloff at update rate of 40ms
+           Slow    = 6.8dB/sec falloff at update rate of 40ms
+       */
+
+       enum MeterFalloff {
+               MeterFalloffOff = 0,
+               MeterFalloffSlowest = 1,
+               MeterFalloffSlow = 2,
+               MeterFalloffMedium = 3,
+               MeterFalloffFast = 4,
+               MeterFalloffFaster = 5,
+               MeterFalloffFastest = 6
+       };
+
+       enum MeterHold {
+               MeterHoldOff = 0,
+               MeterHoldShort = 40,
+               MeterHoldMedium = 100,
+               MeterHoldLong = 200
+       };
+
        enum EditMode {
                Slide,
                Splice
@@ -209,10 +278,45 @@ namespace ARDOUR {
                PostFader
        };
 
+       enum MonitorModel {
+               HardwareMonitoring,
+               SoftwareMonitoring,
+               ExternalMonitoring,
+       };
+
+       enum DenormalModel {
+               DenormalNone,
+               DenormalFTZ,
+               DenormalDAZ,
+               DenormalFTZDAZ
+       };
+
+       enum RemoteModel {
+               UserOrdered,
+               MixerOrdered,
+               EditorOrdered,
+       };
+
        enum CrossfadeModel {
                FullCrossfade,
                ShortCrossfade
        };
+       
+       enum LayerModel {
+               LaterHigher,
+               MoveAddHigher,
+               AddHigher
+       };
+
+       enum SoloModel {
+               InverseMute,
+               SoloBus
+       };
+
+       enum AutoConnectOption {
+               AutoConnectPhysical = 0x1,
+               AutoConnectMaster = 0x2
+       };
 
        struct InterThreadInfo {
            volatile bool  done;
@@ -249,22 +353,53 @@ namespace ARDOUR {
                LADSPA,
                VST
        };
-       
+
+       enum SlaveSource {
+               None = 0,
+               MTC,
+               JACK
+       };
+
+       enum ShuttleBehaviour {
+               Sprung,
+               Wheel
+       };
+
+       enum ShuttleUnits {
+               Percentage,
+               Semitones
+       };
+
+       typedef std::vector<boost::shared_ptr<Source> > SourceList;
 } // namespace ARDOUR
 
 std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
-
-static inline jack_nframes_t
-session_frame_to_track_frame (jack_nframes_t session_frame, double speed)
+std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::SoloModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::CrossfadeModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::SlaveSource& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::ShuttleBehaviour& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::ShuttleUnits& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::SmpteFormat& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::DenormalModel& sf);
+
+using ARDOUR::nframes_t;
+
+static inline nframes_t
+session_frame_to_track_frame (nframes_t session_frame, double speed)
 {
-       return (jack_nframes_t)( (double)session_frame * speed );
+       return (nframes_t)( (double)session_frame * speed );
 }
 
-static inline jack_nframes_t
-track_frame_to_session_frame (jack_nframes_t track_frame, double speed)
+static inline nframes_t
+track_frame_to_session_frame (nframes_t track_frame, double speed)
 {
-       return (jack_nframes_t)( (double)track_frame / speed );
+       return (nframes_t)( (double)track_frame / speed );
 }