Commit Graph

23072 Commits

Author SHA1 Message Date
Paul Davis
1223c8d1cd move termination of auto connect thread till after control protocols are destroyed.
Otherwise, control protocol ports don't actually get deleted
2016-12-18 00:07:59 +00:00
Robin Gareus
f80fb029e2 Prepare configurable mini-timeline time-span 2016-12-18 00:06:39 +01:00
Paul Davis
7688d22456 remove channel filter status and button from MIDI track header, access via context menu 2016-12-17 17:59:08 +00:00
Robin Gareus
8405f642e7 fix gcc4 compilation (local type used in template) 2016-12-17 13:00:33 +01:00
Robin Gareus
705a7262a3 Refine transport tool bar layout 2016-12-17 02:43:42 +01:00
Robin Gareus
4a83bd80a5 Prepare mini-timeline widget for toolbar 2016-12-17 02:43:42 +01:00
Robin Gareus
fab1ef05bc remove cruft 2016-12-17 02:43:42 +01:00
Robin Gareus
9dad10f691 Add UI to set global track layered mode 2016-12-17 02:43:42 +01:00
Robin Gareus
8ba7e8f4ef Hide/remove per-track record-mode in favor of global setting. 2016-12-17 02:43:42 +01:00
Robin Gareus
85e4b1d98f Move selection/punch clocks to editor Sidebar 2016-12-17 02:43:42 +01:00
Robin Gareus
1a25b906b3 Commence transport tool bar re-layout 2016-12-17 02:43:42 +01:00
Robin Gareus
a631706059 Rework shuttle control display 2016-12-17 02:43:42 +01:00
Robin Gareus
e1826f8b1c Add API to query editor's playhead cursor position 2016-12-17 02:43:42 +01:00
Paul Davis
cd64f17a9c initial attempt at importing SMF tempo maps during MIDI import.
Still with debug output
2016-12-16 16:49:52 +00:00
Paul Davis
73f8ffce63 add copy constructor, operator= and a clean ::dump() method for TempoMap 2016-12-16 16:49:27 +00:00
Paul Davis
ebc7eabea2 add arguments (unusued) to control whether or not SMF tempo map is used during import 2016-12-16 14:57:14 +00:00
Paul Davis
e487014e56 add arguments (unusued) to control whether or not SMF tempo map is used during import 2016-12-16 14:57:10 +00:00
Paul Davis
8436f392b6 tweak presentation of SMF tempo option 2016-12-16 14:14:08 +00:00
Paul Davis
7bf10eda75 show tempo information for MIDI files in preview pane; start to offer choice about using tempo map when importing 2016-12-16 13:46:13 +00:00
Paul Davis
6a0ea65885 "toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo 2016-12-16 13:45:43 +00:00
Paul Davis
c0aa738395 expose SMF tempo information in Evoral::SMF 2016-12-16 10:43:52 +00:00
Paul Davis
2378e7b60c add function to get number of tempos found in SMF tempo map 2016-12-16 10:43:41 +00:00
Paul Davis
fe0761d404 unused but slightly tricky code to add track name/instrument to an SMF file when saved 2016-12-16 09:36:52 +00:00
Paul Davis
76dca432f0 add comments about limitations for Evoral::SMF and tracks 2016-12-16 09:36:52 +00:00
Robin Gareus
462c3eeb84 MIDI tracer actually changes the event-loop 2016-12-16 01:56:15 +01:00
Robin Gareus
c2f4399b3d fix generic plugins for toggle with 2 scalepoints (enum)
Signed-off-by: Robin Gareus <robin@gareus.org>
2016-12-16 01:55:28 +01:00
Robin Gareus
6c88f339ca some further invalidation details:
Prevent double unref during when the EventLoop terminates:
deleting the ringbuffer deletes all requests, some of which may
contain stale invalidation

remove the buffer_map_lock, now that signals ref-count the IR.
2016-12-15 18:19:38 +01:00
Paul Davis
529b91828d store InvalidationRecord in a Connection object and ref/unref it as appropriate 2016-12-15 16:36:50 +00:00
Paul Davis
342c112ae3 add ::use_count() method to InvalidationRecord 2016-12-15 16:36:50 +00:00
nick_m
9a2450cafc be a bit less flickery when redrawing tempo/meter markers. 2016-12-16 02:56:58 +11:00
nick_m
d118a60090 fix unused Outside filled framed curve for constant points outside the draw area. 2016-12-16 02:54:10 +11:00
nick_m
49c6d13386 revert c3ab67dd now that this misbehaviour is understood. 2016-12-16 02:52:39 +11:00
nick_m
d3ad6dc001 fix issue with disappearing tempo curve at constant tempi. 2016-12-16 02:50:07 +11:00
nick_m
9add5ed480 tempo before the initial section is always constant. 2016-12-16 02:15:56 +11:00
nick_m
9afe719827 amend incomplete change in previous commit. 2016-12-16 02:01:50 +11:00
nick_m
a99331a4e9 more work on patch change redisplay.
- fixes just-introduced undo crash.
2016-12-16 01:58:58 +11:00
nick_m
2a79bcd6b2 fix thinko in TempoMap::framepos_plus_qn.
- affects region relative time conversion when
	  initial meter is non-zero.
