summaryrefslogtreecommitdiff
path: root/libs
AgeCommit message (Collapse)Author
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.
2020-02-24NOOP: remove whitespacePaul Davis
2020-02-25Add a method to clear ImportStatus arraysRobin Gareus
This is in preparation to fix a "SessionHandleRef exists across session deletion" error.
2020-02-25Update source-factory boost-debugRobin Gareus
2020-02-24Remove unused forward declaration.André Nusser
2020-02-24Zero x-run count after session-load and engine restartRobin Gareus
2020-02-24Consolidate startup `state = Clean;` callsRobin Gareus
This also emits DirtyChanged() only if needed.
2020-02-24Websockets: error on unhandled callbacksRobin Gareus
This prevents unhandled http request from hogging the backend.
2020-02-24Websockets: use established NDEBUG - see assert(3)Robin Gareus
2020-02-24Fix initial audible noise on muted or silenced tracksRobin Gareus
When loading a session with muted tracks, those tracks were not initially muted, but ardour only faded them out. The same happened to sends, and also tracks with non unity fader: an initial fade from unity to target gain was done. Now this send and deliveries always fade-in (like default Amp does).
2020-02-24Fix uninitialized member variable.Todd Naugle
2020-02-24NOP: No need to set this variable to itself.Todd Naugle
2020-02-24Tweak mach thread priority debug msgRobin Gareus
2020-02-24Fix setting CoreAudio RT-priorityRobin Gareus
2020-02-24Fix CoreAudio systemic latency, implement hw latency reportRobin Gareus
2020-02-24Add API to query hardware latency (as reported by the driver)Robin Gareus
So far only MacOS/X CoreAudio supports this. This is intended for defualt values in case a user has not callibrated the device, yet.
2020-02-23Fix another websocket surface crash when no panner is availableRobin Gareus
This amends 224be91211
2020-02-23Websockets: use unique header guardsRobin Gareus
2020-02-23NO-OP: Re-indent websockets codeRobin Gareus
"Always use Tabstops for block-indent (the code must be formatted correctly with "[TAB] = N spaces" for any value of N). Use space only for alignment." - https://ardour.org/styleguide.html
2020-02-23Fix websockets surface crash when panner is not availableRobin Gareus
2020-02-23surfaces transport hotfix: surfaces should query the transport state via ↵Ben Loftis
BasicUI, when possible
2020-02-23surfaces transport hotfix: BasicUI: prefer actual_speed() and ↵Ben Loftis
transport_stopped_or_stopping() for current Transport FSM