X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_handler.h;h=025ab063133dd3b1336776a63afb5490646775ad;hb=9a2164056752a958542f2d162ed3bf0f9c304121;hp=fad21ac7800475c3a08bf516cc14414d03544c93;hpb=c83e48e07a0b4790512c6251d8ad8f941c881021;p=ardour.git diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h index fad21ac780..025ab06313 100644 --- a/libs/ardour/ardour/export_handler.h +++ b/libs/ardour/ardour/export_handler.h @@ -25,12 +25,18 @@ #include #include +#include #include -#include "ardour/session.h" #include "ardour/ardour.h" +#include "ardour/export_pointers.h" +#include "ardour/session.h" #include "ardour/types.h" +namespace AudioGrapher { + class BroadcastInfo; +} + namespace ARDOUR { @@ -38,62 +44,60 @@ class ExportTimespan; class ExportChannelConfiguration; class ExportFormatSpecification; class ExportFilename; -class ExportProcessor; +class ExportGraphBuilder; + class ExportElementFactory { - protected: - typedef boost::shared_ptr TimespanPtr; - typedef boost::shared_ptr ChannelConfigPtr; - typedef boost::shared_ptr FormatPtr; - typedef boost::shared_ptr FilenamePtr; - public: ExportElementFactory (Session & session); ~ExportElementFactory (); - TimespanPtr add_timespan (); + ExportTimespanPtr add_timespan (); - ChannelConfigPtr add_channel_config (); + ExportChannelConfigPtr add_channel_config (); - FormatPtr add_format (); - FormatPtr add_format (XMLNode const & state); - FormatPtr add_format_copy (FormatPtr other); + ExportFormatSpecPtr add_format (); + ExportFormatSpecPtr add_format (XMLNode const & state); + ExportFormatSpecPtr add_format_copy (ExportFormatSpecPtr other); - FilenamePtr add_filename (); - FilenamePtr add_filename_copy (FilenamePtr other); + ExportFilenamePtr add_filename (); + ExportFilenamePtr add_filename_copy (ExportFilenamePtr other); private: Session & session; }; -class ExportHandler : public ExportElementFactory, public sigc::trackable +class ExportHandler : public ExportElementFactory { + public: + struct FileSpec { + FileSpec() {} + FileSpec (ExportChannelConfigPtr channel_config, ExportFormatSpecPtr format, + ExportFilenamePtr filename, BroadcastInfoPtr broadcast_info) + : channel_config (channel_config) + , format (format) + , filename (filename) + , broadcast_info (broadcast_info) + {} + + ExportChannelConfigPtr channel_config; + ExportFormatSpecPtr format; + ExportFilenamePtr filename; + BroadcastInfoPtr broadcast_info; + }; + private: /* Stuff for export configs * The multimap maps timespans to file specifications */ - struct FileSpec { - - FileSpec (ChannelConfigPtr channel_config, FormatPtr format, FilenamePtr filename) : - channel_config (channel_config), - format (format), - filename (filename) - {} - - ChannelConfigPtr channel_config; - FormatPtr format; - FilenamePtr filename; - }; - - typedef std::pair ConfigPair; - typedef std::multimap ConfigMap; + typedef std::pair ConfigPair; + typedef std::multimap ConfigMap; - typedef boost::shared_ptr ProcessorPtr; - typedef boost::shared_ptr StatusPtr; + typedef boost::shared_ptr GraphBuilderPtr; private: /* Session::get_export_handler() should be used to obtain an export handler @@ -106,50 +110,70 @@ class ExportHandler : public ExportElementFactory, public sigc::trackable public: ~ExportHandler (); - bool add_export_config (TimespanPtr timespan, ChannelConfigPtr channel_config, FormatPtr format, FilenamePtr filename); + bool add_export_config (ExportTimespanPtr timespan, ExportChannelConfigPtr channel_config, + ExportFormatSpecPtr format, ExportFilenamePtr filename, + BroadcastInfoPtr broadcast_info); void do_export (bool rt = false); + std::string get_cd_marker_filename(std::string filename, CDMarkerFormat format); + private: + int process (framecnt_t frames); + Session & session; - ProcessorPtr processor; - StatusPtr export_status; + GraphBuilderPtr graph_builder; + ExportStatusPtr export_status; ConfigMap config_map; bool realtime; + bool normalizing; + + /* Timespan management */ + + void start_timespan (); + int process_timespan (framecnt_t frames); + int process_normalize (); + void finish_timespan (); + + typedef std::pair TimespanBounds; + ExportTimespanPtr current_timespan; + TimespanBounds timespan_bounds; - sigc::connection files_written_connection; - std::list files_written; + PBD::ScopedConnection process_connection; + framepos_t process_position; /* CD Marker stuff */ struct CDMarkerStatus { - CDMarkerStatus (std::string out_file, TimespanPtr timespan, FormatPtr format, std::string filename) : - out (out_file.c_str()), timespan (timespan), format (format), filename (filename), - track_number (1), track_position (0), track_duration (0), track_start_frame (0), - index_number (1), index_position (0) + CDMarkerStatus (std::string out_file, ExportTimespanPtr timespan, + ExportFormatSpecPtr format, std::string filename) + : out (out_file.c_str()), timespan (timespan), format (format), filename (filename), marker(0) + , track_number (1), track_position (0), track_duration (0), track_start_frame (0) + , index_number (1), index_position (0) {} /* General info */ std::ofstream out; - TimespanPtr timespan; - FormatPtr format; - std::string filename; - Location * marker; + ExportTimespanPtr timespan; + ExportFormatSpecPtr format; + std::string filename; + Location * marker; /* Track info */ - uint32_t track_number; - nframes_t track_position; - nframes_t track_duration; - nframes_t track_start_frame; + uint32_t track_number; + framepos_t track_position; + framepos_t track_duration; + framepos_t track_start_frame; /* Index info */ uint32_t index_number; - nframes_t index_position; + framepos_t index_position; }; - void export_cd_marker_file (TimespanPtr timespan, FormatPtr file_format, std::string filename, CDMarkerFormat format); + void export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSpecPtr file_format, + std::string filename, CDMarkerFormat format); void write_cue_header (CDMarkerStatus & status); void write_toc_header (CDMarkerStatus & status); @@ -160,23 +184,11 @@ class ExportHandler : public ExportElementFactory, public sigc::trackable void write_index_info_cue (CDMarkerStatus & status); void write_index_info_toc (CDMarkerStatus & status); - void frames_to_cd_frames_string (char* buf, nframes_t when); + void frames_to_cd_frames_string (char* buf, framepos_t when); + std::string cd_marker_file_escape_string (const std::string&); int cue_tracknum; int cue_indexnum; - - /* Timespan management */ - - void start_timespan (); - void finish_timespan (); - void timespan_thread_finished (); - - typedef std::pair TimespanBounds; - TimespanPtr current_timespan; - ConfigMap::iterator current_map_it; - TimespanBounds timespan_bounds; - sigc::connection channel_config_connection; - }; } // namespace ARDOUR