diff options
author | David Robillard <d@drobilla.net> | 2009-02-15 01:53:06 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-15 01:53:06 +0000 |
commit | 41ac4afff50b1730e61e302e60f66e6ef94720c1 (patch) | |
tree | 5c24ed76639bfdb1333286d91d0532b9f244fcb0 /libs/ardour | |
parent | 5d519f8bb1a17f316f2bc25cc96a52d26b115c94 (diff) |
Clean up.
git-svn-id: svn://localhost/ardour2/branches/3.0@4572 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/smf_source.h | 11 | ||||
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 7 | ||||
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 8 | ||||
-rw-r--r-- | libs/ardour/smf_source.cc | 83 |
4 files changed, 44 insertions, 65 deletions
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 1dd993c686..82f41ebf2d 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -54,16 +54,6 @@ class SMFSource : public MidiSource, public Evoral::SMF { virtual ~SMFSource (); - /* this block of methods do nothing for regular file sources, but are significant - for files used in destructive recording. - */ - // FIXME and thus are useless for MIDI.. but make MidiDiskstream compile easier! :) - - virtual nframes_t last_capture_start_frame() const { return 0; } - virtual void mark_capture_start (nframes_t) {} - virtual void mark_capture_end () {} - virtual void clear_capture_marks() {} - bool set_name (const std::string& newname) { return (set_source_name(newname, false) == 0); } int set_source_name (string newname, bool destructive); @@ -98,7 +88,6 @@ class SMFSource : public MidiSource, public Evoral::SMF { void flush_midi(); private: - int init (string idstr, bool must_exist); nframes_t read_unlocked ( diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 2982b0f2f8..78f5ee29e2 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -1642,9 +1642,10 @@ AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_ca */ try { - boost::shared_ptr<Region> rx (RegionFactory::create (srcs, c->front()->write_source->last_capture_start_frame(), total_capture, - whole_file_region_name, - 0, AudioRegion::Flag (AudioRegion::DefaultFlags|AudioRegion::Automatic|AudioRegion::WholeFile))); + boost::shared_ptr<Region> rx (RegionFactory::create (srcs, + c->front()->write_source->last_capture_start_frame(), total_capture, + whole_file_region_name, 0, + Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile))); region = boost::dynamic_pointer_cast<AudioRegion> (rx); region->special_set_position (capture_info.front()->start); diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 41f8eb9e19..f960c170db 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -990,9 +990,9 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap */ try { - boost::shared_ptr<Region> rx (RegionFactory::create (srcs, _write_source->last_capture_start_frame(), total_capture, - whole_file_region_name, - 0, Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile))); + boost::shared_ptr<Region> rx (RegionFactory::create (srcs, 0, + total_capture, whole_file_region_name, 0, + Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile))); region = boost::dynamic_pointer_cast<MidiRegion> (rx); region->special_set_position (capture_info.front()->start); @@ -1011,7 +1011,7 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap XMLNode &before = _playlist->get_state(); _playlist->freeze (); - for (buffer_position = _write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) { + for (buffer_position = 0, ci = capture_info.begin(); ci != capture_info.end(); ++ci) { string region_name; diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index d75c4b93d5..babcb0ca47 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -48,16 +48,16 @@ using namespace ARDOUR; string SMFSource::_search_path; -SMFSource::SMFSource (Session& s, std::string path, Flag flags) - : MidiSource (s, region_name_from_path(path, false)) - , Evoral::SMF () - , _flags (Flag(flags | Writable)) // FIXME: this needs to be writable for now +SMFSource::SMFSource(Session& s, std::string path, Flag flags) + : MidiSource(s, region_name_from_path(path, false)) + , Evoral::SMF() + , _flags(flags) , _allow_remove_if_empty(true) , _last_ev_time(0) { - /* constructor used for new internal-to-session files. file cannot exist */ + /* Constructor used for new internal-to-session files. File cannot exist. */ - if (init (path, false)) { + if (init(path, false)) { throw failed_constructor (); } @@ -68,19 +68,19 @@ SMFSource::SMFSource (Session& s, std::string path, Flag flags) assert(_name.find("/") == string::npos); } -SMFSource::SMFSource (Session& s, const XMLNode& node) - : MidiSource (s, node) - , _flags (Flag (Writable|CanRename)) +SMFSource::SMFSource(Session& s, const XMLNode& node) + : MidiSource(s, node) + , _flags(Flag(Writable|CanRename)) , _allow_remove_if_empty(true) , _last_ev_time(0) { - /* constructor used for existing internal-to-session files. file must exist */ + /* Constructor used for existing internal-to-session files. File must exist. */ - if (set_state (node)) { + if (set_state(node)) { throw failed_constructor (); } - if (init (_name, true)) { + if (init(_name, true)) { throw failed_constructor (); } @@ -125,7 +125,8 @@ SMFSource::init (string pathstr, bool must_exist) /** All stamps in audio frames */ nframes_t -SMFSource::read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const +SMFSource::read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, + nframes_t stamp_offset, nframes_t negative_stamp_offset) const { //cerr << "SMF read_unlocked " << name() << " read " //<< start << ", count=" << cnt << ", offset=" << stamp_offset << endl; @@ -137,9 +138,9 @@ SMFSource::read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nfram // Output parameters for read_event (which will allocate scratch in buffer as needed) uint32_t ev_delta_t = 0; - uint32_t ev_type = 0; - uint32_t ev_size = 0; - uint8_t* ev_buffer = 0; + uint32_t ev_type = 0; + uint32_t ev_size = 0; + uint8_t* ev_buffer = 0; size_t scratch_size = 0; // keep track of scratch to minimize reallocs @@ -173,18 +174,20 @@ SMFSource::read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nfram const nframes_t ev_frame_time = (nframes_t)( ((time / (double)ppqn()) * frames_per_beat)) + stamp_offset; - if (ev_frame_time <= start + cnt) + if (ev_frame_time <= start + cnt) { dst.write(ev_frame_time - negative_stamp_offset, ev_type, ev_size, ev_buffer); - else + } else { break; + } } _read_data_count += ev_size; - if (ev_size > scratch_size) + if (ev_size > scratch_size) { scratch_size = ev_size; - else + } else { ev_size = scratch_size; // minimize realloc in read_event + } } return cnt; @@ -200,22 +203,25 @@ SMFSource::write_unlocked (MidiRingBuffer<nframes_t>& src, nframes_t cnt) Evoral::EventType type; uint32_t size; - size_t buf_capacity = 4; - uint8_t* buf = (uint8_t*)malloc(buf_capacity); + size_t buf_capacity = 4; + uint8_t* buf = (uint8_t*)malloc(buf_capacity); - if (_model && ! _model->writing()) + if (_model && ! _model->writing()) { _model->start_write(); + } Evoral::MIDIEvent<double> ev(0, 0.0, 4, NULL, true); while (true) { bool ret = src.peek_time(&time); - if (!ret || time - _timeline_position > _length + cnt) + if (!ret || time - _timeline_position > _length + cnt) { break; + } ret = src.read_prefix(&time, &type, &size); - if (!ret) + if (!ret) { break; + } if (size > buf_capacity) { buf_capacity = size; @@ -233,7 +239,7 @@ SMFSource::write_unlocked (MidiRingBuffer<nframes_t>& src, nframes_t cnt) ev.set(buf, size, time); ev.set_event_type(EventTypeMap::instance().midi_event_type(ev.buffer()[0])); - if (! (ev.is_channel_event() || ev.is_smf_meta_event() || ev.is_sysex()) ) { + if (!(ev.is_channel_event() || ev.is_smf_meta_event() || ev.is_sysex())) { cerr << "SMFSource: WARNING: caller tried to write non SMF-Event of type " << std::hex << int(ev.buffer()[0]) << endl; continue; @@ -256,7 +262,7 @@ SMFSource::write_unlocked (MidiRingBuffer<nframes_t>& src, nframes_t cnt) const nframes_t oldlen = _length; update_length(oldlen, cnt); - ViewDataRangeReady (_timeline_position + oldlen, cnt); /* EMIT SIGNAL */ + ViewDataRangeReady(_timeline_position + oldlen, cnt); /* EMIT SIGNAL */ return cnt; } @@ -275,8 +281,7 @@ SMFSource::append_event_unlocked(EventTimeUnit unit, const Evoral::Event<double> name().c_str(), ev.time(), ev.size()); for (size_t i=0; i < ev.size(); ++i) { printf("%X ", ev.buffer()[i]); - } - printf("\n"); + } printf("\n"); */ assert(ev.time() >= 0); @@ -327,15 +332,11 @@ SMFSource::set_state (const XMLNode& node) } if ((prop = node.property (X_("flags"))) != 0) { - int ival; sscanf (prop->value().c_str(), "0x%x", &ival); _flags = Flag (ival); - } else { - _flags = Flag (0); - } assert(_name.find("/") == string::npos); @@ -439,19 +440,7 @@ SMFSource::move_to_trash (const string trash_dir_name) << endmsg; return -1; } -#if 0 - if (::unlink (peakpath.c_str()) != 0) { - PBD::error << string_compose (_("cannot remove peakfile %1 for %2 (%3)"), - peakpath, _path, strerror (errno)) - << endmsg; - /* try to back out */ - rename (newpath.c_str(), _path.c_str()); - return -1; - } - - _path = newpath; - peakpath = ""; -#endif + /* file can not be removed twice, since the operation is not idempotent */ _flags = Flag (_flags & ~(RemoveAtDestroy|Removable|RemovableIfEmpty)); @@ -606,7 +595,7 @@ SMFSource::set_source_name (string newname, bool destructive) _name = Glib::path_get_basename (newpath); _path = newpath; - return 0;//rename_peakfile (peak_path (_path)); + return 0; } void |