summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/export_filename.h1
-rw-r--r--libs/ardour/ardour/export_format_specification.h2
-rw-r--r--libs/ardour/ardour/export_handler.h1
-rw-r--r--libs/ardour/export_filename.cc7
-rw-r--r--libs/ardour/export_format_specification.cc8
-rw-r--r--libs/ardour/export_graph_builder.cc2
-rw-r--r--libs/ardour/export_handler.cc22
7 files changed, 39 insertions, 4 deletions
diff --git a/libs/ardour/ardour/export_filename.h b/libs/ardour/ardour/export_filename.h
index b5f0bde234..994f584e8d 100644
--- a/libs/ardour/ardour/export_filename.h
+++ b/libs/ardour/ardour/export_filename.h
@@ -92,6 +92,7 @@ class ExportFilename {
bool include_session;
bool include_revision;
bool include_channel_config;
+ bool include_format_name;
bool include_channel;
bool include_timespan;
bool include_time;
diff --git a/libs/ardour/ardour/export_format_specification.h b/libs/ardour/ardour/export_format_specification.h
index 286aa58353..fc03eb94b0 100644
--- a/libs/ardour/ardour/export_format_specification.h
+++ b/libs/ardour/ardour/export_format_specification.h
@@ -64,7 +64,7 @@ class ExportFormatSpecification : public ExportFormatBase {
ExportFormatSpecification (Session & s, XMLNode const & state);
public:
- ExportFormatSpecification (ExportFormatSpecification const & other);
+ ExportFormatSpecification (ExportFormatSpecification const & other, bool modify_name = true);
~ExportFormatSpecification ();
/* compatibility */
diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h
index 235219e2f5..d4dd5627f7 100644
--- a/libs/ardour/ardour/export_handler.h
+++ b/libs/ardour/ardour/export_handler.h
@@ -106,6 +106,7 @@ class ExportHandler : public ExportElementFactory
private:
+ void handle_duplicate_format_extensions();
int process (framecnt_t frames);
Session & session;
diff --git a/libs/ardour/export_filename.cc b/libs/ardour/export_filename.cc
index a5b0a07a60..9e126ed087 100644
--- a/libs/ardour/export_filename.cc
+++ b/libs/ardour/export_filename.cc
@@ -49,6 +49,7 @@ ExportFilename::ExportFilename (Session & session) :
include_session (false),
include_revision (false),
include_channel_config (false),
+ include_format_name (false),
include_channel (false),
include_timespan (true), // Include timespan name always
include_time (false),
@@ -206,6 +207,12 @@ ExportFilename::get_path (ExportFormatSpecPtr format) const
filename_empty = false;
}
+ if (include_format_name) {
+ path += filename_empty ? "" : "_";
+ path += format->name();
+ filename_empty = false;
+ }
+
path += ".";
path += format->extension ();
diff --git a/libs/ardour/export_format_specification.cc b/libs/ardour/export_format_specification.cc
index ce61babcbf..b139faeee2 100644
--- a/libs/ardour/export_format_specification.cc
+++ b/libs/ardour/export_format_specification.cc
@@ -189,13 +189,17 @@ 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)
{
- 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;
diff --git a/libs/ardour/export_graph_builder.cc b/libs/ardour/export_graph_builder.cc
index cc7992ecd2..c7875c0b9b 100644
--- a/libs/ardour/export_graph_builder.cc
+++ b/libs/ardour/export_graph_builder.cc
@@ -129,7 +129,7 @@ ExportGraphBuilder::add_config (FileSpec const & config)
// If the sample rate is "session rate", change it to the real value.
// However, we need to copy it to not change the config which is saved...
FileSpec new_config (config);
- new_config.format.reset(new ExportFormatSpecification(*new_config.format));
+ new_config.format.reset(new ExportFormatSpecification(*new_config.format, false));
if(new_config.format->sample_rate() == ExportFormatBase::SR_Session) {
framecnt_t session_rate = session.nominal_frame_rate();
new_config.format->set_sample_rate(ExportFormatBase::nearest_sample_rate(session_rate));
diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc
index d93ec7779a..4a6b0552c5 100644
--- a/libs/ardour/export_handler.cc
+++ b/libs/ardour/export_handler.cc
@@ -171,6 +171,7 @@ ExportHandler::start_timespan ()
timespan_bounds = config_map.equal_range (current_timespan);
graph_builder->reset ();
graph_builder->set_current_timespan (current_timespan);
+ handle_duplicate_format_extensions();
for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
// Filenames can be shared across timespans
FileSpec & spec = it->second;
@@ -186,6 +187,27 @@ ExportHandler::start_timespan ()
session.start_audio_export (process_position);
}
+void
+ExportHandler::handle_duplicate_format_extensions()
+{
+ typedef std::map<std::string, int> ExtCountMap;
+
+ ExtCountMap counts;
+ for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
+ counts[it->second.format->extension()]++;
+ }
+
+ bool duplicates_found = false;
+ for (ExtCountMap::iterator it = counts.begin(); it != counts.end(); ++it) {
+ if (it->second > 1) { duplicates_found = true; }
+ }
+
+ // Set this always, as the filenames are shared...
+ for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
+ it->second.filename->include_format_name = duplicates_found;
+ }
+}
+
int
ExportHandler::process (framecnt_t frames)
{