add LuaTableRef to DSP API as alternative to shared-mem
[ardour.git] / libs / ardour / ardour / export_format_base.h
index 210452add2814c91d87ae5513d8196e30db4ff28..093913e294b9f8b1302d3d4115e5addb1710b3e6 100644 (file)
 
 #include <set>
 #include <string>
-#include <algorithm>
+
 #include <boost/shared_ptr.hpp>
-#include <glibmm/ustring.h>
 
 #include <sndfile.h>
 #include <samplerate.h>
-#include <ardour/gdither_types.h>
-#include <ardour/ardour.h>
 
-using std::string;
+#include "pbd/signals.h"
+#include "ardour/libardour_visibility.h"
+#include "ardour/types.h"
+
+#include "audiographer/general/sample_format_converter.h"
 
 namespace ARDOUR
 {
 
-class HasSampleFormat;
-
-class ExportFormatBase {
+class LIBARDOUR_API ExportFormatBase {
   public:
 
        enum Type {
                T_None = 0,
                T_Sndfile
        };
-       
+
        enum FormatId {
                F_None = 0,
                F_WAV = SF_FORMAT_WAV,
                F_W64 = SF_FORMAT_W64,
+               F_CAF = SF_FORMAT_CAF,
                F_AIFF = SF_FORMAT_AIFF,
                F_AU = SF_FORMAT_AU,
                F_IRCAM = SF_FORMAT_IRCAM,
@@ -58,7 +58,7 @@ class ExportFormatBase {
                F_FLAC = SF_FORMAT_FLAC,
                F_Ogg = SF_FORMAT_OGG
        };
-       
+
        enum Endianness {
                E_FileDefault = SF_ENDIAN_FILE, /* Default file endian-ness. */
                E_Little = SF_ENDIAN_LITTLE,    /* Force little endian-ness. */
@@ -77,14 +77,14 @@ class ExportFormatBase {
                SF_Double = SF_FORMAT_DOUBLE,
                SF_Vorbis = SF_FORMAT_VORBIS
        };
-       
+
        enum DitherType {
-               D_None = GDitherNone,
-               D_Rect = GDitherRect,
-               D_Tri = GDitherTri,
-               D_Shaped = GDitherShaped
+               D_None = AudioGrapher::D_None,
+               D_Rect = AudioGrapher::D_Rect,
+               D_Tri = AudioGrapher::D_Tri,
+               D_Shaped = AudioGrapher::D_Shaped
        };
-       
+
        enum Quality {
                Q_None = 0,
                Q_Any,
@@ -92,17 +92,20 @@ class ExportFormatBase {
                Q_LosslessCompression,
                Q_LossyCompression
        };
-       
+
        enum SampleRate {
                SR_None = 0,
-               SR_22_05 = 220500,
+               SR_Session = 1,
+               SR_8 = 8000,
+               SR_22_05 = 22050,
                SR_44_1 = 44100,
                SR_48 = 48000,
                SR_88_2 = 88200,
                SR_96 = 96000,
+               SR_176_4 = 176400,
                SR_192 = 192000
        };
-       
+
        enum SRCQuality {
                SRC_SincBest = SRC_SINC_BEST_QUALITY,
                SRC_SincMedium = SRC_SINC_MEDIUM_QUALITY,
@@ -110,43 +113,42 @@ class ExportFormatBase {
                SRC_ZeroOrderHold = SRC_ZERO_ORDER_HOLD,
                SRC_Linear = SRC_LINEAR
        };
-       
+
        /// Class for managing selection and compatibility states
-       class SelectableCompatible {
+       class LIBARDOUR_API SelectableCompatible {
          public:
-               SelectableCompatible () :
-                 _selected (false), _compatible (true) { }
+               SelectableCompatible ()
+                       : _selected (false), _compatible (true) { }
                ~SelectableCompatible () {}
-               
-               sigc::signal<void, bool> SelectChanged;
-               sigc::signal<void, bool> CompatibleChanged;
-               
+
+               PBD::Signal1<void,bool> SelectChanged;
+               PBD::Signal1<void,bool> CompatibleChanged;
+
                bool selected () const { return _selected; }
                bool compatible () const { return _compatible; }
-               Glib::ustring name () const { return _name; }
-               
+               std::string name () const { return _name; }
+
                void set_selected (bool value);
                void set_compatible (bool value);
-               
+
          protected:
-               void set_name (Glib::ustring name) { _name = name; }
-               
+               void set_name (std::string name) { _name = name; }
+
          private:
                bool _selected;
                bool _compatible;
-               
-               Glib::ustring _name;
+
+               std::string _name;
        };
 
   public:
 
        ExportFormatBase ();
        ExportFormatBase (ExportFormatBase const & other);
-       
+
        virtual ~ExportFormatBase ();
-       
+
        boost::shared_ptr<ExportFormatBase> get_intersection (ExportFormatBase const & other) const;
-       boost::shared_ptr<ExportFormatBase> get_difference (ExportFormatBase const & other) const;
        boost::shared_ptr<ExportFormatBase> get_union (ExportFormatBase const & other) const;
 
        bool endiannesses_empty () const { return endiannesses.empty (); }
@@ -154,15 +156,17 @@ class ExportFormatBase {
        bool sample_rates_empty () const { return sample_rates.empty (); }
        bool formats_empty () const { return format_ids.empty (); }
        bool qualities_empty () const { return qualities.empty (); }
-       
+
        bool has_endianness (Endianness endianness) const { return endiannesses.find (endianness) != endiannesses.end() ; }
        bool has_sample_format (SampleFormat format) const { return sample_formats.find (format) != sample_formats.end(); }
        bool has_sample_rate (SampleRate rate) const { return sample_rates.find (rate) != sample_rates.end(); }
        bool has_format (FormatId format) const { return format_ids.find (format) != format_ids.end(); }
        bool has_quality (Quality quality) const { return qualities.find (quality) != qualities.end(); }
-       
-       void set_extension (Glib::ustring const & extension) { _extension = extension; }
-       Glib::ustring const & extension () const { return _extension; }
+
+       void set_extension (std::string const & extension) { _extension = extension; }
+       std::string const & extension () const { return _extension; }
+
+       static SampleRate nearest_sample_rate (framecnt_t sample_rate);
 
   protected:
 
@@ -175,22 +179,21 @@ class ExportFormatBase {
        typedef std::set<SampleRate> SampleRateSet;
        typedef std::set<FormatId> FormatSet;
        typedef std::set<Quality> QualitySet;
-       
+
        EndianSet       endiannesses;
        SampleRateSet   sample_rates;
        FormatSet       format_ids;
        QualitySet      qualities;
-       
+
   private:
 
-       Glib::ustring  _extension;
-       
+       std::string  _extension;
+
        enum SetOperation {
                SetUnion,
-               SetDifference,
                SetIntersection
        };
-       
+
        boost::shared_ptr<ExportFormatBase> do_set_operation (ExportFormatBase const & other, SetOperation operation) const;
 };