X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_track_importer.cc;h=dd77cb370e4cce491e9a17a425f0801d6df6bd07;hb=d6fd0486aef08fcccf013d889734971ed01eaedd;hp=364d681217a2dd4eb94952c3bdf2d5ea2dd51ccd;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/audio_track_importer.cc b/libs/ardour/audio_track_importer.cc index 364d681217..dd77cb370e 100644 --- a/libs/ardour/audio_track_importer.cc +++ b/libs/ardour/audio_track_importer.cc @@ -24,13 +24,14 @@ #include "ardour/audio_diskstream.h" #include "ardour/session.h" -#include "pbd/failed_constructor.h" +#include "pbd/controllable.h" #include "pbd/convert.h" +#include "pbd/failed_constructor.h" #include #include -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace PBD; @@ -39,8 +40,7 @@ using namespace ARDOUR; /*** AudioTrackImportHandler ***/ AudioTrackImportHandler::AudioTrackImportHandler (XMLTree const & source, Session & session, AudioPlaylistImportHandler & pl_handler) : - ElementImportHandler (source, session), - pl_handler (pl_handler) + ElementImportHandler (source, session) { XMLNode const * root = source.root(); XMLNode const * routes; @@ -51,7 +51,7 @@ AudioTrackImportHandler::AudioTrackImportHandler (XMLTree const & source, Sessio XMLNodeList const & route_list = routes->children(); for (XMLNodeList::const_iterator it = route_list.begin(); it != route_list.end(); ++it) { - const XMLProperty* type = (*it)->property("default-type"); + XMLProperty const * type = (*it)->property("default-type"); if ( (!type || type->value() == "audio") && ((*it)->property ("diskstream") != 0 || (*it)->property ("diskstream-id") != 0)) { try { elements.push_back (ElementPtr ( new AudioTrackImporter (source, session, *this, **it, pl_handler))); @@ -91,7 +91,7 @@ AudioTrackImporter::AudioTrackImporter (XMLTree const & source, throw failed_constructor(); } - XMLNodeList const & controllables = node.children ("Controllable"); + XMLNodeList const & controllables = node.children (Controllable::xml_node_name); for (XMLNodeList::const_iterator it = controllables.begin(); it != controllables.end(); ++it) { parse_controllable (**it); } @@ -197,7 +197,7 @@ AudioTrackImporter::parse_io () return false; } - XMLNodeList const & controllables = io->children ("Controllable"); + XMLNodeList const & controllables = io->children (Controllable::xml_node_name); for (XMLNodeList::const_iterator it = controllables.begin(); it != controllables.end(); ++it) { parse_controllable (**it); } @@ -222,6 +222,7 @@ AudioTrackImporter::get_info () const return name; } +/** @return true if everything is ok */ bool AudioTrackImporter::_prepare_move () { @@ -240,13 +241,27 @@ AudioTrackImporter::_prepare_move () /* Rename */ while (session.route_by_name (name) || !track_handler.check_name (name)) { - std::pair rename_pair = Rename (_("A playlist with this name already exists, please rename it."), name); + std::pair rename_pair = *Rename (_("A playlist with this name already exists, please rename it."), name); if (!rename_pair.first) { return false; } name = rename_pair.second; } - xml_track.child ("IO")->property ("name")->set_value (name); + + XMLNode* c = xml_track.child ("IO"); + if (!c) { + error << _("badly-formed XML in imported track") << endmsg; + return false; + } + + XMLProperty * p = c->property ("name"); + if (!p) { + error << _("badly-formed XML in imported track") << endmsg; + return false; + } + + p->set_value (name); + track_handler.add_name (name); return true; @@ -266,7 +281,7 @@ AudioTrackImporter::_move () boost::shared_ptr ds_node_list; string xpath = "/Session/DiskStreams/AudioDiskstream[@id='" + old_ds_id.to_s() + "']"; - ds_node_list = source.root()->find (xpath); + ds_node_list = source.find (xpath); if (ds_node_list->size() != 1) { error << string_compose (_("Error Importing Audio track %1"), name) << endmsg; @@ -274,11 +289,14 @@ AudioTrackImporter::_move () } boost::shared_ptr ds_node = ds_node_list->front(); - ds_node->property ("id")->set_value (new_ds_id.to_s()); + XMLProperty * p = ds_node->property (X_("id")); + assert (p); + p->set_value (new_ds_id.to_s()); boost::shared_ptr new_ds (new AudioDiskstream (session, *ds_node)); new_ds->set_name (name); - session.add_diskstream (new_ds); + new_ds->do_refill_with_alloc (); + new_ds->set_block_size (session.get_block_size ()); /* Import playlists */ @@ -290,7 +308,7 @@ AudioTrackImporter::_move () XMLNode routes ("Routes"); routes.add_child_copy (xml_track); - session.load_routes (routes); + session.load_routes (routes, 3000); } bool @@ -356,7 +374,7 @@ AudioTrackImporter::rate_convert_events (XMLNode & node) std::stringstream str (content_node->content()); std::ostringstream new_content; - nframes_t x; + framecnt_t x; double y; bool ok = true;