summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/export_channel_configuration.h8
-rw-r--r--libs/ardour/ardour/export_filename.h3
-rw-r--r--libs/ardour/ardour/export_graph_builder.h2
-rw-r--r--libs/ardour/export_channel_configuration.cc18
-rw-r--r--libs/ardour/export_graph_builder.cc27
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);