mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-25 07:57:43 +01:00
small changes to export code to hopefully fix some bugs with range export(s)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3441 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
66016dfef7
commit
a29b3b862a
6 changed files with 51 additions and 31 deletions
|
|
@ -974,6 +974,8 @@ ExportDialog::do_export ()
|
|||
progress_connection = Glib::signal_timeout().connect (mem_fun(*this, &ExportDialog::progress_timeout), 100);
|
||||
cancel_label.set_text (_("Stop Export"));
|
||||
|
||||
session->pre_export ();
|
||||
|
||||
export_audio_data();
|
||||
|
||||
progress_connection.disconnect ();
|
||||
|
|
@ -1228,7 +1230,7 @@ ExportDialog::initSpec(string &filepath)
|
|||
{
|
||||
spec.path = filepath;
|
||||
spec.progress = 0;
|
||||
spec.running = true;
|
||||
spec.running = false;
|
||||
spec.stop = false;
|
||||
spec.port_map.clear();
|
||||
|
||||
|
|
|
|||
|
|
@ -81,8 +81,6 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
|
|||
spec.start_frame = currentLocation->start();
|
||||
spec.end_frame = currentLocation->end();
|
||||
|
||||
getSession().request_locate(spec.start_frame, false);
|
||||
|
||||
if (getSession().start_audio_export(spec)){
|
||||
// if export fails
|
||||
return;
|
||||
|
|
@ -100,6 +98,8 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
|
|||
}
|
||||
|
||||
current_range_marker_index++;
|
||||
|
||||
getSession().stop_audio_export (spec);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -680,7 +680,7 @@ set_pango_fontsize ()
|
|||
|
||||
/* Cairo rendering, in case there is any */
|
||||
|
||||
pango_cairo_font_map_set_resolution ((PangoCairoFontMap*) pango_cairo_font_map_get_default(), val/1024);
|
||||
// pango_cairo_font_map_set_resolution ((PangoCairoFontMap*) pango_cairo_font_map_get_default(), val/1024);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -600,8 +600,9 @@ class Session : public PBD::StatefulDestructible
|
|||
SlaveSource post_export_slave;
|
||||
nframes_t post_export_position;
|
||||
|
||||
int start_audio_export (ARDOUR::AudioExportSpecification&);
|
||||
int stop_audio_export (ARDOUR::AudioExportSpecification&);
|
||||
int pre_export ();
|
||||
int start_audio_export (ARDOUR::AudioExportSpecification&);
|
||||
int stop_audio_export (ARDOUR::AudioExportSpecification&);
|
||||
void finalize_audio_export ();
|
||||
static sigc::signal<void, std::string, std::string> Exported;
|
||||
|
||||
|
|
@ -1068,7 +1069,7 @@ class Session : public PBD::StatefulDestructible
|
|||
void set_slave_source (SlaveSource);
|
||||
|
||||
bool _exporting;
|
||||
int prepare_to_export (ARDOUR::AudioExportSpecification&);
|
||||
int prepare_to_export (ARDOUR::AudioExportSpecification&);
|
||||
|
||||
void prepare_diskstreams ();
|
||||
void commit_diskstreams (nframes_t, bool& session_requires_butler);
|
||||
|
|
|
|||
|
|
@ -253,6 +253,12 @@ AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
|
|||
output_data = (void*) malloc (sample_bytes * out_samples_max);
|
||||
}
|
||||
|
||||
pos = start_frame;
|
||||
end_frame = end_frame;
|
||||
total_frames = end_frame - start_frame;
|
||||
running = true;
|
||||
do_freewheel = false; /* force a call to ::prepare_to_export() before proceeding to normal operation */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -435,12 +441,6 @@ Session::start_audio_export (AudioExportSpecification& spec)
|
|||
return -1;
|
||||
}
|
||||
|
||||
spec.pos = spec.start_frame;
|
||||
spec.end_frame = spec.end_frame;
|
||||
spec.total_frames = spec.end_frame - spec.start_frame;
|
||||
spec.running = true;
|
||||
spec.do_freewheel = false; /* force a call to ::prepare_to_export() before proceeding to normal operation */
|
||||
|
||||
spec.freewheel_connection = _engine.Freewheel.connect (sigc::bind (mem_fun (*this, &Session::process_export), &spec));
|
||||
|
||||
return _engine.freewheel (true);
|
||||
|
|
@ -454,16 +454,14 @@ Session::stop_audio_export (AudioExportSpecification& spec)
|
|||
spec.freewheel_connection.disconnect ();
|
||||
spec.clear (); /* resets running/stop etc */
|
||||
|
||||
Exported( spec.path, name() );
|
||||
Exported (spec.path, name());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
Session::prepare_to_export (AudioExportSpecification& spec)
|
||||
int
|
||||
Session::pre_export ()
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
wait_till_butler_finished ();
|
||||
|
||||
/* take everyone out of awrite to avoid disasters */
|
||||
|
|
@ -476,6 +474,27 @@ Session::prepare_to_export (AudioExportSpecification& spec)
|
|||
}
|
||||
}
|
||||
|
||||
/* make sure we are actually rolling */
|
||||
|
||||
if (get_record_enabled()) {
|
||||
disable_record (false);
|
||||
}
|
||||
|
||||
/* no slaving */
|
||||
|
||||
post_export_slave = Config->get_slave_source ();
|
||||
post_export_position = _transport_frame;
|
||||
|
||||
Config->set_slave_source (None);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
Session::prepare_to_export (AudioExportSpecification& spec)
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
/* get everyone to the right position */
|
||||
|
||||
{
|
||||
|
|
@ -491,22 +510,19 @@ Session::prepare_to_export (AudioExportSpecification& spec)
|
|||
}
|
||||
}
|
||||
|
||||
/* make sure we are actually rolling */
|
||||
|
||||
if (get_record_enabled()) {
|
||||
disable_record (false);
|
||||
}
|
||||
/* we just did the core part of a locate() call above, but
|
||||
for the sake of any GUI, put the _transport_frame in
|
||||
the right place too.
|
||||
*/
|
||||
|
||||
_transport_frame = spec.start_frame;
|
||||
_exporting = true;
|
||||
|
||||
/* no slaving */
|
||||
|
||||
post_export_slave = Config->get_slave_source ();
|
||||
post_export_position = _transport_frame;
|
||||
|
||||
Config->set_slave_source (None);
|
||||
|
||||
/* get transport ready */
|
||||
/* get transport ready. note how this is calling butler functions
|
||||
from a non-butler thread. we waited for the butler to stop
|
||||
what it was doing earlier in Session::pre_export() and nothing
|
||||
since then has re-awakened it.
|
||||
*/
|
||||
|
||||
set_transport_speed (1.0, false);
|
||||
butler_transport_work ();
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
|
|||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL_PATH = @PERL_PATH@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue