* 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:
11
ChangeLog
11
ChangeLog
@@ -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:
|
||||
|
||||
@@ -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 ),
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user