X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_formats.h;h=4c9c2057256da84ff586088e2d8564205bc259c9;hb=88c82aeb56c62d9d0c0acff51e360492ad9b8d23;hp=34227526fc7bb35331ed514e2903768c47bea05a;hpb=6b50ba341da426805ce3c92609c0fa12c52b67ac;p=ardour.git diff --git a/libs/ardour/ardour/export_formats.h b/libs/ardour/ardour/export_formats.h index 34227526fc..4c9c205725 100644 --- a/libs/ardour/ardour/export_formats.h +++ b/libs/ardour/ardour/export_formats.h @@ -21,73 +21,82 @@ #ifndef __ardour_export_formats_h__ #define __ardour_export_formats_h__ -#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 { -class HasSampleFormat; +class LIBARDOUR_API ExportFormatIncompatible : public failed_constructor { + public: + virtual const char *what() const throw() { return "Export format constructor failed: Format incompatible with system"; } +}; /// Base class for formats -class ExportFormat : public ExportFormatBase, public ExportFormatBase::SelectableCompatible { +class LIBARDOUR_API ExportFormat : public ExportFormatBase, public ExportFormatBase::SelectableCompatible { 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 specific sample format, this function should be overridden * 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 */ + /* If the above is not overridden, 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 LIBARDOUR_API HasSampleFormat : public PBD::ScopedConnectionList { public: class SampleFormatState : public ExportFormatBase::SelectableCompatible { public: - SampleFormatState (ExportFormatBase::SampleFormat format, Glib::ustring name) : - format (format) { set_name (name); } - + SampleFormatState (ExportFormatBase::SampleFormat format, std::string name) + : format (format) + { + set_name (name); + } + ExportFormatBase::SampleFormat format; }; @@ -95,14 +104,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; @@ -113,22 +122,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 */ @@ -138,69 +147,65 @@ 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; }; -class ExportFormatLinear : public ExportFormat, public HasSampleFormat { +class LIBARDOUR_API 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; }; -class ExportFormatOggVorbis : public ExportFormat { +class LIBARDOUR_API ExportFormatOggVorbis : public ExportFormat { public: ExportFormatOggVorbis (); ~ExportFormatOggVorbis () {}; - - static bool check_system_compatibility (); - + bool set_compatibility_state (ExportFormatCompatibility const & compatibility); Type get_type () const { return T_Sndfile; } SampleFormat get_explicit_sample_format () const { return SF_Vorbis; } virtual bool supports_tagging () const { return true; } }; -class ExportFormatFLAC : public ExportFormat, public HasSampleFormat { +class LIBARDOUR_API ExportFormatFLAC : public ExportFormat, public HasSampleFormat { public: ExportFormatFLAC (); ~ExportFormatFLAC () {}; - - static bool check_system_compatibility (); - + 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; } }; -class ExportFormatBWF : public ExportFormat, public HasSampleFormat { +class LIBARDOUR_API 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; } };