X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_profile_manager.h;h=b0285f8ecce11733b6a2d4582ee61bce19468ab0;hb=faefc3ba9a42417b133235e0a9efeaba467aad5f;hp=d2f1c162e079007e40865b24932743900b44f0fd;hpb=6f4daaae0af346bc8a3a1b528a043b45198b687a;p=ardour.git diff --git a/libs/ardour/ardour/export_profile_manager.h b/libs/ardour/ardour/export_profile_manager.h index d2f1c162e0..b0285f8ecc 100644 --- a/libs/ardour/ardour/export_profile_manager.h +++ b/libs/ardour/ardour/export_profile_manager.h @@ -24,159 +24,159 @@ #include #include #include -#include #include +#include #include -#include -#include -#include -#include -#include -#include +#include "pbd/uuid.h" +#include "pbd/file_utils.h" +#include "pbd/xml++.h" -#include -#include -#include - -using std::string; -using std::list; -using std::set; +#include "ardour/filesystem_paths.h" +#include "ardour/location.h" +#include "ardour/libardour_visibility.h" +#include "ardour/types.h" +#include "ardour/export_handler.h" namespace ARDOUR { class ExportHandler; -class ExportTimespan; -class ExportChannelConfiguration; -class ExportFormatSpecification; -class ExportFilename; -class ExportPreset; class Location; class Session; /// Manages (de)serialization of export profiles and related classes -class ExportProfileManager +class LIBARDOUR_API ExportProfileManager { public: - ExportProfileManager (Session & s); + enum ExportType { + RegularExport, + RangeExport, + SelectionExport, + RegionExport, + StemExport + }; + + ExportProfileManager (Session & s, ExportType type); ~ExportProfileManager (); void load_profile (); void prepare_for_export (); - - typedef boost::shared_ptr PresetPtr; - typedef std::list PresetList; - + + ExportType type () const { return _type; } + + typedef std::list PresetList; + PresetList const & get_presets () { return preset_list; } - bool load_preset (PresetPtr preset); - PresetPtr save_preset (string const & name); + bool load_preset (ExportPresetPtr preset); + ExportPresetPtr new_preset (std::string const & name); + ExportPresetPtr save_preset (std::string const & name); void remove_preset (); private: typedef boost::shared_ptr HandlerPtr; - typedef std::pair FilePair; - typedef std::map FileMap; - + typedef std::pair FilePair; + typedef std::map FileMap; + + ExportType _type; + std::string xml_node_name; HandlerPtr handler; Session & session; - + + std::string preset_filename (std::string const & preset_name); void load_presets (); - void load_preset_from_disk (PBD::sys::path const & path); - + void load_preset_from_disk (std::string const & path); + bool set_state (XMLNode const & root); bool set_global_state (XMLNode const & root); bool set_local_state (XMLNode const & root); - + void serialize_profile (XMLNode & root); void serialize_global_profile (XMLNode & root); void serialize_local_profile (XMLNode & root); - - PresetList preset_list; - PresetPtr current_preset; - FileMap preset_file_map; - - std::vector find_file (std::string const & pattern); - - PBD::sys::path export_config_dir; - PBD::SearchPath search_path; + + PresetList preset_list; + ExportPresetPtr current_preset; + FileMap preset_file_map; + + std::vector find_file (std::string const & pattern); + + std::string export_config_dir; + PBD::Searchpath search_path; /* Timespans */ public: - typedef boost::shared_ptr TimespanPtr; - typedef std::list TimespanList; + typedef std::list TimespanList; typedef boost::shared_ptr TimespanListPtr; typedef std::list LocationList; enum TimeFormat { - SMPTE, + Timecode, BBT, MinSec, Frames, - Off }; struct TimespanState { TimespanListPtr timespans; TimeFormat time_format; - - boost::shared_ptr session_range; + boost::shared_ptr selection_range; boost::shared_ptr ranges; - - TimespanState (boost::shared_ptr session_range, - boost::shared_ptr selection_range, - boost::shared_ptr ranges) : - timespans (new TimespanList ()), - time_format (SMPTE), - - session_range (session_range), - selection_range (selection_range), - ranges (ranges) + + TimespanState (boost::shared_ptr selection_range, + boost::shared_ptr ranges) + : timespans (new TimespanList ()) + , time_format (Timecode) + , selection_range (selection_range) + , ranges (ranges) {} }; - + typedef boost::shared_ptr TimespanStatePtr; typedef std::list TimespanStateList; - - void set_selection_range (nframes_t start = 0, nframes_t end = 0); + + void set_selection_range (framepos_t start = 0, framepos_t end = 0); + std::string set_single_range (framepos_t start, framepos_t end, std::string name); TimespanStateList const & get_timespans () { return check_list (timespans); } - + private: TimespanStateList timespans; bool init_timespans (XMLNodeList nodes); - + TimespanStatePtr deserialize_timespan (XMLNode & root); XMLNode & serialize_timespan (TimespanStatePtr state); - + /* Locations */ - + void update_ranges (); - - boost::shared_ptr session_range; + boost::shared_ptr selection_range; boost::shared_ptr ranges; + bool single_range_mode; + boost::shared_ptr single_range; + /* Channel Configs */ public: - typedef boost::shared_ptr ChannelConfigPtr; - struct ChannelConfigState { - ChannelConfigPtr config; - - ChannelConfigState (ChannelConfigPtr ptr) : config (ptr) {} + ExportChannelConfigPtr config; + + ChannelConfigState (ExportChannelConfigPtr ptr) : config (ptr) {} }; typedef boost::shared_ptr ChannelConfigStatePtr; typedef std::list ChannelConfigStateList; - + ChannelConfigStateList const & get_channel_configs () { return check_list (channel_configs); } + void clear_channel_configs () { channel_configs.clear(); } + ChannelConfigStatePtr add_channel_config (); private: @@ -187,28 +187,27 @@ class ExportProfileManager /* Formats */ public: - typedef boost::shared_ptr FormatPtr; - typedef std::list FormatList; + typedef std::list FormatList; struct FormatState { boost::shared_ptr list; - FormatPtr format; - - FormatState (boost::shared_ptr list, FormatPtr format) : + ExportFormatSpecPtr format; + + FormatState (boost::shared_ptr list, ExportFormatSpecPtr format) : list (list), format (format) {} }; typedef boost::shared_ptr FormatStatePtr; typedef std::list FormatStateList; - + FormatStateList const & get_formats () { return check_list (formats); } FormatStatePtr duplicate_format_state (FormatStatePtr state); void remove_format_state (FormatStatePtr state); - - PBD::sys::path save_format_to_disk (FormatPtr format); - void remove_format_profile (FormatPtr format); - FormatPtr get_new_format (FormatPtr original); - - sigc::signal FormatListChanged; + + std::string save_format_to_disk (ExportFormatSpecPtr format); + void remove_format_profile (ExportFormatSpecPtr format); + ExportFormatSpecPtr get_new_format (ExportFormatSpecPtr original); + + PBD::Signal0 FormatListChanged; private: @@ -219,47 +218,47 @@ class ExportProfileManager XMLNode & serialize_format (FormatStatePtr state); void load_formats (); - - FormatPtr load_format (XMLNode & node); - void load_format_from_disk (PBD::sys::path const & path); + + ExportFormatSpecPtr load_format (XMLNode & node); + void load_format_from_disk (std::string const & path); boost::shared_ptr format_list; FileMap format_file_map; - + /* Filenames */ public: - - typedef boost::shared_ptr FilenamePtr; - + struct FilenameState { - FilenamePtr filename; - - FilenameState (FilenamePtr ptr) : filename (ptr) {} + ExportFilenamePtr filename; + + FilenameState (ExportFilenamePtr ptr) : filename (ptr) {} }; typedef boost::shared_ptr FilenameStatePtr; typedef std::list FilenameStateList; - + FilenameStateList const & get_filenames () { return check_list (filenames); } FilenameStatePtr duplicate_filename_state (FilenameStatePtr state); void remove_filename_state (FilenameStatePtr state); + std::string get_sample_filename_for_format (ExportFilenamePtr filename, ExportFormatSpecPtr format); + private: FilenameStateList filenames; - + bool init_filenames (XMLNodeList nodes); - FilenamePtr load_filename (XMLNode & node); + ExportFilenamePtr load_filename (XMLNode & node); /* Warnings */ public: struct Warnings { - std::list errors; - std::list warnings; - std::list conflicting_filenames; + std::list errors; + std::list warnings; + std::list conflicting_filenames; }; - + boost::shared_ptr get_warnings (); - + private: void check_config (boost::shared_ptr warnings, TimespanStatePtr timespan_state, @@ -267,8 +266,15 @@ class ExportProfileManager FormatStatePtr format_state, FilenameStatePtr filename_state); + bool check_format (ExportFormatSpecPtr format, uint32_t channels); + bool check_sndfile_format (ExportFormatSpecPtr format, unsigned int channels); + /* Utilities */ + void build_filenames(std::list & result, ExportFilenamePtr filename, + TimespanListPtr timespans, ExportChannelConfigPtr channel_config, + ExportFormatSpecPtr format); + /* Element state lists should never be empty, this is used to check them */ template std::list const &