Commit graph

24846 commits

Author SHA1 Message Date
Robin Gareus
1f5013b4a8 Distinguish error-messages.
The vast majority of errors reported by users as
  "Cannot configure audio/midi engine with session parameters"
have nothing to do with engine-parameters.
2017-06-27 20:28:45 +02:00
Robin Gareus
1dd4aab0b4 Update fluidsynth
Fix potential crashes in case fluid-synth runs into an OOM error,
and address a const-cast compiler warning.

Switch to track github repo (instead of sf.net git)
2017-06-27 20:12:46 +02:00
Robin Gareus
0650e0d3fd Include file's sha1 in export-report image 2017-06-26 19:40:05 +02:00
Robin Gareus
007f3cdbba Add convenience fn to compute a file's sha1sum 2017-06-26 19:39:40 +02:00
Tim Mayberry
a1cd4f8dfe Fix friend declaration in WaveView code for non-c++11 builds 2017-06-26 17:04:18 +10:00
Tim Mayberry
6e91ee071c Reimplementation of large parts of the WaveView class
The drawing itself should be unchanged but much of the rest of the
implementation has changed. The WaveViewThreads and WaveViewDrawingThread
classes were added and allow multiple drawing threads.

The Item::prepare_for_render interface is implemented by WaveView to enable
queuing draw requests for the drawing threads to process as soon as the state
change occurs during Editor::visual_changer, which often means the images will
be finished by the time they are needed in WaveView::render. This can
significantly reduce total render time and also flickering caused by images not
being ready for display.

If the drawing thread/s cannot finish the request by the time it is required in
WaveView::render then cancel it and draw the WaveViewImage in the GUI thread if
it is likely it can be completed in the current render pass/frame.  This change
also helps reduce the flickering caused by images not being ready with threaded
rendering, but with several drawing threads, drawing in the GUI thread may not
often occur (unless explicitly requested).

Allow unfinished images to be returned from the cache in
WaveView::prepare_for_render so that new draw requests aren't queued for
duplicate images. This reduces the amount of drawing for instance in
compositions where there are many instances of the same sample/waveform
displayed on the canvas as only a single image should be drawn.

Use a random width within a certain range for
WaveView::optimal_image_width_samples so that image drawing is less likely to
occur at the same time (which will cause a spike in render/draw time and
increase the chance of flickering waveforms).

Move implementations of the private WaveView classes into wave_view_private.h
and wave_view_private.cc source files.

Incorporate a fix for limiting the waveview image size to the cairo image size
limit.

Should hopefully Resolve: #6478
2017-06-26 08:40:47 +10:00
Tim Mayberry
5f30d87fd0 Changes to Editor::visual_changer to support Item/Canvas::prepare_for_render
This is necessary to allow calculation of correct intersection of visible
canvas area and items for the new Item::prepare_for_render() API.

samples_per_pixel must be set first to calculate the new horizontal canvas
position in Editor::set_horizontal_position and then
WaveView::set_samples_per_pixel will eventually call
WaveView::prepare_for_render for those items that are visible on the new canvas
position at the new position.

Or if there is not a change to zoom state then call Canvas::prepare_for_render
explicitly.

Also changes so that each method is only called once during
Editor::visual_changer
2017-06-26 08:40:47 +10:00
Tim Mayberry
4ddf97f5a2 Add Canvas::get_microseconds_since_render_start() method
Initial use is for the WaveView class to determine whether on not to draw the
waveform in the GUI thread.
2017-06-26 08:40:47 +10:00
Tim Mayberry
ab13e87ec2 Add Canvas::get_last_render_start_timestamp method 2017-06-26 08:40:47 +10:00
Tim Mayberry
8538ba35fe Only call Gtk::Widget::queue_draw_area in canvas when item and visible area intersect
Refactor GtkCanvas::request_redraw to use Rect::intersection
2017-06-26 08:40:47 +10:00
Tim Mayberry
c4e31fc322 Add an optional ArdourCanvas::Item::prepare_for_render interface
Called when an item has requested a redraw and intersects with visible
canvas area.

Also add Canvas::prepare_for_render that will call Item::prepare_for_render for
items visible on the canvas.
2017-06-26 08:40:47 +10:00
Tim Mayberry
265f52535a Coalesce visual changes to canvas/items and allow canvas to render
First visual change will be processed as normal and then blocked until the
canvas renders the change. If further visual changes need processing then
Editor::pre_render callback will schedule another expose/redraw/render.

This prevents an issue where idle_visual_changer is called many times in
response to events(keys/motion/etc) but the canvas does not get a chance to
render any but the last one which results in a big pause/jump.

