merge (w/fix) with master
[ardour.git] / libs / surfaces / mackie / surface_port.cc
index c9b35ee86ce3cf57c6396b4c3e449116268fa504..013a0019c7e797ef9982df56412a07cd8a7fbc94 100644 (file)
@@ -51,11 +51,12 @@ using namespace ARDOUR;
 SurfacePort::SurfacePort (Surface& s)
        : _surface (&s)
 {
-
        if (_surface->mcp().device_info().uses_ipmidi()) {
                _input_port = new MIDI::IPMIDIPort (_surface->mcp().ipmidi_base() +_surface->number());
                _output_port = _input_port;
+
        } else {
+               
                _async_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, string_compose (_("%1 in"),  _surface->name()), true);
                _async_out = AudioEngine::instance()->register_output_port (DataType::MIDI, string_compose (_("%1 out"),  _surface->name()), true);
 
@@ -70,19 +71,19 @@ SurfacePort::SurfacePort (Surface& s)
 
 SurfacePort::~SurfacePort()
 {
-       if (_surface->mcp().device_info().uses_ipmidi()) {
+       if (dynamic_cast<MIDI::IPMIDIPort*>(_input_port)) {
                delete _input_port;
        } else {
 
                if (_async_in) {
                        AudioEngine::instance()->unregister_port (_async_in);
-                       _async_in.reset ();
+                       _async_in.reset ((ARDOUR::Port*) 0);
                }
                
                if (_async_out) {
                        _output_port->drain (10000);
                        AudioEngine::instance()->unregister_port (_async_out);
-                       _async_out.reset ();
+                       _async_out.reset ((ARDOUR::Port*) 0);
                }
        }
 }
@@ -92,7 +93,7 @@ SurfacePort::get_state ()
 {
        XMLNode* node = new XMLNode (X_("Port"));
 
-       if (_surface->mcp().device_info().uses_ipmidi()) {
+       if (dynamic_cast<MIDI::IPMIDIPort*>(_input_port)) {
                /* no state required for IPMidi ports */
                return *node;
        }
@@ -114,7 +115,7 @@ SurfacePort::get_state ()
 int
 SurfacePort::set_state (const XMLNode& node, int version)
 {
-       if (_surface->mcp().device_info().uses_ipmidi()) {
+       if (dynamic_cast<MIDI::IPMIDIPort*>(_input_port)) {
                return 0;
        }