abort if configuration fails
[ardour.git] / libs / ardour / export_format_specification.cc
index 9e57b7c406037efafccd5c3bca4e99288ff24b50..fd85c322d6c5db76249418703b3628445e9bde1f 100644 (file)
@@ -38,6 +38,7 @@ namespace ARDOUR
 
 using namespace PBD;
 using std::string;
+using std::list;
 
 ExportFormatSpecification::Time &
 ExportFormatSpecification::Time::operator= (AnyTime const & other)
@@ -166,9 +167,13 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s)
        , _silence_end (s)
 
        , _normalize (false)
-       , _normalize_target (1.0)
+       , _normalize_target (GAIN_COEFF_UNITY)
        , _with_toc (false)
        , _with_cue (false)
+       , _with_mp4chaps (false)
+       , _soundcloud_upload (false)
+       , _command ("")
+       , _analyse (true)
 {
        format_ids.insert (F_None);
        endiannesses.insert (E_FileDefault);
@@ -181,6 +186,8 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s, XMLNode const
        : session (s)
        , _silence_beginning (s)
        , _silence_end (s)
+       , _soundcloud_upload (false)
+       , _analyse (true)
 {
        _silence_beginning.type = Time::Timecode;
        _silence_end.type = Time::Timecode;
@@ -188,13 +195,19 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s, XMLNode const
        set_state (state);
 }
 
-ExportFormatSpecification::ExportFormatSpecification (ExportFormatSpecification const & other)
+ExportFormatSpecification::ExportFormatSpecification (ExportFormatSpecification const & other, bool modify_name)
        : ExportFormatBase(other)
        , session (other.session)
        , _silence_beginning (other.session)
        , _silence_end (other.session)
+       , _soundcloud_upload (false)
+       , _analyse (other._analyse)
 {
-       set_name (other.name() + " (copy)");
+       if (modify_name) {
+               set_name (other.name() + " (copy)");
+       } else {
+               set_name (other.name());
+       }
 
        _format_name = other._format_name;
        has_sample_format = other.has_sample_format;
@@ -239,6 +252,8 @@ ExportFormatSpecification::get_state ()
        root->add_property ("id", _id.to_s());
        root->add_property ("with-cue", _with_cue ? "true" : "false");
        root->add_property ("with-toc", _with_toc ? "true" : "false");
+       root->add_property ("with-mp4chaps", _with_mp4chaps ? "true" : "false");
+       root->add_property ("command", _command);
 
        node = root->add_child ("Encoding");
        node->add_property ("id", enum_2_string (format_id()));
@@ -309,13 +324,25 @@ ExportFormatSpecification::set_state (const XMLNode & root)
        } else {
                _with_cue = false;
        }
-       
+
        if ((prop = root.property ("with-toc"))) {
                _with_toc = string_is_affirmative (prop->value());
        } else {
                _with_toc = false;
        }
-       
+
+       if ((prop = root.property ("with-mp4chaps"))) {
+               _with_mp4chaps = string_is_affirmative (prop->value());
+       } else {
+               _with_mp4chaps = false;
+       }
+
+       if ((prop = root.property ("command"))) {
+               _command = prop->value();
+       } else {
+               _command = "";
+       }
+
        /* Encoding and SRC */
 
        if ((child = root.child ("Encoding"))) {
@@ -526,64 +553,85 @@ ExportFormatSpecification::set_format (boost::shared_ptr<ExportFormat> format)
 string
 ExportFormatSpecification::description (bool include_name)
 {
-       string desc;
-
-       if (include_name) {
-               desc = _name + ": ";
-       }
+       list<string> components;
 
        if (_normalize) {
-               desc += _("normalize, ");
+               components.push_back (_("normalize"));
        }
 
        if (_trim_beginning && _trim_end) {
-               desc += _("trim, ");
+               components.push_back ( _("trim"));
        } else if (_trim_beginning) {
-               desc += _("trim start, ");
+               components.push_back (_("trim start"));
        } else if (_trim_end) {
-               desc += _("trim end, ");
+               components.push_back (_("trim end"));
        }
 
-       desc += _format_name + ", ";
+       if (_format_name != "") {
+               components.push_back (_format_name);
+       }
 
        if (has_sample_format) {
-               desc += HasSampleFormat::get_sample_format_name (sample_format())  + ", ";
+               components.push_back (HasSampleFormat::get_sample_format_name (sample_format()));
        }
 
        switch (sample_rate()) {
-         case SR_22_05:
-               desc += "22,5 kHz";
+       case SR_8:
+               components.push_back ("8 kHz");
+               break;
+       case SR_22_05:
+               components.push_back ("22,5 kHz");
+               break;
+       case SR_44_1:
+               components.push_back ("44,1 kHz");
                break;
-         case SR_44_1:
-               desc += "44,1 kHz";
+       case SR_48:
+               components.push_back ("48 kHz");
                break;
-         case SR_48:
-               desc += "48 kHz";
+       case SR_88_2:
+               components.push_back ("88,2 kHz");
                break;
-         case SR_88_2:
-               desc += "88,2 kHz";
+       case SR_96:
+               components.push_back ("96 kHz");
                break;
-         case SR_96:
-               desc += "96 kHz";
+       case SR_176_4:
+               components.push_back ("176.4 kHz");
                break;
-         case SR_192:
-               desc += "192 kHz";
+       case SR_192:
+               components.push_back ("192 kHz");
                break;
-         case SR_Session:
-               desc += _("Session rate");
+       case SR_Session:
+               components.push_back (_("Session rate"));
                break;
-         case SR_None:
+       case SR_None:
                break;
        }
 
        if (_with_toc) {
-               desc += ", TOC";
+               components.push_back ("TOC");
        }
 
        if (_with_cue) {
-               desc += ", CUE";
+               components.push_back ("CUE");
+       }
+
+       if (_with_mp4chaps) {
+               components.push_back ("MP4ch");
+       }
+
+       if (!_command.empty()) {
+               components.push_back ("+");
        }
 
+       string desc;
+       if (include_name) {
+               desc = _name + ": ";
+       }
+
+       for (list<string>::const_iterator it = components.begin(); it != components.end(); ++it) {
+               if (it != components.begin()) { desc += ", "; }
+               desc += *it;
+       }
        return desc;
 }