This results in a more responsive canvas and in particular a smoother and more
predictable zooming experience.
2017-06-26 08:40:47 +10:00
Tim Mayberry
dac25b8db9 Add PreRender signal to the canvas
Emitted by the canvas immediately before rendering.
2017-06-26 08:40:47 +10:00
Tim Mayberry
9618b6dcbb Whitespace fixes in canvas.h 2017-06-26 08:40:47 +10:00
Tim Mayberry
f7c134863c Tweak/Change the zoom scale in RulerZoomDrag
This multiplier really should be based on the "responsiveness" of the
canvas..or something. I think this is an improvement for more complex sessions
with many regions.
2017-06-26 08:40:47 +10:00
Tim Mayberry
843d5ffa59 Output the setting of the --no-threaded-waveviews option during configure 2017-06-26 08:40:47 +10:00
Robin Gareus
de99d7c528 Allow saving state w/o backend
Connections are remembered by ARDOUR::Port to re-establish at load.
2017-06-25 22:03:42 +02:00
Robin Gareus
e511985ad9 Report Dummy as not available if not running
This fixes an issue with port-connections being polled from the backend
even when it's not running.
2017-06-25 20:53:47 +02:00
Robin Gareus
cc7ff53e1f Create a deep-copy of MIDI sources when saving snapshots 2017-06-25 01:57:19 +02:00
Robin Gareus
a1c5d1be43 Extend API to allow calling new_midi_source_path() with source_lock held
This is in preparation for cloning MIDI-sources during snapshot save.
2017-06-25 01:57:19 +02:00
Len Ovens
86ee4de7a9 OSC: simplify GUI and make less error-prone 2017-06-24 13:13:53 -07:00
Len Ovens
33bfe681c9 OSC: Allow /bank_up to accept -1 as well as 1 so encoder can work. 2017-06-23 18:08:04 -07:00
Len Ovens
01e75da96b OSC: make sed_fader work with banking too. 2017-06-23 17:34:22 -07:00
Len Ovens
0b21143234 OSC: Add master_send_enable for MB 2017-06-23 17:09:54 -07:00
Len Ovens
1fad162256 OSC: redo math for redux control with fewer calls. 2017-06-23 17:09:54 -07:00
Len Ovens
2ea14c25ec OSC: Messages too fast at bank_change/refresh slowed down. 2017-06-23 17:09:54 -07:00
nickolas360
2106ab431b Add missing echo in ardev_common.sh.in 2017-06-24 01:34:21 +02:00
Robin Gareus
64a091ea4b Fix metronome + capture alignment for Mixbus 2017-06-24 01:22:17 +02:00
Robin Gareus
92fb6325e3 NO-OP: whitespace 2017-06-23 23:43:01 +02:00
Robin Gareus
d405b2dd6c Mixbus GUI updates (VCA layout, no panners) 2017-06-23 23:43:01 +02:00
Len Ovens
2a08746437 OSC: Fix math error in send fader feedback 2017-06-23 14:26:29 -07:00
Robin Gareus
1138b62fb8 amend 5e5f7a55; re-add wrongly removed variable 2017-06-23 18:15:50 +02:00
Robin Gareus
104a4c2030 leave a hint for clang's static analyzer 2017-06-23 17:39:20 +02:00
Robin Gareus
e765d0b3bb Remove Automation Types that should never have existed. 2017-06-23 17:39:20 +02:00
Robin Gareus
66a3dd7ded MCU: Remove use of AutomationType as ID, part two.
This may need some small tweaks for MB channelstrip to set
print-format (like LV2 plugins would) for cases where the default
value_as_string() differs.
2017-06-23 17:39:20 +02:00
Robin Gareus
5e5f7a55ee MCU: Remove use of AutomationType as ID, part one. 2017-06-23 17:39:20 +02:00
Robin Gareus
de73194050 Implement undo for merging VCA-master automation/value on disconnect. 2017-06-23 17:39:20 +02:00
Robin Gareus
d34fdb98e3 Improve default parameter display 2017-06-23 17:39:20 +02:00
Len Ovens
5aad9d9a33 OSC: only show visible plugins (not MB channel strip PI) 2017-06-22 22:40:06 -07:00
Tim Mayberry
d972fa431c Remove unnecessary LocaleGuard header include 2017-06-23 09:12:53 +10:00
Robin Gareus
d55cb9ba94 Update GUI to follow Slavable API change 2017-06-22 22:04:10 +02:00
Robin Gareus
9334c99b35 Update Slavable API
Do not use AutomationType to identify parameters, use complete
Evoral::Parameter and Automatable.

For "batch connections", a Slavables needs to implement an API to return
the relevant controls.

This is only a first step towards a more generic Master/Slave framework.
2017-06-22 22:04:10 +02:00
Robin Gareus
faa52a3349 NO-OP: whitespace 2017-06-22 22:04:10 +02:00
Len Ovens
7af5de2074 OSC: Add increment fader. 2017-06-22 12:54:03 -07:00
Len Ovens
57e7531b1f OSC: allow mixbuses to show 2017-06-22 10:20:48 -07:00
John Emmas
6180c5a5fc Accommodate newly introduced source(s) in our MSVC project (libpbd) 2017-06-22 17:59:16 +01:00
Len Ovens
3baf360733 OSC: use internal_to_interface or reverse 2017-06-22 09:21:51 -07:00
Tim Mayberry
a5836e2922 Remove LocaleGuard from Plugin::get_state
Let the plugin implementation of Plugin::add_state use a LocaleGuard if it is
necessary (VST/LV2). This puts the LocaleGuards where they are required but the
LocaleGuards in Session::set/get_state will mean these LocaleGuards are a noop.
They are still useful for documentation purposes and in case the code is called
from a non-Session context at some point.
2017-06-22 10:48:38 +10:00
Tim Mayberry
8b10ed2478 Remove LocaleGuards from LadspaPlugin::set/add_state
String <-> type conversion is being performed by the pbd/string_convert.h API
via PBD::XMLNode so LocaleGuards are not necessary.
2017-06-22 10:48:38 +10:00
Tim Mayberry
a65c3ef28f Remove unnecessary LocaleGuards from VSTPlugin derived classes
VSTPlugin::set_state and VSTPlugin::add_state methods both already contain
LocaleGuard instances.
2017-06-22 10:48:38 +10:00