X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_track_importer.cc;h=4b145e1a9d4fc64da9699fc66d82cc944473be1c;hb=fd832d9d1a7eb33ff9b8b206e1b8509aef100faf;hp=146722b3c0bdc398891e47325047674dda20add1;hpb=79f91c7a205d981d2b8cc15e32a6da02d8423065;p=ardour.git diff --git a/libs/ardour/audio_track_importer.cc b/libs/ardour/audio_track_importer.cc index 146722b3c0..4b145e1a9d 100644 --- a/libs/ardour/audio_track_importer.cc +++ b/libs/ardour/audio_track_importer.cc @@ -21,16 +21,17 @@ #include "ardour/audio_track_importer.h" #include "ardour/audio_playlist_importer.h" -#include "ardour/audio_diskstream.h" +#include "ardour/disk_reader.h" #include "ardour/session.h" +#include "pbd/controllable.h" #include "pbd/failed_constructor.h" -#include "pbd/convert.h" +#include "pbd/string_convert.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,11 +51,11 @@ 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))); - } catch (failed_constructor err) { + } catch (failed_constructor const&) { set_dirty(); } } @@ -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); } @@ -99,7 +99,7 @@ AudioTrackImporter::AudioTrackImporter (XMLTree const & source, XMLNode * remote_control = xml_track.child ("RemoteControl"); if (remote_control && (prop = remote_control->property ("id"))) { uint32_t control_id = session.ntracks() + session.nbusses() + 1; - prop->set_value (to_string (control_id, std::dec)); + prop->set_value (to_string (control_id)); } xml_track.remove_nodes_and_delete ("Extra"); @@ -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; @@ -262,11 +277,13 @@ AudioTrackImporter::_cancel_move () void AudioTrackImporter::_move () { + /* XXX DISK */ +#if 0 /* Add diskstream */ 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 +291,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)); + boost::shared_ptr new_ds (new DiskReader (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 */ @@ -291,6 +311,7 @@ AudioTrackImporter::_move () XMLNode routes ("Routes"); routes.add_child_copy (xml_track); session.load_routes (routes, 3000); +#endif } bool @@ -356,7 +377,7 @@ AudioTrackImporter::rate_convert_events (XMLNode & node) std::stringstream str (content_node->content()); std::ostringstream new_content; - nframes_t x; + samplecnt_t x; double y; bool ok = true;