diff options
Diffstat (limited to 'libs/ardour/ardour/export_timespan.h')
-rw-r--r-- | libs/ardour/ardour/export_timespan.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/libs/ardour/ardour/export_timespan.h b/libs/ardour/ardour/export_timespan.h new file mode 100644 index 0000000000..7995da36d2 --- /dev/null +++ b/libs/ardour/ardour/export_timespan.h @@ -0,0 +1,97 @@ +/* + Copyright (C) 2008 Paul Davis + Author: Sakari Bergen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __ardour_export_timespan_h__ +#define __ardour_export_timespan_h__ + +#include <map> +#include <list> + +#include <glibmm/ustring.h> + +#include <ardour/export_status.h> +#include <ardour/ardour.h> + +using Glib::ustring; + +namespace ARDOUR +{ + +class ExportChannel; +class ExportTempFile; + +class ExportTimespan : public sigc::trackable +{ + private: + typedef boost::shared_ptr<ExportTempFile> TempFilePtr; + typedef std::pair<ExportChannel const, TempFilePtr> ChannelFilePair; + typedef std::map<ExportChannel const, TempFilePtr> TempFileMap; + + private: + friend class ExportElementFactory; + ExportTimespan (ExportStatus & status, nframes_t frame_rate); + + public: + ~ExportTimespan (); + + ustring name () const { return _name; } + void set_name (ustring name) { _name = name; } + + ustring range_id () const { return _range_id; } + void set_range_id (ustring range_id) { _range_id = range_id; } + + /// Registers a channel to be read when export starts rolling + void register_channel (ExportChannel const & channel); + + /// "Rewinds" the tempfiles to start reading the beginnings again + void rewind (); + + /// Reads data from the tempfile belonging to channel into data + nframes_t get_data (float * data, nframes_t frames, ExportChannel const & channel); + + /// Reads data from each channel and writes to tempfile + int process (nframes_t frames); + + sigc::connection process_connection; + + void set_range (nframes_t start, nframes_t end); + nframes_t get_length () const { return end_frame - start_frame; } + nframes_t get_start () const { return start_frame; } + nframes_t get_end () const { return end_frame; } + + private: + + ExportStatus & status; + + nframes_t start_frame; + nframes_t end_frame; + nframes_t position; + nframes_t frame_rate; + + TempFileMap filemap; + + ustring _name; + ustring _range_id; + +}; + +} // namespace ARDOUR + +#endif /* __ardour_export_timespan_h__ */ |