diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/export_channel_configuration.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/export_filename.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/export_graph_builder.h | 2 | ||||
-rw-r--r-- | libs/ardour/export_channel_configuration.cc | 18 | ||||
-rw-r--r-- | libs/ardour/export_graph_builder.cc | 27 |
5 files changed, 55 insertions, 3 deletions
diff --git a/libs/ardour/ardour/export_channel_configuration.h b/libs/ardour/ardour/export_channel_configuration.h index 4b027cc020..e088aba2f0 100644 --- a/libs/ardour/ardour/export_channel_configuration.h +++ b/libs/ardour/ardour/export_channel_configuration.h @@ -22,8 +22,8 @@ #define __ardour_export_channel_configuration_h__ #include <list> - #include <glibmm/ustring.h> +#include <boost/enable_shared_from_this.hpp> #include "ardour/export_channel.h" #include "ardour/export_status.h" @@ -43,7 +43,7 @@ class ExportProcessor; class ExportTimespan; class Session; -class ExportChannelConfiguration +class ExportChannelConfiguration : public boost::enable_shared_from_this<ExportChannelConfiguration> { private: @@ -71,6 +71,10 @@ class ExportChannelConfiguration void register_channel (ExportChannelPtr channel) { channels.push_back (channel); } void clear_channels () { channels.clear (); } + + /** Returns a list of channel configurations that match the files created. + * I.e. many configurations if splitting is enabled, one if not. */ + void configurations_for_files (std::list<boost::shared_ptr<ExportChannelConfiguration> > & configs); private: diff --git a/libs/ardour/ardour/export_filename.h b/libs/ardour/ardour/export_filename.h index 2847291a13..c5f0e3b5ca 100644 --- a/libs/ardour/ardour/export_filename.h +++ b/libs/ardour/ardour/export_filename.h @@ -116,7 +116,8 @@ class ExportFilename { TimeFormat time_format; Glib::ustring get_formatted_time (Glib::ustring const & format) const; - struct tm * time_struct; // Due to static allocation no destructor or copy-ctor is needed because of this + // Due to the static allocation used in strftime(), no destructor or copy-ctor is needed for this + struct tm * time_struct; TimespanPtr timespan; ChannelConfigPtr channel_config; diff --git a/libs/ardour/ardour/export_graph_builder.h b/libs/ardour/ardour/export_graph_builder.h index 7bb5cf9aa1..e67c2fe90c 100644 --- a/libs/ardour/ardour/export_graph_builder.h +++ b/libs/ardour/ardour/export_graph_builder.h @@ -69,6 +69,8 @@ class ExportGraphBuilder private: + void add_split_config (FileSpec const & config); + class Encoder : public sigc::trackable { public: template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config); diff --git a/libs/ardour/export_channel_configuration.cc b/libs/ardour/export_channel_configuration.cc index cc68356d82..eb3b2838c6 100644 --- a/libs/ardour/export_channel_configuration.cc +++ b/libs/ardour/export_channel_configuration.cc @@ -99,4 +99,22 @@ ExportChannelConfiguration::all_channels_have_ports () const return true; } +void +ExportChannelConfiguration::configurations_for_files (std::list<boost::shared_ptr<ExportChannelConfiguration> > & configs) +{ + configs.clear (); + + if (!split) { + configs.push_back (shared_from_this ()); + return; + } + + for (ChannelList::const_iterator it = channels.begin (); it != channels.end (); ++it) { + boost::shared_ptr<ExportChannelConfiguration> config (new ExportChannelConfiguration (session)); + config->set_name (_name); + config->register_channel (*it); + configs.push_back (config); + } +} + } // namespace ARDOUR diff --git a/libs/ardour/export_graph_builder.cc b/libs/ardour/export_graph_builder.cc index 738f888b3d..bc3a162e04 100644 --- a/libs/ardour/export_graph_builder.cc +++ b/libs/ardour/export_graph_builder.cc @@ -74,6 +74,33 @@ ExportGraphBuilder::reset () void ExportGraphBuilder::add_config (FileSpec const & config) { + if (!config.channel_config->get_split ()) { + add_split_config (config); + return; + } + + // Split channel configurations are split into several channel configurations, + // each corresponding to a file, at this stage + typedef std::list<boost::shared_ptr<ExportChannelConfiguration> > ConfigList; + ConfigList file_configs; + config.channel_config->configurations_for_files (file_configs); + + unsigned chan = 1; + for (ConfigList::iterator it = file_configs.begin(); it != file_configs.end(); ++it, ++chan) { + FileSpec copy = config; + copy.channel_config = *it; + + copy.filename.reset (new ExportFilename (*copy.filename)); + copy.filename->include_channel = true; + copy.filename->set_channel (chan); + + add_split_config (copy); + } +} + +void +ExportGraphBuilder::add_split_config (FileSpec const & config) +{ for (ChannelConfigList::iterator it = channel_configs.begin(); it != channel_configs.end(); ++it) { if (*it == config) { it->add_child (config); |