* Quick Fix: assertion converted into warning in MidiModel::write_to

git-svn-id: svn://localhost/ardour2/branches/3.0@3337 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Hans Baier 2008-05-12 11:42:41 +00:00
parent d467245152
commit 277bfa35d5
2 changed files with 27 additions and 3 deletions

View file

@ -879,8 +879,8 @@ XMLNode& MidiModel::DeltaCommand::get_state()
struct EventTimeComparator { struct EventTimeComparator {
typedef const MIDI::Event* value_type; typedef const MIDI::Event* value_type;
inline bool operator()(const MIDI::Event* a, const MIDI::Event* b) const { inline bool operator()(const MIDI::Event& a, const MIDI::Event& b) const {
return a->time() >= b->time(); return a.time() >= b.time();
} }
}; };
@ -893,15 +893,35 @@ struct EventTimeComparator {
*/ */
bool MidiModel::write_to(boost::shared_ptr<MidiSource> source) bool MidiModel::write_to(boost::shared_ptr<MidiSource> source)
{ {
/*
EventTimeComparator comp;
typedef std::priority_queue<
const MIDI::Event*,
std::deque<MIDI::Event>,
EventTimeComparator> MidiEvents;
MidiEvents events(comp);
*/
read_lock(); read_lock();
const NoteMode old_note_mode = _note_mode; const NoteMode old_note_mode = _note_mode;
_note_mode = Sustained; _note_mode = Sustained;
for (const_iterator i = begin(); i != end(); ++i) { for (const_iterator i = begin(); i != end(); ++i) {
//events.push(*i);
source->append_event_unlocked(Frames, *i); source->append_event_unlocked(Frames, *i);
} }
/*
// TODO: As of now, this is still necessary, because there are some events appended whose
// times are earlier than the preceding events
while(!events.empty()) {
source->append_event_unlocked(Frames, events.top());
events.pop();
}
*/
_note_mode = old_note_mode; _note_mode = old_note_mode;
read_unlock(); read_unlock();

View file

@ -507,7 +507,11 @@ SMFSource::append_event_unlocked(EventTimeUnit unit, const MIDI::Event& ev)
printf("\n"); printf("\n");
assert(ev.time() >= 0); assert(ev.time() >= 0);
assert(ev.time() >= _last_ev_time);
if (ev.time() < _last_ev_time) {
cerr << "SMFSource: Warning: Skipping event with ev.time() < _last_ev_time" << endl;
return;
}
uint32_t delta_time = 0; uint32_t delta_time = 0;