* fixed crash when changing mode of midiPort

* various small improvements



git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1446 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2008-08-20 10:32:18 +00:00
parent 15133bd773
commit 9148bec609
3 changed files with 33 additions and 26 deletions

View File

@@ -1,3 +1,14 @@
2008-08-20 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* src/core/midi/midi_alsa_seq.cpp:
* src/core/midi/midi_port.cpp:
- fixed crash when changing mode of midiPort
- various small improvements
* include/instrument_track.h:
* src/core/note_play_handle.cpp:
made midiPort of instrumentTrack accessible via getMidiPort()
2008-08-19 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* plugins/sf2_player/sf2_player.cpp:

View File

@@ -266,7 +266,8 @@ void midiALSASeq::applyPortMode( midiPort * _port )
else if( m_portIDs[_port][i] != -1 )
{
// then remove this port
snd_seq_delete_simple_port( m_seqHandle, m_portIDs[_port][i] );
snd_seq_delete_simple_port( m_seqHandle,
m_portIDs[_port][i] );
m_portIDs[_port][i] = -1;
}
}
@@ -326,11 +327,8 @@ void midiALSASeq::subscribeReadablePort( midiPort * _port,
const QString & _dest,
bool _subscribe )
{
if( _subscribe &&( m_portIDs.contains( _port ) == FALSE ||
_port->inputEnabled() == FALSE ) )
if( !m_portIDs.contains( _port ) || m_portIDs[_port][0] < 0 )
{
printf( "port %s can't be (un)subscribed!\n",
_port->name().toAscii().constData() );
return;
}
snd_seq_addr_t sender;
@@ -367,11 +365,8 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port,
const QString & _dest,
bool _subscribe )
{
if( _subscribe && ( m_portIDs.contains( _port ) == FALSE ||
_port->outputEnabled() == FALSE ) )
if( !m_portIDs.contains( _port ) || m_portIDs[_port][1] < 0 )
{
printf( "port %s can't be (un)subscribed!\n",
_port->name().toAscii().constData() );
return;
}
snd_seq_addr_t dest;
@@ -383,10 +378,8 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port,
}
snd_seq_port_info_t * port_info;
snd_seq_port_info_malloc( &port_info );
snd_seq_get_port_info( m_seqHandle, ( m_portIDs[_port][1] == -1 ) ?
m_portIDs[_port][0] :
m_portIDs[_port][1],
port_info );
snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][1] == -1,
port_info );
const snd_seq_addr_t * sender = snd_seq_port_info_get_addr( port_info );
snd_seq_port_subscribe_t * subs;
snd_seq_port_subscribe_malloc( &subs );
@@ -485,7 +478,8 @@ void midiALSASeq::run( void )
break;
case SND_SEQ_EVENT_CONTROLLER:
dest->processInEvent( midiEvent( MidiControlChange,
dest->processInEvent( midiEvent(
MidiControlChange,
ev->data.control.channel,
ev->data.control.param,
ev->data.control.value ),

View File

@@ -124,7 +124,7 @@ void midiPort::setMode( Modes _mode )
void midiPort::processInEvent( const midiEvent & _me, const midiTime & _time )
{
// mask event
if( ( mode() == Input || mode() == Duplex ) &&
if( inputEnabled() &&
( inputChannel()-1 == _me.m_channel || inputChannel() == 0 ) )
{
if( _me.m_type == MidiNoteOn ||
@@ -152,7 +152,7 @@ void midiPort::processInEvent( const midiEvent & _me, const midiTime & _time )
void midiPort::processOutEvent( const midiEvent & _me, const midiTime & _time )
{
// mask event
if( ( mode() == Output || mode() == Duplex ) &&
if( outputEnabled() &&
( outputChannel()-1 == _me.m_channel && outputChannel() != 0 ) )
{
midiEvent ev = _me;
@@ -180,7 +180,7 @@ void midiPort::saveSettings( QDomDocument & _doc, QDomElement & _this )
m_defaultVelocityOutEnabledModel.saveSettings( _doc, _this,
"defvelout" );
if( m_readableModel.value() == TRUE )
if( inputEnabled() )
{
QString rp;
for( midiPort::map::iterator it = m_readablePorts.begin();
@@ -199,7 +199,7 @@ void midiPort::saveSettings( QDomDocument & _doc, QDomElement & _this )
_this.setAttribute( "inports", rp );
}
if( m_writableModel.value() == TRUE )
if( outputEnabled() )
{
QString wp;
for( map::const_iterator it = m_writablePorts.begin();
@@ -235,7 +235,7 @@ void midiPort::loadSettings( const QDomElement & _this )
// restore connections
if( m_readableModel.value() == TRUE )
if( inputEnabled() )
{
QStringList rp = _this.attribute( "inports" ).split( ',' );
for( map::const_iterator it = m_readablePorts.begin();
@@ -248,7 +248,7 @@ void midiPort::loadSettings( const QDomElement & _this )
}
}
if( m_writableModel.value() == TRUE )
if( outputEnabled() )
{
QStringList wp = _this.attribute( "outports" ).split( ',' );
for( map::const_iterator it = m_writablePorts.begin();
@@ -276,24 +276,26 @@ void midiPort::updateMidiPortMode( void )
setMode( modeTable[m_readableModel.value()][m_writableModel.value()] );
// check whether we have to dis-check items in connection-menu
if( m_readableModel.value() == FALSE )
if( !inputEnabled() )
{
for( map::const_iterator it = m_readablePorts.begin();
it != m_readablePorts.end(); ++it )
{
if( it.value() == TRUE )
// subscribed?
if( it.value() )
{
subscribeReadablePort( it.key(), FALSE );
}
}
}
if( m_writableModel.value() == FALSE )
if( !outputEnabled() )
{
for( map::const_iterator it = m_writablePorts.begin();
it != m_writablePorts.end(); ++it )
{
if( it.value() == TRUE )
// subscribed?
if( it.value() )
{
subscribeWriteablePort( it.key(), FALSE );
}
@@ -368,7 +370,7 @@ void midiPort::subscribeReadablePort( const QString & _port, bool _subscribe )
{
m_readablePorts[_port] = _subscribe;
// make sure, MIDI-port is configured for input
if( _subscribe == TRUE && mode() != Input && mode() != Duplex )
if( _subscribe == TRUE && !inputEnabled() )
{
m_readableModel.setValue( TRUE );
}
@@ -382,7 +384,7 @@ void midiPort::subscribeWriteablePort( const QString & _port, bool _subscribe )
{
m_writablePorts[_port] = _subscribe;
// make sure, MIDI-port is configured for output
if( _subscribe == TRUE && mode() != Output && mode() != Duplex )
if( _subscribe == TRUE && !outputEnabled() )
{
m_writableModel.setValue( TRUE );
}