Commit graph

208 commits

Author SHA1 Message Date
Paul Davis
a51dcaaa21 implement Ardour-only version of playhead priority, which is basically auto-return to last roll location or nothing 2015-06-29 14:18:16 -04:00
Paul Davis
0f9cac978e (re)implement Yevgeny's LTC branch changes in the context of ardour-merge-from-tracks (just the libs/* section) 2015-06-29 14:18:15 -04:00
Paul Davis
a624573ee6 add additional check for playhead priority target when testing loop range, to match Tracks' logic 2015-06-29 14:18:14 -04:00
Paul Davis
3a65005a75 remove Tracks runtime conditional, incorrectly added during manual merging 2015-06-29 14:18:13 -04:00
Paul Davis
ab2e23db9a follow various events related to playhead priority (loop changes, parameter changes); remove debug output 2015-06-29 14:18:13 -04:00
Paul Davis
016beaab9b give different Tracks + Ardour/Mixbus playhead priority functionality, and add missing set_track_loop() call for playhead priority 2015-06-29 14:18:13 -04:00
Paul Davis
ba981a14c4 initial version of playback priority design. No GUI control over options yet
Conflicts:
	libs/ardour/ardour/session.h
	libs/ardour/ardour/types.h
	libs/ardour/enums.cc
	libs/ardour/session_transport.cc
	system_config
2015-06-29 14:18:13 -04:00
Paul Davis
ca09a4a355 more tweaks for varifill model, and avoid filling playback buffers during session loading
Conflicts:
	libs/ardour/diskstream.cc
	libs/ardour/session.cc
	libs/ardour/session_state.cc

Conflicts:
	libs/ardour/session.cc
2015-06-29 14:18:12 -04:00
Paul Davis
1caf54ee7f add initial support for vari-fill
When refilling playback buffer, try to fill it completely, or at least
using the next-lowest power-of-2 as the amount to read. When locating,
where we use do_refill_with_alloc(), only partially fill the buffer.

Work not yet finished, but possibly promising.
2015-06-29 14:18:12 -04:00
Paul Davis
9ef4888e91 fix logic of previous commit for transport-stop during locate 2015-06-29 14:18:12 -04:00
Paul Davis
4abea520df Do not disable record (performing transport stop) during locate request when MTC source is activated
This is required for the case when we leave Tracks ready for record and then activate MTC source.
2015-06-29 14:18:12 -04:00
Paul Davis
16dccfcb8a Add some libardour support for indicating MTC active status.
The general design here is wrong, because it should be more general and cover all possible sync sources.
But it does work, it is used in Tracks, and my attempt to do it correctly revealed the problem to be
an EXTREMELY difficult design issue (as in: two weeks of work on it did not really solve the
fundamental issues with slave design).

So, here it is for now, c/o Grygorii
2015-06-29 14:18:12 -04:00
GZharun
87f1c66ba1 [Summary] Fixed race condition: "should_do_transport_work" must not be dropped to 0 outside, it's illegal. It may cause "should_do_transport_work" go below 0 and make butler to round for a very-very long time (hang and possible lock of other threads) before stop() call returns.
_butler->stop () is synchronous, so its safe to wait in this call for butler to finish it's work.

[Reviewed by] PDavis
2015-06-29 14:18:12 -04:00
Robin Gareus
cd63d97f65 add xrun counter API to session 2015-04-29 03:09:17 +02:00
Robin Gareus
36ee1681fe special case [optimize] RT processor reorder.
realtime processor re-ordering does not require
a route resort nor latency compensation update.
(which were done as callback in same thread)
2015-04-27 17:19:57 +02:00
Robin Gareus
3547540f98 throttle TransportStateChange signal emissions 2015-03-10 10:49:52 +01:00
Paul Davis
aea700fbc4 fix transport issues when loop-is-mode is off.
Session::unset_play_loop() needed to be a no-op if play loop was
already false, and this was exacerbated now that it potentially
schedules butler transport work.
2015-02-19 10:33:33 -05:00
Paul Davis
58137b8326 try to restore original semantics for scheduling butler transport work in Session::locate() 2015-02-17 11:21:41 -05:00
GZharun
5a8270373a [Summary] Fixed loop processing in cases when loop is moved/resized
[Reviewed by] REQUIRED REVIEW FROM PAUL DAVIS
2015-02-17 10:37:35 -05:00
Paul Davis
b3e7c88988 fixes for desirable playback when using seamless looping.
Try to make sure that we appropriately reset and refill track
buffers whenever we enter/leave loop playback,and whenever
we locate. In addition, if we start playing somewhere other
than the loop range while loop is enabled, then the first
time we hit the loop end, set up the track buffers.

