X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_format_base.h;h=093913e294b9f8b1302d3d4115e5addb1710b3e6;hb=91ab5e31751105d59386aab6a6e16ac5582904dc;hp=210452add2814c91d87ae5513d8196e30db4ff28;hpb=f2b007195cd75b195e38a4cd7757debac73e7792;p=ardour.git diff --git a/libs/ardour/ardour/export_format_base.h b/libs/ardour/ardour/export_format_base.h index 210452add2..093913e294 100644 --- a/libs/ardour/ardour/export_format_base.h +++ b/libs/ardour/ardour/export_format_base.h @@ -23,34 +23,34 @@ #include #include -#include + #include -#include #include #include -#include -#include -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 SelectChanged; - sigc::signal CompatibleChanged; - + + PBD::Signal1 SelectChanged; + PBD::Signal1 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 get_intersection (ExportFormatBase const & other) const; - boost::shared_ptr get_difference (ExportFormatBase const & other) const; boost::shared_ptr 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 SampleRateSet; typedef std::set FormatSet; typedef std::set 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 do_set_operation (ExportFormatBase const & other, SetOperation operation) const; };