2016-12-16 01:04:22 +11:00
Paul Davis
c9444e048e correct return syntax 2016-12-15 11:57:31 +00:00
Paul Davis
cf4668a11e std::list::erase() needs a non-const iterator.;
at least for some versions of gcc.
2016-12-15 11:40:22 +00:00
nick_m
cfbcadc7ef speed up patch change redisplay when using scroomer / adjusting height.
- zoom is still a bit slow.
2016-12-15 22:35:23 +11:00
Robin Gareus
714da0f68e and now with erase 2016-12-15 10:57:40 +01:00
Robin Gareus
71bfe79e2c C++98 compatible iterator erase 2016-12-15 10:40:45 +01:00
Robin Gareus
a95be76741 rework request invalidation
This kills 2 birds with 1 stone: Removes the necessity of locks
and makes call_slot() realtime safe (req->invalidation->requests list
push_back). On object destruction, the invalidation-record (IR) itself is
invalidated.

Invalidated IRs are pushed onto a trash-pool and deleted in the event-loop
of the invalidated object (GUI thread) once all requests that reference it
have been processed.

One last detail remains: PBD::signal connect should reference the IR
and disconnect unreference it. This will guarantee that signal emission
will not reference the IR while the pool trash is dropped.
2016-12-15 06:11:30 +01:00
Robin Gareus
62b06fa427 Add a trash pool for invalidation requests.
While EventLoop::invalidate_request() does invalidate request in the
request-list. It does *not* invalidate requests in the
per-thread-request-ringbuffer(s).
The invalidation record cannot be deleted in EventLoop::invalidate_request
see 6b5891a78f.
2016-12-14 22:39:25 +01:00
Robin Gareus
07bcdc7f0a NO-OP: re-indent 2016-12-14 22:39:22 +01:00
Robin Gareus
77845f6019 Atomically to invalidate request
Yet another slightly overkill approach, but it /may/ explain crashes.
2016-12-14 22:39:18 +01:00
Robin Gareus
7dbdf6cc6d Add some more invalidation debug messages. 2016-12-14 19:43:12 +01:00
Robin Gareus
6b5891a78f The threading anecdotes - Episode 7
When do_request() destroys the receiver object, the receiver will
free the invalidation record. So the IR needs to be removed from the list
before executing the request.

Invalid read of size 8
   at: AbstractUI<Gtkmm2ext::UIRequest>::handle_ui_requests() (abstract_ui.cc:242)
   by: BaseUI::request_handler(Glib::IOCondition) (base_ui.cc:141)
   by: sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (mem_fun.h:2066)
   by: sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::deduce_result_type<Glib::IOCondition const&, void, void, void, void, void, void>::type sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::operator()<Glib::IOCondition const&>(Glib::IOCondition const&) const (adaptor_trait.h:89)
   by: sigc::internal::slot_call1<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>, bool, Glib::IOCondition>::call_it(sigc::internal::slot_rep*, Glib::IOCondition const&) (slot.h:148)
   by: sigc::slot1<bool, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (slot.h:643)
   by: cross_thread_channel_call_receive_slot(_GIOChannel*, GIOCondition, void*) (crossthread.cc:49)
   by: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: gtk_main (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.31)
   by: Gtkmm2ext::UI::run(Receiver&) (gtk_ui.cc:286)
   by main (main.cc:408)
 Addrd1b8 is 24 bytes inside a block of size 48 free'd
   at: operator delete(void*) (vg_replace_malloc.c:576)
   by: PBD::EventLoop::invalidate_request(void*) (event_loop.cc:98)
   by: sigc::internal::trackable_callback_list::~trackable_callback_list() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
   by: sigc::trackable::notify_callbacks() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
   by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1757)
   by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1760)
   by: ProcessorEntry::~ProcessorEntry() (processor_box.cc:251)
2016-12-14 18:46:01 +01:00
Robin Gareus
518c31eeb7 skip dead threads (if the event remains, it'll be cleaned up below) 2016-12-14 17:48:44 +01:00
Robin Gareus
036390f4c2 fix potential invalid lock 2016-12-14 17:31:31 +01:00