X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_export.cc;h=da18ceb3cbc141ea090bb92df05612989b0bcce9;hb=50131b3751e6ed5c9ed7450406049b2195ea9ecf;hp=90ad257d3bdf027159bba591297043df33442b7a;hpb=bc89fe0147c04b67141936d109c00dfd4d69cc4b;p=ardour.git diff --git a/libs/ardour/session_export.cc b/libs/ardour/session_export.cc index 90ad257d3b..da18ceb3cb 100644 --- a/libs/ardour/session_export.cc +++ b/libs/ardour/session_export.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 1999-2008 Paul Davis + Copyright (C) 1999-2008 Paul Davis 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 @@ -19,20 +19,19 @@ #include -#include +#include "pbd/error.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "ardour/audio_diskstream.h" +#include "ardour/audioengine.h" +#include "ardour/butler.h" +#include "ardour/export_failed.h" +#include "ardour/export_file_io.h" +#include "ardour/export_handler.h" +#include "ardour/export_status.h" +#include "ardour/export_utilities.h" +#include "ardour/route.h" +#include "ardour/session.h" #include "i18n.h" @@ -46,7 +45,7 @@ Session::get_export_handler () if (!export_handler) { export_handler.reset (new ExportHandler (*this)); } - + return export_handler; } @@ -56,7 +55,7 @@ Session::get_export_status () if (!export_status) { export_status.reset (new ExportStatus ()); } - + return export_status; } @@ -66,7 +65,7 @@ Session::pre_export () { get_export_status (); // Init export_status - wait_till_butler_finished (); + _butler->wait_until_finished (); /* take everyone out of awrite to avoid disasters */ @@ -86,11 +85,11 @@ Session::pre_export () /* no slaving */ - post_export_slave = Config->get_slave_source (); + post_export_sync = config.get_external_sync (); post_export_position = _transport_frame; - Config->set_slave_source (None); - + config.set_external_sync (false); + _exporting = true; export_status->running = true; export_status->Aborting.connect (sigc::hide_return (sigc::mem_fun (*this, &Session::stop_audio_export))); @@ -127,7 +126,7 @@ Session::start_audio_export (nframes_t position, bool realtime) */ _transport_frame = position; - + _exporting_realtime = realtime; export_status->stop = false; @@ -139,11 +138,11 @@ Session::start_audio_export (nframes_t position, bool realtime) set_transport_speed (1.0, false); butler_transport_work (); - g_atomic_int_set (&butler_should_do_transport_work, 0); + g_atomic_int_set (&_butler->should_do_transport_work, 0); post_transport (); /* we are ready to go ... */ - + if (!_engine.connected()) { return -1; } @@ -168,21 +167,21 @@ Session::process_export (nframes_t nframes) stop_audio_export (); return; } - + if (!_exporting_realtime) { /* make sure we've caught up with disk i/o, since we're running faster than realtime c/o JACK. */ - - wait_till_butler_finished (); + + _butler->wait_until_finished (); } - + /* do the usual stuff */ - + process_without_events (nframes); - + /* handle export */ - + ProcessExport (nframes); } catch (ExportFailed e) { @@ -193,7 +192,7 @@ Session::process_export (nframes_t nframes) int Session::process_export_fw (nframes_t nframes) { - process_export (nframes); + process_export (nframes); return 0; } @@ -211,15 +210,15 @@ Session::stop_audio_export () stuff that stop_transport() implements. */ - realtime_stop (true); - schedule_butler_transport_work (); + realtime_stop (true, true); + _butler->schedule_transport_work (); if (!export_status->aborted()) { ExportReadFinished (); } else { finalize_audio_export (); } - + return 0; } @@ -236,7 +235,7 @@ Session::finalize_audio_export () } /* Clean up */ - + ProcessExport.clear(); ExportReadFinished.clear(); export_freewheel_connection.disconnect(); @@ -245,8 +244,8 @@ Session::finalize_audio_export () /* restart slaving */ - if (post_export_slave != None) { - Config->set_slave_source (post_export_slave); + if (post_export_sync) { + config.set_external_sync (true); } else { locate (post_export_position, false, false, false); }