X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_formats.h;h=c29f7a4fbf4309068ebba176d34307234a05ad04;hb=90172686b92b53cc5ab1d60c0e6daecb65d17d3d;hp=fc6dc0a5f72aacf8f7db18db6e8f47f18980f6fe;hpb=474f8bc37623f48f7e69dff57aee233c99f6d07c;p=ardour.git diff --git a/libs/ardour/ardour/export_formats.h b/libs/ardour/ardour/export_formats.h index fc6dc0a5f7..c29f7a4fbf 100644 --- a/libs/ardour/ardour/export_formats.h +++ b/libs/ardour/ardour/export_formats.h @@ -21,12 +21,14 @@ #ifndef __ardour_export_formats_h__ #define __ardour_export_formats_h__ -#include -#include - #include #include -#include + +#include "pbd/failed_constructor.h" +#include "pbd/signals.h" + +#include "ardour/export_format_base.h" +#include "ardour/export_format_compatibility.h" namespace ARDOUR { @@ -42,56 +44,56 @@ class ExportFormat : public ExportFormatBase, public ExportFormatBase::Selectabl public: ExportFormat () {}; ~ExportFormat () {}; - + virtual bool set_compatibility_state (ExportFormatCompatibility const & compatibility) = 0; virtual Type get_type () const = 0; - + FormatId get_format_id () const { return *format_ids.begin(); } Quality get_quality () const { return *qualities.begin(); } - + bool has_sample_format (); bool sample_format_is_compatible (SampleFormat format) const; - + /* If the format has a specific sample format, this function should be overriden * if the format has a selectable sample format, do not override this! */ - + virtual SampleFormat get_explicit_sample_format () const { return SF_None; } /* If the above is not overriden, this one should be */ virtual ExportFormat::SampleFormat default_sample_format () const { return SF_None; } - + /* If the format has a channel count limit, override this */ - + virtual uint32_t get_channel_limit () const { return 256; } - + /* If the format can be tagged with metadata override this */ - + virtual bool supports_tagging () const { return false; } - + /* If the format contains broadcast info override this */ - + virtual bool has_broadcast_info () const { return false; } protected: - + void add_sample_rate (SampleRate rate) { sample_rates.insert (rate); } void add_endianness (Endianness endianness) { endiannesses.insert (endianness); } - + void set_format_id (FormatId id) { format_ids.clear (); format_ids.insert (id); } void set_quality (Quality value) { qualities.clear(); qualities.insert (value); } }; /// Class to be inherited by export formats that have a selectable sample format -class HasSampleFormat { +class HasSampleFormat : public PBD::ScopedConnectionList { public: class SampleFormatState : public ExportFormatBase::SelectableCompatible { public: - SampleFormatState (ExportFormatBase::SampleFormat format, Glib::ustring name) : + SampleFormatState (ExportFormatBase::SampleFormat format, std::string name) : format (format) { set_name (name); } - + ExportFormatBase::SampleFormat format; }; @@ -99,14 +101,14 @@ class HasSampleFormat { public: DitherTypeState (ExportFormatBase::DitherType type, Glib::ustring name) : type (type) { set_name (name); } - + ExportFormatBase::DitherType type; }; - + typedef boost::shared_ptr SampleFormatPtr; typedef boost::weak_ptr WeakSampleFormatPtr; typedef std::list SampleFormatList; - + typedef boost::shared_ptr DitherTypePtr; typedef boost::weak_ptr WeakDitherTypePtr; typedef std::list DitherTypeList; @@ -117,22 +119,22 @@ class HasSampleFormat { virtual ~HasSampleFormat () {}; void add_sample_format (ExportFormatBase::SampleFormat format); - + SampleFormatList const & get_sample_formats () const { return sample_format_states; } DitherTypeList const & get_dither_types () const { return dither_type_states; } - + SampleFormatPtr get_selected_sample_format (); DitherTypePtr get_selected_dither_type (); - + /* Proxies for signals from sample formats and dither types */ - - sigc::signal SampleFormatSelectChanged; - sigc::signal SampleFormatCompatibleChanged; - - sigc::signal DitherTypeSelectChanged; - sigc::signal DitherTypeCompatibleChanged; - - static string get_sample_format_name (ExportFormatBase::SampleFormat format); + + PBD::Signal2 SampleFormatSelectChanged; + PBD::Signal2 SampleFormatCompatibleChanged; + + PBD::Signal2 DitherTypeSelectChanged; + PBD::Signal2 DitherTypeCompatibleChanged; + + static std::string get_sample_format_name (ExportFormatBase::SampleFormat format); protected: /* State lists */ @@ -142,11 +144,11 @@ class HasSampleFormat { private: /* Connected to signals */ - - void add_dither_type (ExportFormatBase::DitherType type, Glib::ustring name); + + void add_dither_type (ExportFormatBase::DitherType type, std::string name); void update_sample_format_selection (bool); void update_dither_type_selection (bool); - + /* Reference to ExportFormatBase::sample_formats */ ExportFormatBase::SampleFormatSet & _sample_formats; }; @@ -154,17 +156,17 @@ class HasSampleFormat { class ExportFormatLinear : public ExportFormat, public HasSampleFormat { public: - ExportFormatLinear (Glib::ustring name, FormatId format_id); + ExportFormatLinear (std::string name, FormatId format_id); ~ExportFormatLinear () {}; - + bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } - + void add_endianness (Endianness endianness) { endiannesses.insert (endianness); } - + void set_default_sample_format (SampleFormat sf) { _default_sample_format = sf; } SampleFormat default_sample_format () const { return _default_sample_format; } - + protected: SampleFormat _default_sample_format; }; @@ -173,7 +175,7 @@ class ExportFormatOggVorbis : public ExportFormat { public: ExportFormatOggVorbis (); ~ExportFormatOggVorbis () {}; - + bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } SampleFormat get_explicit_sample_format () const { return SF_Vorbis; } @@ -184,10 +186,10 @@ class ExportFormatFLAC : public ExportFormat, public HasSampleFormat { public: ExportFormatFLAC (); ~ExportFormatFLAC () {}; - + bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } - + uint32_t get_channel_limit () const { return 8; } SampleFormat default_sample_format () const { return SF_16; } virtual bool supports_tagging () const { return true; } @@ -197,10 +199,10 @@ class ExportFormatBWF : public ExportFormat, public HasSampleFormat { public: ExportFormatBWF (); ~ExportFormatBWF () {}; - + bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } - + SampleFormat default_sample_format () const { return SF_16; } virtual bool has_broadcast_info () const { return true; } };