X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fexport_format_specification.cc;h=5bc10e813c1625b8dcdd8749cf05e969ed6062a1;hb=531e71b4859787805024151dc8659118b0a9e868;hp=315da339d4c02ab6adc3e0992769a2d39598f958;hpb=73192bc1a7ea55fa1864dc3826845b15c00dd2ec;p=ardour.git diff --git a/libs/ardour/export_format_specification.cc b/libs/ardour/export_format_specification.cc index 315da339d4..5bc10e813c 100644 --- a/libs/ardour/export_format_specification.cc +++ b/libs/ardour/export_format_specification.cc @@ -38,29 +38,19 @@ namespace ARDOUR using namespace PBD; using std::string; +using std::list; ExportFormatSpecification::Time & ExportFormatSpecification::Time::operator= (AnyTime const & other) { - type = other.type; - timecode = other.timecode; - bbt = other.bbt; - - if (type == Frames) { - frames = other.frames; - } else { - seconds = other.seconds; - } - + static_cast(*this) = other; return *this; } framecnt_t -ExportFormatSpecification::Time::get_frames (framecnt_t target_rate) const +ExportFormatSpecification::Time::get_frames_at (framepos_t position, framecnt_t target_rate) const { - //TODO position - framecnt_t duration = session.convert_to_frames_at (0, *this); - + framecnt_t duration = session.any_duration_to_frames (position, *this); return ((double) target_rate / session.frame_rate()) * duration + 0.5; } @@ -177,7 +167,12 @@ 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 ("") { format_ids.insert (F_None); endiannesses.insert (E_FileDefault); @@ -190,6 +185,7 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s, XMLNode const : session (s) , _silence_beginning (s) , _silence_end (s) + , _soundcloud_upload (false) { _silence_beginning.type = Time::Timecode; _silence_end.type = Time::Timecode; @@ -197,13 +193,18 @@ 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) { - 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; @@ -230,6 +231,8 @@ ExportFormatSpecification::ExportFormatSpecification (ExportFormatSpecification set_silence_beginning (other.silence_beginning_time()); set_silence_end (other.silence_end_time()); + + set_extension(other.extension()); } ExportFormatSpecification::~ExportFormatSpecification () @@ -244,6 +247,10 @@ ExportFormatSpecification::get_state () root->add_property ("name", _name); 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())); @@ -281,14 +288,14 @@ ExportFormatSpecification::get_state () node->add_property ("enabled", trim_beginning() ? "true" : "false"); node = start->add_child ("Add"); - node->add_property ("enabled", silence_beginning() > 0 ? "true" : "false"); + node->add_property ("enabled", _silence_beginning.not_zero() ? "true" : "false"); node->add_child_nocopy (_silence_beginning.get_state()); node = end->add_child ("Trim"); node->add_property ("enabled", trim_end() ? "true" : "false"); node = end->add_child ("Add"); - node->add_property ("enabled", silence_end() > 0 ? "true" : "false"); + node->add_property ("enabled", _silence_end.not_zero() ? "true" : "false"); node->add_child_nocopy (_silence_end.get_state()); return *root; @@ -309,6 +316,30 @@ ExportFormatSpecification::set_state (const XMLNode & root) _id = prop->value(); } + if ((prop = root.property ("with-cue"))) { + _with_cue = string_is_affirmative (prop->value()); + } 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"))) { @@ -329,7 +360,11 @@ ExportFormatSpecification::set_state (const XMLNode & root) } if ((prop = child->property ("has-sample-format"))) { - has_sample_format = !prop->value().compare ("true"); + has_sample_format = string_is_affirmative (prop->value()); + } + + if ((prop = child->property ("has-sample-format"))) { + has_sample_format = string_is_affirmative (prop->value()); } if ((prop = child->property ("channel-limit"))) { @@ -513,53 +548,87 @@ ExportFormatSpecification::set_format (boost::shared_ptr format) } string -ExportFormatSpecification::description () +ExportFormatSpecification::description (bool include_name) { - string desc; - - desc = _name + ": "; + list 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_44_1: - desc += "44,1 kHz"; + case SR_22_05: + components.push_back ("22,5 kHz"); break; - case SR_48: - desc += "48 kHz"; + case SR_44_1: + components.push_back ("44,1 kHz"); break; - case SR_88_2: - desc += "88,2 kHz"; + case SR_48: + components.push_back ("48 kHz"); break; - case SR_96: - desc += "96 kHz"; + case SR_88_2: + components.push_back ("88,2 kHz"); break; - case SR_192: - desc += "192 kHz"; + case SR_96: + components.push_back ("96 kHz"); break; - case SR_None: + case SR_176_4: + components.push_back ("176.4 kHz"); break; + case SR_192: + components.push_back ("192 kHz"); + break; + case SR_Session: + components.push_back (_("Session rate")); + break; + case SR_None: + break; + } + + if (_with_toc) { + components.push_back ("TOC"); } + if (_with_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::const_iterator it = components.begin(); it != components.end(); ++it) { + if (it != components.begin()) { desc += ", "; } + desc += *it; + } return desc; }