Commit Graph

317 Commits

Author SHA1 Message Date
David Robillard
bfbc4566ad Fix warnings 2016-12-03 15:27:38 -05:00
Robin Gareus
842c33fba8 Add [hidden] option to list "Dummy" backend with optmized bundles 2016-11-26 15:31:21 +01:00
Paul Davis
235c1f9adb infrastructure for save/restore of MIDI port user-provided information 2016-10-20 16:34:52 -04:00
Paul Davis
d0b2767856 NOOP: whitespacing tweak 2016-10-19 17:49:35 -04:00
Paul Davis
2c2ce7aa55 convert cerr<< to DEBUG_TRACE 2016-10-17 11:16:07 -04:00
Paul Davis
8f9a9523d2 new scheme for managing port deletion
shared_ptr<Port> now uses a deleter functor which pushes Port* to a lock-free FIFO so that the Port is
always deleted (and thus unregistered with the PortEngine/backend) in a safe context w.r.t. various
callbacks in the host. Currently the auto_connect_thread in Session has been tasked with doing these
deletions.
2016-10-13 17:18:54 -04:00
Robin Gareus
74ba1b2691 Hide Dummy backend from optimized release builds
Prepare to bundle session-utils with releases.
Session-utils use libardour which needs an Engine. "Dummy" is the only
engine that always works
2016-10-11 00:29:56 +02:00
Nathan Stewart
3b7cb8275a Fixes 7004 - Ardour crash on Just Quit when AudioEngine is stopped. AudioEngine::stop() if running() is not true and _backend->stop() is true, mutex was being unlocked without being locked. 2016-09-13 19:26:36 -05:00
Paul Davis
cf52d6e4b4 enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h 2016-07-14 14:45:23 -04:00
Robin Gareus
1d48648a73 fix timecode update after locate.
Various session rt-events set "_send_timecode_update" to true,
but at the same time queue post-transport-work.

The timecode-update is generated, but due to pending transport work
session->silent() is true and the timecode was never sent.
2016-05-25 19:20:09 +02:00
Robin Gareus
e3607a4c8b plug some memory leaks in libardour 2016-04-24 14:43:18 +02:00
Paul Davis
da087e920b ensure that each and every audioengine-related thread has a unique name 2016-01-14 09:05:06 -05:00
Paul Davis
0d9efc1148 redesign cross-thread registration/signalling system
This new design will work even when threads that need to receive
messages from RT threads are created *after* the RT threads. The
existing design would fail because the RT thread(s) would never
be known the later created threads, and so signals emitted by the
RT thread and causing call_slot() in the receiver would end up
being enqueued using a lock-protected list. The new design ensures
that communication always uses a lock-free FIFO instead
2015-12-28 10:14:17 -05:00
Robin Gareus
dac57703cc correct name of Midi-UI thread memory-pool and request-queue 2015-12-12 14:45:17 +01:00
Robin Gareus
8bfa7d95c1 fix/workaround OSX "No Memory Pool"
fixes issue on MacBookPro11,1 OSX 10.10

* Coreaudio: internal speaker + internal Mic
* start recording
* plug-in headphone
* stop recording 
-> crash
  process_callback -> [..] stop_transport -> no RT memory pool
  for realtime event.
2015-12-09 11:13:18 +01:00
Robin Gareus
95f91d9dbd update engine to allow latency measurement w/o restart. 2015-12-04 17:09:41 +01:00
Robin Gareus
a49284a909 fix thinko in engine latency state
(skip Halted signal when stopped for latency)
2015-12-04 12:45:53 +01:00
Tim Mayberry
3eb4b43fa6 Initialize AudioEngine::last_backend_error() to the default error string
Currently the last backend error string is only set when calling
AudioBackend::start. Errors that occur when calling other AudioBackend methods
like AudioBackend::set_buffer_size do not set the last backend error string.
So until all the required AudioBackend methods return an ErrorCode and
last_backend_error() can be removed just set it to a default string.

Until all errors that occur are correctly indicated by returning an error code
there will still be situations where last_backend_error() is not indicative of
the true error. For instance AudioEngine::start is called and it fails but
returns a valid error code so last_backend_error() is set, then some other
engine/backend method is called that fails and as last_backend_error is not
set the GUI will display the incorrect error message.
2015-10-06 13:29:57 +10:00
Tim Mayberry
da46df6225 Show DSP/CPU load of 0.0% when AudioEngine isn't running 2015-10-06 13:29:57 +10:00
Robin Gareus
22b07e0233 NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
Paul Davis
4dc63966f0 globally remove all trailing whitespace from ardour code base.
Paul Davis was responsible for introducing almost all of this.
2015-10-04 14:51:05 -04:00
Paul Davis
136b659f1c remove debug output 2015-10-02 22:08:14 -04:00
Paul Davis
64b4877ef6 the return of the 1 second fade out at session close 2015-10-02 22:08:14 -04:00
Tim Mayberry
d85ab8af89 Reinterpret the return value of AudioBackend::start as AudioBackend::ErrorCode
This will allow backends to return a more meaningful error message. Eventually
an error code could be returned by AudioEngine::start and the GUI can then use
AudioBackend::get_error_string to convert the error into a translated error
message directly, or it may be desirable to define its own error messages.

