X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_channel_configuration.h;h=4cab886c88d78811343a599ab97b4463f7c58f9a;hb=52d746c5fb39263a42dd33de12e101c3fbeafaa9;hp=70b2bb00d9fef861b5f81e42305c0d98e53879de;hpb=3b89d9eaa03406a5e03648f47734211f09b89d62;p=ardour.git diff --git a/libs/ardour/ardour/export_channel_configuration.h b/libs/ardour/ardour/export_channel_configuration.h index 70b2bb00d9..4cab886c88 100644 --- a/libs/ardour/ardour/export_channel_configuration.h +++ b/libs/ardour/ardour/export_channel_configuration.h @@ -22,110 +22,68 @@ #define __ardour_export_channel_configuration_h__ #include +#include +#include -#include -#include +#include #include "ardour/export_channel.h" -#include "ardour/export_status.h" -#include "ardour/ardour.h" +#include "ardour/export_pointers.h" #include "pbd/xml++.h" namespace ARDOUR { -class ExportHandler; -class AudioPort; -class ExportChannel; -class ExportFormatSpecification; -class ExportFilename; -class ExportProcessor; -class ExportTimespan; class Session; -class ExportChannelConfiguration +class LIBARDOUR_API ExportChannelConfiguration : public boost::enable_shared_from_this { - private: - typedef boost::shared_ptr ProcessorPtr; - typedef boost::shared_ptr TimespanPtr; - typedef boost::shared_ptr FormatPtr; - typedef boost::shared_ptr FilenamePtr; - - typedef std::pair FileConfig; - typedef std::list FileConfigList; - - /// Struct for threading, acts like a pointer to a ExportChannelConfiguration - struct WriterThread { - WriterThread (ExportChannelConfiguration & channel_config) : - channel_config (channel_config), running (false) {} - - ExportChannelConfiguration * operator-> () { return &channel_config; } - ExportChannelConfiguration & operator* () { return channel_config; } - - ExportChannelConfiguration & channel_config; - - pthread_t thread; - bool running; - }; private: friend class ExportElementFactory; ExportChannelConfiguration (Session & session); - + public: + bool operator== (ExportChannelConfiguration const & other) const { return channels == other.channels; } + bool operator!= (ExportChannelConfiguration const & other) const { return channels != other.channels; } + XMLNode & get_state (); int set_state (const XMLNode &); - + typedef std::list ChannelList; - + ChannelList const & get_channels () const { return channels; } bool all_channels_have_ports () const; - - Glib::ustring name () const { return _name; } - void set_name (Glib::ustring name) { _name = name; } + + std::string name () const { return _name; } + void set_name (std::string name) { _name = name; } void set_split (bool value) { split = value; } - + + RegionExportChannelFactory::Type region_processing_type() const { return region_type; } + void set_region_processing_type(RegionExportChannelFactory::Type type) { region_type = type; } + bool get_split () const { return split; } uint32_t get_n_chans () const { return channels.size(); } - + void register_channel (ExportChannelPtr channel) { channels.push_back (channel); } - void register_file_config (FormatPtr format, FilenamePtr filename) { file_configs.push_back (FileConfig (format, filename)); } - + void register_channels (ChannelList const & new_channels) { + std::copy (new_channels.begin(), new_channels.end(), std::back_inserter(channels)); + } void clear_channels () { channels.clear (); } - - /// Writes all files for this channel config @return true if a new thread was spawned - bool write_files (boost::shared_ptr new_processor); - sigc::signal FilesWritten; - - // Tells the handler the necessary information for it to handle tempfiles - void register_with_timespan (TimespanPtr timespan); - - void unregister_all (); - - private: - - typedef boost::shared_ptr ExportStatusPtr; - Session & session; + /** 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 > & configs); - // processor has to be prepared before doing this. - void write_file (); - - /// The actual write files, needed for threading - static void * _write_files (void *arg); - WriterThread writer_thread; - ProcessorPtr processor; - ExportStatusPtr status; + private: - bool files_written; + Session & session; - TimespanPtr timespan; ChannelList channels; - FileConfigList file_configs; - bool split; // Split to mono files - Glib::ustring _name; + std::string _name; + RegionExportChannelFactory::Type region_type; }; } // namespace ARDOUR