Conflicts:
	libs/ardour/session_transport.cc
2015-02-16 19:35:37 -05:00
Paul Davis
7a99bc5373 fix seamless looping after a locate out of the loop.
Something, somewhere has to tell tracks to refill their buffers with
the special loop-data-only magic
2015-02-13 18:42:41 -05:00
Paul Davis
aa5cf04ca6 correctly set track loop status when locating away from loop range (and later, when coming back to the loop)
Conflicts:
	libs/ardour/ardour/session.h
	libs/ardour/session.cc
	libs/ardour/session_transport.cc
2015-02-13 17:23:50 -05:00
Paul Davis
1fb83d698c make butler thread merely ask for session state save, not actually do the save itself.
This prevents the possibility of cross-thread calls in the GUI when it adds its state
to the session via extra XML
2015-01-24 19:27:28 -05:00
Paul Davis
679356c5ee fix delivery of MMC events under split process cycle conditions 2014-10-22 17:07:11 -04:00
Paul Davis
aa0effb4cb ignore negative value locates and MMC locate commands 2014-10-22 17:07:11 -04:00
Paul Davis
fa9780ba67 subtle changes to accomplish two goals (1) playhead should stop where the user pressed stopped (2) captured regions should end where the playhead ends 2014-10-10 13:22:50 -04:00
Colin Fletcher
c3a5cd487a Return playhead to last start position when aborting capture 2014-09-13 15:27:30 +01:00
Ben Loftis
043b76569d fix the naming and behavior of always-play-range to match the button, which is follow-edits. when you select a range, the playhead should jump to the start of the range and begin to play the selection. BUT (unlike previous implementation) if the user wants to relocate the playhead, then that should be allowed. The user should always remain in charge of the playhead location. NOTE: your previous config setting will be invalidated. You must re-save a session to overwrite with the new config variable 2014-07-03 12:56:33 -05:00
Ben Loftis
a1c8e67e50 add a method to cancel a pending play_range. this is needed when we are modifying the range with keyboard commands. 2014-07-02 17:35:38 -05:00
Robin Gareus
789cf92a23 bump take-name after every recording 2014-06-26 19:16:20 +02:00
Paul Davis
27cff1dc01 tell the SceneChanger to emit any relevant scene changes after a locate 2014-05-02 18:43:37 -04:00
Paul Davis
3131ab8bbd new transport option, "loop-is-mode" which optionally changes the role of the "play loop" button.
If enabled, then the button simply changes the behaviour of the "play" button rather than actually starting playback. If disabled
transport behaviour should be unchanged from before.
2014-04-17 09:47:06 -04:00
Paul Davis
960a47330a switch from JACK_Slave to Engine_Slave 2013-09-19 17:34:23 -04:00
Paul Davis
1c49138e00 move MidiPortManager from AudioEngine to Session
This makes the responsibilities and ownership of non-Route related MIDI ports
more clear, and removes a few wierd bits of code. It also ensures that open/close/open
on the same session will retain connections for those MIDI ports
2013-09-05 13:22:34 -04:00
Paul Davis
4b9289e17e don't waste time with sending MTC or MMC after stop if we're disconnected from the engine.
Also, add note about threading oddities with send_mmc_locate() being called from ::non_realtime_stop() which gets
called from a *realtime* context.
2013-08-09 18:06:08 -04:00
Paul Davis
1ab61b8564 major redesign of MIDI port heirarchy and management (part 2) 2013-08-07 22:22:11 -04:00
Paul Davis
616f2a0370 fix conflicts after merge with master 2013-08-05 14:22:32 -04:00
Michael Fisher
18490878b4 WIP - Experimenting with an alternative clock generating algo
- Transport debug output (tracing where transport_frame
      is updated
2013-08-02 08:59:32 -05:00
Paul Davis
682ebad62b full compilation and linking (coding not finished, will not run) 2013-08-01 14:43:12 -04:00
Paul Davis
20b1a7d9d8 most of libardour now actually compiles 2013-07-25 12:36:54 -04:00
Paul Davis
cd6cbba299 rename Route::is_hidden() to Route::is_auditioner() and Route::Hidden to Route::Auditioner. this has been the meaning of these terms for years now and it would be better to make it explicit 2013-04-06 16:04:02 -04:00
Paul Davis
3d5f247263 remove debug output
git-svn-id: svn://localhost/ardour2/branches/3.0@13850 d708f5d6-7413-0410-9779-e7cbd77b26cf
2013-01-16 02:31:14 +00:00
Paul Davis
244f07b2a4 when stopping transport, revert _default_transport_speed to 1.0 if current speed is reversed (should fix #5264)
git-svn-id: svn://localhost/ardour2/branches/3.0@13848 d708f5d6-7413-0410-9779-e7cbd77b26cf
2013-01-16 01:57:40 +00:00
Robin Gareus
a167dc9cec fix vari-speed stuck at zero and playing backwards.
git-svn-id: svn://localhost/ardour2/branches/3.0@13747 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-12-30 21:50:05 +00:00
Robin Gareus
010870707e Revert "fix for problem when reverse playback hits 00:00:00:00 (may be incomplete)"
This reverts commit 13708 -- because it's the wrong approach to fix this.

git-svn-id: svn://localhost/ardour2/branches/3.0@13713 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-12-23 11:58:04 +00:00
Robin Gareus
1d7e9daea4 fix for problem when reverse playback hits 00:00:00:00 (may be incomplete)
should fix #5221

git-svn-id: svn://localhost/ardour2/branches/3.0@13708 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-12-21 22:47:38 +00:00
Paul Davis
c9c94ca1c2 merge robin gareus' libltc into ardour source tree for convenience
git-svn-id: svn://localhost/ardour2/branches/3.0@13665 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-12-14 16:18:47 +00:00
Robin Gareus
625ee55df0 don't do a pending save if slave is syncing.
13:00 < rgareus> When a slave does initial sync, it sets speed=0, pos=XXX (required by session_process.cc state-machine to init)
13:01 < rgareus> This triggers a locate(roll=false) which in turn triggers a realtime_stop() which in turn triggers a non_realtime_stop().
[..]
13:06 < rgareus> las: the problem I have with non_realtime_stop() is that it does save a pending state IFF  get_record_enabled() is true.
13:06 < rgareus> The save can take ages (seconds), which will void the initial sync of the slave.
13:07 < rgareus> The slave enters a live-lock: sync, save, re-sync, save...
13:07 < las> rgareus: understood
13:07 < rgareus> las: I propose to workaround this: only save pending state if there is no slave or the slave is not locked.
13:07 < las> rgareus: another reason why recording + slave == bad idea :(
13:07 < las> rgareus: but yes, that sounds fine to me
13:07 < rgareus> AFICT this is not harmful. It only affects pre-record settings.
13:07 < rgareus> 'did_record' is used to save a full state after each recording.

git-svn-id: svn://localhost/ardour2/branches/3.0@13288 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-10-16 20:53:08 +00:00
Paul Davis
eaaca760c9 tweaks to be ready for more information timecode display in Timecode clock mode
git-svn-id: svn://localhost/ardour2/branches/3.0@13264 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-10-12 22:04:21 +00:00
Robin Gareus
bce3184ff5 skeleton framework for LTC-slave
git-svn-id: svn://localhost/ardour2/branches/3.0@13256 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-10-12 09:45:22 +00:00