Update to latest LV2 atom extension.
[ardour.git] / libs / ardour / ardour / types.h
index 78e21d5a9db08ef8d8ae5564168204e20a2c1cf5..c34869bc2b5ca407fa97665d5930d90b8511491e 100644 (file)
@@ -68,19 +68,22 @@ namespace ARDOUR {
        */
        typedef int64_t frameoffset_t;
 
-       /* Any count of audio frames. 
+       /* Any count of audio frames.
           Assumed to be positive but not enforced.
        */
        typedef int64_t framecnt_t;
 
        static const framepos_t max_framepos = INT64_MAX;
        static const framecnt_t max_framecnt = INT64_MAX;
+       static const layer_t    max_layer    = UINT32_MAX;
 
-       // a set of (time) intervals: first of pair is the offset within the region, second is the length of the interval
-       typedef std::list<std::pair<frameoffset_t,framecnt_t> > AudioIntervalResult;
+       // a set of (time) intervals: first of pair is the offset of the start within the region, second is the offset of the end
+       typedef std::list<std::pair<frameoffset_t, frameoffset_t> > AudioIntervalResult;
        // associate a set of intervals with regions (e.g. for silence detection)
        typedef std::map<boost::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap;
 
+       typedef std::list<boost::shared_ptr<Region> > RegionList;
+
        struct IOChange {
 
                enum Type {
@@ -105,41 +108,44 @@ namespace ARDOUR {
                OverlapEnd,       // overlap begins within and covers end
                OverlapExternal   // overlap extends to (at least) begin+end
        };
-        
-        ARDOUR::OverlapType coverage (framepos_t sa, framepos_t ea,
-                                      framepos_t sb, framepos_t eb);
-
-        /* policies for inserting/pasting material where overlaps
-           might be an issue.
-        */
-
-        enum InsertMergePolicy {
-                InsertMergeReject,  // no overlaps allowed
-                InsertMergeRelax,   // we just don't care about overlaps
-                InsertMergeReplace, // replace old with new
-                InsertMergeTruncateExisting, // shorten existing to avoid overlap
-                InsertMergeTruncateAddition, // shorten new to avoid overlap
-                InsertMergeExtend   // extend new (or old) to the range of old+new
-        };
-
-       /** See parameter.h
-        * XXX: I don't think/hope these hex values matter anymore.
+
+       ARDOUR::OverlapType coverage (framepos_t sa, framepos_t ea,
+                                     framepos_t sb, framepos_t eb);
+
+       /* policies for inserting/pasting material where overlaps
+          might be an issue.
+       */
+
+       enum InsertMergePolicy {
+               InsertMergeReject,  // no overlaps allowed
+               InsertMergeRelax,   // we just don't care about overlaps
+               InsertMergeReplace, // replace old with new
+               InsertMergeTruncateExisting, // shorten existing to avoid overlap
+               InsertMergeTruncateAddition, // shorten new to avoid overlap
+               InsertMergeExtend   // extend new (or old) to the range of old+new
+       };
+
+       /** See evoral/Parameter.hpp
         */
        enum AutomationType {
-               NullAutomation = 0x0,
-               GainAutomation = 0x1,
-               PanAutomation = 0x2,
-               PluginAutomation = 0x4,
-               SoloAutomation = 0x8,
-               MuteAutomation = 0x10,
-               MidiCCAutomation = 0x20,
-               MidiPgmChangeAutomation = 0x21,
-               MidiPitchBenderAutomation = 0x22,
-               MidiChannelPressureAutomation = 0x23,
-               MidiSystemExclusiveAutomation = 0x24,
-               FadeInAutomation = 0x40,
-               FadeOutAutomation = 0x80,
-               EnvelopeAutomation = 0x100
+               NullAutomation,
+               GainAutomation,
+               PanAzimuthAutomation,
+               PanElevationAutomation,
+               PanWidthAutomation,
+               PanFrontBackAutomation,
+               PanLFEAutomation,
+               PluginAutomation,
+               SoloAutomation,
+               MuteAutomation,
+               MidiCCAutomation,
+               MidiPgmChangeAutomation,
+               MidiPitchBenderAutomation,
+               MidiChannelPressureAutomation,
+               MidiSystemExclusiveAutomation,
+               FadeInAutomation,
+               FadeOutAutomation,
+               EnvelopeAutomation
        };
 
        enum AutoState {
@@ -165,10 +171,17 @@ namespace ARDOUR {
                ExistingMaterial
        };
 
+       enum AlignChoice {
+               UseCaptureTime,
+               UseExistingMaterial,
+               Automatic
+       };
+
        enum MeterPoint {
                MeterInput,
                MeterPreFader,
                MeterPostFader,
+               MeterOutput,
                MeterCustom
        };
 
@@ -227,10 +240,10 @@ namespace ARDOUR {
                };
 
                AnyTime() { type = Frames; frames = 0; }
-               
+
                bool operator== (AnyTime const & other) const {
                        if (type != other.type) { return false; }
-                       
+
                        switch (type) {
                          case Timecode:
                                return timecode == other.timecode;
@@ -241,8 +254,9 @@ namespace ARDOUR {
                          case Seconds:
                                return seconds == other.seconds;
                        }
+                       return false; // get rid of warning
                }
-               
+
                bool not_zero() const
                {
                        switch (type) {
@@ -256,6 +270,10 @@ namespace ARDOUR {
                          case Seconds:
                                return seconds != 0;
                        }
+
+                       /* NOTREACHED */
+                       assert (false);
+                       return false;
                }
        };
 
@@ -338,9 +356,41 @@ namespace ARDOUR {
        };
 
        enum MonitorModel {
-               HardwareMonitoring,
-               SoftwareMonitoring,
-               ExternalMonitoring
+               HardwareMonitoring, ///< JACK does monitoring
+               SoftwareMonitoring, ///< Ardour does monitoring
+               ExternalMonitoring  ///< we leave monitoring to the audio hardware
+       };
+
+       enum MonitorChoice {
+               MonitorAuto = 0,
+               MonitorInput = 0x1,
+               MonitorDisk = 0x2,
+               MonitorCue = 0x4,
+       };
+
+       enum MonitorState {
+               MonitoringSilence = 0x1,
+               MonitoringInput = 0x2,
+               MonitoringDisk = 0x4,
+       };
+
+       enum MeterState {
+               MeteringInput, ///< meter the input IO, regardless of what is going through the route
+               MeteringRoute  ///< meter what is going through the route
+       };
+
+       enum PFLPosition {
+               /** PFL signals come from before pre-fader processors */
+               PFLFromBeforeProcessors,
+               /** PFL signals come pre-fader but after pre-fader processors */
+               PFLFromAfterProcessors
+       };
+
+       enum AFLPosition {
+               /** AFL signals come post-fader and before post-fader processors */
+               AFLFromBeforeProcessors,
+               /** AFL signals come post-fader but after post-fader processors */
+               AFLFromAfterProcessors
        };
 
        enum DenormalModel {
@@ -361,12 +411,6 @@ namespace ARDOUR {
                ShortCrossfade
        };
 
-       enum LayerModel {
-               LaterHigher,
-               MoveAddHigher,
-               AddHigher
-       };
-
        enum ListenPosition {
                AfterFaderListen,
                PreFaderListen
@@ -380,7 +424,7 @@ namespace ARDOUR {
 
        struct InterThreadInfo {
                InterThreadInfo () : done (false), cancel (false), progress (0), thread (0) {}
-                       
+
                volatile bool  done;
                volatile bool  cancel;
                volatile float progress;
@@ -420,7 +464,8 @@ namespace ARDOUR {
                AudioUnit,
                LADSPA,
                LV2,
-               VST
+               Windows_VST,
+               LXVST,
        };
 
        enum RunContext {
@@ -470,7 +515,8 @@ namespace ARDOUR {
 
        typedef std::list<framepos_t> AnalysisFeatureList;
 
-       typedef std::list<boost::shared_ptr<Route> >      RouteList;
+       typedef std::list<boost::shared_ptr<Route> > RouteList;
+       typedef std::list<boost::weak_ptr  <Route> > WeakRouteList;
 
        class Bundle;
        typedef std::vector<boost::shared_ptr<Bundle> > BundleList;
@@ -526,13 +572,13 @@ namespace ARDOUR {
                bool meter_visibly_changed;
        };
 
-        struct BusProfile {
-            AutoConnectOption input_ac;      /* override the RC config for input auto-connection */
-            AutoConnectOption output_ac;     /* override the RC config for output auto-connection */
-            uint32_t master_out_channels;    /* how many channels for the master bus */
-            uint32_t requested_physical_in;  /* now many of the available physical inputs to consider usable */
-            uint32_t requested_physical_out; /* now many of the available physical inputs to consider usable */
-        };
+       struct BusProfile {
+               AutoConnectOption input_ac;      /* override the RC config for input auto-connection */
+               AutoConnectOption output_ac;     /* override the RC config for output auto-connection */
+               uint32_t master_out_channels;    /* how many channels for the master bus */
+               uint32_t requested_physical_in;  /* now many of the available physical inputs to consider usable */
+               uint32_t requested_physical_out; /* now many of the available physical inputs to consider usable */
+       };
 
        enum FadeShape {
                FadeLinear,
@@ -554,9 +600,10 @@ std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
 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::PFLPosition& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::InsertMergePolicy& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::CrossfadeModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::SyncSource& sf);
@@ -573,9 +620,10 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::RemoteModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::InsertMergePolicy& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::CrossfadeModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::SyncSource& sf);
@@ -590,13 +638,13 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf);
 static inline ARDOUR::framepos_t
 session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed)
 {
-       return (ARDOUR::framepos_t)( (double)session_frame * speed );
+       return (ARDOUR::framepos_t) ((long double) session_frame * (long double) speed);
 }
 
 static inline ARDOUR::framepos_t
 track_frame_to_session_frame (ARDOUR::framepos_t track_frame, double speed)
 {
-       return (ARDOUR::framepos_t)( (double)track_frame / speed );
+       return (ARDOUR::framepos_t) ((long double) track_frame / (long double) speed);
 }
 
 /* for now, break the rules and use "using" to make this "global" */