summaryrefslogtreecommitdiff
path: root/libs
AgeCommit message (Collapse)Author
2020-03-06Do not de-click during freewheel exportRobin Gareus
2020-03-06Separate pre-roll cycle calculationRobin Gareus
This is also needed when exporting.
2020-03-05continue with code simplification and add comment given 4a40ff9e53Paul Davis
2020-03-05transport stop resets default_transport_speedPaul Davis
This means that using the wheel in the GUI (or equivalent) ends its effect at transport stop
2020-03-05Remove a suspected C99-ismJohn Emmas
'lower_bound()' iterates between param #1 and param #2, comparing the result with param #3 - either by making the comparison internally or by deferring to an external comparator function. Prior to C99 however, BOTH cases required param #3 to match the type being iterated. In the case of a deferred comparison, there was apparently a proposal to relax this restriction in C99, though I'm not sure if it in fact got implemented (can't find any examples of it anywhere...)
2020-03-02Retain custom internal-send name on session re-loadRobin Gareus
2020-03-02Refactor send naming (#7905)Robin Gareus
This allows users to rename sends without enforcing a numeric bitslot number. However this prevents a user to to use "send" names that are potentially used for new sends or inserts.
2020-03-02Exclude zita-convolver from being available as external libRobin Gareus
Ardour statically links libardour against zita-convolver, this is required because it's used in plugins and available by Lua scripts. libzita-convolver has been modified to be in a custom namespace and extern global symbols have been removed. On most GNU/Linux distros system-wide default zita-convolver is not compatible nor suitable to be used as-is.
2020-03-02Fix some doxygen warningsRobin Gareus
2020-03-02Do not include <stdint.h> in the Ardour namespaceRobin Gareus
2020-03-02Fix previous commit (increase max, not default)Robin Gareus
2020-03-02Allow a-delay to boost output gainRobin Gareus
From #ardour IRC: > there have been a few times that I wished a-Delay could boost volume > it has an "output gain" slider, but it only subtracts. the maximum is 0db > delay is a big part of guitar solos, so a boost in the same plugin would be awesome
2020-02-29Fix order setting I/O namesRobin Gareus
IO::set_name() may fail, in case Port::set_name() fails. In that case the IOProcessor should not update its name.
2020-02-29Fix off-by-one, start "Send" names at bitslot 1 (not 2)Robin Gareus
Session::next_*_send_id() starts counting at bit 1. Probably for historical reasons (bit zero = 1).
2020-02-29Fix 'samples / frames' typo in PBD::stacktrace()John Emmas
2020-02-28Convert v5 send state-stateRobin Gareus
2020-02-28Bail out if Playlist cannot be createdRobin Gareus
This prevents later crashes. Tracks cannot exist without a playlist.
2020-02-28Allow to limit error dumpRobin Gareus
This is in preparation of displaying verbose errors to the user.
2020-02-28Ensure that regions have sources when savingRobin Gareus
Otherwise this will lead to a corrupt state: ERROR: Session: XMLNode describing a AudioRegion references an unknown source id ERROR: Session: cannot create Region from XML description. Can not load state for region ERROR: Playlist: cannot create region from XML and a track without playlist is created, resulting in a later crash. Eventually SessionPlaylists::load() needs to handle this gracefully, but this should help catch cases causing the actual issue.
2020-02-28NO-OP: whitespace, re-indentRobin Gareus
2020-02-28Fix some recursive undo removalRobin Gareus
~StatefulDiffCommand() may trigger UndoTransaction::command_death() which may delete the StatefulDiffCommand() that's just being destroyed. This depends on the signal-connection order, which is undefined. In any case when a shared_ptr<> object is being destroyed it means that all references to it are already gone. There's no need to emit drop_references from the d'tor.
2020-02-28Fix double free of undo commands (amend 9e6435ff145)Robin Gareus
This fixes a case when deleting a plugin, deletes all automation undo/redo events: <UndoTransaction name="add automation event"> <MementoCommand type-name="ARDOUR::AutomationList"> ... `delete this;` calls the d'tor which emits drop_references(), that leads to UndoTransaction::command_death() destroying the object, whichh causes a double free.
2020-02-27Fix libwebsockets compatRobin Gareus
LWS_CALLBACK_HTTP_CONFIRM_UPGRADE is only available since v3.1.0
2020-02-27Fix removal of punch rangeRobin Gareus
set_auto_punch_location() is a NO-OP when there's no punch range. This disconnects `punch_connections`, clears session-events, and emits auto_punch_location_changed().
2020-02-27Add signals to indicate Punch/Loop constraintsRobin Gareus
This is in preparation for GUI sensitivity of Loop and Punch actions.
2020-02-27Avoid occasional response delay when handling HTTP in the websockets surfaceLuciano Iam
2020-02-27Make previous commit 81ecc2b compatible with libwebsockets==2Luciano Iam
2020-02-27Gracefully reject HTTP requests reaching the websockets surfaceLuciano Iam
2020-02-27Prevent concurrent loop and punch recording (backend)Robin Gareus
This also prevents switching between punch-in/out record and looping without transport-stop.
2020-02-26Add support for Lua DSP scripts with multiple MIDI outputsR
2020-02-26Consolidate loop en/disable callsRobin Gareus
2020-02-26Fix DSP::process_map() plugin-pin I/O map handingRobin Gareus
The previous approach failed in case where PluginInsert uses no-inplace buffers with a linear map. Since buffers are replicated up to a total of number of all (inputs + outputs), the number of output buffers could not be determined. There was insufficient information using the I/O map alone. With a known number of outputs processing and applying the i/o map is also a lot easier and faster. This break the API of process_map().
2020-02-26Add Lua bindings for libardour amp's simple gainRobin Gareus
2020-02-26Fix PI bypass, fix apply linear pin-connectionsRobin Gareus
Previously this could assert(), copying a buffer to itself.
2020-02-26Remove easter-eggRobin Gareus
Every day can be x-mas day, how else can we be lovers? :)
2020-02-26Fix Conditional jump or move depends on uninitialised value(s)Robin Gareus
(valgrind trace, line-numbers from mixbus+6.0-190-g0ec6bc35a) This may happen initially for unconnected graph nodes, e.g. Foldback Busses from ARDOUR::Session::post_engine_init(). ==29797== Conditional jump or move depends on uninitialised value(s) ==29797== at 0x6167D3F: trace_terminal(boost::shared_ptr<ARDOUR::Route>, boost::shared_ptr<ARDOUR::Route>, bool) (session.cc:2174) ==29797== by 0x6167D99: trace_terminal(boost::shared_ptr<ARDOUR::Route>, boost::shared_ptr<ARDOUR::Route>, bool) (session.cc:2174) ==29797== by 0x6167D99: trace_terminal(boost::shared_ptr<ARDOUR::Route>, boost::shared_ptr<ARDOUR::Route>, bool) (session.cc:2174) ==29797== by 0x616890D: ARDOUR::Session::resort_routes_using(boost::shared_ptr<std::__cxx11::list<boost::shared_ptr<ARDOUR::Route>, std::allocator<boost::shared_ptr<ARDOUR::Route> > > >) (session.cc:2289)
2020-02-26Fix potential memory corruption at session closeRobin Gareus
(valgrind trace, line-numbers from mixbus+6.0-190-g0ec6bc35a) ==29797== Invalid write of size 4 ==29797== at 0x619BB3F: boost::dynamic_bitset<unsigned int, std::allocator<unsigned int> >::reference::do_reset() (dynamic_bitset.hpp:120) ==29797== by 0x6196002: boost::dynamic_bitset<unsigned int, std::allocator<unsigned int> >::reference::do_assign(bool) (dynamic_bitset.hpp:122) ==29797== by 0x618F670: boost::dynamic_bitset<unsigned int, std::allocator<unsigned int> >::reference::operator=(bool) (dynamic_bitset.hpp:107) ==29797== by 0x617E426: ARDOUR::Session::unmark_send_id(unsigned int) (session.cc:5633) ==29797== by 0x6156714: ARDOUR::Send::~Send() (send.cc:125) ==29797== by 0x5CE12A7: ARDOUR::InternalSend::~InternalSend() (internal_send.cc:71) ==29797== by 0x5CE1319: ARDOUR::InternalSend::~InternalSend() (internal_send.cc:76) ==29797== by 0x1556128: void boost::checked_delete<ARDOUR::InternalSend>(ARDOUR::InternalSend*) (checked_delete.hpp:34) ==29797== by 0x155E689: boost::detail::sp_counted_impl_p<ARDOUR::InternalSend>::dispose() (sp_counted_impl.hpp:92) ==29797== by 0xCC0E30: boost::detail::sp_counted_base::release() (sp_counted_base_std_atomic.hpp:110) ==29797== by 0xCC0EA6: boost::detail::shared_count::~shared_count() (shared_count.hpp:426) ==29797== by 0x134BD15: boost::shared_ptr<ARDOUR::InternalSend>::~shared_ptr() (shared_ptr.hpp:366) ==29797== by 0x60FACC1: ARDOUR::Route::~Route() (route.cc:498) ==29797== by 0x60FAF4D: ARDOUR::Route::~Route() (route.cc:517) ==29797== by 0x166144C: void boost::checked_delete<ARDOUR::Route>(ARDOUR::Route*) (checked_delete.hpp:34) ==29797== by 0x166338F: boost::detail::sp_counted_impl_p<ARDOUR::Route>::dispose() (sp_counted_impl.hpp:92) ==29797== by 0xCC0E30: boost::detail::sp_counted_base::release() (sp_counted_base_std_atomic.hpp:110) ==29797== by 0xCC0EA6: boost::detail::shared_count::~shared_count() (shared_count.hpp:426) ==29797== by 0xCD2385: boost::shared_ptr<ARDOUR::Route>::~shared_ptr() (shared_ptr.hpp:366) ==29797== by 0x615D0E5: ARDOUR::Session::~Session() (session.cc:455) ==29797== by 0x615D4A3: ARDOUR::Session::~Session() (session.cc:461)
2020-02-25Fix deadlock, shared_ptr d'tor called from ScopedConnectionList d'torRobin Gareus
See https://ardour.org/styleguide.html #10 https://pastebin.com/gJfrNhL2
2020-02-25Consolidate shared-ptr debuggingRobin Gareus
2020-02-25Fix mem-leak, Playlist/Region SessionHandleRefRobin Gareus
When a playlist is deleted and drops_references(), any undo/redo StatefulDiffCommand referncing playlist invoke Destructible::drop_references() of the Command. This leads to command_death(). As opposed to UndoTransaction::clear() the StatefulDiffCommand was not destroyed. In case of playlists StatefulDiffCommand::_changes contains PBD::SequenceProperty<std::list<boost::shared_ptr<Region> > > and shared pointer reference of the playlist regions were kept indefinitely. This fixes the following scenario: New session, import an file, delete the created track, clean up unused sources (delete unused playlists)[, quit]. A reference to the imported region was kept, because of the playlist's undo command (insert region). Yet the source file was deleted. PS. Most playlist changes are accompanied by GUI zoom/selection MementoCommands. Those are currently never directly dropped. command_death() leaves those in place.
2020-02-25Remove undo function from global namespaceRobin Gareus
2020-02-25NO-OP: whitespaceRobin Gareus
2020-02-25Disable Transport Master boost debugRobin Gareus
2020-02-25Fix cleanup, lock source-list, emit SourceRemovedRobin Gareus
This fixes various cases where SessionHandleRef shared_ptr<> were kept when sources were removed.
2020-02-25Remove history file when it's emptyRobin Gareus
Various operations clear the history (e.g. cleanup). In that case the GUI correctly had an empty Undo/Redo history, but the file on disk was left in place. Next session load restored the old, incorrect Undo/Redo history.
2020-02-25Update region-factory boost-debugRobin Gareus
2020-02-25Notify owners when removing regions during cleanupRobin Gareus
Previously the region was only removed from the Session's region_map without sending notifications.
2020-02-25Prefer const iteratorsRobin Gareus
2020-02-24fix thinko when handling set_speed (0.0)Paul Davis
Code only handled a reversing->rolling path, not reversing->stopped
2020-02-24fix incorrect handling of MIDI data by AsyncMIDIPortPaul Davis
This type of MIDI port fetches all of its data from inside ::cycle_start(), and delivers it to a FIFO connected to another thread (typically a control surface). Unlike regular MidiPorts, which will be read from inside a Session::process() call, these ports will read their data once per AudioEngine::process() cycle. They therefore cannot use MidiPort::get_midi_buffer() which scales and adjusts event timestamps as if the data is being accessed from within Session::process(). It is still an open question whether or not AsyncMIDIPort::cycle_start() should still scale event timestamps by speed. In some respects it seems more appropriate to do so, and the reading thread (e.g. a control surface) doesn't care about the "nframes" limit on timestamps that exists for calls within a Session::process() tree. For now, leave the timestamps unscaled by speed.