#define __ardour_export_handler_h__
#include <map>
-#include <list>
#include <fstream>
+#include <boost/operators.hpp>
#include <boost/shared_ptr.hpp>
-#include "ardour/ardour.h"
+#include "ardour/export_pointers.h"
#include "ardour/session.h"
#include "ardour/types.h"
class ExportFormatSpecification;
class ExportFilename;
class ExportGraphBuilder;
-
+class Location;
class ExportElementFactory
{
- public:
- typedef boost::shared_ptr<ExportTimespan> TimespanPtr;
- typedef boost::shared_ptr<ExportChannelConfiguration> ChannelConfigPtr;
- typedef boost::shared_ptr<ExportFormatSpecification> FormatPtr;
- typedef boost::shared_ptr<ExportFilename> 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;
public:
struct FileSpec {
FileSpec() {}
- FileSpec (ChannelConfigPtr channel_config, FormatPtr format, FilenamePtr filename, boost::shared_ptr<AudioGrapher::BroadcastInfo> broadcast_info)
+ FileSpec (ExportChannelConfigPtr channel_config, ExportFormatSpecPtr format,
+ ExportFilenamePtr filename, BroadcastInfoPtr broadcast_info)
: channel_config (channel_config)
, format (format)
, filename (filename)
, broadcast_info (broadcast_info)
{}
- ChannelConfigPtr channel_config;
- FormatPtr format;
- FilenamePtr filename;
- boost::shared_ptr<AudioGrapher::BroadcastInfo> broadcast_info;
+ ExportChannelConfigPtr channel_config;
+ ExportFormatSpecPtr format;
+ ExportFilenamePtr filename;
+ BroadcastInfoPtr broadcast_info;
};
-
- private:
-
- /* Stuff for export configs
- * The multimap maps timespans to file specifications
- */
-
- typedef std::pair<TimespanPtr, FileSpec> ConfigPair;
- typedef std::multimap<TimespanPtr, FileSpec> ConfigMap;
-
- typedef boost::shared_ptr<ExportGraphBuilder> GraphBuilderPtr;
- typedef boost::shared_ptr<ExportStatus> StatusPtr;
private:
/* Session::get_export_handler() should be used to obtain an export handler
public:
~ExportHandler ();
- bool add_export_config (TimespanPtr timespan, ChannelConfigPtr channel_config, FormatPtr format, FilenamePtr filename, boost::shared_ptr<AudioGrapher::BroadcastInfo> broadcast_info);
- void do_export (bool rt = false);
+ bool add_export_config (ExportTimespanPtr timespan, ExportChannelConfigPtr channel_config,
+ ExportFormatSpecPtr format, ExportFilenamePtr filename,
+ BroadcastInfoPtr broadcast_info);
+ void do_export ();
+
+ std::string get_cd_marker_filename(std::string filename, CDMarkerFormat format);
private:
- int process (nframes_t frames);
-
+ int process (framecnt_t frames);
+
Session & session;
- GraphBuilderPtr graph_builder;
- StatusPtr export_status;
+ boost::shared_ptr<ExportGraphBuilder> graph_builder;
+ ExportStatusPtr export_status;
+
+ /* The timespan and corresponding file specifications that we are exporting;
+ there can be multiple FileSpecs for each ExportTimespan.
+ */
+ typedef std::multimap<ExportTimespanPtr, FileSpec> ConfigMap;
ConfigMap config_map;
- bool realtime;
bool normalizing;
/* Timespan management */
void start_timespan ();
- int process_timespan (nframes_t frames);
+ int process_timespan (framecnt_t frames);
int process_normalize ();
void finish_timespan ();
typedef std::pair<ConfigMap::iterator, ConfigMap::iterator> TimespanBounds;
- TimespanPtr current_timespan;
+ ExportTimespanPtr current_timespan;
TimespanBounds timespan_bounds;
-
+
PBD::ScopedConnection process_connection;
- sframes_t process_position;
+ 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), marker(0),
- 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;
- sframes_t track_position;
- sframes_t track_duration;
- sframes_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;
- sframes_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);
void write_index_info_cue (CDMarkerStatus & status);
void write_index_info_toc (CDMarkerStatus & status);
- void frames_to_cd_frames_string (char* buf, sframes_t when);
+ void frames_to_cd_frames_string (char* buf, framepos_t when);
+ std::string toc_escape_cdtext (const std::string&);
+ std::string toc_escape_filename (const std::string&);
+ std::string cue_escape_cdtext (const std::string& txt);
int cue_tracknum;
int cue_indexnum;