The reasons for not doing that right now is that this is a workable solution
with the least change required.
2015-10-01 09:10:19 +10:00
Robin Gareus
3a3d5c41be synchronous shutdown of process graph. 2015-08-28 15:39:06 +02:00
Robin Gareus
2e38cb81fe fix deadlock at exit on SMP systems
graph process-threads won't terminate properly while active.
2015-08-11 20:22:20 +02:00
GZharun
6584a89c4e Fixed incomplete merge for audioengine.cc
[To be reviewed by] Paul Davis
2015-06-29 14:18:15 -04:00
Paul Davis
f34d870a2c increase event pool for backend reset thread (somewhat unnecessarily, but lets keep Kyiv happy) 2015-06-29 14:18:14 -04:00
Paul Davis
2911bb9fb8 AudioEngine tweaks from Tracks, related to stopping audioengine and halting 2015-06-29 14:18:14 -04:00
Paul Davis
c46ec135e5 initial incorporation of Tracks' automatic reconnect features, based on current Tracks code 2015-06-29 14:18:11 -04:00
GZharun
ef59fbffa1 [Summary] Added possibility to identify IO thread which does not have required resources initialized during process callback handling
Conflicts:
	libs/ardour/ardour/audioengine.h
	libs/backends/wavesaudio/waves_audiobackend.cc
	libs/pbd/pbd/pool.h
2015-06-29 14:16:42 -04:00
Robin Gareus
9ec3085d71 fix thinko in 2e4428b
perspective of Ardour: signal sinks are outputs
2015-05-04 00:29:15 +02:00
Robin Gareus
aee658ef96 no more noise during startup. 2015-05-03 23:17:15 +02:00
Robin Gareus
ce259edbcd professionalize peak-meters
The peak meter needs to withstand various test-signals
without visual jitter (in particular 1kHz sine) regardless
of settings (period-size, sample-rate, custom fall-off).

This needs to be done in sync (and not by a random non-rt
‘smoothing’ thread).

On the downside this voids the ‘visual smoothing’ particularly 
with large buffersizes - but then again exactly this “always 
fall-off no matter what [the next real data will be]” is the
problem.

One the upside, there’s one less high-frequency (100Hz) thread
(Yay!) PS. it probably never worked on windows, anyway.

Only peak-meters are affected by his change.
K-meters, IEC I/II and VU were never visually smoothed.
2015-05-02 03:46:49 +02:00
Robin Gareus
840b871245 don’t count silent [x]runs if there’s no session. 2015-04-30 22:55:42 +02:00
Robin Gareus
c4696fe2d5 emit an xrun if the process_lock is taken 2015-04-29 01:33:23 +02:00
Robin Gareus
a43901ead9 Fix crash when switching backends.
cycle_end() can write to invalid buffers.
2015-04-26 01:36:09 +02:00
Ben Loftis
46f97e8d92 Initial Gain Coefficient tweaks
1)  Disambiguate 1.0 to GAIN_COEFF_UNITY, and 0.0 to GAIN_COEFF_ZERO
2)  Add GAIN_COEFF_SMALL which replaces SMALL_SIGNAL (-140dB)
3)  GAIN_COEFF_SMALL can used to avoid interpolating towards -inf on a db scale
4)  GAIN_COEFF_SMALL is used to detect very small (denormal?) gains and memset to zero
2015-04-22 00:22:43 +02:00
Paul Davis
a83305169a fix ambiguous use of pow() 2015-04-05 15:13:59 -04:00
Paul Davis
2f02b921f1 bump default silent-after-seconds duration to 10 minutes 2015-04-05 14:04:28 -04:00
Paul Davis
8a5b5145cc add libardour code for going completely silent after a compile-time defined number of seconds 2015-04-05 14:02:30 -04:00
Greg Zharun
23214f6e61 [Summary] Fixed several backend issues: made reset counter check atomic, removed copy/paste mistakes
Conflicts:
	libs/ardour/audioengine.cc
	libs/ardour/engine_state_controller.cc
	libs/backends/wavesaudio/waves_audiobackend.cc
2015-03-31 17:29:41 -04:00
Greg Zharun
a2f82f8c5d [Summary] Added actions to handle abnormal behavior during stream stop for MIDI and Audio devices.
Made correct error handling for cases we didn't see before.
Removed redundant and experimental code I forgot to remove months ago.
Added debug output which will help in future testing

Conflicts:
	libs/ardour/ardour/audioengine.h
	libs/ardour/engine_state_controller.cc
	libs/backends/wavesaudio/waves_midi_device.cc
2015-03-31 17:29:41 -04:00
Greg Zharun
ce069da682 [Summary] Made device control panel open request synchronized with other critical device operations. Made device reset correctly when control panel is closed.
Conflicts:
	gtk2_ardour/tracks_control_panel.logic.cc
	libs/ardour/ardour/audioengine.h
	libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
2015-03-31 17:29:41 -04:00
Robin Gareus
1089f19a4c create engine thread before sending notifications.
Fixes missing thread in Pool in session_process,
when switching backend threads (CoreAudio, Waves)
2015-03-05 16:46:20 +01:00
Robin Gareus
105ecfa464 fix routing midi data on export:
MidiPort::cycle_end() was never called, hence after the 
first cycle all midi buffers were assumed to be 
“mixed down” already.

this fixes 
Midi-track 1 -[midi]-> Midi-track2 synth -[audio]-> out
on export.
2015-02-28 05:49:16 +01:00
Paul Davis
582138f280 change Audio backend sample time methods to use a 64 bit timeline 2015-02-19 17:44:01 -05:00
Robin Gareus
e6bb75cf01 audio-engine use internal API to stop
emit signal(s) when engine is stopped due to backend
change.
2015-01-25 10:19:06 +01:00
Robin Gareus
32269f0c5a fix audio-engine dtor.
backends - once instantiated - keep a reference to the engine.
when audioengine is destroyed, the backends must be deinstantiated.
This fixes various unit-test cases.
2014-12-03 20:44:47 +01:00
Robin Gareus
c194e4df18 remove superfluous if-branch (_session is checked a few lines above) 2014-11-18 02:15:06 +01:00