change MidiPlaylist::dump() into ::render(); change type of initial argument

This commit is contained in:
Paul Davis
2019-10-16 23:07:29 -06:00
parent 3f8fbf22e6
commit c55e23e7aa
6 changed files with 29 additions and 15 deletions

View File

@@ -48,6 +48,7 @@ namespace ARDOUR
class BeatsSamplesConverter;
class MidiChannelFilter;
class MidiRegion;
class RTMidiBuffer;
class Session;
class Source;
@@ -88,7 +89,7 @@ public:
uint32_t chan_n = 0,
MidiChannelFilter* filter = NULL);
void dump (Evoral::EventSink<samplepos_t>&, MidiChannelFilter*);
void render (RTMidiBuffer&, MidiChannelFilter*);
int set_state (const XMLNode&, int version);

View File

@@ -118,10 +118,10 @@ class LIBARDOUR_API MidiRegion : public Region
void clobber_sources (boost::shared_ptr<MidiSource> source);
int dump_to (Evoral::EventSink<samplepos_t>& dst,
uint32_t chan_n,
NoteMode mode,
MidiChannelFilter* filter) const;
int render (Evoral::EventSink<samplepos_t>& dst,
uint32_t chan_n,
NoteMode mode,
MidiChannelFilter* filter) const;
protected:

View File

@@ -25,6 +25,8 @@
#include <map>
#include <glibmm/threads.h>
#include "evoral/Event.hpp"
#include "evoral/EventSink.hpp"
#include "ardour/types.h"
@@ -82,6 +84,8 @@ class LIBARDOUR_API RTMidiBuffer : public Evoral::EventSink<samplepos_t>
uint32_t _pool_size;
uint32_t _pool_capacity;
uint8_t* _pool;
mutable Glib::Threads::RWLock _lock;
};
} // namespace ARDOUR

View File

@@ -516,9 +516,11 @@ DiskReader::overwrite_existing_buffers ()
if (_playlists[DataType::MIDI]) {
minsert.reset(); minsert.start();
_mbuf.clear(); midi_playlist()->dump (_mbuf, 0);
minsert.update(); cerr << "Reading " << name() << " took " << minsert.elapsed() << " microseconds, final size = " << _mbuf.size() << endl;
minsert.reset();
minsert.start();
midi_playlist()->render (_mbuf, 0);
minsert.update();
cerr << "Reading " << name() << " took " << minsert.elapsed() << " microseconds, final size = " << _mbuf.size() << endl;
_mbuf.dump (40);
}

View File

@@ -36,6 +36,7 @@
#include "ardour/midi_source.h"
#include "ardour/midi_state_tracker.h"
#include "ardour/region_factory.h"
#include "ardour/rt_midibuffer.h"
#include "ardour/session.h"
#include "ardour/tempo.h"
#include "ardour/types.h"
@@ -491,7 +492,7 @@ MidiPlaylist::contained_automation()
}
void
MidiPlaylist::dump (Evoral::EventSink<samplepos_t>& dst, MidiChannelFilter* filter)
MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter)
{
typedef pair<MidiStateTracker*,samplepos_t> TrackerInfo;
@@ -516,7 +517,13 @@ MidiPlaylist::dump (Evoral::EventSink<samplepos_t>& dst, MidiChannelFilter* filt
we read into a temporarily list, sort it, then write that to dst.
*/
Evoral::EventList<samplepos_t> evlist;
Evoral::EventSink<samplepos_t>& tgt = (regs.size() == 1) ? dst : evlist;
Evoral::EventSink<samplepos_t>* tgt;
if (regs.size() == 1) {
tgt = &dst;
} else {
tgt = &evlist;
}
DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\t%1 regions to read, direct: %2\n", regs.size(), (regs.size() == 1)));
@@ -529,7 +536,7 @@ MidiPlaylist::dump (Evoral::EventSink<samplepos_t>& dst, MidiChannelFilter* filt
}
DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("dump from %1 at %2\n", mr->name()));
mr->dump_to (tgt, 0, _note_mode, filter);
mr->render (*tgt, 0, _note_mode, filter);
}
if (!evlist.empty()) {

View File

@@ -483,10 +483,10 @@ MidiRegion::_read_at (const SourceList& /*srcs*/,
int
MidiRegion::dump_to (Evoral::EventSink<samplepos_t>& dst,
uint32_t chan_n,
NoteMode mode,
MidiChannelFilter* filter) const
MidiRegion::render (Evoral::EventSink<samplepos_t>& dst,
uint32_t chan_n,
NoteMode mode,
MidiChannelFilter* filter) const
{
sampleoffset_t internal_offset = 0;