Move butler methods from Session to Butler.
[ardour.git] / libs / ardour / session_export.cc
index 3ddceb6b00bce5de374d308f4d09d492afffa181..3eda11bab73a045c97039b0f1f03c4146b882253 100644 (file)
@@ -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
 
 #include <sigc++/bind.h>
 
-#include <pbd/error.h>
+#include "pbd/error.h"
 #include <glibmm/thread.h>
 
-#include <ardour/export_failed.h>
-#include <ardour/export_file_io.h>
-#include <ardour/export_utilities.h>
-#include <ardour/export_handler.h>
-#include <ardour/export_status.h>
-#include <ardour/timestamps.h>
-#include <ardour/ardour.h>
-#include <ardour/session.h>
-#include <ardour/audioengine.h>
-#include <ardour/audio_diskstream.h>
-#include <ardour/panner.h>
+#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,16 +55,17 @@ Session::get_export_status ()
        if (!export_status) {
                export_status.reset (new ExportStatus ());
        }
-       
+
        return export_status;
 }
 
+
 int
 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 */
 
@@ -89,10 +89,11 @@ Session::pre_export ()
        post_export_position = _transport_frame;
 
        Config->set_slave_source (None);
-       
+
        _exporting = true;
        export_status->running = true;
-       export_abort_connection = export_status->Aborting.connect (sigc::hide_return (sigc::mem_fun (*this, &Session::stop_audio_export)));
+       export_status->Aborting.connect (sigc::hide_return (sigc::mem_fun (*this, &Session::stop_audio_export)));
+       export_status->Finished.connect (sigc::hide_return (sigc::mem_fun (*this, &Session::finalize_audio_export)));
 
        return 0;
 }
@@ -125,7 +126,7 @@ Session::start_audio_export (nframes_t position, bool realtime)
        */
 
        _transport_frame = position;
-       
+
        _exporting_realtime = realtime;
        export_status->stop = false;
 
@@ -137,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;
        }
@@ -166,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) {
@@ -191,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;
 }
 
@@ -210,16 +211,14 @@ Session::stop_audio_export ()
        */
 
        realtime_stop (true);
-       schedule_butler_transport_work ();
+       _butler->schedule_transport_work ();
 
        if (!export_status->aborted()) {
                ExportReadFinished ();
-       }
-       
-       if (export_status->finished()) {
+       } else {
                finalize_audio_export ();
        }
-       
+
        return 0;
 
 }
@@ -236,11 +235,10 @@ Session::finalize_audio_export ()
        }
 
        /* Clean up */
-       
+
        ProcessExport.clear();
        ExportReadFinished.clear();
        export_freewheel_connection.disconnect();
-       export_abort_connection.disconnect();
        export_handler.reset();
        export_status.reset();