X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fexport_handler.h;h=7204bc33c87193d42b34720cde56346df96375a7;hb=ef1e20f6a281f4e6a030b92382c2e3dc5809fe3c;hp=1bc80a80e976693c7e194ca7c2fcfaf23634680e;hpb=24d2b5ec9200bf46ccb42528560de4a02b7be516;p=ardour.git diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h index 1bc80a80e9..7204bc33c8 100644 --- a/libs/ardour/ardour/export_handler.h +++ b/libs/ardour/ardour/export_handler.h @@ -22,15 +22,19 @@ #define __ardour_export_handler_h__ #include -#include #include #include +#include "pbd/gstdio_compat.h" + #include "ardour/export_pointers.h" #include "ardour/session.h" #include "ardour/libardour_visibility.h" #include "ardour/types.h" +#include "pbd/signals.h" + +#include "i18n.h" namespace AudioGrapher { class BroadcastInfo; @@ -68,7 +72,8 @@ class LIBARDOUR_API ExportElementFactory Session & session; }; -class LIBARDOUR_API ExportHandler : public ExportElementFactory +/** Export Handler */ +class LIBARDOUR_API ExportHandler : public ExportElementFactory, public sigc::trackable { public: struct FileSpec { @@ -95,6 +100,8 @@ class LIBARDOUR_API ExportHandler : public ExportElementFactory friend boost::shared_ptr Session::get_export_handler(); ExportHandler (Session & session); + void command_output(std::string output, size_t size); + public: ~ExportHandler (); @@ -105,6 +112,18 @@ class LIBARDOUR_API ExportHandler : public ExportElementFactory std::string get_cd_marker_filename(std::string filename, CDMarkerFormat format); + /** signal emitted when soundcloud export reports progress updates during upload. + * The parameters are total and current bytes downloaded, and the current filename + */ + PBD::Signal3 SoundcloudProgress; + + /* upload credentials & preferences */ + std::string soundcloud_username; + std::string soundcloud_password; + bool soundcloud_make_public; + bool soundcloud_open_page; + bool soundcloud_downloadable; + private: void handle_duplicate_format_extensions(); @@ -141,13 +160,31 @@ class LIBARDOUR_API ExportHandler : public ExportElementFactory struct CDMarkerStatus { 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) + : path (out_file) + , 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 () { + if (!g_file_set_contents (path.c_str(), out.str().c_str(), -1, NULL)) { + PBD::error << string_compose(_("Editor: cannot open \"%1\" as export file for CD marker file"), path) << endmsg; + } + + } + + /* I/O */ + std::string path; + std::stringstream out; + /* General info */ - std::ofstream out; ExportTimespanPtr timespan; ExportFormatSpecPtr format; std::string filename; @@ -170,14 +207,19 @@ class LIBARDOUR_API ExportHandler : public ExportElementFactory void write_cue_header (CDMarkerStatus & status); void write_toc_header (CDMarkerStatus & status); + void write_mp4ch_header (CDMarkerStatus & status); void write_track_info_cue (CDMarkerStatus & status); void write_track_info_toc (CDMarkerStatus & status); + void write_track_info_mp4ch (CDMarkerStatus & status); void write_index_info_cue (CDMarkerStatus & status); void write_index_info_toc (CDMarkerStatus & status); + void write_index_info_mp4ch (CDMarkerStatus & status); void frames_to_cd_frames_string (char* buf, framepos_t when); + void frames_to_chapter_marks_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);