change name of a Session method to makes its intended function clear
[ardour.git] / libs / ardour / ardour / audio_port.h
index 0e85e0e01b101c29933db2a2d55f8227c63989ca..384de3ef5d0bcd8aad241547780c1e63e34e366b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2002 Paul Davis 
+    Copyright (C) 2002-2009 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
 #ifndef __ardour_audio_port_h__
 #define __ardour_audio_port_h__
 
-#include <sigc++/signal.h>
-#include <pbd/failed_constructor.h>
-#include <ardour/ardour.h>
-#include <jack/jack.h>
-#include <ardour/port.h>
-#include <ardour/buffer.h>
+#include "ardour/port.h"
+#include "ardour/audio_buffer.h"
 
 namespace ARDOUR {
 
-class AudioEngine;
-
-class AudioPort : public Port {
+class LIBARDOUR_API AudioPort : public Port
+{
    public:
-       virtual ~AudioPort() { 
-               free (_port);
-       }
+       ~AudioPort ();
 
-       void cycle_start(nframes_t nframes) {
-               _buffer.set_data ((Sample*) jack_port_get_buffer (_port, nframes), nframes);
+       DataType type () const {
+               return DataType::AUDIO;
        }
 
-       void cycle_end() {}
-
-       DataType type() const { return DataType(DataType::AUDIO); }
+       void cycle_start (pframes_t);
+       void cycle_end (pframes_t);
+       void cycle_split ();
 
-       Buffer& get_buffer () {
-               return _buffer;
-       }
-       
-       AudioBuffer& get_audio_buffer() {
-               return _buffer;
+       Buffer& get_buffer (pframes_t nframes) {
+               return get_audio_buffer (nframes);
        }
 
-       void reset_overs () {
-               _short_overs = 0;
-               _long_overs = 0;
-               _overlen = 0;
-       }
+       AudioBuffer& get_audio_buffer (pframes_t nframes);
 
-       void reset_peak_meter () {
-               _peak = 0;
-       }
-       
-       void reset_meters () {
-               reset_peak_meter ();
-               reset_overs ();
-       }
-
-       float                       peak_db() const { return _peak_db; }
-       jack_default_audio_sample_t peak()    const { return _peak; }
+  protected:
+       friend class PortManager;
+       AudioPort (std::string const &, PortFlags);
 
-       uint32_t short_overs () const { return _short_overs; }
-       uint32_t long_overs ()  const { return _long_overs; }
-       
-       static void set_short_over_length (nframes_t);
-       static void set_long_over_length (nframes_t);
+        /* special access for PortManager only (hah, C++) */
+        Sample* engine_get_whole_audio_buffer ();
 
-  protected:
-       friend class AudioEngine;
-
-       AudioPort (jack_port_t *port);
-       void reset ();
-       
-       /* engine isn't supposed to access below here */
-
-       AudioBuffer _buffer;
-
-       nframes_t               _overlen;
-       jack_default_audio_sample_t  _peak;
-       float                        _peak_db;
-       uint32_t                     _short_overs;
-       uint32_t                     _long_overs;
-       
-       static nframes_t        _long_over_length;
-       static nframes_t        _short_over_length;
+  private:
+       AudioBuffer* _buffer;
+        bool         _buf_valid;
 };
+
 } // namespace ARDOUR
 
 #endif /* __ardour_audio_port_h__ */