mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-23 07:06:23 +01:00
Fix split channel export (which was broken during export refactoring)
Possibly fixes bug #3052 Also clarify some comments which weren't quite clear :) git-svn-id: svn://localhost/ardour2/branches/3.0@6808 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
14b0ca31bc
commit
a743d20dce
5 changed files with 55 additions and 3 deletions
|
|
@ -22,8 +22,8 @@
|
||||||
#define __ardour_export_channel_configuration_h__
|
#define __ardour_export_channel_configuration_h__
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
|
|
||||||
#include "ardour/export_channel.h"
|
#include "ardour/export_channel.h"
|
||||||
#include "ardour/export_status.h"
|
#include "ardour/export_status.h"
|
||||||
|
|
@ -43,7 +43,7 @@ class ExportProcessor;
|
||||||
class ExportTimespan;
|
class ExportTimespan;
|
||||||
class Session;
|
class Session;
|
||||||
|
|
||||||
class ExportChannelConfiguration
|
class ExportChannelConfiguration : public boost::enable_shared_from_this<ExportChannelConfiguration>
|
||||||
{
|
{
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -71,6 +71,10 @@ class ExportChannelConfiguration
|
||||||
|
|
||||||
void register_channel (ExportChannelPtr channel) { channels.push_back (channel); }
|
void register_channel (ExportChannelPtr channel) { channels.push_back (channel); }
|
||||||
void clear_channels () { channels.clear (); }
|
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:
|
private:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,8 @@ class ExportFilename {
|
||||||
TimeFormat time_format;
|
TimeFormat time_format;
|
||||||
|
|
||||||
Glib::ustring get_formatted_time (Glib::ustring const & format) const;
|
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;
|
TimespanPtr timespan;
|
||||||
ChannelConfigPtr channel_config;
|
ChannelConfigPtr channel_config;
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,8 @@ class ExportGraphBuilder
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void add_split_config (FileSpec const & config);
|
||||||
|
|
||||||
class Encoder : public sigc::trackable {
|
class Encoder : public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config);
|
template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config);
|
||||||
|
|
|
||||||
|
|
@ -99,4 +99,22 @@ ExportChannelConfiguration::all_channels_have_ports () const
|
||||||
return true;
|
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
|
} // namespace ARDOUR
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,33 @@ ExportGraphBuilder::reset ()
|
||||||
|
|
||||||
void
|
void
|
||||||
ExportGraphBuilder::add_config (FileSpec const & config)
|
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) {
|
for (ChannelConfigList::iterator it = channel_configs.begin(); it != channel_configs.end(); ++it) {
|
||||||
if (*it == config) {
|
if (*it == config) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue